Deathrace Slipstream crashea el servidor
#1
Que tal, estuve probando el plugin del deathrace que sería el slipstream que es un sistema de rebufo al posicionarte atrás de un jugador (Estilo GTA 5 en las carreras) pero al asesinar a un jugador con una granada que tiene un slipstream activo crashea el servidor, alguna idea que puede ser que lo cause? sin el plugin el mod no cae nunca.

Código PHP:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <xs>
#include <hamsandwich>
#include <engine>

#define PLUGIN "Deathrace Addon: Slipstream"
#define VERSION "1.0"
#define AUTHOR "Xalus"


#define MAX_Entities 4
#define TIME_Think 0.2
#define CLASS_Slip "class_slipentity"
#define pev_slipid pev_iuser1

#define SPEED_Gain 3.0
#define ANGLE_Difference    20.0
#define MAX_Distance        200.0

enum _:enumPlayers
{
    
PLAYER_SLIPPING,
    
Float:PLAYER_DELAY,
    
    
PLAYER_SLIPSTREAM,
    
    
PLAYER_STALKER,
    
    
PLAYER_ENT_STREAM[MAX_Entities]
}
new 
g_arrayPlayers[33][enumPlayers]

new 
g_spriteTrail

public plugin_init() 
{
    
register_plugin(PLUGINVERSIONAUTHOR)
    
    
// Register: Ham
    
RegisterHam(Ham_Spawn"player""Ham_PlayerSpawn_Post"1)
    
    
// Register: Event
    
register_event("HLTV""Event_NewRound""a""1=0""2=0");
    
register_event"StatusValue""Event_StatusValue""b""1=2""2>0" );
    
    
// Register: Think
    
register_think(CLASS_Slip"Think_Slipstream");
    
register_touch(CLASS_Slip"player""Touch_Slipstream")
}
public 
plugin_precache()
{
    
g_spriteTrail precache_model("sprites/plasma.spr")//"sprites/xenobeam.spr")
}

// Public: Event
public Event_NewRound()
{
    
remove_entity_name(CLASS_Slip)
}
public 
Event_StatusValue( const id )
{
    if(
is_user_alive(id))
    {
        if( !(
pev(idpev_button) & IN_FORWARD) )
            return
        
        new 
intTarget read_data(2);
        
        if(
g_arrayPlayers[intTarget][PLAYER_SLIPSTREAM]
        || 
get_speed(intTarget) < 150
        
|| !(pev(intTargetpev_button) & IN_FORWARD))
            return

        static 
Float:flAngles[2][3]
        
pev(idpev_anglesflAngles[0])
        
pev(intTargetpev_anglesflAngles[1])
        
        if(
flAngles[1][1] < (flAngles[0][1] + ANGLE_Difference)
        && 
flAngles[1][1] > (flAngles[0][1] - ANGLE_Difference))
        {
            if(
entity_range(idintTarget) <= MAX_Distance)
            {
                
start_slipstream(intTargetid)
            }
        }
    }
}

// Public: Ham
public Ham_PlayerSpawn_Post(id)
{
    if(
is_user_alive(id))
    {
        
arrayset(g_arrayPlayers[id], 0enumPlayers)
    }
}

