hmm... why boomer not explode, when i killed he?
PHP Code:
#include <amxmodx>
#include <fakemeta>
#include <engine>
#include <hamsandwich>
#include <cstrike>
#define PLUGINNAME "[L4D] Class Boomer"
#define VERSION "1.0"
#define AUTHOR "xFrost"
new const ZOMBIE_MODEL[] = "Boomer"
#define MODELSET_TASK 100
#define MODELCHANGE_DELAY 0.5
new Float:g_models_targettime
new Float:g_roundstarttime
new g_has_custom_model[33]
new g_player_model[33][32]
new g_zombie[33]
new explosion, g_maxplayers, white, smoke
new bool:lamuerteexplosiva[33] = false
new g_sndExplode[] = "umbrella/boomer_boom.wav"
public plugin_init()
{
register_plugin(PLUGINNAME, VERSION, AUTHOR)
register_event("DeathMsg", "boomer_death", "a")
register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn", 1)
register_forward(FM_SetClientKeyValue, "fw_SetClientKeyValue")
register_forward(FM_ClientUserInfoChanged, "fw_ClientUserInfoChanged")
g_maxplayers = get_maxplayers()
}
public plugin_precache()
{
explosion = precache_model("sprites/zerogxplode.spr")
white = precache_model("sprites/white.spr")
smoke = precache_model("sprites/steam1.spr")
precache_sound(g_sndExplode)
new modelpath[100]
formatex( modelpath, charsmax( modelpath ), "models/player/%s/%s.mdl", ZOMBIE_MODEL, ZOMBIE_MODEL )
engfunc( EngFunc_PrecacheModel, modelpath )
}
public event_round_start()
{
g_roundstarttime = get_gametime()
}
public fw_PlayerSpawn( id )
{
if ( !is_user_alive( id ) || !cs_get_user_team( id ) )
return;
g_zombie[id] = cs_get_user_team( id ) == CS_TEAM_T ? true : false;
remove_task( id + MODELSET_TASK )
if ( g_zombie[id] )
{
copy( g_player_model[id], charsmax( g_player_model[] ), ZOMBIE_MODEL )
new currentmodel[32]
fm_get_user_model( id, currentmodel, charsmax( currentmodel ) )
if ( !equal( currentmodel, g_player_model[id] ) )
{
if ( get_gametime() - g_roundstarttime < 5.0 )
set_task( 5.0 * MODELCHANGE_DELAY, "fm_user_model_update", id + MODELSET_TASK )
else
fm_user_model_update( id + MODELSET_TASK )
}
}
else if ( g_has_custom_model[id] )
{
fm_reset_user_model( id )
}
}
public fw_SetClientKeyValue( id, const infobuffer[], const key[] )
{
if ( g_has_custom_model[id] && equal( key, "model" ) )
return FMRES_SUPERCEDE;
return FMRES_IGNORED;
}
public fw_ClientUserInfoChanged( id )
{
if ( !g_has_custom_model[id] )
return FMRES_IGNORED;
static currentmodel[32]
fm_get_user_model( id, currentmodel, charsmax( currentmodel ) )
if ( !equal( currentmodel, g_player_model[id] ) && !task_exists( id + MODELSET_TASK ) )
fm_set_user_model( id + MODELSET_TASK )
return FMRES_IGNORED;
}
public fm_user_model_update( taskid )
{
static Float:current_time
current_time = get_gametime()
if ( current_time - g_models_targettime >= MODELCHANGE_DELAY )
{
fm_set_user_model( taskid )
g_models_targettime = current_time
}
else
{
set_task( (g_models_targettime + MODELCHANGE_DELAY) - current_time, "fm_set_user_model", taskid )
g_models_targettime = g_models_targettime + MODELCHANGE_DELAY
}
}
public fm_set_user_model( player )
{
player -= MODELSET_TASK
engfunc( EngFunc_SetClientKeyValue, player, engfunc( EngFunc_GetInfoKeyBuffer, player ), "model", g_player_model[player] )
g_has_custom_model[player] = true
}
public user_infected_post(player, infector)
{
if (get_user_team(player) == 1) {
lamuerteexplosiva[player] = true
client_print(player, print_chat, "[ZP] Explode after die!")
}
}
public user_humanized_post(player)
{
lamuerteexplosiva[player] = false
}
public boomer_death() {
new attacker = read_data(1)
new victim = read_data(2)
if(lamuerteexplosiva[victim]) {
static victim_name[33]
static attacker_name[33]
get_user_name(victim, victim_name, sizeof victim_name -1)
get_user_name(attacker, attacker_name, sizeof attacker_name -1)
user_kill(attacker)
server_print("[ZP] %s was %s who die too !!!", victim_name, attacker_name)
for (new id2; id2 <= g_maxplayers; id2++)
{
if (get_user_team(id2) == 1)
{
static Float:vOrigin[3], Float:vOrigin2[3]
pev(victim, pev_origin, vOrigin)
pev(id2, pev_origin, vOrigin2)
new Float:fOrigin[3]
new iOrigin[3]
entity_get_vector(id2, EV_VEC_origin, fOrigin)
FVecIVec(fOrigin,iOrigin)
{
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(3) //TE_EXPLOSION
write_coord(iOrigin[0])
write_coord(iOrigin[1])
write_coord(iOrigin[2] + 5)
write_short(explosion)
write_byte(30)
write_byte(15)
write_byte(0)
message_end()
}
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(5) // TE_SMOkE
write_coord(iOrigin[0]) // startorigin
write_coord(iOrigin[1])
write_coord(iOrigin[2] + 15)
write_short(smoke) // sprite
write_byte(60)
write_byte(10)
message_end()
}
{
message_begin( MSG_BROADCAST,SVC_TEMPENTITY,iOrigin )
write_byte( 21 ) //TE_BEAMCYLINDER
write_coord( iOrigin[0] )
write_coord( iOrigin[1] )
write_coord( iOrigin[2] )
write_coord( iOrigin[0] )
write_coord( iOrigin[1] )
write_coord( iOrigin[2]+200 )
write_short( white )
write_byte( 0 )
write_byte( 1 )
write_byte( 6 )
write_byte( 8 )
write_byte( 1 )
write_byte( 255 )
write_byte( 255 )
write_byte( 192 )
write_byte( 128 )
write_byte( 5 )
message_end()
}
{
emit_sound(victim,CHAN_STATIC, "g_sndExplode", 1.0, ATTN_NORM, 0, PITCH_NORM)
}
new g_hs
new uWeaponName[32]
user_silentkill(id2)
g_hs = random_num(0, 1)
format(uWeaponName, 31, "grenade")
make_deathmsg(0 , id2, g_hs, uWeaponName)
if(vector_distance(vOrigin, vOrigin2) < 250)
{
user_kill(id2)
}
}
}
lamuerteexplosiva[victim] = false
}
}
public client_disconnect(id)
{
lamuerteexplosiva[id] = false
}
public client_putinserver(id)
{
lamuerteexplosiva[id] = false
}
stock fm_get_user_model( player, model[], len )
{
engfunc( EngFunc_InfoKeyValue, engfunc( EngFunc_GetInfoKeyBuffer, player ), "model", model, len )
}
stock fm_reset_user_model( player )
{
g_has_custom_model[player] = false
dllfunc( DLLFunc_ClientUserInfoChanged, player, engfunc( EngFunc_GetInfoKeyBuffer, player ) )
}