03/03/2018, 11:15 PM
Buenas, hoy descargue este plugin de pipe bomb después de muchos este me funciona, utilizo el ZP 4.3 New Modes 1.5, pues todo está bien pero me gustaría agregarle tiempo o duración ya que este solo tiene 3 segundos, alguien que me ayude con eso por favor .
Código:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <engine>
#include <fun>
#include <cstrike>
#include <zombieplague>
#define NADE_TYPE_PIPEBOMB 5688
const m_pPlayer = 41;
new const g_trailspr[] ="sprites/laserbeam.spr";
new const g_firespr[] = "sprites/zerogxplode.spr";
new const g_sound[] = "zombie_plague/pipe_beep.wav";
new const g_vmodel[] = "models/zombie_plague/v_pipe.mdl";
new const g_pmodel[] = "models/zombie_plague/p_pipe.mdl";
new const g_wmodel[] = "models/zombie_plague/w_pipe.mdl";
new cvar_radius, cvar_damage
new g_trail, g_fire, g_MaxPlayers, g_pipe, bool: g_has_pipe[33]
public plugin_init()
{
register_plugin("[ZP] Extra Item: Pipe Bomb", "1.0", "lambda");
register_forward(FM_SetModel,"fw_SetModel", 1);
RegisterHam(Ham_Think, "grenade", "fw_ThinkGren");
RegisterHam(Ham_Item_Deploy, "weapon_smokegrenade", "fw_smDeploy", 1);
// Cvars
cvar_radius = register_cvar ( "zp_pipe_radius", "500");
cvar_damage = register_cvar("zp_pipe_damage", "1400.0");
g_pipe = zp_register_extra_item("Pipe Bomb", 40, ZP_TEAM_HUMAN)
g_MaxPlayers = get_maxplayers()
}
public plugin_precache()
{
precache_model(g_vmodel);
precache_model(g_pmodel);
precache_model(g_wmodel);
precache_sound(g_sound);
g_fire = precache_model(g_firespr);
g_trail = precache_model(g_trailspr);
}
public replace_models(id)
{
if(get_user_weapon(id) == CSW_SMOKEGRENADE)
{
set_pev(id, pev_viewmodel2, g_vmodel);
set_pev(id, pev_weaponmodel2, g_pmodel);
}
}
public fw_smDeploy(const iEntity)
{
if(pev_valid(iEntity) != 2)
return HAM_IGNORED;
new id = get_pdata_cbase(iEntity, m_pPlayer, 4);
if(g_has_pipe[id] && !zp_get_user_zombie(id) && is_user_alive(id))
{
set_pev(id, pev_viewmodel2, g_vmodel);
set_pev(id, pev_weaponmodel2, g_pmodel);
}
return HAM_IGNORED;
}
public zp_extra_item_selected(id, itemid)
{
if(itemid != g_pipe)
return ZP_PLUGIN_HANDLED
if (g_has_pipe[id])
return ZP_PLUGIN_HANDLED
if(itemid == g_pipe)
{
g_has_pipe[id] = true;
new was = cs_get_user_bpammo(id, CSW_SMOKEGRENADE);
if(was >= 1)
cs_set_user_bpammo(id, CSW_SMOKEGRENADE, was + 1);
else
give_item(id, "weapon_smokegrenade");
replace_models(id);
}
return PLUGIN_CONTINUE
}
public client_connect(id)
{
g_has_pipe[id] = false
}
public client_disconnect(id)
{
g_has_pipe[id] = false
}
public zp_user_infected_post(id)
{
g_has_pipe[id] = false;
}
public zp_user_humanized_post(id)
{
g_has_pipe[id] = false;
}
public fw_SetModel(entity, const model[])
{
static owner;
owner = pev(entity, pev_owner);
static Float:dmgtime
pev(entity, pev_dmgtime, dmgtime)
if(!pev_valid(entity) || !dmgtime || !g_has_pipe[owner])
return FMRES_IGNORED;
if (model[9] == 's' && model[10] == 'm')
{
entity_set_model(entity, g_wmodel);
set_rendering(entity, kRenderFxGlowShell, 128, 0, 0, kRenderNormal, 16);
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BEAMFOLLOW) // TE id
write_short(entity) // entity
write_short(g_trail) // sprite
write_byte(10) // life
write_byte(10) // width
write_byte(128) // r
write_byte(0) // g
write_byte(0) // b
write_byte(255) // brightness
message_end()
set_pev(entity, pev_flTimeStepSound, NADE_TYPE_PIPEBOMB)
return FMRES_SUPERCEDE;
}
return FMRES_IGNORED;
}
public fw_ThinkGren(entity) // Grenade think event
{
if (!pev_valid(entity))
return HAM_IGNORED;
static owner;
owner = pev(entity, pev_owner);
static Float:dmgtime
pev(entity, pev_dmgtime, dmgtime)
if (!g_has_pipe[owner] || dmgtime > get_gametime())
return HAM_IGNORED;
if(pev(entity, pev_flTimeStepSound) == NADE_TYPE_PIPEBOMB)
{
g_has_pipe[owner] = false
set_task(0.1, "hook", entity, _, _, "a", 15);
set_task(1.5, "deleteGren", entity)
new Float:originF[3]
pev(entity, pev_origin, originF);
light(originF)
return HAM_SUPERCEDE
}
return HAM_IGNORED;
}
public hook(entity)
{
if (!pev_valid(entity))
{
remove_task(entity)
return
}
emit_sound(entity, CHAN_WEAPON, g_sound, 1.0, ATTN_NORM, 0, PITCH_HIGH);
static Float:entOrigin[3], flOrigin[3], PlayerPos[3], distance
pev(entity, pev_origin, entOrigin);
flOrigin[0] = floatround(entOrigin[0])
flOrigin[1] = floatround(entOrigin[1])
flOrigin[2] = floatround(entOrigin[2])
for (new i = 1; i <= g_MaxPlayers; i++)
{
if(!is_user_alive(i) || !zp_get_user_zombie(i))
continue
get_user_origin(i, PlayerPos)
distance = get_distance(PlayerPos, flOrigin)
if (distance <= get_pcvar_num(cvar_radius))
{
new Float:fl_Velocity[3]
if (distance > 25)
{
new Float:fl_Time = distance / 650.0
fl_Velocity[0] = (flOrigin[0] - PlayerPos[0]) / fl_Time
fl_Velocity[1] = (flOrigin[1] - PlayerPos[1]) / fl_Time
fl_Velocity[2] = (flOrigin[2] - PlayerPos[2]) / fl_Time
}
else
{
fl_Velocity[0] = 0.0
fl_Velocity[1] = 0.0
fl_Velocity[2] = 0.0
}
entity_set_vector(i, EV_VEC_velocity, fl_Velocity)
}
}
}
public deleteGren(entity)
{
if (!pev_valid(entity))
return
new Float:originF[3]
pev(entity, pev_origin, originF);
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
write_byte(TE_EXPLOSION)
engfunc(EngFunc_WriteCoord, originF[0])
engfunc(EngFunc_WriteCoord, originF[1])
engfunc(EngFunc_WriteCoord, originF[2])
write_short(g_fire) //sprite index
write_byte(25) // scale in 0.1's
write_byte(10) // framerate
write_byte(0) // flags
message_end()
static flOrigin[3], PlayerPos[3], distance
pev(entity, pev_origin, originF);
new attacker = pev(entity, pev_owner)
flOrigin[0] = floatround(originF[0])
flOrigin[1] = floatround(originF[1])
flOrigin[2] = floatround(originF[2])
for (new i = 1; i <= g_MaxPlayers; i++)
{
if(is_user_alive(i))
{
if(!is_user_alive(i) || !zp_get_user_zombie(i))
continue
get_user_origin(i, PlayerPos)
distance = get_distance(PlayerPos, flOrigin)
if (distance <= get_pcvar_num(cvar_radius))
{
if(get_user_health(i) - get_pcvar_float(cvar_damage) > 0)
fakedamage(i, "Pipe Bomb", get_pcvar_float(cvar_damage), 256);
else
ExecuteHamB(Ham_Killed, i, attacker, 2)
static Float: originP[3]
pev(i, pev_origin, originP)
originP[0] = (originF[0] - flOrigin[0]) * 10.0
originP[1] = (originP[1] - flOrigin[1]) * 10.0
originP[2] = (originP[2] - flOrigin[2]) + 550.0 - float(distance)
set_pev(i, pev_velocity, originP)
}
}
}
remove_task(entity)
remove_entity(entity)
}
public light(const Float:originF[3]) // Blast ring and small red light around nade from zombie_plague40.sma. Great thx, MeRcyLeZZ!!! ;)
{
// Lighting
engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, originF, 0);
write_byte(TE_DLIGHT); // TE id
engfunc(EngFunc_WriteCoord, originF[0]); // x
engfunc(EngFunc_WriteCoord, originF[1]); // y
engfunc(EngFunc_WriteCoord, originF[2]); // z
write_byte(5); // radius
write_byte(128); // r
write_byte(0); // g
write_byte(0); // b
write_byte(51); //life
write_byte(0); //decay rate
message_end();
}