// Public: Touch
public Touch_Slipstream(entityplayer)
{
    if(
pev_valid(entity)
    && 
is_user_alive(player))
    {
        static 
Float:flGametime
        
if(Float:g_arrayPlayers[player][PLAYER_DELAY] < (flGametime get_gametime()))
        {
            
g_arrayPlayers[player][PLAYER_DELAY] = _:(flGametime TIME_Think)
            
            static 
intOwner
            intOwner 
pev(entitypev_owner)
            
            if(
player == intOwner
            
|| g_arrayPlayers[player][PLAYER_SLIPPING] == -1)
            {
                
//stop_slipstream(intOwner)
                
return
            }

            if(!
g_arrayPlayers[player][PLAYER_SLIPPING])
            {
                
g_arrayPlayers[player][PLAYER_SLIPPING] = 1
                screenfade_slipstream
(player10.0)
            }
            
g_arrayPlayers[intOwner][PLAYER_STALKER] = player

            
//set_user_maxspeed(player, (get_user_maxspeed(player) + SPEED_Gain))
            
set_pev(playerpev_maxspeed, (pev(playerpev_maxspeed) + SPEED_Gain));
            
            
remove_task(player 24561)
            
set_task( (TIME_Think 3.0), "Task_StopSlipping", (player 24561))
        }
    }
}
public 
Task_StopSlipping(player)
{
    
player -= 24561
    
    
if(is_user_alive(player)
    && 
g_arrayPlayers[player][PLAYER_SLIPPING])
    {
        
g_arrayPlayers[player][PLAYER_SLIPPING] = -1;
        
screenfade_slipstream(player0.0)
        
        
set_task(2.0"Task_Speedloose"player)
        
        
ExecuteHamB(Ham_Item_PreFrameplayer);
    }
}
public 
Task_Speedloose(player)
{
    if(
is_user_alive(player)
    && 
g_arrayPlayers[player][PLAYER_SLIPPING] == -1)
    {
        
g_arrayPlayers[player][PLAYER_SLIPPING] = 0
        
        ExecuteHamB
(Ham_Item_PreFrameplayer)
    }
}

// Public: Think
public Think_Slipstream(entity)
{
    if(
pev_valid(entity))
    {
        static 
intOwner
        intOwner 
pev(entitypev_owner)
        
        if(!
is_user_alive(intOwner)
        || 
pev(entitypev_slipid)
        || !
g_arrayPlayersintOwner ][PLAYER_SLIPSTREAM]
        || 
entity_range(intOwnerg_arrayPlayersintOwner ][PLAYER_STALKER]) > (MAX_Distance 50.0))
        {
            
stop_slipstream(intOwner)
            return
        }
        
        new 
intSwitch
        
        
static Float:flOrigin[2][3];
        
pev(entitypev_oldoriginflOrigin[intSwitch]);
        
        for(new 
1MAX_Entitiesj++)
        {
            if( 
g_arrayPlayersintOwner ][PLAYER_ENT_STREAM j] )
            {
                
pev(g_arrayPlayersintOwner ][PLAYER_ENT_STREAM j], pev_oldoriginflOrigin[!intSwitch]);
                
                if(
flOrigin[!intSwitch][0] == 0.0
                
|| flOrigin[!intSwitch][1] == 0.0
                
|| flOrigin[!intSwitch][2] == 0.0)
                {
                    
set_pev(g_arrayPlayersintOwner ][PLAYER_ENT_STREAM j], pev_iuser20)
                    
set_pev(g_arrayPlayersintOwner ][PLAYER_ENT_STREAM j], pev_oldoriginflOrigin[intSwitch])

                    break
                }
                
                if( !
update_slipentity(g_arrayPlayersintOwner ][PLAYER_ENT_STREAM j], flOrigin[intSwitch]) )
                {
                    
stop_slipstream(intOwner)
                    return
                }
                
intSwitch = !intSwitch
            
}
            else
            {
                if( (
g_arrayPlayersintOwner ][PLAYER_ENT_STREAM j] = create_slipentity(intOwnerj)) )
                {
                    
set_pev(g_arrayPlayersintOwner ][PLAYER_ENT_STREAM j], pev_originflOrigin[intSwitch])
                }
                
trail_slipstreamintOwner* (j+1) )
                
                break
            }
        }
        
pev(intOwnerpev_originflOrigin[0]);
        if(!
update_slipentity(g_arrayPlayersintOwner ][PLAYER_ENT_STREAM], flOrigin[0]))
        {
            
stop_slipstream(intOwner)
            return
        }
        
