Functie scadere armura la 0:
Code: Select all
public Infection_Explosion(Ent)
{
static Float:Origin[3]; pev(Ent, pev_origin, Origin)
static owner; owner = pev(Ent, pev_owner);
if (!is_user_zombie(owner))
return;
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, Origin, 0)
write_byte(TE_SPRITETRAIL)
engfunc(EngFunc_WriteCoord, Origin[0])
engfunc(EngFunc_WriteCoord, Origin[1])
engfunc(EngFunc_WriteCoord, Origin[2])
engfunc(EngFunc_WriteCoord, Origin[0])
engfunc(EngFunc_WriteCoord, Origin[1])
engfunc(EngFunc_WriteCoord, Origin[2] + 50)
write_short(g_Ball_SprIDinf) // (sprite index)
write_byte(25) // (count)
write_byte(random_num(2, 5)) // (life in 0.1's)
write_byte(5) // byte (scale in 0.1's)
write_byte(random_num(10, 50)) // (velocity along vector in 10's)
write_byte(5) // (randomness of velocity in 10's)
message_end()
static rgb[3];
rgb[0] = COLOR[0]
rgb[1] = COLOR[1]
rgb[2] = COLOR[2]
Effect_Ring(Origin, g_Exp_SprID, rgb, INFECT_RADIUS)
emit_sound(Ent, CHAN_BODY, SOUND_EXPLOSION, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
// Check Affect
static Float:Origin2[3]
for(new i = 1; i <= g_MaxPlayers; i++)
{
if(get_user_armor(i) > 0){
set_user_armor(i, 0)
continue
}
if(!is_alive(i)) continue
if(owner == i) continue
//if(_:cs_get_user_team(i) == Team) continue
if(entity_range(Ent, i) > INFECT_RADIUS) continue
if(is_user_zombie(i)) continue;
pev(i, pev_origin, Origin2)
if(is_wall_between_points(Origin, Origin2, 0)) continue;
infect_user(i, owner, 1);
}
}
Code: Select all
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fakemeta>
#include <cstrike>
#include <hamsandwich>
#include <fun>
#include <biohazard>
// original code by Dias (avalanche frost)
#define PLUGIN "[BIO] Nades"
#define VERSION "2.0"
#define AUTHOR "YONTU"
// ============================
// START INFECTION NADE
// ============================
#define MODEL_V "models/biohazard/v_grenade_infect.mdl"
#define MODEL_W_OLD_SM2 "models/w_flashbang.mdl"
#define MAXPLAYERS 32
#define CSW_INFECT_NADE CSW_FLASHBANG
#define weapon_infection "weapon_flashbang"
#define SOUND_EXPLOSION "biohazard_res/exp2.wav"
#define INFECT_RADIUS 200.0
#define IMPACT_EXPLOSION_INF 1
const INFECTION_NADE = 1111;
new const COLOR[3] = {77, 181, 25};
// ============================
// END INFECTION NADE
// ============================
// ============================
// START FROST NADE
// ============================
#define MODEL_W_OLD_SM "models/w_smokegrenade.mdl"
#define CSW_FROSTNOVA CSW_SMOKEGRENADE
#define weapon_frostnova "weapon_smokegrenade"
#define SOUND_EXPLOSION "biohazard_res/exp2.wav"
#define SOUND_HIT "biohazard_res/exp2.wav"
#define SOUND_RELEASE "warcraft3/impalelaunch1.wav"
#define IMPACT_EXPLOSION_FROST 0
#define FROST_RADIUS 200.0
#define FROST_HOLDTIME 2.0
#define TASK_HOLD 212015
const FROST_NADE = 2222;
new const NOVA_COLOR[3] = {0, 127, 255};
// ============================
// END FROST NADE
// ============================
const PEV_NADE_TYPE = pev_flTimeStepSound;
// ========================
// ARMURA
// ========================
new g_pArmor[MAXPLAYERS+1];
// MACROS
#define Get_BitVar(%1,%2) (%1 & (1 << (%2 & 31)))
#define Set_BitVar(%1,%2) %1 |= (1 << (%2 & 31))
#define UnSet_BitVar(%1,%2) %1 &= ~(1 << (%2 & 31))
enum
{
ANIM_IDLE = 0,
ANIM_PULLPIN,
ANIM_THROW,
ANIM_DRAW
}
new g_Trail_SprIDInf, g_Exp_SprID, g_Ball_SprIDinf
new g_Trail_SprIDfrost, g_Ball_SprIDfrost, g_Flame_SprID, g_GlassGib_SprID
new g_MaxPlayers, g_HamBot
new g_has_InfectionNade, g_Has_FrostNova, g_IsFrozen, Float:g_FrozenOrigin[33][3];
// Safety
new g_IsConnected, g_IsAlive;
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
Register_SafetyFunc()
register_event("DeathMsg", "Event_Death", "a")
register_forward(FM_SetModel, "fw_SetModel")
RegisterHam(Ham_Touch, "grenade", "fw_GrenadeTouch")
RegisterHam(Ham_Think, "grenade", "fw_GrenadeThink")
RegisterHam(Ham_Item_Deploy, weapon_infection, "fw_Item_Deploy_PostInf", 1)
RegisterHam(Ham_Item_Deploy, weapon_frostnova, "fw_Item_Deploy_PostFrs", 1)
g_MaxPlayers = get_maxplayers()
}
public plugin_precache()
{
precache_sound(SOUND_EXPLOSION)
precache_model(MODEL_V)
// Cache
g_Trail_SprIDInf = precache_model("sprites/smoke.spr")
g_Trail_SprIDfrost = precache_model("sprites/biohazard_res/trail_2.spr")
g_Exp_SprID = precache_model("sprites/shockwave.spr")
g_Ball_SprIDinf = precache_model("sprites/biohazard/Infection.spr")
g_Ball_SprIDfrost = precache_model("sprites/biohazard_res/snowflake_1.spr")
g_Flame_SprID = precache_model("sprites/biohazard_res/frostexp_2.spr")
g_GlassGib_SprID = precache_model("models/glassgibs.mdl")
}
public plugin_natives()
{
register_native("set_user_infection_nade", "_set_user_infection_nade")
}
public _set_user_infection_nade(iPlugin, iParams)
{
if(iParams != 1)
return PLUGIN_CONTINUE
new id = get_param(1)
if(!id || !is_user_zombie(id))
return PLUGIN_CONTINUE
Set_BitVar(g_has_InfectionNade, id)
give_item(id, weapon_infection)
if(get_user_weapon(id) == CSW_INFECT_NADE)
{
set_pev(id, pev_viewmodel2, MODEL_V)
Set_Player_NextAttack(id, 0.75)
Set_WeaponAnim(id, ANIM_DRAW)
}
return PLUGIN_HANDLED;
}
public client_putinserver(id)
{
Safety_Connected(id)
if(!g_HamBot && is_user_bot(id))
{
g_HamBot = 1
set_task(0.1, "Do_Register_HamBot", id)
}
}
public Do_Register_HamBot(id)
{
Register_SafetyFuncBot(id)
}
public client_disconnect(id)
{
Safety_Disconnected(id)
}
public Event_Death()
{
static Victim; Victim = read_data(2)
if(Get_BitVar(g_IsFrozen, Victim))
Release_Player(Victim+TASK_HOLD)
}
public fw_SetModel(Ent, const Model[])
{
static id; id = pev(Ent, pev_owner)
if(!is_user_connected(id)) return FMRES_IGNORED
static Float:DMGTime; pev(Ent, pev_dmgtime, DMGTime)
if(DMGTime == 0.0) return FMRES_IGNORED
if(equal(Model, MODEL_W_OLD_SM2) && Get_BitVar(g_has_InfectionNade, id))
{
set_rendering(Ent, kRenderFxGlowShell, COLOR[0], COLOR[1], COLOR[2], kRenderNormal, 16);
static rgb[3];
rgb[0] = COLOR[0]
rgb[1] = COLOR[1]
rgb[2] = COLOR[2]
Create_Trail(g_Trail_SprIDInf, Ent, 10, 10, rgb, 250)
UnSet_BitVar(g_has_InfectionNade, id)
set_pev(Ent, PEV_NADE_TYPE, INFECTION_NADE);
return FMRES_SUPERCEDE
}
if(equal(Model, MODEL_W_OLD_SM) && Get_BitVar(g_Has_FrostNova, id))
{
static Team; Team = _:cs_get_user_team(id)
set_pev(Ent, pev_team, Team)
// Glow
set_rendering(Ent, kRenderFxGlowShell, NOVA_COLOR[0], NOVA_COLOR[1], NOVA_COLOR[2], kRenderNormal, 16);
static rgb[3];
rgb[0] = NOVA_COLOR[0]
rgb[1] = NOVA_COLOR[1]
rgb[2] = NOVA_COLOR[2]
Create_Trail(g_Trail_SprIDfrost, Ent, 10, 10, rgb, 250)
// Remove
UnSet_BitVar(g_Has_FrostNova, id)
set_pev(Ent, PEV_NADE_TYPE, FROST_NADE);
return FMRES_SUPERCEDE
}
return FMRES_IGNORED
}
public fw_GrenadeTouch(Ent, Touched)
{
//if(!pev_valid(Ent) || pev(Ent, PEV_NADE_TYPE) != INFECTION_NADE)
// return HAM_IGNORED
if(!pev_valid(Ent))
return HAM_IGNORED;
switch (pev(Ent, PEV_NADE_TYPE))
{
case FROST_NADE:
{
static Impact; Impact = IMPACT_EXPLOSION_FROST
if(Impact) set_pev(Ent, pev_dmgtime, get_gametime())
}
case INFECTION_NADE:
{
static Impact; Impact = IMPACT_EXPLOSION_INF;
if(Impact) set_pev(Ent, pev_dmgtime, get_gametime())
}
}
return HAM_IGNORED
}
public fw_GrenadeThink(Ent)
{
//if(!pev_valid(Ent) || pev(Ent, PEV_NADE_TYPE) != INFECTION_NADE)
// return HAM_IGNORED
if(!pev_valid(Ent))
return HAM_IGNORED
static Float:DMGTime; pev(Ent, pev_dmgtime, DMGTime)
if(DMGTime > get_gametime())
return HAM_IGNORED
switch (pev(Ent, PEV_NADE_TYPE))
{
case FROST_NADE:
{
AvalancheFrost_Explosion(Ent)
engfunc(EngFunc_RemoveEntity, Ent)
return HAM_SUPERCEDE
}
case INFECTION_NADE:
{
Infection_Explosion(Ent)
engfunc(EngFunc_RemoveEntity, Ent)
return HAM_SUPERCEDE
}
}
return HAM_IGNORED
}
public fw_Item_Deploy_PostInf(Ent)
{
if(pev_valid(Ent) != 2)
return
static Id; Id = get_pdata_cbase(Ent, 41, 4)
if(get_pdata_cbase(Id, 373) != Ent)
return
if(!Get_BitVar(g_has_InfectionNade, Id))
return
Set_BitVar(g_has_InfectionNade, Id)
Set_WeaponAnim(Id, ANIM_DRAW)
set_pev(Id, pev_viewmodel2, MODEL_V)
}
public fw_Item_Deploy_PostFrs(Ent)
{
if(pev_valid(Ent) != 2)
return
static Id; Id = get_pdata_cbase(Ent, 41, 4)
if(get_pdata_cbase(Id, 373) != Ent)
return
Set_BitVar(g_Has_FrostNova, Id)
Set_WeaponAnim(Id, ANIM_DRAW)
}
public Infection_Explosion(Ent)
{
static Float:Origin[3]; pev(Ent, pev_origin, Origin)
static owner; owner = pev(Ent, pev_owner);
if (!is_user_zombie(owner))
return;
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, Origin, 0)
write_byte(TE_SPRITETRAIL)
engfunc(EngFunc_WriteCoord, Origin[0])
engfunc(EngFunc_WriteCoord, Origin[1])
engfunc(EngFunc_WriteCoord, Origin[2])
engfunc(EngFunc_WriteCoord, Origin[0])
engfunc(EngFunc_WriteCoord, Origin[1])
engfunc(EngFunc_WriteCoord, Origin[2] + 50)
write_short(g_Ball_SprIDinf) // (sprite index)
write_byte(25) // (count)
write_byte(random_num(2, 5)) // (life in 0.1's)
write_byte(5) // byte (scale in 0.1's)
write_byte(random_num(10, 50)) // (velocity along vector in 10's)
write_byte(5) // (randomness of velocity in 10's)
message_end()
static rgb[3];
rgb[0] = COLOR[0]
rgb[1] = COLOR[1]
rgb[2] = COLOR[2]
Effect_Ring(Origin, g_Exp_SprID, rgb, INFECT_RADIUS)
emit_sound(Ent, CHAN_BODY, SOUND_EXPLOSION, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
// Check Affect
static Float:Origin2[3]
for(new i = 1; i <= g_MaxPlayers; i++)
{
if(get_user_armor(i) > 0){
set_user_armor(i, 0)
continue
}
if(!is_alive(i)) continue
if(owner == i) continue
//if(_:cs_get_user_team(i) == Team) continue
if(entity_range(Ent, i) > INFECT_RADIUS) continue
if(is_user_zombie(i)) continue;
pev(i, pev_origin, Origin2)
if(is_wall_between_points(Origin, Origin2, 0)) continue;
infect_user(i, owner, 1);
}
}
public Effect_Ring(Float:Origin[3], SpriteID, RGB[3], Float:Radius)
{
// smallest ring
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, Origin, 0)
write_byte(TE_BEAMCYLINDER);
engfunc(EngFunc_WriteCoord, Origin[0])
engfunc(EngFunc_WriteCoord, Origin[1])
engfunc(EngFunc_WriteCoord, Origin[2])
engfunc(EngFunc_WriteCoord, Origin[0])
engfunc(EngFunc_WriteCoord, Origin[1])
engfunc(EngFunc_WriteCoord, Origin[2] + 200.0)
write_short(SpriteID); // sprite
write_byte(0); // start frame
write_byte(0); // framerate
write_byte(4); // life
write_byte(60); // width
write_byte(0); // noise
write_byte(RGB[0]); // red
write_byte(RGB[1]); // green
write_byte(RGB[2]); // blue
write_byte(250); // brightness
write_byte(0); // speed
message_end();
// medium ring
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, Origin, 0)
write_byte(TE_BEAMCYLINDER);
engfunc(EngFunc_WriteCoord, Origin[0])
engfunc(EngFunc_WriteCoord, Origin[1])
engfunc(EngFunc_WriteCoord, Origin[2])
engfunc(EngFunc_WriteCoord, Origin[0])
engfunc(EngFunc_WriteCoord, Origin[1])
engfunc(EngFunc_WriteCoord, Origin[2] + 450.0)
write_short(SpriteID); // sprite
write_byte(0); // start frame
write_byte(0); // framerate
write_byte(4); // life
write_byte(60); // width
write_byte(0); // noise
write_byte(RGB[0]); // red
write_byte(RGB[1]); // green
write_byte(RGB[2]); // blue
write_byte(200); // brightness
write_byte(0); // speed
message_end();
// largest ring
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, Origin, 0)
write_byte(TE_BEAMCYLINDER);
engfunc(EngFunc_WriteCoord, Origin[0])
engfunc(EngFunc_WriteCoord, Origin[1])
engfunc(EngFunc_WriteCoord, Origin[2])
engfunc(EngFunc_WriteCoord, Origin[0])
engfunc(EngFunc_WriteCoord, Origin[1])
engfunc(EngFunc_WriteCoord, Origin[2] + 700.0)
write_short(SpriteID); // sprite
write_byte(0); // start frame
write_byte(0); // framerate
write_byte(4); // life
write_byte(60); // width
write_byte(0); // noise
write_byte(RGB[0]); // red
write_byte(RGB[1]); // green
write_byte(RGB[2]); // blue
write_byte(150); // brightness
write_byte(0); // speed
message_end();
// light effect
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, Origin, 0)
write_byte(TE_DLIGHT);
engfunc(EngFunc_WriteCoord, Origin[0])
engfunc(EngFunc_WriteCoord, Origin[1])
engfunc(EngFunc_WriteCoord, Origin[2])
write_byte(floatround(Radius/5.0)); // radius
write_byte(RGB[0]); // r
write_byte(RGB[1]); // g
write_byte(RGB[2]); // b
write_byte(8); // life
write_byte(60); // decay rate
message_end();
}
public Create_Trail(sprite, Ent, Life, Width, RGB[3], Brightness)
{
Clear_Trail(Ent)
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_BEAMFOLLOW)
write_short(Ent)
write_short(sprite); // sprite
write_byte(Life); // life
write_byte(Width); // width
write_byte(RGB[0]); // red
write_byte(RGB[1]); // green
write_byte(RGB[2]); // blue
write_byte(Brightness); // brightness
message_end();
}
public Clear_Trail(Ent)
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_KILLBEAM)
write_short(Ent)
message_end()
}
public AvalancheFrost_Explosion(Ent)
{
static Team; Team = pev(Ent, pev_team)
static Float:Origin[3]; pev(Ent, pev_origin, Origin)
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, Origin, 0)
write_byte(TE_EXPLOSION)
engfunc(EngFunc_WriteCoord, Origin[0])
engfunc(EngFunc_WriteCoord, Origin[1])
engfunc(EngFunc_WriteCoord, Origin[2])
write_short(g_Flame_SprID) // sprite index
write_byte(15) // scale in 0.1's
write_byte(20) // framerate
write_byte(TE_EXPLFLAG_NODLIGHTS | TE_EXPLFLAG_NOSOUND) // flags
message_end()
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, Origin, 0)
write_byte(TE_SPRITETRAIL)
engfunc(EngFunc_WriteCoord, Origin[0])
engfunc(EngFunc_WriteCoord, Origin[1])
engfunc(EngFunc_WriteCoord, Origin[2])
engfunc(EngFunc_WriteCoord, Origin[0])
engfunc(EngFunc_WriteCoord, Origin[1])
engfunc(EngFunc_WriteCoord, Origin[2] + 50)
write_short(g_Ball_SprIDfrost) // (sprite index)
write_byte(25) // (count)
write_byte(random_num(2, 5)) // (life in 0.1's)
write_byte(5) // byte (scale in 0.1's)
write_byte(random_num(10, 50)) // (velocity along vector in 10's)
write_byte(5) // (randomness of velocity in 10's)
message_end()
static rgb[3];
rgb[0] = NOVA_COLOR[0]
rgb[1] = NOVA_COLOR[1]
rgb[2] = NOVA_COLOR[2]
Effect_Ring(Origin, g_Exp_SprID, rgb, FROST_RADIUS)
emit_sound(Ent, CHAN_BODY, SOUND_EXPLOSION, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
// Check Affect
static Float:Origin2[3]
for(new i = 1; i <= g_MaxPlayers; i++)
{
if(!is_alive(i)) continue
if(pev(Ent, pev_owner) == i) continue
if(_:cs_get_user_team(i) == Team) continue
if(entity_range(Ent, i) > FROST_RADIUS) continue
if(!is_user_zombie(i)) continue;
pev(i, pev_origin, Origin2)
if(is_wall_between_points(Origin, Origin2, 0)) continue
emit_sound(i, CHAN_ITEM, SOUND_HIT, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
Freeze_Player(i)
}
}
public Freeze_Player(id)
{
if(Get_BitVar(g_IsFrozen, id))
{
// Hold Time
remove_task(id+TASK_HOLD)
set_task(FROST_HOLDTIME + random_float(-0.5, 1.0), "Release_Player", id+TASK_HOLD)
return
}
// Stop
set_pev(id, pev_velocity, Float:{0.0,0.0,0.0})
set_pev(id, pev_maxspeed, 1.0);
pev(id, pev_origin, g_FrozenOrigin[id])
Set_BitVar(g_IsFrozen, id)
// Effect
set_user_rendering(id, kRenderFxGlowShell, NOVA_COLOR[0], NOVA_COLOR[1], NOVA_COLOR[2], kRenderTransTexture, 1);
// Hold Time
remove_task(id+TASK_HOLD)
set_task(FROST_HOLDTIME + random_float(-0.5, 1.0), "Release_Player", id+TASK_HOLD)
}
public Release_Player(id)
{
id -= TASK_HOLD
if(!is_connected(id))
return
UnSet_BitVar(g_IsFrozen, id)
set_user_rendering( id, kRenderFxNone, 0, 0, 0, kRenderTransTexture, 1 );
set_pev(id, pev_maxspeed, get_class_data(id, DATA_SPEED));
//set_user_rendering(id)
// Effect
static Float:Origin[3]; pev(id, pev_origin, Origin)
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, Origin, 0)
write_byte(TE_IMPLOSION);
engfunc(EngFunc_WriteCoord, Origin[0])
engfunc(EngFunc_WriteCoord, Origin[1])
engfunc(EngFunc_WriteCoord, Origin[2] + 8.0)
write_byte(64)
write_byte(10)
write_byte(3)
message_end()
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, Origin, 0)
write_byte(TE_SPARKS);
engfunc(EngFunc_WriteCoord, Origin[0])
engfunc(EngFunc_WriteCoord, Origin[1])
engfunc(EngFunc_WriteCoord, Origin[2])
message_end();
// add the shatter
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, Origin, 0)
write_byte(TE_BREAKMODEL);
engfunc(EngFunc_WriteCoord, Origin[0])
engfunc(EngFunc_WriteCoord, Origin[1])
engfunc(EngFunc_WriteCoord, Origin[2] + 24.0)
engfunc(EngFunc_WriteCoord, 16.0)
engfunc(EngFunc_WriteCoord, 16.0)
engfunc(EngFunc_WriteCoord, 16.0)
write_coord(random_num(-50,50)); // velocity x
write_coord(random_num(-50,50)); // velocity y
engfunc(EngFunc_WriteCoord, 25.0)
write_byte(10); // random velocity
write_short(g_GlassGib_SprID); // model
write_byte(25); // count
write_byte(25); // life
write_byte(0x01/*BREAK_GLASS*/); // flags
message_end();
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, Origin, 0)
write_byte(TE_BEAMCYLINDER);
engfunc(EngFunc_WriteCoord, Origin[0])
engfunc(EngFunc_WriteCoord, Origin[1])
engfunc(EngFunc_WriteCoord, Origin[2])
engfunc(EngFunc_WriteCoord, Origin[0])
engfunc(EngFunc_WriteCoord, Origin[1])
engfunc(EngFunc_WriteCoord, Origin[2] + 100.0)
write_short(g_Exp_SprID); // sprite
write_byte(0); // start frame
write_byte(0); // framerate
write_byte(4); // life
write_byte(30); // width
write_byte(0); // noise
write_byte(NOVA_COLOR[0]); // red
write_byte(NOVA_COLOR[1]); // green
write_byte(NOVA_COLOR[2]); // blue
write_byte(250); // brightness
write_byte(0); // speed
message_end();
// Sound
emit_sound(id, CHAN_ITEM, SOUND_RELEASE, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
// Remove Effect
//if(pev_valid(g_MyNova[id])) set_pev(g_MyNova[id], pev_flags, pev(g_MyNova[id], pev_flags) | FL_KILLME)
}
public client_PreThink(id)
{
if(!is_alive(id))
return
if(!Get_BitVar(g_IsFrozen, id))
return
static Float:Origin[3]; pev(id, pev_origin, Origin)
if(get_distance_f(Origin, g_FrozenOrigin[id]) > 8.0)
HookEnt(id, g_FrozenOrigin[id], 50.0)
}
stock HookEnt(Ent, Float:VicOrigin[3], Float:Speed)
{
static Float:fl_Velocity[3], Float:EntOrigin[3], Float:distance_f, Float:fl_Time
pev(Ent, pev_origin, EntOrigin)
distance_f = get_distance_f(EntOrigin, VicOrigin)
fl_Time = distance_f / Speed
fl_Velocity[0] = (VicOrigin[0] - EntOrigin[0]) / fl_Time
fl_Velocity[1] = (VicOrigin[1] - EntOrigin[1]) / fl_Time
fl_Velocity[2] = (VicOrigin[2] - EntOrigin[2]) / fl_Time
set_pev(Ent, pev_velocity, fl_Velocity)
}
stock Set_Player_NextAttack(id, Float:NextTime) set_pdata_float(id, 83, NextTime, 5)
stock Set_WeaponAnim(id, anim)
{
set_pev(id, pev_weaponanim, anim)
message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, {0, 0, 0}, id)
write_byte(anim)
write_byte(pev(id, pev_body))
message_end()
}
stock is_wall_between_points(Float:start[3], Float:end[3], ignore_ent)
{
static pentru
pentru = create_tr2()
engfunc(EngFunc_TraceLine, start, end, IGNORE_MONSTERS, ignore_ent, pentru)
static Float:EndPos[3]
get_tr2(pentru, TR_vecEndPos, EndPos)
free_tr2(pentru)
return floatround(get_distance_f(end, EndPos))
}
/* ===============================
------------- SAFETY -------------
=================================*/
public Register_SafetyFunc()
{
RegisterHam(Ham_Spawn, "player", "fw_Safety_Spawn_Post", 1)
RegisterHam(Ham_Killed, "player", "fw_Safety_Killed_Post", 1)
}
public Register_SafetyFuncBot(id)
{
RegisterHamFromEntity(Ham_Spawn, id, "fw_Safety_Spawn_Post", 1)
RegisterHamFromEntity(Ham_Killed, id, "fw_Safety_Killed_Post", 1)
}
public Safety_Connected(id)
{
Set_BitVar(g_IsConnected, id)
UnSet_BitVar(g_IsAlive, id)
}
public Safety_Disconnected(id)
{
UnSet_BitVar(g_IsConnected, id)
UnSet_BitVar(g_IsAlive, id)
}
public fw_Safety_Spawn_Post(id)
{
if(!is_user_alive(id))
return
Set_BitVar(g_IsAlive, id)
}
public fw_Safety_Killed_Post(id)
{
UnSet_BitVar(g_IsAlive, id)
}