forma de optimizar este codigo?
#1
Código PHP:
for(new 1;<= MaxPlayers;i++)
            {
                if(
is_user_connected(i))
                {
                    
set_pev(i,pev_deadflag,DEAD_DEAD)
                    
cs_set_user_team(i,CS_TEAM_SPECTATOR)
                    
        
                }
            } 

Simplemente manda a spec a todos los jugadores.. Sucede que cuando hay muchos player en el servidor, se genera tal overflow que cae el servidor.
Antes habia un video que si te quedabas "bugeado" eligiendo la clase del team, y el admin mandaba todos a spec, caia el servidor.


Espero que puedan ayudarme.

Gracias!
Responder
#2
proba con esto hermoso: https://forums.alliedmods.net/showthread.php?t=163555
Ingeniero agrónomo y desarrollador de Software.

tutoriales-allied
buscas un zp?

"La imitación es la forma más sincera de admiración con la que puede pagar la mediocridad a la grandeza"

Merci Alliedmodders pour m'introduire dans la programmation.
Responder
#3

Estas saturando el servidor con tanto envió de mensajes en un ciclo ((1 x maxplayers) x jugador).

Para eso cambia los equipos como el ZP lo hace, si no quieres usar el modulo de arriba.
Responder
#4
(07/07/2018, 12:21 AM)Chamo. escribió:
Estas saturando el servidor con tanto envió de mensajes en un ciclo ((1 x maxplayers) x jugador).

Para eso cambia los equipos como el ZP lo hace, si no quieres usar el modulo de arriba.

De que forma lo hace un ZP?
Responder
#5
Es para mix maker verdad? Pudiste solucionarlo?
Responder
#6
(09/07/2018, 08:11 PM)P3ste. escribió: Es para mix maker verdad? Pudiste solucionarlo?

a simple codigo no pude
Responder
#7

Actualiza el equipo de forma non-reliable (unreliable).

Como te dije, tienes de ejemplo el ZP.
Responder
#8
(10/07/2018, 12:22 AM)Chamo. escribió:
Actualiza el equipo de forma non-reliable (unreliable).

Como te dije, tienes de ejemplo el ZP.

La verdad que no se que significa eso...

Código PHP:
/*================================================================================
    
    --------------------------
    -*- [CS] Teams API 1.2 -*-
    --------------------------
    
    - Allows easily setting a player's team in CS and CZ
    - Lets you decide whether to send the TeamInfo message to update scoreboard
    - Prevents server crashes when changing all teams at once
    
================================================================================*/

#include <amxmodx>
#include <cstrike>
#include <fakemeta>

#define TEAMCHANGE_DELAY 0.1

#define TASK_TEAMMSG 200
#define ID_TEAMMSG (taskid - TASK_TEAMMSG)

// CS Player PData Offsets (win32)
#define PDATA_SAFE 2
#define OFFSET_CSTEAMS 114

new const CS_TEAM_NAMES[][] = { "UNASSIGNED""TERRORIST""CT""SPECTATOR" }

new 
Float:g_TeamMsgTargetTime
new g_MsgTeamInfog_MsgScoreInfo
new g_MaxPlayers

public plugin_init()
{
    
register_plugin("[CS] Teams API""1.2""WiLS")
    
    
register_event("HLTV""event_round_start""a""1=0""2=0")
    
    
g_MsgTeamInfo get_user_msgid("TeamInfo")
    
g_MsgScoreInfo get_user_msgid("ScoreInfo")
    
g_MaxPlayers get_maxplayers()
}

public 
plugin_natives()
{
    
register_library("cs_teams_api")
    
register_native("cs_set_player_team""native_set_player_team")
}

public 
native_set_player_team(plugin_idnum_params)
{
    new 
id get_param(1)
    
    if (!
is_user_connected(id))
    {
        
log_error(AMX_ERR_NATIVE"[CS] Player is not in game (%d)"id)
        return 
false;
    }
    
    new 
CsTeams:team CsTeams:get_param(2)
    
    if (
team CS_TEAM_UNASSIGNED || team CS_TEAM_SPECTATOR)
    {
        
log_error(AMX_ERR_NATIVE"[CS] Invalid team %d"_:team)
        return 
false;
    }
    
    new 
update get_param(3)
    
    
fm_cs_set_user_team(idteamupdate)
    return 
true;
}

// Event Round Start
public event_round_start()
{
    
// CS automatically sends TeamInfo messages
    // at roundstart for all players
    
new id
    
for (id 1id <= g_MaxPlayersid++)
        
remove_task(id+TASK_TEAMMSG)
}

public 
client_disconnect(id)
{
    
remove_task(id+TASK_TEAMMSG)
}