set_pev(entitypev_nextthinkget_gametime() + TIME_Think)
    }
}
        
// Stocks
stock update_slipentity(const entityFloat:flOrigin[3] = {0.00.00.0})
{
    if(
pev_valid(entity))
    {
        new 
Float:flOriginold[3];
        
pev(entitypev_oldoriginflOriginold);
        
        if(
xs_vec_equal(flOriginflOriginold)
        || 
flOriginold[0] == 0.0)
        {
            return 
0;
        }
        
set_pev(entitypev_originflOriginold);
        
set_pev(entitypev_oldoriginflOrigin);
    
        static 
Float:flSpeed;
        
flSpeed = (vector_distance(flOriginflOriginold) / TIME_Think);
        
        if(
flSpeed 20.0)
            return 
0
        
        
static Float:flVelocity[3];
        
get_speed_vector(flOriginoldflOriginflSpeedflVelocity);
        
        
set_pev(entitypev_velocityflVelocity);
        
        return 
1;
    }
    
    return 
0;
}
stock create_slipentity(const id, const slipid)
{
    new 
entity;
    
    static 
intStringname;
    if( 
intStringname || (intStringname engfunc(EngFunc_AllocString"info_target")) )
    {
        if( !
pev_valid( (entity engfunc(EngFunc_CreateNamedEntityintStringname)) ) )
            return 
0;
    }
    
    
set_pev(entitypev_classnameCLASS_Slip);
    
set_pev(entitypev_solidSOLID_TRIGGER);
    
set_pev(entitypev_movetypeMOVETYPE_FLY);
    
    
engfunc(EngFunc_SetSizeentityFloat:{-16.0, -16.0, -8.0}, Float:{16.016.08.0});
    
    
set_pev(entitypev_slipidslipid);
    
set_pev(entitypev_ownerid);
    
    
engfunc(EngFunc_SetModelentity"models/w_usp.mdl");
    
set_rendering(entitykRenderFxNone, .render=kRenderTransAlpha, .amount=0)
    
    return 
entity;
}
        
stock start_slipstream(const id, const stalker)
{
    if(
g_arrayPlayers[id][PLAYER_SLIPSTREAM])
        return 
0
        
    
if( (g_arrayPlayersid ][PLAYER_ENT_STREAM] = create_slipentity(id0)) )
    {
        
g_arrayPlayers[id][PLAYER_SLIPSTREAM] = 1
        g_arrayPlayers
id ][PLAYER_STALKER] = stalker
        
        
new Float:flOrigin[3]
        
pev(idpev_originflOrigin)
    
        
//set_pev(g_arrayPlayers[ id ][PLAYER_ENT_STREAM], pev_origin, flOrigin)
        
set_pev(g_arrayPlayersid ][PLAYER_ENT_STREAM], pev_oldoriginflOrigin)
        
set_pev(g_arrayPlayersid ][PLAYER_ENT_STREAM], pev_nextthinkget_gametime() + TIME_Think)
        
        
trail_slipstream(id2)
    }
    return 
1
}
stock stop_slipstream(const id)
{
    if(!
g_arrayPlayers[id][PLAYER_SLIPSTREAM])
        return
    
    
g_arrayPlayers[id][PLAYER_SLIPSTREAM] = 0;
    
    for(new 
0MAX_Entitiesi++)
    {
        if( 
pev_validg_arrayPlayers[id][PLAYER_ENT_STREAM i] ) )
        {
            
engfunc(EngFunc_RemoveEntityg_arrayPlayers[id][PLAYER_ENT_STREAM i] );
        }
        
g_arrayPlayers[id][PLAYER_ENT_STREAM i]  = 0;
    }
    
    
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
    
write_byte(TE_KILLBEAM)    // 99
    
write_short(id)
    
message_end()
}
    
