Skocz do zawartości

Nowy szablon forum

mygo.pl

Stworzyliśmy dla Was nowy wygląd forum. Z pewnością znajdziesz rzeczy, które wg Ciebie mogą zostać zmienione - wspomnij o tym w specjalnym wątku.

Czytaj więcej

Jak założyć własną sieć

serwerów CS

Zastanawiasz się nad prowadzeniem własnej sieci serwerów? Przeczytaj podstawowe informacje, na które należy zwrócić uwagę, przy takim projekcie.

Czytaj więcej

Tworzymy spis sieci

dodaj swoją

Dodaj sieć do której należysz, pozwoli to na promocję i budowę ogólnopolskiej bazy sieci CS.

Czytaj więcej

RSS[HELP] Frostnade making zombie move slower after freeze


MYGO.pl
 Udostępnij

Rekomendowane odpowiedzi

  • RSSy
Hello guys! I use zombie swarm mode and frostnade plugin, when I use frost grenade on the zombie in zombie swarm, after the freeze/chill the zombie walks slower than his original speed.
Zombie is set on speed "320" walks very fast can catch up to normal human, but frost grenade after use makes zombie permanently slower for the rest of the round.
I need zombie to stay at fast speed after being frozen. This bug don't happen to napalm(fire) grenade, only happens for frost grenade.

I tried to make chill speed = 0, min max chance for chill = 0. It didn't work

frostnade sma

PHP Code:

#include <amxmodx>

#include <cstrike>

#include <fakemeta>

#include <fun>

#include <hamsandwich>



new const VERSION[] = "2.14";



#define message_begin_fl(%1,%2,%3,%4) engfunc(EngFunc_MessageBegin, %1, %2, %3, %4)

#define write_coord_fl(%1) engfunc(EngFunc_WriteCoord, %1)



#define m_pPlayer            41

#define m_pActiveItem        373

#define m_flFlashedUntil    514

#define m_flFlashHoldTime    517

#define OFFSET_WEAPON_CSWID    43

#define Ham_Player_ResetMaxSpeed Ham_Item_PreFrame



#define MAX_WEAPONS        32

#define AMMO_FLASHBANG        11

#define AMMO_HEGRENADE        12

#define AMMO_SMOKEGRENADE    13

#define DMG_GRENADE        (1<<24) // thanks arkshine

#define FFADE_IN            0x0000 // just here so we don't pass 0 into the function

#define BREAK_GLASS        0x01

#define STATUS_HIDE        0

#define STATUS_SHOW        1

#define STATUS_FLASH        2



#define GLOW_AMOUNT        1.0

#define FROST_RADIUS        240.0



#define NT_FLASHBANG        (1<<0) // 1; CSW:25

#define NT_HEGRENADE        (1<<1) // 2; CSW:4

#define NT_SMOKEGRENADE        (1<<2) // 4; CSW:9



new const GRENADE_NAMES[][] = {

    
"weapon_hegrenade",

    
"weapon_flashbang",

    
"weapon_smokegrenade"

};



#define ICON_HASNADE        1

#define ICON_ISCHILLED        2



#define TASK_REMOVE_CHILL    100

#define TASK_REMOVE_FREEZE    200



new const MODEL_FROZEN[]    = "models/pi_shrub.mdl";

new const 
MODEL_GLASSGIBS[]    = "models/glassgibs.mdl";



new const 
SOUND_EXPLODE[]    = "frostnade/frostnova.wav";

new const 
SOUND_FROZEN[]    = "debris/glass1.wav";

new const 
SOUND_UNFROZEN[]    = "debris/glass3.wav";

new const 
SOUND_CHILLED[]    = "player/pl_duct2.wav";

new const 
SOUND_PICKUP[]    = "items/gunpickup2.wav";



new const 
SPRITE_TRAIL[]    = "sprites/laserbeam.spr";

new const 
SPRITE_SMOKE[]    = "sprites/steam1.spr";

new const 
SPRITE_EXPLO[]    = "sprites/shockwave.spr";



new 
pcv_enabledpcv_overridepcv_nadetypespcv_teamspcv_pricepcv_limitpcv_buyzonepcv_colorpcv_icon,

        
pcv_by_radiuspcv_hitselfpcv_lospcv_maxdamagepcv_mindamagepcv_chill_maxchancepcv_chill_minchance,

        
pcv_chill_durationpcv_chill_variancepcv_chill_speedpcv_freeze_maxchancepcv_freeze_minchance,

        
pcv_freeze_durationpcv_freeze_variance;



new 
maxPlayersgmsgScreenFadegmsgStatusIcongmsgBlinkAcctgmsgAmmoPickupgmsgTextMsg,

        
gmsgWeapPickupglassGibstrailSprsmokeSprexploSprmp_friendlyfireczerobot_quotaczBotHamsfmFwdPPT,

        
fnFwdPlayerChilledfnFwdPlayerFrozenbool:roundRestarting;



new 
isChilled[33], isFrozen[33], frostKilled[33], novaDisplay[33], Float:glowColor[33][3], Float:oldGravity[33], oldRenderFx[33],

        
Float:oldRenderColor[33][3], oldRenderMode[33], Float:oldRenderAmt[33], hasFrostNade[33], nadesBought[33];



public 
plugin_init()

{

    
register_plugin("FrostNades",VERSION,"Avalanche");

    
register_cvar("fn_version",VERSION,FCVAR_SERVER);



    
pcv_enabled register_cvar("fn_enabled","1");

    
pcv_override register_cvar("fn_override","1");

    
pcv_nadetypes register_cvar("fn_nadetypes","1"); // NT_SMOKEGRENADE

    
pcv_teams register_cvar("fn_teams","2");

    
pcv_price register_cvar("fn_price","300");

    
pcv_icon register_cvar("fn_icon","1");

    
pcv_limit register_cvar("fn_limit","2");

    
pcv_buyzone register_cvar("fn_buyzone","0");

    
pcv_color register_cvar("fn_color","0 206 209");



    
pcv_by_radius register_cvar("fn_by_radius","0.0");

    
pcv_hitself register_cvar("fn_hitself","0");

    
pcv_los register_cvar("fn_los","1");

    
pcv_maxdamage register_cvar("fn_maxdamage","20.0");

    
pcv_mindamage register_cvar("fn_mindamage","1.0");

    
pcv_chill_maxchance register_cvar("fn_chill_maxchance","0");

    
pcv_chill_minchance register_cvar("fn_chill_minchance","0");

    
pcv_chill_duration register_cvar("fn_chill_duration","0");

    
pcv_chill_variance register_cvar("fn_chill_variance","0");

    
pcv_chill_speed register_cvar("fn_chill_speed","0");

    
pcv_freeze_maxchance register_cvar("fn_freeze_maxchance","110.0");

    
pcv_freeze_minchance register_cvar("fn_freeze_minchance","40.0");

    
pcv_freeze_duration register_cvar("fn_freeze_duration","4.0");

    
pcv_freeze_variance register_cvar("fn_freeze_variance","0.5");

    

    
mp_friendlyfire get_cvar_pointer("mp_friendlyfire");

    

    new 
mod[6];

    
get_modname(mod,5);

    if(
equal(mod,"czero"))

    {

        
czero 1;

        
bot_quota get_cvar_pointer("bot_quota");

    }

    

    
maxPlayers get_maxplayers();

    
gmsgScreenFade get_user_msgid("ScreenFade");

    
gmsgStatusIcon get_user_msgid("StatusIcon");

    
gmsgBlinkAcct get_user_msgid("BlinkAcct");

    
gmsgAmmoPickup get_user_msgid("AmmoPickup");

    
gmsgWeapPickup get_user_msgid("WeapPickup");

    
gmsgTextMsg get_user_msgid("TextMsg");



    
register_forward(FM_SetModel,"fw_setmodel",1);

    
register_message(get_user_msgid("DeathMsg"),"msg_deathmsg");

    

    
register_event("ResetHUD""event_resethud""b");

    
register_event("TextMsg""event_round_restart""a""2=#Game_Commencing""2=#Game_will_restart_in");

    
register_event("HLTV""event_new_round""a""1=0""2=0");



    
RegisterHam(Ham_Spawn,"player","ham_player_spawn",1);

    
RegisterHam(Ham_Killed,"player","ham_player_killed",1);

    
RegisterHam(Ham_Player_ResetMaxSpeed,"player","ham_player_resetmaxspeed",0);

    
RegisterHam(Ham_Think,"grenade","ham_grenade_think",0);

    
RegisterHam(Ham_Use"player_weaponstrip""ham_player_weaponstrip_use"1);

    

    for(new 
i=0i<sizeof GRENADE_NAMESi++)

    {

        
RegisterHam(Ham_Item_DeployGRENADE_NAMES[i], "ham_grenade_deploy"1);

        
RegisterHam(Ham_Item_HolsterGRENADE_NAMES[i], "ham_grenade_holster"1);

        
RegisterHam(Ham_Item_AddToPlayerGRENADE_NAMES[i], "ham_grenade_addtoplayer"1);

        
RegisterHam(Ham_Item_AddDuplicateGRENADE_NAMES[i], "ham_grenade_addduplicate"1);

    }

    

    
register_clcmd("say /fn","buy_frostnade");

    
register_clcmd("say_team /fn","buy_frostnade");

    
register_clcmd("say /frostnade","buy_frostnade");

    
register_clcmd("say_team /frostnade","buy_frostnade");

    

    
fnFwdPlayerChilled CreateMultiForward("frostnades_player_chilled"ET_STOPFP_CELLFP_CELL);

    
fnFwdPlayerFrozen  CreateMultiForward("frostnades_player_frozen",  ET_STOPFP_CELLFP_CELL);

}



public 
plugin_end()

{

    
DestroyForward(fnFwdPlayerChilled);

    
DestroyForward(fnFwdPlayerFrozen);

}



public 
plugin_precache()

{

    
precache_model(MODEL_FROZEN);

    
glassGibs precache_model(MODEL_GLASSGIBS);



    
precache_sound(SOUND_EXPLODE); // grenade explodes

    
precache_sound(SOUND_FROZEN); // player is frozen

    
precache_sound(SOUND_UNFROZEN); // frozen wears off

    
precache_sound(SOUND_CHILLED); // player is chilled

    
precache_sound(SOUND_PICKUP); // player buys frostnade



    
trailSpr precache_model(SPRITE_TRAIL);

    
smokeSpr precache_model(SPRITE_SMOKE);

    
exploSpr precache_model(SPRITE_EXPLO);

}



public 
client_putinserver(id)

