Код:
public wpn_secondaryattack(const iItem, const iPlayer, iClip)
{
new ent = find_ent_by_class(iItem, "pipe_grenade")
if (ent)
{
// Create explosion
CreateExplosion(ent)
// Remove ent
remove_entity(ent)
}
}
Код:
// Create explosion
public CreateExplosion(ent)
{
// Invalid entity
if (!pev_valid(ent))
return
// Get it's origin
new Float:origin[3];pev(ent, pev_origin, origin)
// Explosion
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte (TE_EXPLOSION) // TE ID
engfunc(EngFunc_WriteCoord, origin[0]) // Position X
engfunc(EngFunc_WriteCoord, origin[1]) // Y
engfunc(EngFunc_WriteCoord, origin[2] + 30.0) // Z
write_short(sExplo) // Sprite index
write_byte(30) // Scale
write_byte(15) // Framerate
write_byte(0) // Explosion Flag:None
message_end()
// Owner
new owner = entity_get_int(ent, EV_ENT_owner)
// Make a loop
for (new i = 1; i < g_maxplayers; i++)
{
// Classname
new szClassName[32]
entity_get_string(i, EV_SZ_classname, szClassName, 32)
// Player
if (equal(szClassName, "player"))
{
// Alive/Don't have godmode
if (is_user_alive(i) == 1 && get_user_godmode(i) == 0 )
{
// Get origina and distance
new Float:VictimOrigin[3], Float:distance_f, distance
pev(i, pev_origin, VictimOrigin)
distance_f = get_distance_f(origin, VictimOrigin)
distance = floatround(distance_f)
if (distance < 125.0)
{
// Fake damage
fakedamage(i, "grenade", 0.0, DMG_BLAST)
// Get health/dmg/damage ratio
new Float:dratio, damage
dratio = floatdiv(float(distance)))
damage = 85.0
new health = get_user_health(i)
// Make some knockback
new Float:knockback = 10.0
make_knockback(i, origin, knockback*damage)
if (health - damage >= 1)
{
// New health
set_user_health(i, health - damage)
// Create blood
//ShowSomeBlood(VictimOrigin)
}
else
{
// Log this
log_kill(owner, i, "grenade", 0)
}
}
}
// Remove ent
set_pev(ent, pev_flags, FL_KILLME)
}
}
}
}
stock log_kill(killer, victim, weapon[],headshot)
{
set_msg_block(get_user_msgid("DeathMsg"), BLOCK_SET)
ExecuteHamB(Ham_Killed, victim, killer, 2)
set_msg_block(get_user_msgid("DeathMsg"), BLOCK_NOT)
message_begin(MSG_ALL, get_user_msgid("DeathMsg"), {0,0,0}, 0)
write_byte(killer)
write_byte(victim)
write_byte(headshot)
write_string(weapon)
message_end()
new kname[32], vname[32], kauthid[32], vauthid[32], kteam[10], vteam[10]
get_user_name(killer, kname, 31)
get_user_team(killer, kteam, 9)
get_user_authid(killer, kauthid, 31)
get_user_name(victim, vname, 31)
get_user_team(victim, vteam, 9)
get_user_authid(victim, vauthid, 31)
log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"%s^"",
kname, get_user_userid(killer), kauthid, kteam,
vname, get_user_userid(victim), vauthid, vteam, weapon)
UpdateScore(killer, victim, 0,0, 1)
return PLUGIN_CONTINUE
}
stock UpdateScore(attacker, victim, frags, deaths, scoreboard)
{
set_pev(attacker, pev_frags, float(pev(attacker, pev_frags) + frags))
hl_set_user_deaths(victim, hl_get_user_deaths(victim) + deaths)
if (scoreboard)
{
message_begin(MSG_BROADCAST, g_msgScoreInfo)
write_byte(attacker) // id
write_short(pev(attacker, pev_frags)) // frags
write_short(hl_get_user_deaths(attacker)) // deaths
write_short(0) // class?
write_short(get_user_team(attacker)) // team
message_end()
message_begin(MSG_BROADCAST, g_msgScoreInfo)
write_byte(victim) // id
write_short(pev(victim, pev_frags)) // frags
write_short(hl_get_user_deaths(victim)) // deaths
write_short(0) // class?
write_short(get_user_team(victim)) // team
message_end()
}
}
stock make_knockback(victim, Float:origin[3], Float:maxspeed)
{
// Get and set velocity
new Float:fVelocity[3];
kickback(victim, origin, maxspeed, fVelocity)
entity_set_vector(victim, EV_VEC_velocity, fVelocity);
return (1);
}
stock kickback(ent, Float:fOrigin[3], Float:fSpeed, Float:fVelocity[3])
{
// Find origin
new Float:fEntOrigin[3];
entity_get_vector( ent, EV_VEC_origin, fEntOrigin );
// Do some calculations
new Float:fDistance[3];
fDistance[0] = fEntOrigin[0] - fOrigin[0];
fDistance[1] = fEntOrigin[1] - fOrigin[1];
fDistance[2] = fEntOrigin[2] - fOrigin[2];
new Float:fTime = (vector_distance( fEntOrigin,fOrigin ) / fSpeed);
fVelocity[0] = fDistance[0] / fTime;
fVelocity[1] = fDistance[1] / fTime;
fVelocity[2] = fDistance[2] / fTime;
return (fVelocity[0] && fVelocity[1] && fVelocity[2]);
}