stock get_speed_vector(const Float:origin1[3],const Float:origin2[3],Float:speedFloat:new_velocity[3]) 
{
    
new_velocity[0] = origin2[0] - origin1[0];
    
new_velocity[1] = origin2[1] - origin1[1];
    
new_velocity[2] = origin2[2] - origin1[2];
    new 
Float:num floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2]));
    
new_velocity[0] *= num;
    
new_velocity[1] *= num;
    
new_velocity[2] *= num;

    return 
1;
}
stock trail_slipstream(idsize)
{
        
// Trail
    
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
    
write_byte(TE_BEAMFOLLOW)    // 22
    
write_short(id)
    
write_short(g_spriteTrail)
    
write_byte(size)                 // Life
    
write_byte(15)                // Size
    
write_byte(128)                // Color:R
    
write_byte(128)                // Color:G
    
write_byte(128)                // Color:B
    
write_byte(255)                // Brightness
    
message_end()
}
stock screenfade_slipstream(idFloat:fadetimecolor[3] = {255255255})
{
    static 
msgIdScreenfade;
    if(
msgIdScreenfade || (msgIdScreenfade get_user_msgid"ScreenFade")))
    {
        
message_begin(MSG_ONEmsgIdScreenfade_id)
        
write_short(FixedUnsigned16(fadetime, (1<<12)))
        
write_short(FixedUnsigned16(fadetime, (1<<12)))
        
write_short(0)    // Flag
        
write_byte(color[0]) // Color:r
        
write_byte(color[1]) // Color:g
        
write_byte(color[2]) // Color:b
        
write_byte(50)    // Alpha
        
message_end()
    }
}
FixedUnsigned16Float:valuescale )
{
    return 
clamp(floatround(value scale), 00xFFFF);

Responder
#2
tenes rehlds?, seguro q no fallan los stocks?

logs?
Responder
#3
(19/05/2019, 06:55 PM)Pan Bimbo (? escribió: tenes rehlds?, seguro q no fallan los stocks?

logs?

HLDS, no da ningún log, la primera vez que puse el plugin y pasó esto el error fue "FATAL ERROR (shutting down): NUM_FOR_EDICT: bad pointer", la segunda vez que pasó yo no estaba conectado por lo que revisé el qconsole y vi que lo último que sucedió fue nuevamente un jugador murió por una granada en el momento del crash por lo que asumo que es el mismo problema ya que removiendo el plugin el servidor anda perfectamente.
Responder
#4
Bueno, el problema resultó ser del plugin principal del deathrace, "L 05/20/2019 - 22:32:36: FATAL ERROR (shutting down): NUM_FOR_EDICT: bad pointer" o al menos eso supongo ya que removí el slipstream y sigue fallando cuando un jugador mata a otro con granada en este caso especifico (como en los previos)

Es el código original solo que removí el bot, le agregué el round_terminator e infinite round para evitar problemas ya que el bot no está más ya que también causaban problemas con el mod en el cual el servidor quedaba offline en un constante loop crasheando constantemente hasta remover los plugins y algunos otros cambios le hice también pero son simplemente visuales (Mensajes y eso)

Código PHP:
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <cstrike>
#include <round_terminator>

#define PLUGIN "Deathrace"
#define VERSION "2.3"
#define AUTHOR "Xalus"

#define PREFIX "!t[Alta-Fruta]"

new const g_strGamename[] = "Alta-Fruta";

    
// Fakebot (Credit: xPaw)
//new const g_strBotname[] = "Alta-Fruta";
new g_intFakebotid

    
// Teamstuff (Credit: ConnorMcLeod)
const m_iJoiningState 121;
const 
m_iMenu 205;
const 
MENU_CHOOSEAPPEARANCE 3;
const 
JOIN_CHOOSEAPPEARANCE 4;


enum _:enumCvars
{
    
CVAR_BREAKTYPE
}
new 
g_arrayCvars[enumCvars]

enum _:enumForwards
{
    
FORWARD_CRATEHIT,
    
FORWARD_WIN
}
new 
g_arrayForwards[enumForwards]

enum _:enumPlayers
{
    
PLAYER_ENT_BLOCK
}
new 
g_arrayPlayers[33][enumPlayers]


new 
Trie:g_trieRemoveEntities
new bool:g_boolRoundended

public plugin_init() 
{
    
register_plugin(PLUGINVERSIONAUTHOR)
    
register_cvar("deathrace_mod"VERSIONFCVAR_SERVER);
    
    
// Register: Cvars
    
g_arrayCvars[CVAR_BREAKTYPE]     = register_cvar("deathrace_touch_breaktype""1")
        
// 0 break nothing, 1 break only crates, 2 break everything
    
    // Register: Clcmd
    
register_clcmd("menuselect""ClCmd_MenuSelect_JoinClass"); // old style menu
    
register_clcmd("joinclass""ClCmd_MenuSelect_JoinClass"); // VGUI menu
    
    // Register: Ham
    
RegisterHam(Ham_Touch"func_breakable""Ham_TouchCrate_Pre"0);
    
RegisterHam(Ham_TakeDamage"func_breakable""Ham_DamageCrate_Pre"0)
    
//RegisterHam(Ham_TraceAttack, "player", "Ham_TraceAttackPlayer_Pre", 0)
    
RegisterHamHam_TraceAttack"player""OnPlayerTraceAttack_Pre"false );
    
    
RegisterHam(Ham_Use"func_button""Ham_PressButton_Post"1);
    
RegisterHam(Ham_Spawn"player""Ham_PlayerSpawn_Post"1);
    
RegisterHam(Ham_Killed"player""Ham_PlayerKilled_Post"1);
    
    
// Register: Message
    
register_message(get_user_msgid("TextMsg"), "Message_TextMsg");
    
register_message(get_user_msgid("StatusIcon"), "Message_StatusIcon"); 
    
register_message(get_user_msgid("DeathMsg"), "Message_DeathMsg" );
    
    
// Register: Event
    
register_event("HLTV""Event_NewRound""a""1=0""2=0");
    
    
// Register: Forward
    
register_forward(FM_GetGameDescription"Forward_GetGameDescription" )
    
    
// Register: MultiForward
    
g_arrayForwards[FORWARD_CRATEHIT]    = CreateMultiForward("deathrace_crate_hit"ET_STOPFP_CELLFP_CELL)     // deathrace_crate_hit(id, ent)
    
g_arrayForwards[FORWARD_WIN]        = CreateMultiForward("deathrace_win"ET_STOPFP_CELLFP_CELL// deathrace_win(id, type) (type [ 0: Survivor | 1: Map Finish ])
    
    // Create: Fakebot
    //create_fakebot()
    
    // Server Start
    
server_cmd("mp_friendlyfire 1")
    
server_cmd("mp_roundtime 10")
    
server_cmd("mp_playerid 1")
    
}
public 
plugin_precache()
{
        
// Entity stuff (Credit: Exolent[jNr]
    
new iEntity create_entity"hostage_entity" );
    
entity_set_originiEntityFloat:{ 0.00.0, -55000.0 } );
    
entity_set_sizeiEntityFloat:{ -1.0, -1.0, -1.0 }, Float:{ 1.01.01.0 } );
    