{

    
isChilled[id] = 0;

    
isFrozen[id] = 0;

    
frostKilled[id] = 0;

    
novaDisplay[id] = 0;

    
hasFrostNade[id] = 0;

    

    if(
czero && !czBotHams && is_user_bot(id) && get_pcvar_num(bot_quota) > 0)

        
set_task(0.1,"czbot_hook_ham",id);

}



public 
client_disconnect(id)

{

    if(
isChilled[id]) task_remove_chill(TASK_REMOVE_CHILL+id);

    if(
isFrozen[id]) task_remove_freeze(TASK_REMOVE_FREEZE+id);

}



// registering a ham hook for "player" won't register it for CZ bots,

// for some reason. so we have to register it by entity. 

public czbot_hook_ham(id)

{

    if(!
czBotHams && is_user_connected(id) && is_user_bot(id) && get_pcvar_num(bot_quota) > 0)

    {

        
RegisterHamFromEntity(Ham_Spawn,id,"ham_player_spawn",1);

        
RegisterHamFromEntity(Ham_Killed,id,"ham_player_killed",1);

        
RegisterHamFromEntity(Ham_Player_ResetMaxSpeed,id,"ham_player_resetmaxspeed",1);

        
czBotHams 1;

    }

}



// intercept server log messages to replace grenade kills with frostgrenade kills

public plugin_log()

