Código:
#include <amxmodx>
#include < fun >
#include <engine>
#include <hamsandwich>
#include <zombie_plague_advance>
#include <cstrike>
#define PLUGIN "[ZP] Flame XM1014"
#define VERSION "1.0"
#define AUTHOR "Javivi"
new g_MaxPlayers
#define IsValidUser(%1) (1 <= %1 <= g_MaxPlayers)
#define WEAPON_COST 12
new const burn_sounds[ ][ ] =
{
"zombie_plague/zombie_burn3.wav",
"zombie_plague/zombie_burn4.wav",
"zombie_plague/zombie_burn5.wav",
"zombie_plague/zombie_burn6.wav",
"zombie_plague/zombie_burn7.wav"
}
new g_ItemID, sprFlame, sprSmoke
new bool:g_bFlameXM1014[ 33 ]
new bool:g_AlreadyBurn[ 33 ]
new cvar_MaxBurnDMG, cvar_MinBurnDMG, cvar_BurnTime, cvar_Delay, cvar_OneRound
new cvar_cMaxBurnDMG, cvar_cMinBurnDMG, cvar_cBurnTime, Float:cvar_cDelay
new Time[ 33 ]
public plugin_init( )
{
register_plugin( PLUGIN, VERSION, AUTHOR )
g_MaxPlayers = get_maxplayers( )
cvar_MaxBurnDMG = register_cvar( "zp_flamexm_maxdmg", "80" )
cvar_MinBurnDMG = register_cvar( "zp_flamexm_mindmg", "60" )
cvar_BurnTime = register_cvar( "zp_flamexm_time", "20" )
cvar_Delay = register_cvar( "zp_flamexm_delay", "1.0" )
cvar_OneRound = register_cvar( "zp_flamexm_oneround", "0" )
register_event( "HLTV", "event_round_start", "a", "1=0", "2=0" )
register_clcmd( "drop", "HookDrop" )
g_ItemID = zp_register_extra_item( "Flame XM1014", WEAPON_COST, ZP_TEAM_HUMAN )
RegisterHam( Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1 )
RegisterHam( Ham_Killed, "player", "fw_PlayerKilled_Post", 1 )
RegisterHam( Ham_TakeDamage, "player", "fw_TakeDamage" )
static szCvar[ 30 ]
formatex( szCvar, charsmax(szCvar), "v%s by Javivi", VERSION )
register_cvar( "zp_flamexm_version", szCvar, FCVAR_SERVER|FCVAR_SPONLY )
}
public plugin_precache( )
{
sprFlame = precache_model( "sprites/[DH]Flame.spr" )
sprSmoke = precache_model( "sprites/black_smoke3.spr" )
for( new i = 0; i < sizeof burn_sounds; i++ )
precache_sound( burn_sounds[ i ] )
}
public event_round_start( )
{
cvar_cMaxBurnDMG = get_pcvar_num( cvar_MaxBurnDMG )
cvar_cMinBurnDMG = get_pcvar_num( cvar_MinBurnDMG )
cvar_cBurnTime = get_pcvar_num( cvar_BurnTime )
cvar_cDelay = get_pcvar_float( cvar_Delay )
}
public client_disconnect( id )
{
if( g_bFlameXM1014[ id ] )
g_bFlameXM1014[ id ] = false
Time[ id ] = 0
}
public HookDrop( id )
{
if(is_user_alive( id ) && get_user_weapon( id ) == CSW_XM1014 && g_bFlameXM1014 [ id ] )
{
g_bFlameXM1014[ id ] = false
}
}
public zp_extra_item_selected( id, itemid )
{
if( itemid == g_ItemID )
{
if( !zp_has_round_started( ) || g_bFlameXM1014[ id ] )
{
#if defined OLD_VERSION
zp_set_user_ammo_packs( id, zp_get_user_ammo_packs(id) + WEAPON_COST )
#else
return ZP_PLUGIN_HANDLED
#endif
}
else
{
give_item( id, "weapon_xm1014" )
cs_set_user_bpammo(id, CSW_XM1014, 32)
g_bFlameXM1014[ id ] = true
}
}
return PLUGIN_HANDLED;
}
public zp_user_infected_post( id )
{
if( g_bFlameXM1014[ id ] )
g_bFlameXM1014[ id ] = false
}
public fw_PlayerSpawn_Post( id )
{
if( get_pcvar_num( cvar_OneRound ) == 1 && g_bFlameXM1014[ id ] )
{
g_bFlameXM1014[ id ] = false
}
}
public fw_PlayerKilled_Post( victim, attacker, shouldgib )
{
if(g_bFlameXM1014[ victim ] )
g_bFlameXM1014[ victim ] = false
}
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
if(IsValidUser( attacker ) && victim != attacker && zp_get_user_zombie( victim )
&& g_bFlameXM1014[ attacker ] && get_user_weapon( attacker ) == CSW_XM1014 && !g_AlreadyBurn[ victim ] )
{
if(zp_get_user_nemesis(victim) || zp_get_user_assassin(victim))
{
return HAM_IGNORED
}
g_AlreadyBurn[ victim ] = true
Time[ victim ] = cvar_cBurnTime
Burn( victim )
emit_sound( victim, CHAN_VOICE, burn_sounds[random_num(0, sizeof burn_sounds - 1)], 1.0, ATTN_NORM, 0, PITCH_NORM )
}
return PLUGIN_CONTINUE
}
public Burn( victim )
{
static Origin[ 3 ] ; get_user_origin( victim, Origin )
if( Time[ victim ] <= 0 || get_entity_flags( victim ) & FL_INWATER )
{
message_begin( MSG_PVS, SVC_TEMPENTITY, Origin )
write_byte( TE_SMOKE )
write_coord( Origin[0] )
write_coord( Origin[1] )
write_coord( Origin[2]-50 )
write_short( sprSmoke )
write_byte( random_num(15, 20) )
write_byte( random_num(10, 20) )
message_end( )
set_task( cvar_cDelay, "Stop", victim )
return
}
else
{
if( cvar_cBurnTime / 2 == Time[ victim ])
{
emit_sound( victim, CHAN_VOICE, burn_sounds[random_num(0, sizeof burn_sounds - 1)], 1.0, ATTN_NORM, 0, PITCH_NORM )
}
message_begin( MSG_PVS, SVC_TEMPENTITY, Origin )
write_byte( TE_SPRITE )
write_coord( Origin[0]+random_num(-5, 5) )
write_coord( Origin[1]+random_num(-5, 5) )
write_coord( Origin[2]+random_num(-10, 10) )
write_short( sprFlame )
write_byte( random_num(5, 10) )
write_byte( 200 )
message_end( )
Time[ victim ]--
set_user_health( victim, get_user_health( victim ) - random_num( cvar_cMinBurnDMG, cvar_cMaxBurnDMG ) )
set_task( 0.5, "Burn", victim )
}
}
public Stop( victim )
g_AlreadyBurn[ victim ] = false
Esse item não ira buga o nemesis eh assassino