DispatchSpawniEntity );
    
    
iEntity create_entity"player_weaponstrip" );
    
DispatchKeyValueiEntity"targetname""stripper" );
    
DispatchSpawniEntity );
    
    
iEntity create_entity"game_player_equip" );
    
DispatchKeyValueiEntity"weapon_knife""1" );
    
DispatchKeyValueiEntity"targetname""equipment" );
    
    
iEntity create_entity"multi_manager" );
    
DispatchKeyValueiEntity"stripper""0" );
    
DispatchKeyValueiEntity"equipment""0.5" );
    
DispatchKeyValueiEntity"targetname""game_playerspawn" );
    
DispatchKeyValueiEntity"spawnflags""1" );
    
DispatchSpawniEntity );
    
    
iEntity create_entity"info_map_parameters" );
    
DispatchKeyValueiEntity"buying""3" );
    
DispatchSpawniEntity );
    
    new const 
szRemoveEntities[][] =
    {
        
"func_bomb_target",
        
"info_bomb_target",
        
"hostage_entity",
        
"monster_scientist",
        
"func_hostage_rescue",
        
"info_hostage_rescue",
        
"info_vip_start",
        
"func_vip_safetyzone",
        
"func_escapezone",
        
// "armoury_entity",
        
"info_map_parameters",
        
"player_weaponstrip",
        
"game_player_equip",
        
"func_buyzone"
    
};
    
    
g_trieRemoveEntities TrieCreate( );
    
    for( new 
0sizeofszRemoveEntities ); i++ )
    {
        
TrieSetCell(g_trieRemoveEntitiesszRemoveEntities[i], i);
    }
    