{

    static 
arg[512];

    

    if(
get_pcvar_num(pcv_enabled) && read_logargc() >= 5)

    {

        
read_logargv(1arg7); // "killed"

        

        
if(equal(arg"killed"))

        {

            
read_logargv(2arg127); // info of player that was killed

            

            // get ID of player that was killed

            
new dummy[1], killedUserId;

            
parse_loguser(argdummy0killedUserId);

            new 
killedId find_player("k"killedUserId);

            

            if(
killedId && frostKilled[killedId])

            {    

                
// override with frostgrenade message

                
read_logdata(arg511);

                
replace(arg511"with ^"grenade^"""with ^"frostgrenade^"");                

                
log_message("%s"arg);



                return 
PLUGIN_HANDLED;

            }

        }

    }

    

    return 
PLUGIN_CONTINUE;

}



/****************************************

* PRIMARY FUNCTIONS AND SUCH

****************************************/



public buy_frostnade(id)

{

    if(!
get_pcvar_num(pcv_enabled) || get_pcvar_num(pcv_override))

        return 
PLUGIN_CONTINUE;



    if(!
is_user_alive(id)) return PLUGIN_HANDLED;



    if(
get_pcvar_num(pcv_buyzone) && !cs_get_user_buyzone(id))

    {

        
// #Cstrike_NotInBuyZone won't work for some reason

        
client_print(id,print_center,"You are not in a buy zone.");



        return 
PLUGIN_HANDLED;

    }



    if(!(
get_pcvar_num(pcv_teams) & _:cs_get_user_team(id)))

    {

        
// have to do it this way to format

        
message_begin(MSG_ONE,gmsgTextMsg,_,id);

        
write_byte(print_center);

        
write_string("#Alias_Not_Avail");

        
write_string("Frost Grenade");

        
message_end();



        return 
PLUGIN_HANDLED;

    }



    if(
hasFrostNade[id])

    {

        
client_print(id,print_center,"#Cstrike_Already_Own_Weapon");

        return 
PLUGIN_HANDLED;

    }

    

    new 
limit get_pcvar_num(pcv_limit);

    if(
limit && nadesBought[id] >= limit)

    {

        
client_print(id,print_center,"#Cstrike_TitlesTXT_Cannot_Carry_Anymore");

        return 
PLUGIN_HANDLED;

    }

    

    new 
money cs_get_user_money(id), price get_pcvar_num(pcv_price);



    
// need more vespene gas

    
if(money price)

    {

        
client_print(id,print_center,"#Cstrike_TitlesTXT_Not_Enough_Money");

        

        
message_begin(MSG_ONE_UNRELIABLE,gmsgBlinkAcct,_,id);

        
write_byte(2);

        
message_end();



        return 
PLUGIN_HANDLED;

    }

    

    
// try to use smokegrenade, then flashbang, then hegrenade

    
new wpnid CSW_SMOKEGRENADEammoid AMMO_SMOKEGRENADEwpnName[20] = "weapon_smokegrenade"type get_pcvar_num(pcv_nadetypes);

    if(!(
type NT_SMOKEGRENADE))

    {

        if(
type NT_FLASHBANG)

        {

            
wpnid CSW_FLASHBANG;

            
ammoid AMMO_FLASHBANG;

            
wpnName "weapon_flashbang";

        }

        else if(
type NT_HEGRENADE)

        {

            
wpnid CSW_HEGRENADE;

            
ammoid AMMO_HEGRENADE;

            
wpnName "weapon_hegrenade";

        }

    }

    

    
hasFrostNade[id] = wpnid;

    
nadesBought[id]++;

    
cs_set_user_money(id,money price);



    new 
ammo cs_get_user_bpammo(id,wpnid);



    
// give him one

    
if(!ammogive_item(id,wpnName);

    else

    {

        
cs_set_user_bpammo(id,wpnid,ammo+1);

        

        
// just so the player can see what kind it is on his HUD



        
message_begin(MSG_ONE,gmsgAmmoPickup,_,id);

        
write_byte(ammoid);

        
write_byte(ammo+1);

        
message_end();



        
message_begin(MSG_ONE,gmsgWeapPickup,_,id);

        
write_byte(wpnid);

        
message_end();

        

        
// won't play via cs_set_user_bpammo

        
engfunc(EngFunc_EmitSound,id,CHAN_ITEM,SOUND_PICKUP,VOL_NORM,ATTN_NORM,0,PITCH_NORM);

        

        
// for icon management

        
grenade_added(idwpnid);

    }

    

    return 
PLUGIN_HANDLED;

}



// entity is given a model (used to detect for thrown grenades)

public fw_setmodel(ent,model[])

{

    if(!
get_pcvar_num(pcv_enabled)) return FMRES_IGNORED;



    new 
owner pev(ent,pev_owner);

    if(!
is_user_connected(owner)) return FMRES_IGNORED;

    

    
// this isn't going to explode

    
new Float:dmgtime;

    
pev(ent,pev_dmgtime,dmgtime);

    if(
dmgtime == 0.0) return FMRES_IGNORED;

    

    new 
typecsw;

    if(
model[7] == 'w' && model[8] == '_')

    {

        switch(
model[9])

        {

            case 
'h': { type NT_HEGRENADEcsw CSW_HEGRENADE; }

            case 
'f': { type NT_FLASHBANGcsw CSW_FLASHBANG; }

            case 
's': { type NT_SMOKEGRENADEcsw CSW_SMOKEGRENADE; }

        }

    }

    if(!
type) return FMRES_IGNORED;

    

    new 
team _:cs_get_user_team(owner);



    
// have a frostnade (override off) ;OR; override enabled, on valid team, using valid frostnade type

    
if(hasFrostNade[owner] == csw || (get_pcvar_num(pcv_override)

            && (
get_pcvar_num(pcv_teams) & team) && (get_pcvar_num(pcv_nadetypes) & type)))

    {

        
// not using override

        
if(hasFrostNade[owner] == csw)

        {

            
hasFrostNade[owner] = 0;

            if(
get_pcvar_num(pcv_icon) == ICON_HASNADE)

            {

                
show_icon(ownerSTATUS_HIDE);

            }

        }



        
set_pev(ent,pev_team,team);

        
set_pev(ent,pev_bInDuck,1); // flag it as a frostnade



        
new rgb[3], Float:rgbF[3];

        
get_rgb_colors(team,rgb);

        
IVecFVec(rgbrgbF);

        

        
// glowshell

        
set_pev(ent,pev_rendermode,kRenderNormal);

        
set_pev(ent,pev_renderfx,kRenderFxGlowShell);

        
set_pev(ent,pev_rendercolor,rgbF);

        
set_pev(ent,pev_renderamt,16.0);



        
set_beamfollow(ent,10,10,rgb,100);

    }



    return 
FMRES_IGNORED;

}



// freeze a player in place whilst he's frozen

public fw_playerprethink(id)

{

    
/*if(isChilled[id])

    {

        // remember rendering changes

        new fx = pev(id,pev_renderfx), Float:color[3], mode = pev(id,pev_rendermode), Float:amount;

        pev(id,pev_rendercolor,color);

        pev(id,pev_renderamt,amount);



        if(fx != kRenderFxGlowShell)

        {

            oldRenderFx[id] = fx;

            set_pev(id,pev_renderfx,kRenderFxGlowShell);

        }

        if(color[0] != glowColor[id][0] || color[1] != glowColor[id][1] || color[2] != glowColor[id][2])

        {

            oldRenderColor[id] = color;

            set_pev(id,pev_rendercolor,glowColor[id]);

        }

        if(mode != kRenderNormal)

        {

            oldRenderMode[id] = mode;

            set_pev(id,pev_rendermode,kRenderNormal);

        }

        if(amount != GLOW_AMOUNT)

        {

            oldRenderAmt[id] = amount;

            set_pev(id,pev_renderamt,GLOW_AMOUNT);

        }

    }*/



    
if(isFrozen[id])

    {

        
set_pev(id,pev_velocity,Float:{0.0,0.0,0.0}); // stop motion

        

        
new Float:gravity;

        
pev(id,pev_gravity,gravity);

        

        
// remember any gravity changes

        
if(gravity != 0.000000001 && gravity != 999999999.9)

            
oldGravity[id] = gravity;



        
// if are on the ground and about to jump, set the gravity too high to really do so

        
if((pev(id,pev_button) & IN_JUMP) && !(pev(id,pev_oldbuttons) & IN_JUMP) && (pev(id,pev_flags) & FL_ONGROUND))

            
set_pev(id,pev_gravity,999999999.9);



        
// otherwise, set the gravity so low that they don't fall

        
else set_pev(id,pev_gravity,0.000000001);

    }

    

    return 
FMRES_IGNORED;

}



// override grenade kill message with skull and crossbones

public msg_deathmsg(msg_id,msg_dest,msg_entity)

{

    new 
victim get_msg_arg_int(2);

    if(!
is_user_connected(victim) || !frostKilled[victim]) return PLUGIN_CONTINUE;



    static 
weapon[8];

    
get_msg_arg_string(4,weapon,7);

    if(
equal(weapon,"grenade")) set_msg_arg_string(4,"frostgrenade");



    
//frostKilled[victim] = 0;

    
return PLUGIN_CONTINUE;

}



// catch HUD reset to re-display icon if necessary

public event_resethud(id)

{

    if(!
is_user_alive(id) || !get_pcvar_num(pcv_enabled)) return;



    if(
get_pcvar_num(pcv_icon) == ICON_HASNADE)

    {

        new 
status player_has_frostnade(id);

        
show_icon(idstatus);

    }



    return;

}



// round is restarting (TAG: sv_restartround)

public event_round_restart()

{

    
// just remember for event_new_round

    
roundRestarting true;

}



// start of a new round

public event_new_round()

{

    if(
roundRestarting)

    {

        
roundRestarting false;

        

        
// clear frost grenades from all players (for override mode)

        
for(new i=1;i<=maxPlayers;i++)

        {

            
hasFrostNade[i] = 0;

        }

    }

}



// rezzed

public ham_player_spawn(id)

{

    
nadesBought[id] = 0;

    

    if(
is_user_alive(id))

    {

        if(
isChilled[id]) task_remove_chill(TASK_REMOVE_CHILL+id);

        if(
isFrozen[id]) task_remove_freeze(TASK_REMOVE_FREEZE+id);

    }

    

    return 
HAM_IGNORED;

}



// killed to death

public ham_player_killed(id)

{

    
hasFrostNade[id] = 0;



    if(
get_pcvar_num(pcv_enabled) && get_pcvar_num(pcv_icon) == ICON_HASNADE)

    {

        
show_icon(idSTATUS_HIDE);

    }



    if(
isChilled[id]) task_remove_chill(TASK_REMOVE_CHILL+id);

    if(
isFrozen[id]) task_remove_freeze(TASK_REMOVE_FREEZE+id);

    

    return 
HAM_IGNORED;

}



// movement speed is changed

public ham_player_resetmaxspeed(id)

{

    if(
get_pcvar_num(pcv_enabled))

    {

        
set_user_chillfreeze_speed(id);

    }



    return 
HAM_IGNORED;

}



// grenade is ticking away

public ham_grenade_think(ent)

{

    
// not a frostnade

    
if(!pev_valid(ent) || !pev(ent,pev_bInDuck)) return HAM_IGNORED;

    

    new 
Float:dmgtime;

    
pev(ent,pev_dmgtime,dmgtime);

    if(
dmgtime get_gametime()) return HAM_IGNORED;

    

    
// and boom goes the dynamite

    
frostnade_explode(ent);



    return 
HAM_SUPERCEDE;

}



// a player_weaponstrip is used

public ham_player_weaponstrip_use(entidcalleridactivatoruse_typeFloat:value)

{

    if(
idcaller >= && idcaller <= maxPlayers)

    {

        
// clear frostnade when using override

        
hasFrostNade[idcaller] = 0;



        if(
is_user_alive(idcaller) && get_pcvar_num(pcv_enabled) && get_pcvar_num(pcv_icon) == ICON_HASNADE)

        {

            new 
status player_has_frostnade(idcaller);

            
show_icon(idcallerstatus);

        }

    }



    return 
HAM_IGNORED;

}



// some kind of grenade is deployed

public ham_grenade_deploy(ent)

{    

    if(
pev_valid(ent))

    {

        
grenade_deployed(get_pdata_cbase(entm_pPlayer4),

            
get_pdata_int(entOFFSET_WEAPON_CSWID4));

    }

    

    return 
HAM_IGNORED;

}



// some kind of grenade is holstered

public ham_grenade_holster(ent)

{

    if(
pev_valid(ent))

    {

        
grenade_holstered(get_pdata_cbase(entm_pPlayer4),

            
get_pdata_int(entOFFSET_WEAPON_CSWID4));

    }

    

    return 
HAM_IGNORED;

}



// some kind of grenade is added to a player's inventory

public ham_grenade_addtoplayer(entid)

{

    if(
pev_valid(ent))

    {

        
grenade_added(idget_pdata_int(entOFFSET_WEAPON_CSWID4));

    }



    return 
HAM_IGNORED;

}



// some kind of grenade is added to a player's inventory, when he already has one

public ham_grenade_addduplicate(entorig)

{

    if(
pev_valid(orig))

    {

        
grenade_added(pev(origpev_owner), get_pdata_int(origOFFSET_WEAPON_CSWID4));

    }

    

    return 
HAM_IGNORED;

}



// handle when player id deploys a grenade with weapon id wid

grenade_deployed(idwid)

{

    
// if we should worry about managing my icon now

    
if(get_pcvar_num(pcv_enabled) && is_user_alive(id) && get_pcvar_num(pcv_icon) == ICON_HASNADE)

    {

        
// if I just switched to a frost grenade

        
if( wid == hasFrostNade[id]

            || (
get_pcvar_num(pcv_override) && (get_pcvar_num(pcv_teams) & _:cs_get_user_team(id)) && is_wid_in_nadetypes(wid)) )

        {

            
show_icon(idSTATUS_FLASH);

        }

    }

}



// handle when player id holsters a grenade with weapon id wid

grenade_holstered(idwid)

{    

    
// if we should worry about managing my icon now

    
if(get_pcvar_num(pcv_enabled) && is_user_alive(id) && get_pcvar_num(pcv_icon) == ICON_HASNADE)

    {

        
// if I just holstered a frost grenade        

        
if( wid == hasFrostNade[id]

            || (
get_pcvar_num(pcv_override) && (get_pcvar_num(pcv_teams) & _:cs_get_user_team(id)) && is_wid_in_nadetypes(wid)) )

        {

            
// only do STATUS_SHOW or STATUS_HIDE... during holster, current weapon

            // will still technically be the frost grenade, but we don't want to

            // mistakenly flash the icon                

            
new status = (player_has_frostnade(id) != STATUS_HIDE STATUS_SHOW STATUS_HIDE);

            
show_icon(idstatus);

        }

    }

}



// handle when player id gets a grenade with weapon id wid added to his inventory

grenade_added(idwid)

{

    
// if we should worry about managing my icon now

    
if(get_pcvar_num(pcv_enabled) && is_user_alive(id) && get_pcvar_num(pcv_icon) == ICON_HASNADE)

    {

        
// if I just got a frost grenade

        
if( wid == hasFrostNade[id]

            || (
get_pcvar_num(pcv_override) && (get_pcvar_num(pcv_teams) & _:cs_get_user_team(id)) && is_wid_in_nadetypes(wid)) )

        {

            new 
status player_has_frostnade(id);

            
show_icon(idstatus);

        }

    }

}



// a frost grenade explodes

public frostnade_explode(ent)

{

    new 
nadeTeam pev(ent,pev_team), owner pev(ent,pev_owner), Float:nadeOrigin[3];

    
pev(ent,pev_origin,nadeOrigin);

    

    
// make the smoke

    
message_begin_fl(MSG_PVS,SVC_TEMPENTITY,nadeOrigin,0);

    
write_byte(TE_SMOKE);

    
write_coord_fl(nadeOrigin[0]); // x

    
write_coord_fl(nadeOrigin[1]); // y

    
write_coord_fl(nadeOrigin[2]); // z

    
write_short(smokeSpr); // sprite

    
write_byte(random_num(30,40)); // scale

    
write_byte(5); // framerate

    
message_end();

    

    
// explosion

    
create_blast(nadeTeam,nadeOrigin);

    
emit_sound(ent,CHAN_ITEM,SOUND_EXPLODE,VOL_NORM,ATTN_NORM,0,PITCH_NORM);



    
// cache our cvars

    
new ff get_pcvar_num(mp_friendlyfire), Float:by_radius get_pcvar_float(pcv_by_radius),

            
hitself get_pcvar_num(pcv_hitself), los get_pcvar_num(pcv_los), Float:maxdamage get_pcvar_float(pcv_maxdamage),

            
Float:mindamage get_pcvar_float(pcv_mindamage), Float:chill_maxchance get_pcvar_float(pcv_chill_maxchance),

            
Float:chill_minchance get_pcvar_float(pcv_chill_minchance), Float:freeze_maxchanceFloat:freeze_minchance;



    if(!
by_radius)

    {

        
freeze_maxchance get_pcvar_float(pcv_freeze_maxchance);

        
freeze_minchance get_pcvar_float(pcv_freeze_minchance);

    }



    new 
taFloat:targetOrigin[3], Float:distancetr create_tr2(), Float:fractionFloat:damagegotFrozen 0;

    for(new 
target=1;target<=maxPlayers;target++)

    {

        
// dead, invincible, or self attack that is not allowed

        
if(!is_user_alive(target) || pev(target,pev_takedamage) == DAMAGE_NO

        
|| (pev(target,pev_flags) & FL_GODMODE) ||(target == owner && !hitself))

            continue;

        

        
// this is a team attack with ff disabled, excluding self attack

        
ta = (_:cs_get_user_team(target) == nadeTeam);

        if(
ta && !ff && target != owner) continue;

        

        
pev(target,pev_origin,targetOrigin);

        
distance vector_distance(nadeOrigin,targetOrigin);

        

        
// too far

        
if(distance FROST_RADIUS) continue;



        
// check line of sight

        
if(los)

        {

            
nadeOrigin[2] += 2.0;

            
engfunc(EngFunc_TraceLine,nadeOrigin,targetOrigin,DONT_IGNORE_MONSTERS,ent,tr);

            
nadeOrigin[2] -= 2.0;



            
get_tr2(tr,TR_flFraction,fraction);

            if(
fraction != 1.0 && get_tr2(tr,TR_pHit) != target) continue;

        }



        
// damaged

        
if(maxdamage 0.0)

        {

            
damage radius_calc(distance,FROST_RADIUS,maxdamage,mindamage);

            if(
tadamage /= 2.0// half damage for friendlyfire



            
if(damage 0.0)

            {

                
frostKilled[target] = 1;

                
ExecuteHamB(Ham_TakeDamage,target,ent,owner,damage,DMG_GRENADE);

                if(!
is_user_alive(target)) continue; // dead now

                
frostKilled[target] = 0;

            }

        }



        
// frozen

        
if((by_radius && radius_calc(distance,FROST_RADIUS,100.0,0.0) >= by_radius)

        || (!
by_radius && random_num(1,100) <= floatround(radius_calc(distance,FROST_RADIUS,freeze_maxchance,freeze_minchance))))

        {

            if(
freeze_player(target,owner,nadeTeam))

            {

                
gotFrozen 1;

                
emit_sound(target,CHAN_ITEM,SOUND_FROZEN,1.0,ATTN_NONE,0,PITCH_NORM);

            }

        }

        

        
// chilled

        
if(by_radius || random_num(1,100) <= floatround(radius_calc(distance,FROST_RADIUS,chill_maxchance,chill_minchance)))

        {

            if(
chill_player(target,owner,nadeTeam))

            {

                if(!
gotFrozenemit_sound(target,CHAN_ITEM,SOUND_CHILLED,VOL_NORM,ATTN_NORM,0,PITCH_NORM);

            }

        }

    }



    
free_tr2(tr);

    
set_pev(ent,pev_flags,pev(ent,pev_flags)|FL_KILLME);

}



freeze_player(id,attacker,nadeTeam)

{

    new 
fwdRetVal PLUGIN_CONTINUE;

    
ExecuteForward(fnFwdPlayerFrozenfwdRetValidattacker);

    

    if(
fwdRetVal == PLUGIN_HANDLED || fwdRetVal == PLUGIN_HANDLED_MAIN)

    {

        return 
0;

    }



    if(!
isFrozen[id])

    {

        
pev(id,pev_gravity,oldGravity[id]);



        
// register our forward only when we need it

        
if(!fmFwdPPT)

        {

            
fmFwdPPT register_forward(FM_PlayerPreThink,"fw_playerprethink",0);

        }

    }



    
isFrozen[id] = nadeTeam;

    

    
set_pev(id,pev_velocity,Float:{0.0,0.0,0.0});

    
set_user_chillfreeze_speed(id);

    

    new 
Float:duration get_pcvar_float(pcv_freeze_duration), Float:variance get_pcvar_float(pcv_freeze_variance);

    
duration += random_float(-variance,variance);



    
remove_task(TASK_REMOVE_FREEZE+id);

    
set_task(duration,"task_remove_freeze",TASK_REMOVE_FREEZE+id);

    

    if(!
pev_valid(novaDisplay[id])) create_nova(id);

    

    if(
get_pcvar_num(pcv_icon) == ICON_ISCHILLED)

    {

        
show_icon(idSTATUS_FLASH);

    }

    

    return 
1;

}



public 
task_remove_freeze(taskid)

{

    new 
id taskid-TASK_REMOVE_FREEZE;

    

    if(
pev_valid(novaDisplay[id]))

    {

        new 
Float:origin[3];

        
pev(novaDisplay[id],pev_origin,origin);



        
// add some tracers

        
message_begin_fl(MSG_PVS,SVC_TEMPENTITY,origin,0);

        
write_byte(TE_IMPLOSION);

        
write_coord_fl(origin[0]); // x

        
write_coord_fl(origin[1]); // y

        
write_coord_fl(origin[2] + 8.0); // z

        
write_byte(64); // radius

        
write_byte(10); // count

        
write_byte(3); // duration

        
message_end();



        
// add some sparks

        
message_begin_fl(MSG_PVS,SVC_TEMPENTITY,origin,0);

        
write_byte(TE_SPARKS);

        
write_coord_fl(origin[0]); // x

        
write_coord_fl(origin[1]); // y

        
write_coord_fl(origin[2]); // z

        
message_end();



        
// add the shatter

        
message_begin_fl(MSG_PAS,SVC_TEMPENTITY,origin,0);

        
write_byte(TE_BREAKMODEL);

        
write_coord_fl(origin[0]); // x

        
write_coord_fl(origin[1]); // y

        
write_coord_fl(origin[2] + 24.0); // z

        
write_coord_fl(16.0); // size x

        
write_coord_fl(16.0); // size y

        
write_coord_fl(16.0); // size z

        
write_coord(random_num(-50,50)); // velocity x

        
write_coord(random_num(-50,50)); // velocity y

        
write_coord_fl(25.0); // velocity z

        
write_byte(10); // random velocity

        
write_short(glassGibs); // model

        
write_byte(10); // count

        
write_byte(25); // life

        
write_byte(BREAK_GLASS); // flags

        
message_end();



        
emit_sound(novaDisplay[id],CHAN_ITEM,SOUND_UNFROZEN,VOL_NORM,ATTN_NORM,0,PITCH_NORM);

        
set_pev(novaDisplay[id],pev_flags,pev(novaDisplay[id],pev_flags)|FL_KILLME);

    }



    
isFrozen[id] = 0;

    
novaDisplay[id] = 0;

    

    
// unregister forward if we are no longer using it

    
unregister_prethink();



    if(!
is_user_connected(id)) return;

    

    
// restore speed, but then check for chilled

    
ExecuteHam(Ham_Player_ResetMaxSpeedid);

    
set_user_chillfreeze_speed(id);



    
set_pev(id,pev_gravity,oldGravity[id]);

    

    new 
status STATUS_HIDE;

    

    
// sometimes trail fades during freeze, reapply

    
if(isChilled[id])

    {

        
status STATUS_SHOW;

        

        new 
rgb[3];

        
get_rgb_colors(isChilled[id],rgb);

        
set_beamfollow(id,30,8,rgb,100);

    }

    

    if(
get_pcvar_num(pcv_icon) == ICON_ISCHILLED)

    {

        
show_icon(idstatus);

    }

}



chill_player(id,attacker,nadeTeam)

{

    new 
fwdRetVal PLUGIN_CONTINUE;

    
ExecuteForward(fnFwdPlayerChilledfwdRetValidattacker);

    

    if(
fwdRetVal == PLUGIN_HANDLED || fwdRetVal == PLUGIN_HANDLED_MAIN)

    {

        return 
0;

    }



    
// we aren't already been chilled

    
if(!isChilled[id])

    {

        
oldRenderFx[id] = pev(id,pev_renderfx);

        
pev(id,pev_rendercolor,oldRenderColor[id]);

        
oldRenderMode[id] = pev(id,pev_rendermode);

        
pev(id,pev_renderamt,oldRenderAmt[id]);



        
isChilled[id] = nadeTeam// fix -- thanks Exolent



        // register our forward only when we need it

        //if(!fmFwdPPT) fmFwdPPT = register_forward(FM_PlayerPreThink,"fw_playerprethink",0);

    
}



    
isChilled[id] = nadeTeam;

    

    
set_user_chillfreeze_speed(id);

    

    new 
Float:duration get_pcvar_float(pcv_chill_duration), Float:variance get_pcvar_float(pcv_chill_variance);

    
duration += random_float(-variance,variance);



    
remove_task(TASK_REMOVE_CHILL+id);

    
set_task(duration,"task_remove_chill",TASK_REMOVE_CHILL+id);



    new 
rgb[3];

    
get_rgb_colors(nadeTeam,rgb);

    

    
IVecFVec(rgbglowColor[id]);

    

    
// glowshell

    
set_user_rendering(idkRenderFxGlowShellrgb[0], rgb[1], rgb[2], kRenderNormalfloatround(GLOW_AMOUNT));



    
set_beamfollow(id,30,8,rgb,100);



    
// I decided to let the frostnade tint override a flashbang,

    // because if you are frozen, then you have much bigger problems.



    // add a blue tint to their screen

    
message_begin(MSG_ONE,gmsgScreenFade,_,id);

    
write_short(floatround(4096.0 duration)); // duration

    
write_short(floatround(3072.0 duration)); // hold time (4096.0 * 0.75)

    
write_short(FFADE_IN); // flags

    
write_byte(rgb[0]); // red

    
write_byte(rgb[1]); // green

    
write_byte(rgb[2]); // blue

    
write_byte(100); // alpha

    
message_end();

    

    if(
get_pcvar_num(pcv_icon) == ICON_ISCHILLED && !isFrozen[id])

    {

        
show_icon(idSTATUS_SHOW);

    }

    

    return 
1;

}



public 
task_remove_chill(taskid)

{

    new 
id taskid-TASK_REMOVE_CHILL;



    
isChilled[id] = 0;

    

    
// unregister forward if we are no longer using it

    //unregister_prethink();



    
if(!is_user_connected(id)) return;

    

    
// set speed to normal, then check for frozen

    
ExecuteHam(Ham_Player_ResetMaxSpeedid);

    
set_user_chillfreeze_speed(id);



    
// reset rendering

    
set_user_rendering(idoldRenderFx[id], floatround(oldRenderColor[id][0]), floatround(oldRenderColor[id][1]),

        
floatround(oldRenderColor[id][2]), oldRenderMode[id], floatround(oldRenderAmt[id]));



    
clear_beamfollow(id);



    
// calculate end of flashbang

    
new Float:flashedUntil get_pdata_float(id,m_flFlashedUntil),

            
Float:flashHoldTime get_pdata_float(id,m_flFlashHoldTime),

            
Float:endOfFlash flashedUntil + (flashHoldTime 0.67);

    

    
// not blinded

    
if(get_gametime() >= endOfFlash)

    {

        
// clear tint

        
message_begin(MSG_ONE,gmsgScreenFade,_,id);

        
write_short(0); // duration

        
write_short(0); // hold time

        
write_short(FFADE_IN); // flags

        
write_byte(0); // red

        
write_byte(0); // green

        
write_byte(0); // blue

        
write_byte(255); // alpha

        
message_end();

    }

    

    if(
get_pcvar_num(pcv_icon) == ICON_ISCHILLED && !isFrozen[id])

    {

        
show_icon(idSTATUS_HIDE);

    }

}



// make a frost nova at a player's feet

create_nova(id)

{

    new 
nova engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"));



    
engfunc(EngFunc_SetSize,nova,Float:{-8.0,-8.0,-4.0},Float:{8.0,8.0,4.0});

    
engfunc(EngFunc_SetModel,nova,MODEL_FROZEN);



    
// random orientation

    
new Float:angles[3];

    
angles[1] = random_float(0.0,360.0);

    
set_pev(nova,pev_angles,angles);



    
// put it at their feet

    
new Float:novaOrigin[3];

    
pev(id,pev_origin,novaOrigin);

    
engfunc(EngFunc_SetOrigin,nova,novaOrigin);



    
// make it translucent

    
new rgb[3];

    
get_rgb_colors(isFrozen[id], rgb);

    
IVecFVec(rgbangles); // let's just use angles



    
set_pev(nova,pev_rendercolor,angles); // see above

    
set_pev(nova,pev_rendermode,kRenderTransAlpha);

    
set_pev(nova,pev_renderfx,kRenderFxGlowShell);

    
set_pev(nova,pev_renderamt,128.0);



    
novaDisplay[id] = nova;

}



/****************************************

* UTILITY FUNCTIONS

****************************************/



// check if prethink is still being used, if not, unhook it

unregister_prethink()

{

    if(
fmFwdPPT)

    {

        new 
i;

        for(
i=1;i<=maxPlayers;i++) if(/*isChilled[i] ||*/ isFrozen[i]) break;

        if(
maxPlayers)

        {

            
unregister_forward(FM_PlayerPreThink,fmFwdPPT,0);

            
fmFwdPPT 0;

        }

    }

}



// make the explosion effects

create_blast(team,Float:origin[3])

{

    new 
rgb[3];

    
get_rgb_colors(team,rgb);



    
// smallest ring

    
message_begin_fl(MSG_PVS,SVC_TEMPENTITY,origin,0);

    
write_byte(TE_BEAMCYLINDER);

    
write_coord_fl(origin[0]); // x

    
write_coord_fl(origin[1]); // y

    
write_coord_fl(origin[2]); // z

    
write_coord_fl(origin[0]); // x axis

    
write_coord_fl(origin[1]); // y axis

    
write_coord_fl(origin[2] + 385.0); // z axis

    
write_short(exploSpr); // 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(100); // brightness

    
write_byte(0); // speed

    
message_end();



    
// medium ring

    
message_begin_fl(MSG_PVS,SVC_TEMPENTITY,origin,0);

    
write_byte(TE_BEAMCYLINDER);

    
write_coord_fl(origin[0]); // x

    
write_coord_fl(origin[1]); // y

    
write_coord_fl(origin[2]); // z

    
write_coord_fl(origin[0]); // x axis

    
write_coord_fl(origin[1]); // y axis

    
write_coord_fl(origin[2] + 470.0); // z axis

    
write_short(exploSpr); // 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(100); // brightness

    
write_byte(0); // speed

    
message_end();



    
// largest ring

    
message_begin_fl(MSG_PVS,SVC_TEMPENTITY,origin,0);

    
write_byte(TE_BEAMCYLINDER);

    
write_coord_fl(origin[0]); // x

    
write_coord_fl(origin[1]); // y

    
write_coord_fl(origin[2]); // z

    
write_coord_fl(origin[0]); // x axis

    
write_coord_fl(origin[1]); // y axis

    
write_coord_fl(origin[2] + 555.0); // z axis

    
write_short(exploSpr); // 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(100); // brightness

    
write_byte(0); // speed

    
message_end();



    
// light effect

    
message_begin_fl(MSG_PAS,SVC_TEMPENTITY,origin,0);

    
write_byte(TE_DLIGHT);

    
write_coord_fl(origin[0]); // x

    
write_coord_fl(origin[1]); // y

    
write_coord_fl(origin[2]); // z

    
write_byte(floatround(FROST_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();

}



// give an entity a beam trail

set_beamfollow(ent,life,width,rgb[3],brightness)

{

    
clear_beamfollow(ent);



    
message_begin(MSG_BROADCAST,SVC_TEMPENTITY);

    
write_byte(TE_BEAMFOLLOW);

    
write_short(ent); // entity

    
write_short(trailSpr); // 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();

}



// removes beam trails from an entity

clear_beamfollow(ent)

{

    
message_begin(MSG_BROADCAST,SVC_TEMPENTITY);

    
write_byte(TE_KILLBEAM);

    
write_short(ent); // entity

    
message_end();

}



// gets the appropriate color and displays the frostnade icon to the player with the given status

show_icon(idstatus)

{

    static 
rgb[3];

    if(
statusget_rgb_colors(_:cs_get_user_team(id), rgb); // only get colors if we need to

    

    
message_begin(MSG_ONE,gmsgStatusIcon,_,id);

    
write_byte(status); // status (0=hide, 1=show, 2=flash)

    
write_string("dmg_cold"); // sprite name

    
write_byte(rgb[0]); // red

    
write_byte(rgb[1]); // green

    
write_byte(rgb[2]); // blue

    
message_end();

}



// checks if a weapon id is included in fn_nadetypes

is_wid_in_nadetypes(wid)

{

    new 
types get_pcvar_num(pcv_nadetypes);

    

    return ( (
wid == CSW_HEGRENADE && (types NT_HEGRENADE))

        || (
wid == CSW_FLASHBANG && (types NT_FLASHBANG))

        || (
wid == CSW_SMOKEGRENADE && (types NT_SMOKEGRENADE)) );

}



// checks if a player has a frostnade, taking into account fn_override and such.

// returns: STATUS_HIDE = no frostnade, STATUS_SHOW = has frostnade but not deployed, STATUS_FLASH = has frostnade and deployed

player_has_frostnade(id)

{

    new 
retVal STATUS_HIDEcurwpn get_user_weapon(id);

    

    
// no override, variable explicitly set

    
if(hasFrostNade[id])

    {

        
retVal = (curwpn == hasFrostNade[id] ? STATUS_FLASH STATUS_SHOW);

    }

    

    
// override enabled, and I'm on the right team

    
else if(get_pcvar_num(pcv_override) && (get_pcvar_num(pcv_teams) & _:cs_get_user_team(id)))

    {        

        new 
types get_pcvar_num(pcv_nadetypes);

                    

        if((
types NT_HEGRENADE) && cs_get_user_bpammo(idCSW_HEGRENADE) > 0)

        {

            
retVal = (curwpn == CSW_HEGRENADE STATUS_FLASH STATUS_SHOW);

        }

        

        if(
retVal != STATUS_FLASH && (types NT_FLASHBANG) && cs_get_user_bpammo(idCSW_FLASHBANG) > 0)

        {

            
retVal = (curwpn == CSW_FLASHBANG STATUS_FLASH STATUS_SHOW);

        }

        

        if(
retVal != STATUS_FLASH && (types NT_SMOKEGRENADE) && cs_get_user_bpammo(idNT_SMOKEGRENADE) > 0)

        {

            
retVal = (curwpn == NT_SMOKEGRENADE STATUS_FLASH STATUS_SHOW);

        }

    }

    

    return 
retVal;

}



// gets RGB colors from the cvar

get_rgb_colors(team,rgb[3])

{

    static 
color[12], parts[3][4];

    
get_pcvar_string(pcv_color,color,11);

    

    
// if cvar is set to "team", use colors based on the given team

    
if(equali(color,"team",4))

    {

        if(
team == 1)

        {

            
rgb[0] = 150;

            
rgb[1] = 0;

            
rgb[2] = 0;

        }

        else

        {

            
rgb[0] = 0;

            
rgb[1] = 0;

            
rgb[2] = 150;

        }

    }

    else

    {

        
parse(color,parts[0],3,parts[1],3,parts[2],3);

        
rgb[0] = str_to_num(parts[0]);

        
rgb[1] = str_to_num(parts[1]);

        
rgb[2] = str_to_num(parts[2]);

    }

}



// scale a value equally (inversely?) with the distance that something

// is from the center of another thing. that makes pretty much no sense,

// so basically, the closer we are to the center of a ring, the higher

// our value gets.

//

// EXAMPLE: distance = 60.0, radius = 240.0, maxVal = 100.0, minVal = 20.0

// we are 0.75 (1.0-(60.0/240.0)) of the way to the radius, so scaled with our

// values, it comes out to 80.0 (20.0 + (0.75 * (100.0 - 20.0)))

Float:radius_calc(Float:distance,Float:radius,Float:maxVal,Float:minVal)

{

    if(
maxVal <= 0.0) return 0.0;

    if(
minVal >= maxVal) return minVal;

    return 
minVal + ((1.0 - (distance radius)) * (maxVal minVal));

}



// sets a user's chilled/frozen speed if applicable

// (NOTE: does NOT reset his maxspeed if he is not chilled/frozen)

set_user_chillfreeze_speed(id)

{

    if(
isFrozen[id])

    {

        
set_user_maxspeed(id1.0);

    }

    else if(
isChilled[id])

    {

        
set_user_maxspeed(idget_default_maxspeed(id)*(get_pcvar_float(pcv_chill_speed)/100.0));

    }

}



// gets the maxspeed a user should have, given his current weapon

stock Float:get_default_maxspeed(id)

{    

    new 
wEnt get_pdata_cbase(idm_pActiveItem), Float:result 250.0;



    if(
pev_valid(wEnt))

    {

        
ExecuteHam(Ham_CS_Item_GetMaxSpeedwEntresult);

    }

    

    return 
result;



Zombie swarm sma

PHP Code:

#include <amxmodx>



#include <amxmisc>



#include <cstrike>



#include <fun>



#include <engine>



#include <fakemeta>







//Sets the sky you want for your server



#define SKYNAME "space"







//The time before zombies have leap at round start. Has to be a float/decimal



#define LEAP_CD 5.0











#define MAX_PLAYERS 32



new bool:g_restart_attempt[MAX_PLAYERS 1]







#define ZOMBIE_MISS 2



new miss_zombie[ZOMBIE_MISS][] = {"zombie/claw_miss1.wav""zombie/claw_miss2.wav" }







#define ZOMBIE_HIT 3



new hit_zombie[ZOMBIE_HIT][] = {"zombie/claw_strike1.wav""zombie/claw_strike2.wav","zombie/claw_strike3.wav" }







#define ZOMBIE_PAIN 2



new pain_zombie[ZOMBIE_PAIN][] = {"zombie_swarm/zombie_pain1.wav""zombie_swarm/zombie_pain2.wav" }







#define HUMAN_PAIN 2



new pain_human[HUMAN_PAIN][] = {"zombie_swarm/human_pain1.wav""zombie_swarm/human_pain2.wav" }







#define Keysmenu_1 (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<9)



#define fm_find_ent_by_class(%1,%2) engfunc(EngFunc_FindEntityByString, %1, "classname", %2)







#define SLOT_PRIMARY 1



#define SLOT_SECONDARY 2



#define SLOT_KNIFE 3



#define SLOT_GRENADE 4



#define SLOT_C4 5







#define PRIMARY_WEAPONS_BIT_SUM ((1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90))



#define SECONDARY_WEAPONS_BIT_SUM ((2<<CSW_P228)|(2<<CSW_ELITE)|(2<<CSW_FIVESEVEN)|(CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE))



stock g_WeaponSlots[] = { 02014151142211112211111,142113}



stock g_MaxBPAmmo[] = { 05209013211009011201001009090901001203012020021901209023590900100 }







new 
bool:g_zombie[33]



new 
bool:buying



new bool:g_speed







new mod_name[32] = "Zombie Swarm"







//Pcvars...



new zomb_switchzomb_hp,zomb_ap,zomb_speed,zomb_lightning,



zomb_leap,zomb_money,zomb_zdmgzomb_hdmg,zomb_ammozomb_nvgzomb_objbool:g_leap[33]







new 
MODEL[256], zomb_modeluse_model



new bombMap 0



new hostageMap 0







//The old commands



new g_autoteamg_limitteamsg_flashlight







new hudsync







#define PLUGIN "Zombie Swarm"



#define VERSION ""



#define AUTHOR "Mini_Midget"







public plugin_init()



{



register_plugin(PLUGINVERSIONAUTHOR)







register_cvar(PLUGIN,VERSION,FCVAR_SERVER)







register_dictionary("zombie_swarm.txt")







register_logevent("logevent_round_start",2"1=Round_Start")



register_logevent("logevent_round_end"2"1=Round_End")







register_event("ResetHUD","event_hud_reset""be")



register_event("TextMsg","event_restart_attempt""a""2=#Game_will_restart_in")



register_event("CurWeapon","event_cur_weapon","be""1=1")



register_event("Damage","event_damage_scream","be","2!0","3=0")



register_event("Damage""event_damage""be""2!0","3=0","4!0")



register_event("StatusIcon""event_status_icon""be""1=1""1=2""2=c4")



register_event("HLTV""event_new_round""a""1=0""2=0")







register_forward(FM_ClientUserInfoChanged,"fw_info")



register_forward(FM_PlayerPreThink,"fw_prethink")



register_forward(FM_PlayerPostThink,"fw_postthink")



register_forward(FM_Touch,"fw_Touch");



register_forwardFM_EmitSound"fw_EmitSound" )



register_forward(FM_CmdStart"fw_Cmd")



register_forward(FM_GetGameDescription,"GameDesc")







register_message(get_user_msgid("Scenario"),"message_scenario");



register_message(get_user_msgid("BombDrop"),"message_bombdrop");



register_message(get_user_msgid("AmmoPickup"),"message_ammopickup");



register_message(get_user_msgid("TextMsg"),"message_textmsg");



register_message(get_user_msgid("HostagePos"),"message_hostagepos");







register_clcmd("say","clcmd_say")







register_menucmd(register_menuid("Buy Menu"), Keysmenu_1"buy_menu")







register_clcmd("fullupdate","clcmd_fullupdate")







register_concmd("zombie_swarm""zsonoff"ADMIN_IMMUNITY"<0/1> Disable/Enable Zombie Swarm")







zomb_switch register_cvar("zs_enabled","1")



zomb_hp register_cvar("zs_health","4000")



zomb_ap register_cvar("zs_armour","500")



zomb_speed register_cvar("zs_speed","320")



zomb_lightning register_cvar("zs_lightning","2")



zomb_leap register_cvar("zs_leap","1")



zomb_money register_cvar("zs_money","7000")



zomb_zdmg register_cvar("zs_zdmg","55")



zomb_hdmg register_cvar("zs_hdmg","150")



zomb_ammo register_cvar("zs_ammo","0")



zomb_nvg register_cvar("zs_nvg","0")



zomb_obj register_cvar("zs_objectives","1")







zomb_model register_cvar("zs_model","zombie_swarm")



use_model register_cvar("zs_use","1")







if(
fm_find_ent_by_class(1"info_bomb_target") || fm_find_ent_by_class(1"func_bomb_target"))



bombMap 1;







if(
fm_find_ent_by_class(1,"hostage_entity"))



hostageMap 1







g_autoteam 
get_cvar_num("mp_autoteambalance")



g_limitteams get_cvar_num("mp_limitteams")



g_flashlight get_cvar_num("mp_flashlight")







server_cmd("sv_skyname %s"SKYNAME)



server_cmd("sv_maxspeed 1000")







set_cvar_num("mp_autoteambalance",0)



set_cvar_num("mp_limitteams"1)



set_cvar_num("mp_flashlight"1)







set_task(1.0"lightning_effects")



set_task(1.0"ambience_loop")







format(mod_name31"Zombie Swarm %s"VERSION)



hudsync CreateHudSyncObj()







}







public 
plugin_precache()



{



precache_model("models/player/zombie_swarm/zombie_swarm.mdl")



precache_model("models/v_knife_zombie.mdl")



precache_sound("zombie_swarm/ambience.wav")







new 
i







for (0ZOMBIE_MISSi++)



precache_sound(miss_zombie[i])







for (
0ZOMBIE_HITi++)



precache_sound(hit_zombie[i])







for (
0ZOMBIE_PAINi++)



precache_sound(pain_zombie[i])







for (
0HUMAN_PAINi++)



precache_sound(pain_human[i])



}







public 
client_putinserver(id)



{



g_zombie[id] = false



g_restart_attempt
[id] = false



g_speed 
false



client_cmd
(id"stopsound")



}







public 
zsonoff(id,level,cid)



{



if (!
cmd_access(id,level,cid,1))



return 
PLUGIN_HANDLED







new szArg[5]



read_argv(1szArg4)







if (
equali(szArg,"1") || equali(szArg,"on"))



{



if (
get_cvar_num("zombie_swarm") == 1)



{



console_print(id"%s is already on!"PLUGIN)



return 
PLUGIN_HANDLED



}







zs_on()







set_hudmessage(255255255, -1.00.2501.05.00.10.2, -1)



show_hudmessage(0"%s is now ON!"PLUGIN)







console_print(0"%s has been turned ON!"PLUGIN)



client_print(0print_chat"%s has been turned ON!"PLUGIN)







return 
PLUGIN_HANDLED



}







if (
equali(szArg,"0") || equali(szArg,"off"))



{



if (
get_cvar_num("zs_enabled") == 0)



{



console_print(id"%s is already off!"PLUGIN)



return 
PLUGIN_HANDLED



}







zs_off()







set_hudmessage(255255255, -1.00.2501.05.00.10.2, -1)



show_hudmessage(0"%s has been turned OFF!"PLUGIN)







console_print(0"%s has been turned OFF!"PLUGIN)



client_print(0print_chat"%s has been turned OFF!"PLUGIN)







return 
PLUGIN_HANDLED



}







console_print(id"Invalid argument!")



client_print(idprint_chat"Invalid argument!")







return 
PLUGIN_HANDLED



}







public 
zs_on()



{



new 
maxplayers get_maxplayers()



for (new 
1<= maxplayersi++)



{



g_zombie[i] = false



g_restart_attempt
[i] = false



}







set_cvar_num("zs_enabled"1)







set_task(1.0"lightning_effects")



set_task(1.0"ambience_loop")







set_cvar_num("mp_autoteambalance",0)



set_cvar_num("mp_limitteams"1)



set_cvar_num("mp_flashlight"1)







set_cvar_num("sv_restartround"3)



}







public 
zs_off()



{



new 
maxplayers get_maxplayers()



for (new 
1<= maxplayersi++)



{



g_zombie[i] = false



g_restart_attempt
[i] = false



client_cmd
(i"stopsound")



}







set_cvar_num("zs_enabled"0)







set_lights("#OFF")



remove_task(12175)







set_cvar_num("mp_autoteambalance",g_autoteam)



set_cvar_num("mp_limitteams"g_limitteams)



set_cvar_num("mp_flashlight"g_flashlight)







set_cvar_num("sv_restartround"3)



}



public 
GameDesc()



{



forward_return(FMV_STRINGmod_name)







return 
FMRES_SUPERCEDE



}







public 
event_new_round(id)



{



if(
hostageMap && get_pcvar_num(zomb_obj))



set_task(0.1,"move_hostages")







buying true



new Float:buy_time get_cvar_float("mp_buytime") * 60



set_task
(buy_time"buy_false"7294)







g_speed false



new freeze get_cvar_num("mp_freezetime")



set_task(float(freeze),"allow_speed")



}







public 
allow_speed()



{



g_speed true







new players[32], numi



get_players
(playersnum)



for (
numi++)



if (
g_zombie[players[i]])



set_user_maxspeed(players[i], (get_pcvar_float(zomb_speed)))



}







public 
logevent_round_start(id)



{



if(!
get_pcvar_num(zomb_switch))



return 
PLUGIN_HANDLED







if (get_pcvar_num(zomb_nvg))



server_cmd("amx_restrict on nvgs")



else



server_cmd("amx_restrict off nvgs")







set_task (0.5 "team_check")



set_task (5.0 "StartMsg")







if (
g_zombie[id]) set_user_maxspeed(id,(get_pcvar_float(zomb_speed)))







return 
PLUGIN_CONTINUE



}







public 
logevent_round_end()



{



if (
task_exists(7294))



remove_task(7294)



}







public 
buy_false() buying false







public clcmd_fullupdate() return PLUGIN_HANDLED







public event_restart_attempt()



{



if(!
get_pcvar_num(zomb_switch))



return 
PLUGIN_HANDLED







new players[32], num



get_players
(playersnum"a")



for (new 
inumi++)



g_restart_attempt[players[i]] = true







return PLUGIN_CONTINUE



}







public 
event_hud_reset(id)



{



if(!
get_pcvar_num(zomb_switch))



return 
PLUGIN_HANDLED







if (g_restart_attempt[id])



g_restart_attempt[id] = false







set_task
(0.2,"event_player_spawn",id)







return 
PLUGIN_CONTINUE



}







public 
event_player_spawn(id)



{



if(!
is_user_alive(id))



return 
PLUGIN_HANDLED







new CsTeams:team cs_get_user_team(id)



new 
CsArmorType:ArmorType CS_ARMOR_VESTHELM







if(team == CS_TEAM_T)



{



g_zombie[id] = true



set_task
(random_float(0.1,0.5), "Reset_Weapons"id//Strips zombies if they do have guns



set_user_health(id,get_pcvar_num(zomb_hp))



cs_set_user_armor(id,get_pcvar_num(zomb_ap),ArmorType)



set_user_footsteps(id1)



set_user_gravity(id,0.875)



cs_set_user_money(id,0)







if (
g_speed)



set_user_maxspeed(id,(get_pcvar_float(zomb_speed)))







if (!
cs_get_user_nvg(id))



{



cs_set_user_nvg(id,1)







engclient_cmd(id"nightvision")



}



}



else if(
team == CS_TEAM_CT)



{



g_zombie[id] = false



set_user_footsteps
(id0)



cs_set_user_money(idcs_get_user_money(id) + get_pcvar_num(zomb_money))







if (
get_pcvar_num(use_model))



cs_reset_user_model(id)



}







ShowHUD(id)







return 
PLUGIN_CONTINUE



}







public 
fw_info(id,buffer)



{



if (
g_zombie[id])



return 
FMRES_SUPERCEDE







return FMRES_IGNORED



}







public 
fw_postthink(id)



{



if (!
is_user_alive(id) || !get_pcvar_num(use_model))



return 
FMRES_IGNORED







if (g_zombie[id])



{



new 
szModel[33]



get_pcvar_string(zomb_modelMODEL255)



cs_get_user_model(idszModel32)







if (
containi(szModelMODEL) ==-)

{

new 
info engfunc(EngFunc_GetInfoKeyBufferid)

engfunc(EngFunc_SetClientKeyValueidinfo"model"MODEL)

}



}



return 
FMRES_IGNORED

}





public 
fw_prethink(id)

{

if (!(
pev(idpev_button) & (IN_JUMP IN_DUCK) == (IN_JUMP IN_DUCK)))

return 
FMRES_IGNORED;



if (!(
pev(idpev_flags) & FL_ONGROUND) || fm_get_speed(id) < 80 || !g_leap[id] || !g_zombie[id])

return 
FMRES_IGNORED;



static 
Float:velocity[3]

velocity_by_aim(id500velocity)

velocity[2] = 300.0

set_pev
(idpev_velocityvelocity)

g_leap[id] = false

set_task
(LEAP_CD"leap_again"id)

return 
FMRES_IGNORED

}



public 
leap_again(id)

{

g_leap[id] = true

}



public 
ShowHUD(id)



{



if(!
is_user_alive(id))



return 
PLUGIN_HANDLED







if(g_zombie[id])



{



new 
hp get_user_health(id)



new 
ap get_user_armor(id)



set_hudmessage(25518000.020.9000.00.30.00.0)



ShowSyncHudMsg(idhudsync "HP: %d |AP : %d"hpap)



}







set_task(0.1 "ShowHUD" id)







return 
PLUGIN_CONTINUE



}







public 
event_cur_weapon(id)



{



if(!
get_pcvar_num(zomb_switch))



return 
PLUGIN_HANDLED







if(!is_user_alive(id))



return 
PLUGIN_HANDLED







new weapon read_data(2)



new 
clip read_data(3)







if (
g_WeaponSlots[weapon] == SLOT_PRIMARY || g_WeaponSlots[weapon] == SLOT_SECONDARY)



{



switch (
get_pcvar_num(zomb_ammo))



{



case 
1:



{



new 
ammo cs_get_user_bpammo(idweapon)







if (
ammo g_MaxBPAmmo[weapon])



{



cs_set_user_bpammo(idweapong_MaxBPAmmo[weapon])



}



}







case 
2:



{



give_ammo(id weapon clip)



}



}



}







if ( 
g_zombie[id] && g_speed )



set_user_maxspeed(id,(get_pcvar_float(zomb_speed)))







if (
g_zombie[id] && g_WeaponSlots[weapon] == SLOT_KNIFE)



set_pev(idpev_viewmodelengfunc(EngFunc_AllocString"models/v_knife_zombie.mdl"))



return 
PLUGIN_CONTINUE



}







public 
give_ammo(id weapon clip)



{



if (!
is_user_alive(id))



return 
PLUGIN_HANDLED







if (!clip)



{



new 
weapname[33]



get_weaponname(weapon weapname 32)



new 
wpn = -1



while((wpn fm_find_ent_by_class(wpn weapname)) != 0)



{



if(
id == pev(wpn,pev_owner))



{



cs_set_weapon_ammo(wpn maxclip(weapon))



break;



}



}



}



return 
PLUGIN_CONTINUE



}







public 
event_status_icon(id)



{



if(!
get_pcvar_num(zomb_switch))



return 
PLUGIN_HANDLED







engclient_cmd
(id"drop""weapon_c4")



set_task(0.1"delete_c4")







return 
PLUGIN_CONTINUE



}







public 
delete_c4()



{



new 
ent find_ent_by_class(-1"weaponbox")



while (
ent 0)



{



new 
model[33]



entity_get_string(entEV_SZ_modelmodel32)



if (
equali(model"models/w_backpack.mdl"))



{



remove_entity(ent)



return 
PLUGIN_CONTINUE



}



ent find_ent_by_class(ent"weaponbox")



}



return 
PLUGIN_CONTINUE



}







public 
Reset_Weapons(id)



{



if(!
is_user_alive(id))



return 
PLUGIN_HANDLED







if(g_zombie[id])



{



strip_user_weapons(id)



give_item(id,"weapon_knife")







if (
is_user_bot(id))



{



return 
PLUGIN_HANDLED



}







else if (
get_pcvar_num(zomb_leap))



{



set_task(LEAP_CD,"cooldown_begin",id)



set_hudmessage(255255255, -1.00.4006.014.0)



show_hudmessage(id"%L",LANG_PLAYER,"LEAP_WAIT",floatround(LEAP_CD))



}



}







return 
PLUGIN_CONTINUE



}







public 
cooldown_begin(id)



{



if (!
is_user_alive(id))



return 
PLUGIN_HANDLED







if (g_zombie[id])



{



set_hudmessage(255255255, -1.00.4006.05.0)



show_hudmessage(id"%L",LANG_PLAYER,"LEAP_READY")



g_leap[id] = true



}







return 
PLUGIN_CONTINUE



}







public 
team_check()



{



new 
players[32],num,i,id



get_players
(players,num,"d")



for(
0numi++)



{



id players[i]



if (!
g_zombie[id])



{



user_silentkill(id)



cs_set_user_team(id,CS_TEAM_T)



}



}



return 
PLUGIN_HANDLED



}







public 
StartMsg(id)



{



client_print(0,print_chat,"%L",LANG_PLAYER,"WELCOME_MSG"VERSION)



client_print(0,print_chat,"%L",LANG_PLAYER,"ZOMBIE_MSG"get_pcvar_num(zomb_hp), get_pcvar_num(zomb_ap), get_pcvar_num(zomb_speed))



client_print(0,print_chat,"%L",LANG_PLAYER,"HELP_MSG")



}







public 
lightning_effects()



{



if(!
get_pcvar_num(zomb_switch))



return 
PLUGIN_HANDLED







if (get_pcvar_num(zomb_lightning) == 0)



{



set_lights("#OFF")



remove_task(12175)



set_task(20.0,"lightning_effects")



}



else if (
get_pcvar_num(zomb_lightning) == 1)



{



set_lights("a")



set_task(random_float(10.0,17.0),"thunder_clap",12175)



}



else if (
get_pcvar_num(zomb_lightning) == 2)



{



set_lights("f")



remove_task(12175)



set_task(20.0,"lightning_effects")



}



return 
PLUGIN_CONTINUE



}







public 
thunder_clap()



{



if(!
get_pcvar_num(zomb_switch))



return 
PLUGIN_HANDLED







set_lights
("p")



client_cmd(0,"speak ambience/thunder_clap.wav")







set_task(1.25,"lightning_effects",12175)







return 
PLUGIN_CONTINUE



}







public 
ambience_loop()



{



if(!
get_pcvar_num(zomb_switch))



return 
PLUGIN_HANDLED







client_cmd
(0,"spk zombie_swarm/ambience.wav")







set_task(17.0,"ambience_loop")







return 
PLUGIN_CONTINUE



}







public 
fw_Touch(pToucherpTouched)



{



if(!
get_pcvar_num(zomb_switch))



return 
FMRES_IGNORED







if ( !pev_valid(pToucher) || !pev_valid(pTouched) )



return 
FMRES_IGNORED







if ( !is_user_connected(pTouched) )



return 
FMRES_IGNORED







if ( !g_zombie[pTouched] )



return 
FMRES_IGNORED







new className[32]



pev(pToucherpev_classnameclassName31)







if ( 
equal(className"weaponbox") || equal(className"armoury_entity" ) || equal(className"weapon_shield" ) )



return 
FMRES_SUPERCEDE







return FMRES_IGNORED



}







public 
fw_EmitSound(idchannelsample[])



{



if(!
get_pcvar_num(zomb_switch))



return 
FMRES_IGNORED







if ( !is_user_alive(id) || !g_zombie[id] )



return 
FMRES_IGNORED







if ( sample[0] == 'w' && sample[1] == 'e' && sample[8] == 'k' && sample[9] == 'n' )



{



switch(
sample[17])



{



case 
'l': return FMRES_SUPERCEDE







case 's''w':



{



emit_sound(idCHAN_WEAPONmiss_zombie[random_num(0ZOMBIE_MISS 1)], VOL_NORMATTN_NORM0PITCH_NORM)



return 
FMRES_SUPERCEDE



}







case 
'b''1''2''3''4':



{



emit_sound(idCHAN_WEAPONhit_zombie[random_num(0ZOMBIE_HIT 1)], VOL_NORMATTN_NORM0PITCH_NORM)



return 
FMRES_SUPERCEDE



}



}



}



else if (
equal(sample,"items/nvg_on.wav") || (equal(sample,"items/nvg_off.wav")))



return 
FMRES_SUPERCEDE







return FMRES_IGNORED



}







public 
fw_Cmd(idhandleseed)



{



new 
impulse get_uc(handleUC_Impulse)



if (
impulse == 100 && g_zombie[id])



{



set_uc(handleUC_Impulse0)



}



return 
FMRES_HANDLED



}



public 
event_damage_scream(id)



{



if(!
get_pcvar_num(zomb_switch))



return 
PLUGIN_HANDLED







if(!is_user_alive(id))



return 
PLUGIN_HANDLED







if ( g_zombie[id] )



{



emit_sound(idCHAN_VOICEpain_zombie[random_num(0ZOMBIE_PAIN 1)], 1.0ATTN_NORM0PITCH_NORM)



} else {



emit_sound(idCHAN_VOICEpain_human[random_num(0HUMAN_PAIN 1)], 1.0ATTN_NORM0PITCH_NORM)



}



return 
PLUGIN_HANDLED



}







public 
event_damage(id)



{



if(!
get_pcvar_num(zomb_switch))



return 
PLUGIN_HANDLED







if(!is_user_alive(id))



return 
PLUGIN_HANDLED







new damage read_data(2)



new 
weaponhitzone



new attacker get_user_attacker(idweaponhitzone)







new 
Float:Random_Float[3]



for(new 
03i++) Random_Float[i] = random_float(100.0125.0)







new 
current_hp get_user_health(attacker)



new 
max_hp get_pcvar_num(zomb_hp)



new 
zdmg get_pcvar_num(zomb_zdmg)



new 
hdmg get_pcvar_num(zomb_hdmg)







current_hp += damage







if (attacker sizeof g_zombie)



return 
PLUGIN_CONTINUE







if ( g_zombie[attacker] && weapon == CSW_KNIFE )



{



if (
zdmg <= 0)



return 
PLUGIN_CONTINUE



else if (damage >= zdmg)



Punch_View(idRandom_Float)







if ( 
current_hp >= max_hp )



{



set_user_health(attackermax_hp)



} else {



set_user_health(attackercurrent_hp)



}



}



else if ( !
g_zombie[attacker] && hitzone == HIT_HEAD)



{



if (
hdmg <= 0)



return 
PLUGIN_CONTINUE



else if (damage >= hdmg)



Punch_View(idRandom_Float)



}







return 
PLUGIN_HANDLED



}







public 
clcmd_say(id)



{



if(!
get_pcvar_num(zomb_switch))



return 
PLUGIN_HANDLED







static ARGS[15]



read_args(ARGS,14)







remove_quotes(ARGS)







if(
equali(ARGS,"/help"))



{



zombie_help(id)



}



else if (
equali(ARGS,"/bm"))



{



if ( !
is_user_alive(id) )



{



client_print(idprint_center"%L"id"BUY_ALIVE")



return 
PLUGIN_HANDLED



}



else if ( 
g_zombie[id] )



{



client_print(idprint_center"%L"id"BUY_HUMAN")



return 
PLUGIN_HANDLED



}



else if ( !
cs_get_user_buyzone(id) )



{



client_print(idprint_center"%L"id"BUY_BUYZONE")



return 
PLUGIN_HANDLED



}



else if (!
buying)



{



new 
Float:time_buy get_cvar_float("mp_buytime") * 60



client_print
(idprint_center"%L"id"BUY_TIME"floatround(time_buy))



return 
PLUGIN_HANDLED



}



else



{



show_menu(idKeysmenu_1"\yBuy Menu\w^n^n1. .40 Dual Elites \y($800)\w^n2. INGRAM MAC-10 \y($1400)\w^n3. IDF Defender \y($2000)\w^n4. CV-47 \y($2500)\w^n5. KREIG 552 \y($3500)\w^n6. D3/AU-1 \y($5000)\w^n^n0. Exit")



}



return 
PLUGIN_HANDLED



}







return 
PLUGIN_CONTINUE



}







public 
zombie_help(id)



{



new 
help_title[64], len



static msg[2047]



format(help_title,63,"%L",id,"HELP_HEADER")



len format(msg,2046,"<body bgcolor=#f5f5f5><font color=#000000><br>")



len += format(msg[len],2046-len,"<center><h2>%L</h2><br><table><tr><td><p><b><font color=#000000>",id,"HELP_TITLE")



len += format(msg[len],2046-len,"<h2>%L</h2>",id,"HELP_OBJECTIVE")



len += format(msg[len],2046-len,"%L<br>",id,"HELP_ZOMBIE")







len += format(msg[len],2046-len,"%L<br>",id,"HELP_ZOMBIE_KNIFE")



len += format(msg[len],2046-len,"%L<br>",id,"HELP_ZOMBIE_NVG")



if (
get_pcvar_num(zomb_leap))



len += format(msg[len],2046-len,"%L<br>",id,"HELP_ZOMBIE_LEAP")



if (
get_pcvar_num(zomb_zdmg) >= 1)



len += format(msg[len],2046-len,"%L<br>",id,"HELP_ZOMBIE_HIT",get_pcvar_num(zomb_zdmg))







len += format(msg[len],2046-len,"<h2>%L</h2>",id,"HELP_HUMAN")



len += format(msg[len],2046-len,"%L<br>",id,"HELP_HUMAN_GUNS")



if (
get_pcvar_num(zomb_nvg))



len += format(msg[len],2046-len,"%L<br>",id,"HELP_HUMAN_NVG")



if (
get_pcvar_num(zomb_hdmg) >= 1)



len += format(msg[len],2046-len,"%L<br>",id,"HELP_HUMAN_HIT",get_pcvar_num(zomb_hdmg))







len += format(msg[len],2046-len,"<h2>%L</h2>",id,"HELP_TIPS")



len += format(msg[len],2046-len,"%L<br>",id,"HELP_TIPS_ONE")



len += format(msg[len],2046-len,"%L<br>",id,"HELP_TIPS_TWO")







len += format(msg[len],2046-len,"%L<br>",id,"HELP_ENJOY")



len += format(msg[len],2046-len,"</b><br></td></tr></table><br>Mini_Midget</center>")



show_motd(id,msg,help_title)



}







public 
buy_menu(idkey)



{



new 
money cs_get_user_money(id)







new 
dualcost 800



new mac10cost 1400



new idfcost 2000



new akcost 2500



new kreigcost 3500



new D3cost 5000







switch (key)



{



case 
0:



{



if(
money dualcost)



{



client_print(idprint_center"%L",id"BUY_MONEY"dualcost)



}



else



{



drop_sec(id)



cs_set_user_money(idmoney dualcost)



give_item(id,"weapon_elite")



}



}



case 
1:



{



if(
money mac10cost)



{



client_print(idprint_center"%L",id"BUY_MONEY"mac10cost)



}



else



{



drop_prim(id)



cs_set_user_money(idmoney mac10cost)



give_item(id,"weapon_mac10")



}



}



case 
2:



{



if(
money idfcost)



{



client_print(idprint_center"%L",id"BUY_MONEY"idfcost)



}



else



{



drop_prim(id)



cs_set_user_money(idmoney idfcost)



give_item(id,"weapon_galil")



}



}



case 
3:



{



if(
money akcost)



{



client_print(idprint_center"%L",id"BUY_MONEY"akcost)



}



else



{



drop_prim(id)



cs_set_user_money(idmoney akcost)



give_item(id,"weapon_ak47")



}



}



case 
4:



{



if(
money kreigcost)



{



client_print(idprint_center"%L",id"BUY_MONEY"kreigcost)



}



else



{



drop_prim(id)



cs_set_user_money(idmoney kreigcost)



give_item(id,"weapon_sg552")



}



}



case 
5:



{



if(
money D3cost)



{



client_print(idprint_center"%L",id"BUY_MONEY"D3cost)



}



else



{



drop_prim(id)



cs_set_user_money(idmoney D3cost)



give_item(id,"weapon_g3sg1")



}



}



case 
9:



return 
PLUGIN_HANDLED



}







return 
PLUGIN_HANDLED



}







public 
message_hostagepos(msg_id,msg_dest,msg_entity)



{



if(!
get_pcvar_num(zomb_obj))



return 
PLUGIN_CONTINUE







return PLUGIN_HANDLED;



}







public 
message_textmsg(msg_id,msg_dest,msg_entity)



{



if(!
bombMap || !get_pcvar_num(zomb_obj))



return 
PLUGIN_CONTINUE;







static 
message[16];



get_msg_arg_string(2message15);







if(
equal(message,"#Game_bomb_drop"))



return 
PLUGIN_HANDLED;







return 
PLUGIN_CONTINUE;



}







public 
message_ammopickup(msg_id,msg_dest,msg_entity)



{



if(!
bombMap || !get_pcvar_num(zomb_obj))



return 
PLUGIN_CONTINUE;







if(
get_msg_arg_int(1) == 14// C4



return PLUGIN_HANDLED;







return 
PLUGIN_CONTINUE;



}







public 
message_bombdrop(msg_id,msg_dest,msg_entity)



{



if(!
get_pcvar_num(zomb_obj))



return 
PLUGIN_HANDLED;







return 
PLUGIN_CONTINUE;



}







public 
message_scenario(msg_id,msg_dest,msg_entity)



{



if(
get_msg_args() > && get_pcvar_num(zomb_obj))



{



new 
sprite[8];



get_msg_arg_string(2sprite7);







if(
equal(sprite,"hostage"))



return 
PLUGIN_HANDLED;



}







return 
PLUGIN_CONTINUE;



}







public 
move_hostages()



{



new 
ent;



while((
ent fm_find_ent_by_class(ent,"hostage_entity")) != 0)



set_pev(entpev_originFloat:{8192.0,8192.0,8192.0});



}







//Stocks by VEN



stock drop_prim(id)



{



new 
weapons[32], num



get_user_weapons
(idweaponsnum)



for (new 
0numi++) {



if (
PRIMARY_WEAPONS_BIT_SUM & (1<<weapons[i]))



{



static 
wname[32]



get_weaponname(weapons[i], wnamesizeof wname 1)



engclient_cmd(id"drop"wname)



}



}



}







stock drop_sec(id)



{



new 
weapons[32], num



get_user_weapons
(idweaponsnum)



for (new 
0numi++)



{



if (
SECONDARY_WEAPONS_BIT_SUM & (2<<weapons[i]))



{



static 
wname[32]



get_weaponname(weapons[i], wnamesizeof wname 1)



engclient_cmd(id"drop"wname)



}



}



}



//Stock by Cheap_Suit



stock Punch_View(idFloat:ViewAngle[3])



{



entity_set_vector(idEV_VEC_punchangleViewAngle)



}



//Stock by v3x



stock maxclip(weapon)



{



new 
ca 0



switch (weapon)



{



case 
CSW_P228 ca 13



case CSW_SCOUT ca 10



case CSW_HEGRENADE ca 0



case CSW_XM1014 ca 7



case CSW_C4 ca 0



case CSW_MAC10 ca 30



case CSW_AUG ca 30



case CSW_SMOKEGRENADE ca 0



case CSW_ELITE ca 30



case CSW_FIVESEVEN ca 20



case CSW_UMP45 ca 25



case CSW_SG550 ca 30



case CSW_GALI ca 35



case CSW_FAMAS ca 25



case CSW_USP ca 12



case CSW_GLOCK18 ca 20



case CSW_AWP ca 10



case CSW_MP5NAVY ca 30



case CSW_M249 ca 100



case CSW_M3 ca 8



case CSW_M4A1 ca 30



case CSW_TMP ca 30



case CSW_G3SG1 ca 20



case CSW_FLASHBANG ca 0;



case 
CSW_DEAGLE ca 7



case CSW_SG552 ca 30



case CSW_AK47 ca 30



case CSW_P90 ca 50



}



return 
ca;



}



// Get entity's speed (from fakemeta_util)

stock fm_get_speed(entity)

{

    static 
Float:velocity[3]

    
pev(entitypev_velocityvelocity)

    

    return 
floatround(vector_length(velocity));

}





/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE



*{\\ rtf1\\ ansi\\ ansicpg1252\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang5129\\ f0\\ fs16 \n\\ par }



*/ 

Przeczytaj cały wpis

Odnośnik do komentarza
Udostępnij na innych stronach

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
 Udostępnij

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...