// Set a Player's Team
stock fm_cs_set_user_team(idCsTeams:teamsend_message)
{
    
// Prevent server crash if entity's private data not initalized
    
if (pev_valid(id) != PDATA_SAFE)
        return;
    
    
// Already belongs to the team
    
if (cs_get_user_team(id) == team)
        return;
    
    
// Remove previous team message task
    
remove_task(id+TASK_TEAMMSG)
    
    
// Set team offset
    
set_pdata_int(idOFFSET_CSTEAMS_:team)
    
    
// Send message to update team?
    
if (send_messagefm_user_team_update(id)
}

// Send User Team Message (Note: this next message can be received by other plugins)
public fm_cs_set_user_team_msg(taskid)
{
    
// Tell everyone my new team
    
emessage_begin(MSG_ALLg_MsgTeamInfo)
    
ewrite_byte(ID_TEAMMSG// player
    
ewrite_string(CS_TEAM_NAMES[_:cs_get_user_team(ID_TEAMMSG)]) // team
    
emessage_end()
    
    
// Fix for AMXX/CZ bots which update team paramater from ScoreInfo message
    
emessage_begin(MSG_BROADCASTg_MsgScoreInfo)
    
ewrite_byte(ID_TEAMMSG// id
    
ewrite_short(pev(ID_TEAMMSGpev_frags)) // frags
    
ewrite_short(cs_get_user_deaths(ID_TEAMMSG)) // deaths
    
ewrite_short(0// class?
    
ewrite_short(_:cs_get_user_team(ID_TEAMMSG)) // team
    
emessage_end()
}

// Update Player's Team on all clients (adding needed delays)
stock fm_user_team_update(id)
{    
    new 
Float:current_time
    current_time 
get_gametime()
    
    if (
current_time g_TeamMsgTargetTime >= TEAMCHANGE_DELAY)
    {
        
set_task(0.1"fm_cs_set_user_team_msg"id+TASK_TEAMMSG)
        
g_TeamMsgTargetTime current_time TEAMCHANGE_DELAY
    
}
    else
    {
        
set_task((g_TeamMsgTargetTime TEAMCHANGE_DELAY) - current_time"fm_cs_set_user_team_msg"id+TASK_TEAMMSG)
        
g_TeamMsgTargetTime g_TeamMsgTargetTime TEAMCHANGE_DELAY
    
}


Encontre solo esto en el ZP de Kiske
Responder
#9
(10/07/2018, 12:22 AM)Chamo. escribió:
Actualiza el equipo de forma non-reliable (unreliable).

Como te dije, tienes de ejemplo el ZP.

valga la redundancia Roflmao
Ingeniero agrónomo y desarrollador de Software.

tutoriales-allied
buscas un zp?

"La imitación es la forma más sincera de admiración con la que puede pagar la mediocridad a la grandeza"

Merci Alliedmodders pour m'introduire dans la programmation.
Responder
#10

Código PHP:
for(new 1;<= MaxPlayers;i++)
{
    if(
is_user_connected(i))
    {
        
//set_pev(i,pev_deadflag,DEAD_DEAD)
        //css_set_user_team(i,CS_TEAM_SPECTATOR)
        
        
set_pev(ipev_deadflagDEAD_DEAD);
        
SetUserTeam(iCS_TEAM_SPECTATOR);
    }
}

#define        M_OffsetPlayerTeam            114
#define        M_OffsetCBasePlayerClass            5
#define        M_TaskUpdateScoreBoardTeam            15000

new const CSZ_TeamNames[][] =
{
    
"UNASSIGNED",
    
"TERRORIST",
    
"CT",
    
"SPECTATOR"
};

bool:CSSetUserTeam(const I_Player, const CsTeams:I_Team, const bool:BO_UpdateScoreBoard true)
{
    if (
pev_valid(I_Player) != 2)
        return 
false;
    
    if (
GetUserTeam(I_Player) == I_Team)
        return 
false;
    
    
set_pdata_int(I_PlayerM_OffsetPlayerTeamI_TeamM_OffsetCBasePlayerClass);
    
    if (
BO_UpdateScoreBoard)
        
set_task(0.1"TASK_UpdateScoreBoardTeam", (I_Player M_TaskUpdateScoreBoardTeam));
    
    return 
true;
}

CsTeams:CSGetUserTeam(const I_Player)
{
    if (
pev_valid(I_Player) != 2)
        return 
CS_TEAM_UNASSIGNED;
    
    return 
CsTeams:get_pdata_int(I_PlayerM_OffsetPlayerTeamM_OffsetCBasePlayerClass);
}

public 
TASK_UpdateScoreBoardTeam(I_Player)
{
    
I_Player -= M_TaskUpdateScoreBoardTeam;
    
    
message_begin(MSG_ALLget_user_msgid("TeamInfo"));
    {
        
write_byte(I_Player);
        
write_string(CSZ_TeamNames[_:CSGetUserTeam(I_Player)]);
    }
    
message_end();

Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)