register_forward(FM_Spawn"Forward_Spawn");
}

// Public: Forward
public Forward_Spawn(entity)
{
    if(
pev_valid(entity))
    {
        static 
strClassname32 ];
        
pev(entitypev_classnamestrClassnamecharsmax(strClassname));
        
        if(
TrieKeyExists(g_trieRemoveEntitiesstrClassname))
        {
            
remove_entity(entity);
            return 
FMRES_SUPERCEDE;
        }
        if(
equal(strClassname"info_player_deathmatch"))
        {
            
set_pev(entitypev_classname"info_player_start")
        }
    }
    return 
FMRES_IGNORED;
}
public 
Forward_GetGameDescription()

    
forward_return(FMV_STRINGg_strGamename); 
    return 
FMRES_SUPERCEDE


// Public: Clcmds
public ClCmd_MenuSelect_JoinClass(id)
{
    if(
get_pdata_int(idm_iMenu) == MENU_CHOOSEAPPEARANCE && get_pdata_int(idm_iJoiningState) == JOIN_CHOOSEAPPEARANCE)
    {
        new 
command[11], arg1[32];
        
read_argv(0commandcharsmax(command));
        
read_argv(1arg1charsmax(arg1));
        
        if(!
g_boolRoundended)
        {
            
engclient_cmd(idcommandarg1);
            
ExecuteHam(Ham_Player_PreThinkid);
            
            if( !
is_user_alive(id) )
            {
                
//ExecuteHamB(Ham_Spawn, id);
                
ExecuteHamB(Ham_CS_RoundRespawnid);
            }
            return 
PLUGIN_HANDLED;
        }
    }
    return 
PLUGIN_CONTINUE;


// Public: Messages
public Message_TextMsg()
{
    static 
textmsg[22]
    
get_msg_arg_string(2textmsgcharsmax(textmsg))
        
    
// Block Teammate attack and kill Message
    
if (equal(textmsg"#Game_teammate_attack") || equal(textmsg"#Killed_Teammate"))
        return 
PLUGIN_HANDLED;

    return 
PLUGIN_CONTINUE;
}
public 
Message_StatusIcon(const iMsgId, const iMsgDest, const id
{
    static 
szMsg[8];
    
get_msg_arg_string(2szMsg7);
    
    if(
equal(szMsg"buyzone") && get_msg_arg_int(1)) 
    {
        
set_pdata_int(id235get_pdata_int(id235) & ~(<< 0));
        return 
PLUGIN_HANDLED;
    }
    return 
PLUGIN_CONTINUE;
}
public 
Message_DeathMsg(const iMsgId, const iMsgDest, const id
{
    return (
get_msg_arg_int) == g_intFakebotid) ? PLUGIN_HANDLED PLUGIN_CONTINUE;
}

// Public: Event
public Event_NewRound()
{
    
g_boolRoundended false
    
    remove_task
(15151)
}

// Public: Client
public client_disconnect(id)
{
    if(
g_intFakebotid == id
    {
        
set_task(1.5"Task_UpdateBot");
        
g_intFakebotid 0;
    }
}

// Public: Ham
public Ham_PlayerKilled_Post(id)
{
    if(!
is_user_bot(id))
    {
        new 
arrayPlayers[32], intPlayers;
        
get_players(arrayPlayersintPlayers"ae""CT")
        
        if(
intPlayers <= 1)
        {
            if(
arrayPlayers[0])
            {
                new 
intReturn;
                
//ExecuteForward(g_arrayForwards[FORWARD_WIN], intReturn, id, 0);
                
                
if(intReturn == 2)
                    return
                
                new 
strName[32];
                
get_user_name(arrayPlayers[0], strNamecharsmax(strName))
                
                
//client_print_color(0, "%s !g%s!n era el unico jugador vivo!", PREFIX, strName)
            
}
            
            
//fakedamage(g_intFakebotid, "worldspawn", 100.0, DMG_GENERIC);
        
}
    }
}

public 
OnPlayerTraceAttack_PreiVictimiAttackerFloat:flDamageFloat:flDirection], iTraceiDamageBits )
{
    if ( !( 
<= iAttacker <= 32 ) || !is_user_aliveiAttacker ) )
    {
        return 
HAM_IGNORED;
    }
   
    new 
iWeapon get_user_weaponiAttacker );
   
    if ( 
iWeapon == CSW_KNIFE )
    {
        return 
HAM_SUPERCEDE;
    }
   
    return 
