Enviar respuesta 
forma de optimizar este codigo?
Autor Mensaje
Juan85 Sin conexión
Miembro


Trebol de oro
Mensajes: 211
Registro en: Jun 2015
Reputación: 0
Mensaje: #1
forma de optimizar este codigo?
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!

(21/03/2018 05:03 AM)Rainnegan escribió:  Comunidad Infinity, Neofield, Sig y Exterminity ya están usando el fix que yo largué ...

Sigan hablando de riesgos ...
RoflmaoRoflmao
(Este mensaje fue modificado por última vez en: 06/07/2018 09:43 PM por Juan85.)
06/07/2018 09:41 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
roccoxx Sin conexión
Miembro Destacado


1k
Mensajes: 1,099
Registro en: Oct 2013
Reputación: 16
Mensaje: #2
RE: forma de optimizar este codigo?
proba con esto hermoso: https://forums.alliedmods.net/showthread.php?t=163555

futuro ingeniero agrónomo.

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"

volví a vender plugins, contactame
06/07/2018 11:16 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Chamo. Ausente
Miembro Destacado


Trebol verde Trebol purpura 1k
Mensajes: 1,323
Registro en: Jan 2014
Reputación: 28
Mensaje: #3
RE: forma de optimizar este codigo?

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.
(Este mensaje fue modificado por última vez en: 07/07/2018 12:22 AM por Chamo..)
07/07/2018 12:21 AM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Juan85 Sin conexión
Miembro


Trebol de oro
Mensajes: 211
Registro en: Jun 2015
Reputación: 0
Mensaje: #4
RE: forma de optimizar este codigo?
(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?

(21/03/2018 05:03 AM)Rainnegan escribió:  Comunidad Infinity, Neofield, Sig y Exterminity ya están usando el fix que yo largué ...

Sigan hablando de riesgos ...
RoflmaoRoflmao
07/07/2018 03:13 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
P3ste. Sin conexión
Miembro Junior


Mensajes: 7
Registro en: Jan 2017
Reputación: 0
Mensaje: #5
RE: forma de optimizar este codigo?
Es para mix maker verdad? Pudiste solucionarlo?
09/07/2018 08:11 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Juan85 Sin conexión
Miembro


Trebol de oro
Mensajes: 211
Registro en: Jun 2015
Reputación: 0
Mensaje: #6
RE: forma de optimizar este codigo?
(09/07/2018 08:11 PM)P3ste. escribió:  Es para mix maker verdad? Pudiste solucionarlo?

a simple codigo no pude

(21/03/2018 05:03 AM)Rainnegan escribió:  Comunidad Infinity, Neofield, Sig y Exterminity ya están usando el fix que yo largué ...

Sigan hablando de riesgos ...
RoflmaoRoflmao
09/07/2018 11:52 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Chamo. Ausente
Miembro Destacado


Trebol verde Trebol purpura 1k
Mensajes: 1,323
Registro en: Jan 2014
Reputación: 28
Mensaje: #7
RE: forma de optimizar este codigo?

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

Como te dije, tienes de ejemplo el ZP.
10/07/2018 12:22 AM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Juan85 Sin conexión
Miembro


Trebol de oro
Mensajes: 211
Registro en: Jun 2015
Reputación: 0
Mensaje: #8
RE: forma de optimizar este codigo?
(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

(21/03/2018 05:03 AM)Rainnegan escribió:  Comunidad Infinity, Neofield, Sig y Exterminity ya están usando el fix que yo largué ...

Sigan hablando de riesgos ...
RoflmaoRoflmao
10/07/2018 02:34 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
roccoxx Sin conexión
Miembro Destacado


1k
Mensajes: 1,099
Registro en: Oct 2013
Reputación: 16
Mensaje: #9
RE: forma de optimizar este codigo?
(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

futuro ingeniero agrónomo.

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"

volví a vender plugins, contactame
10/07/2018 05:17 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Chamo. Ausente
Miembro Destacado


Trebol verde Trebol purpura 1k
Mensajes: 1,323
Registro en: Jan 2014
Reputación: 28
Mensaje: #10
RE: forma de optimizar este codigo?

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();

11/07/2018 01:11 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Enviar respuesta 


Salto de foro:


Usuario(s) navegando en este tema: 1 invitado(s)

Contáctanos | Allied Modders en español | Volver arriba | Volver al contenido | Archivo (Modo simple) | Sindicación RSS