HAM_IGNORED;
}

public 
Ham_PlayerSpawn_Post(id)
{
    if(
g_intFakebotid == id)
    {
        
//set_pev(id, pev_frags, 0.0);
        //cs_set_user_deaths(id, 0);
        
set_pevidpev_effectspevidpev_effects ) | EF_NODRAW );
        
set_pevidpev_solidSOLID_NOT );
        
entity_set_originidFloat:{ 999999.0999999.0999999.0 } );
        
dllfuncDLLFunc_Thinkid );
    } 
}

public 
Ham_TouchCrate_Pre(entityid)
{
    if(
pev_valid(entity)
    && 
is_user_alive(id)
    && !
g_boolRoundended)
    {
        static 
intBreaktype
        
if(g_arrayPlayers[id][PLAYER_ENT_BLOCK] != entity
        
&& (intBreaktype || (intBreaktype get_pcvar_num(g_arrayCvars[CVAR_BREAKTYPE]))) )
        {
            static 
strTargetname[32];
            
pev(entitypev_targetnamestrTargetnamecharsmax(strTargetname));
                
                
// Lets see if we got a crate.
            
if( (intBreaktype == 2
                || (
intBreaktype == && containi(strTargetname"crate") >= 0) )
            {
                
ExecuteHamB(Ham_TakeDamageentityidid9999.0DMG_CRUSH);
            }
        }
    }
    return 
HAM_IGNORED
}
public 
Ham_DamageCrate_Pre(entityinflictorattackerFloat:damagebits)
{
    if(
pev_valid(entity)
    && 
is_user_alive(attacker)
    && !
g_boolRoundended
    
&& (get_user_weapon(attacker) == CSW_KNIFE || bits DMG_CRUSH
    && 
g_arrayPlayers[attacker][PLAYER_ENT_BLOCK] != entity)
    {    
        if( (
pev(entitypev_health) - damage) <= 0.0 )
        {
            
g_arrayPlayers[attacker][PLAYER_ENT_BLOCK] = entity
            
            
new intReturn;
            
ExecuteForward(g_arrayForwards[FORWARD_CRATEHIT], intReturnattackerentity);
            
            return 
intReturn;
        }
    }
    return 
HAM_IGNORED
}
public 
Ham_DamagePlayer_Pre(idinflictorattackerFloat:damagebits)
{
    if(
is_user_alive(id)
    && 
is_user_connected(attacker)
    && 
inflictor == attacker)
    {
        return (
get_user_weapon(attacker) == CSW_KNIFE) ? HAM_SUPERCEDE HAM_IGNORED;
    }
    return 
HAM_IGNORED
}
public 
Ham_PressButton_Post(entityid)    
{
    if(
pev_valid(entity)
    && 
is_user_alive(id)
    && !
g_boolRoundended)
    {        
        static 
strTargetname[32];
        
pev(entitypev_targetnamestrTargetnamecharsmax(strTargetname));
        
        if(
strTargetname[0] == 'w' && strTargetname[3] == 'b'// winbut
        
{
            
g_boolRoundended true;
        
            new 
intReturn;
            
ExecuteForward(g_arrayForwards[FORWARD_WIN], intReturnid1);
            
            if(!
intReturn)
            {
                new 
strName[32];
                
get_user_name(idstrNamecharsmax(strName));
                
                
client_print_color(0"%s !g%s!n gano la carrera!"PREFIXstrName)
            }
            
                
// End round
            
if(!is_user_alive(g_intFakebotid))
            {
                
TerminateRoundRoundEndType_TeamExterminationTeamWinning_Ct )
                
//fakedamage(g_intFakebotid, "worldspawn", 100.0, DMG_GENERIC);
            
}
        }
    }
}

// Public: Fakebot (By xPaw)
/*public Task_UpdateBot()
{
    new id = find_player("i");
    
    if( !id ) 
    {
        id = engfunc(EngFunc_CreateFakeClient, g_strBotname);
        if( pev_valid( id ) ) 
        {
            engfunc( EngFunc_FreeEntPrivateData, id );
            dllfunc( MetaFunc_CallGameEntity, "player", id );
            set_user_info( id, "rate", "3500" );
            set_user_info( id, "cl_updaterate", "25" );
            set_user_info( id, "cl_lw", "1" );
            set_user_info( id, "cl_lc", "1" );
            set_user_info( id, "cl_dlmax", "128" );
            set_user_info( id, "cl_righthand", "1" );
            set_user_info( id, "_vgui_menus", "0" );
            set_user_info( id, "_ah", "0" );
            set_user_info( id, "dm", "0" );
            set_user_info( id, "tracker", "0" );
            set_user_info( id, "friends", "0" );
            set_user_info( id, "*bot", "1" );
            set_pev( id, pev_flags, pev( id, pev_flags ) | FL_FAKECLIENT );
            set_pev( id, pev_colormap, id );
            
            new szMsg[ 128 ];
            dllfunc( DLLFunc_ClientConnect, id, g_strBotname, "127.0.0.1", szMsg );
            dllfunc( DLLFunc_ClientPutInServer, id );
            
            cs_set_user_team( id, CS_TEAM_T );
            ExecuteHamB( Ham_CS_RoundRespawn, id );
            
            set_pev( id, pev_effects, pev( id, pev_effects ) | EF_NODRAW );
            set_pev( id, pev_solid, SOLID_NOT );
            dllfunc( DLLFunc_Think, id );
            
            g_intFakebotid = id;
        }
    }
}

// Stock    
stock create_fakebot()
{
    create_entity("info_player_deathmatch")
    Task_UpdateBot()
}*/

stock client_print_color(id, const input[], any:...)
{
    static 
szMsg[191], msgSayText;
    
    if (!
msgSayText)
        
msgSayText get_user_msgid("SayText");
    
    
vformat(szMsg190input3);

    
replace_all(szMsg190"!g""^4");
    
replace_all(szMsg190"!n""^1");
    
replace_all(szMsg190"!t""^3");
    
    
message_begin(id MSG_ONE_UNRELIABLE MSG_BROADCASTmsgSayText, .player id);
    
write_byte(id id 33);
    
write_string(szMsg);
    
message_end();

Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)