Re: fm_set_user_frozen()
Code:
#include <amxmodx>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>
#include <biohazard>
#include <fun>
#include <engine>
new const VERSION[] = "3.0";
#define AMMO_FLASHBANG 11
#define AMMO_HEGRENADE 12
#define AMMO_SMOKEGRENADE 13
#define OFFSET_SHIELD 510
#define HAS_SHIELD (1<<24)
#define USING_SHIELD (1<<16)
#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 ICON_HASNADE 1
#define ICON_ISCHILLED 2
#define STATUS_HIDE 0
#define STATUS_SHOW 1
#define STATUS_FLASH 2
#define FROST_RADIUS 350.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
#define TASK_REMOVE_CHILL 100
#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 TASK_REMOVE_FREEZE 200
#define TASK_NADE_EXPLODE 300
const OFFSET_MODELINDEX = 491 // Orangutanz
const OFFSET_LINUX = 5 // offsets 5 higher in Linux builds
new const MODEL_ENT_CLASSNAME[] = "player_model"
new g_ent_playermodel[33];
//new g_playermodel[33][32] // current model's short name [player][model]
new pcv_enabled, pcv_override, pcv_nadetypes, pcv_teams, pcv_price, pcv_roundlimit, pcv_buyzone, pcv_color,// pcv_icon,
pcv_by_radius, pcv_hitself, pcv_los, pcv_maxdamage, pcv_mindamage, pcv_chill_maxchance, pcv_chill_minchance,
pcv_chill_duration, pcv_chill_variance, pcv_chill_speed, pcv_freeze_maxchance, pcv_freeze_minchance,
pcv_freeze_duration, pcv_freeze_variance;
new maxPlayers, gmsgCurWeapon, gmsgScreenFade, /*gmsgStatusIcon,*/ gmsgBlinkAcct, gmsgAmmoPickup, gmsgTextMsg,
gmsgWeapPickup, glassGibs, trailSpr, exploSpr, czero, bot_quota, czBotHams, fwdPPT;
new isChilled[33], isFrozen[33], frostKilled[33], novaDisplay[33], Float:oldGravity[33], hasFrostNade[33],
boughtThisRound[33];
new g_msgDamage//, Array:model_human, Array:g_modelindex_human;
new was_frozen[33];
//new bool:g_frozen[33];
new bool:is_buried[33]
//new Float: vOrigin[33][3];
public plugin_init() {
register_plugin("FrostNades",VERSION,"Avalanche + naven");
register_cvar("fn_version",VERSION,FCVAR_SERVER);
is_biomod_active() ? plugin_init2() : pause("ad")
}
public plugin_init2()
{
pcv_enabled = register_cvar("fn_enabled","1");
pcv_override = register_cvar("fn_override","1");
pcv_nadetypes = register_cvar("fn_nadetypes","1");
pcv_teams = register_cvar("fn_teams","3");
pcv_price = register_cvar("fn_price","300");
pcv_roundlimit = register_cvar("fn_roundlimit","0");
pcv_buyzone = register_cvar("fn_buyzone","1");
//pcv_color = register_cvar("fn_color","0 206 209");
pcv_color = register_cvar("fn_color","0 100 255");
//pcv_icon = register_cvar("fn_icon","1");
pcv_by_radius = register_cvar("fn_by_radius","100.0");
pcv_hitself = register_cvar("fn_hitself","1");
pcv_los = register_cvar("fn_los","1");
pcv_maxdamage = register_cvar("fn_maxdamage","0.0");
pcv_mindamage = register_cvar("fn_mindamage","0.0");
pcv_chill_maxchance = register_cvar("fn_chill_maxchance","100.0");
pcv_chill_minchance = register_cvar("fn_chill_minchance","100.0");
pcv_chill_duration = register_cvar("fn_chill_duration","7.0");
pcv_chill_variance = register_cvar("fn_chill_variance","1.0");
pcv_chill_speed = register_cvar("fn_chill_speed","0.0");
pcv_freeze_maxchance = register_cvar("fn_freeze_maxchance","110.0");
pcv_freeze_minchance = register_cvar("fn_freeze_minchance","110.0");
pcv_freeze_duration = register_cvar("fn_freeze_duration","7.0");
pcv_freeze_variance = register_cvar("fn_freeze_variance","0.5");
register_clcmd("say tess", "tesst")
new mod[6];
get_modname(mod,5);
if(equal(mod,"czero"))
{
czero = 1;
bot_quota = get_cvar_pointer("bot_quota");
}
maxPlayers = get_maxplayers();
gmsgCurWeapon = get_user_msgid("CurWeapon");
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_event("ResetHUD", "event_resethud", "b");
register_event("HLTV","event_new_round","a","1=0","2=0"); // new round
register_logevent("event_round_end",2,"0=World triggered","1=Round_End");
g_msgDamage = get_user_msgid("Damage")
register_forward(FM_SetModel,"fw_setmodel",1);
register_message(get_user_msgid("DeathMsg"),"msg_deathmsg");
register_event("CurWeapon","event_curweapon","b","1=1");
//register_event("AmmoX","event_ammox","b","1=11","1=12","1=13"); // flash, HE, smoke
RegisterHam(Ham_Killed,"player","ham_player_killed",1);
RegisterHam(Ham_Killed , "player" , "Fw_HamKilled" , 0 );
RegisterHam(Ham_Think,"grenade","ham_grenade_think",0);
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");
//RegisterHam(Ham_TakeDamage, "player", "HamForwardTakedamage", 0 );
RegisterHam(Ham_TakeDamage, "player", "OnCBasePlayer_TakeDamage_Post", true)
}
public Fw_HamKilled( victim , attacker , souldgib )
{
set_user_frozen(victim, false)
}
public plugin_precache()
{
//model_human = ArrayCreate(32, 1)
//g_modelindex_human = ArrayCreate(1, 1)
precache_model("models/frostnova.mdl");
glassGibs = precache_model("models/glassgibs.mdl");
precache_sound("warcraft3/frostnova.wav"); // grenade explodes
precache_sound("warcraft3/impalehit.wav"); // player is frozen
precache_sound("warcraft3/impalelaunch1.wav"); // frozen wears off
precache_sound("player/pl_duct2.wav"); // player is chilled
precache_sound("items/gunpickup2.wav"); // player buys frostnade
precache_sound("biohazard/x.wav"); // player buys frostnade
trailSpr = precache_model("sprites/laserbeam.spr");
//smokeSpr = precache_model("sprites/steam1.spr");
exploSpr = precache_model("sprites/shockwave.spr");
}
public event_infect(victim, attacker)
{
if(was_frozen[victim])
{
}
was_frozen[victim] = 0;
is_buried[victim] = false;
}
public event_cure(id)
{
if(was_frozen[id])
{
//client_print(id, print_chat, "HYH!")
}
was_frozen[id] = 0;
}
public client_putinserver(id)
{
was_frozen[id] = 0;
isChilled[id] = 0;
isFrozen[id] = 0;
frostKilled[id] = 0;
novaDisplay[id] = 0;
oldGravity[id] = 1.0;
hasFrostNade[id] = 0;
boughtThisRound[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)
{
was_frozen[id] = 0;
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_Killed,id,"ham_player_killed",1);
czBotHams = 1;
}
}
/****************************************
* 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;
// Bipbip : zombie cant buy fn
if (is_user_zombie(id)) return PLUGIN_HANDLED;
if(get_pcvar_num(pcv_buyzone) && !cs_get_user_buyzone(id))
{
client_print(id,print_center,"You are not in a buy zone."); // #Cstrike_NotInBuyZone won't work
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_roundlimit);
if(limit && boughtThisRound[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_SMOKEGRENADE, ammoid = AMMO_SMOKEGRENADE, wpnName[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;
boughtThisRound[id]++;
cs_set_user_money(id,money - price);
new ammo = cs_get_user_bpammo(id,wpnid);
// give him one
if(!ammo) ham_give_weapon(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 ham_give_weapon or cs_set_user_bpammo
engfunc(EngFunc_EmitSound,id,CHAN_ITEM,"items/gunpickup2.wav",VOL_NORM,ATTN_NORM,0,PITCH_NORM);
return PLUGIN_HANDLED;
}
// new round starts
public event_new_round()
{
if(!get_pcvar_num(pcv_enabled)) return;
for(new i=1;i<=maxPlayers;i++)
{
is_buried[i] = false;
if(was_frozen[i])
{
set_task(2.0, "mdl")
set_task(5.0, "mdl")
set_task(8.0, "mdl")
set_task(9.0, "mdl")
}
// Remove glow on player model entity
//end
boughtThisRound[i] = 0;
if(is_user_alive(i))
{
if(isChilled[i]) task_remove_chill(TASK_REMOVE_CHILL+i);
if(isFrozen[i]) task_remove_freeze(TASK_REMOVE_FREEZE+i);
//cs_reset_user_model(i)
}
}
}
public mdl(id)
{
for(new i=1;i<=maxPlayers;i++)
{
if(is_user_connected(i))
{
cs_reset_user_model(i)
}
}
}
/*public mdl(i)
{
fm_set_playermodel_ent(i)
}*/
// the round ends
public event_round_end()
{
if(!get_pcvar_num(pcv_enabled)) return;
for(new i=1;i<=maxPlayers;i++)
{
if(is_user_alive(i))
{
//if(isChilled[i]) task_remove_chill(TASK_REMOVE_CHILL+i);
if(isFrozen[i]) task_remove_freeze(TASK_REMOVE_FREEZE+i);
}
}
}
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 type, csw;
if(model[7] == 'w' && model[8] == '_')
{
switch(model[9])
{
case 'h': { type = NT_HEGRENADE; csw = CSW_HEGRENADE; }
case 'f': { type = NT_FLASHBANG; csw = CSW_FLASHBANG; }
case 's': { type = NT_SMOKEGRENADE; csw = 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)))
{
hasFrostNade[owner] = 0;
set_pev(ent,pev_team,team);
set_pev(ent,pev_bInDuck,1); // flag it as a frostnade
new Float:rgb[3];
get_rgb_colors(team,rgb);
set_glowshell(ent,rgb,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(isFrozen[id])
{
//entity_set_vector(id, EV_VEC_origin, vOrigin[id])
set_pev(id,pev_velocity,Float:{0.0,0.0,0.0}); // stop motion
//engfunc(EngFunc_SetClientMaxspeed,id,0.00001); // keep immobile
engfunc(EngFunc_SetClientMaxspeed,id,0.000000001); // keep immobile
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;
is_buried[victim] = false;
return PLUGIN_CONTINUE;
}
// maintain speed on weapon changes
public event_curweapon(id)
{
if(get_pcvar_num(pcv_enabled) && is_user_connected(id))
{
manage_icon(id);
if(isChilled[id]) set_maxspeed(id);
}
}
// a player's grenade ammo changes
public event_ammox(id)
{
if(get_pcvar_num(pcv_enabled) && is_user_connected(id))
manage_icon(id);
}
// killed to death
public ham_player_killed(id)
{
hasFrostNade[id] = 0;
manage_icon(id);
set_user_frozen(id, false)
if(isChilled[id]) task_remove_chill(TASK_REMOVE_CHILL+id);
if(isFrozen[id]) task_remove_freeze(TASK_REMOVE_FREEZE+id);
}
// grenade is ticking away
public ham_grenade_think(ent)
{
// not a frostnade
if(!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 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(MSG_BROADCAST,SVC_TEMPENTITY);
write_byte(TE_SMOKE);
write_coord(floatround(nadeOrigin[0])); // x
write_coord(floatround(nadeOrigin[1])); // y
write_coord(floatround(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);
//client_cmd(0, "spk warcraft3/frostnova")
//emit_sound(ent,CHAN_BODY,"warcraft3/frostnova.wav",VOL_NORM,ATTN_NORM,0,PITCH_NORM);
// cache our cvars
new 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_maxchance, Float:freeze_minchance;
if(!by_radius)
{
freeze_maxchance = get_pcvar_float(pcv_freeze_maxchance);
freeze_minchance = get_pcvar_float(pcv_freeze_minchance);
}
new ta, Float:targetOrigin[3], Float:distance, tr = create_tr2(), Float:fraction, Float:damage, gotFrozen;
for(new target=1;target<=maxPlayers;target++)
{
// dead, invincible, or self attack that is not allowed
if(!is_user_alive(target) || !is_user_zombie(target) || pev(target,pev_takedamage) == DAMAGE_NO
|| (pev(target,pev_flags) & FL_GODMODE) ||(target == owner && !hitself))
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(ta) damage /= 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))))
{
gotFrozen = 1;
freeze_player(target,nadeTeam);
emit_sound(target,CHAN_BODY,"warcraft3/impalehit.wav",VOL_NORM,ATTN_NORM,0,PITCH_HIGH);
}
else
{
gotFrozen = 0;
//emit_sound(ent,CHAN_BODY,"warcraft3/frostnova.wav",VOL_NORM,ATTN_NORM,0,PITCH_NORM);
}
// chilled
if(by_radius || random_num(1,100) <= floatround(radius_calc(distance,FROST_RADIUS,chill_maxchance,chill_minchance)))
{
//client_cmd(target, "stopsound")
//client_cmd(0, "spk warcraft3/impalehit")
emit_sound(target,CHAN_BODY,"warcraft3/impalehit.wav",VOL_NORM,ATTN_NORM,0,PITCH_LOW)
chill_player(target,nadeTeam);
if(!gotFrozen) emit_sound(target,CHAN_BODY,"warcraft3/frostnova.wav",VOL_NORM,ATTN_NORM,0,PITCH_LOW);
}
//emit_sound(ent,CHAN_BODY,"warcraft3/frostnova.wav",VOL_NORM,ATTN_NORM,0,PITCH_NORM);
}
free_tr2(tr);
set_pev(ent,pev_flags,pev(ent,pev_flags)|FL_KILLME);
}
freeze_player(id,nadeTeam)
{
isFrozen[id] = nadeTeam;
was_frozen[id] = 1;
oldGravity[id] = get_class_data(get_user_class(id), DATA_GRAVITY);
//bury_player(id)
// register our forward only when we need it
if(!fwdPPT) fwdPPT = register_forward(FM_PlayerPreThink,"fw_playerprethink",0);
new Float:duration = get_pcvar_float(pcv_freeze_duration), Float:variance = get_pcvar_float(pcv_freeze_variance);
duration += random_float(-variance,variance);
//set_pev(id, pev_velocity, {0.0, 0.0, 0.0})
//client_cmd(id, "is_frozen")
//entity_get_vector(id, EV_VEC_origin, vOrigin[id])
//fm_set_user_frozen(id, 1)
message_begin(MSG_ONE_UNRELIABLE, g_msgDamage, _, id)
write_byte(0) // damage save
write_byte(0) // damage take
write_long(DMG_DROWN) // damage type - DMG_FREEZE
write_coord(0) // x
write_coord(0) // y
write_coord(0) // z
message_end()
remove_task(TASK_REMOVE_FREEZE+id);
set_task(duration,"task_remove_freeze",TASK_REMOVE_FREEZE+id);
//if(!pev_valid(novaDisplay[id])) create_nova(id);
}
/*
bury_player(victim){
if(is_buried[victim]) return PLUGIN_HANDLED;
new name[32], iwpns[32], nwpn[32], iwpn
get_user_name(victim,name,31)
get_user_weapons(victim,iwpns,iwpn)
for(new a=0;a<iwpn;++a) {
get_weaponname(iwpns[a],nwpn,31)
engclient_cmd(victim,"drop",nwpn)
}
engclient_cmd(victim,"weapon_knife")
new origin[3]
get_user_origin(victim, origin)
origin[2] -= 5;
set_user_origin(victim, origin)
is_buried[victim] = true;
return PLUGIN_HANDLED;
}
unbury_player(victim){
new name[32], origin[3]
get_user_name(victim,name,31)
get_user_origin(victim, origin)
origin[2] += 5
set_user_origin(victim, origin)
is_buried[victim] = false;
}
*/
/*
18:01 - Drirr: żle jest cos ustawione frostnova.wav ma działać jak nie zamrozi zadnego zombie granatem
impalehit.wav ma działać jak zamraza zombie
a impalelaunch1.wav ma działać przy odmrozeniu zombie i zeby towarzyszył efekt spadajacego lodu z modelu tak jak to było w tamtym pluginie
*/
/*
public task_remove_freeze(taskid)
{
new id = taskid-TASK_REMOVE_FREEZE;
if(pev_valid(novaDisplay[id]))
{
new origin[3], Float:originF[3];
pev(novaDisplay[id],pev_origin,originF);
FVecIVec(originF,origin);
// add some tracers
message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
write_byte(TE_IMPLOSION);
write_coord(origin[0]); // x
write_coord(origin[1]); // y
write_coord(origin[2] + 8); // z
write_byte(64); // radius
write_byte(10); // count
write_byte(3); // duration
message_end();
// add some sparks
message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
write_byte(TE_SPARKS);
write_coord(origin[0]); // x
write_coord(origin[1]); // y
write_coord(origin[2]); // z
message_end();
// add the shatter
message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
write_byte(TE_BREAKMODEL);
write_coord(origin[0]); // x
write_coord(origin[1]); // y
write_coord(origin[2] + 24); // z
write_coord(16); // size x
write_coord(16); // size y
write_coord(16); // size z
write_coord(random_num(-50,50)); // velocity x
write_coord(random_num(-50,50)); // velocity y
write_coord(25); // 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_BODY,"turret/tu_fire1.wav",VOL_NORM,ATTN_NORM,0,PITCH_LOW);
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
if(fwdPPT)
{
new i;
for(i=1;i<=maxPlayers;i++) if(isFrozen[i]) break;
if(i > maxPlayers)
{
unregister_forward(FM_PlayerPreThink,fwdPPT,0);
fwdPPT = 0;
}
}
}
*/
public task_remove_freeze(taskid)
{
new id = taskid-TASK_REMOVE_FREEZE;
//unbury_player(id)
//client_print(0, print_chat, "FD")
client_cmd(id, "spk warcraft3/impalelaunch1")
new nova = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"));
novaDisplay[id] = nova;
//if(pev_valid(novaDisplay[id]))
//{
/*new origin[3], Float:originF[3];
pev(novaDisplay[id],pev_origin,originF);
client_print(id, print_chat, "FD")
pev(id,pev_origin,originF);
FVecIVec(originF,origin);
// add some tracers
message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
write_byte(TE_IMPLOSION);
write_coord(origin[0]); // x
write_coord(origin[1]); // y
write_coord(origin[2] + 8); // z
write_byte(64); // radius
write_byte(10); // count
write_byte(3); // duration
message_end();
// add some sparks
message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
write_byte(TE_SPARKS);
write_coord(origin[0]); // x
write_coord(origin[1]); // y
write_coord(origin[2]); // z
message_end();
// add the shatter
message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
write_byte(TE_BREAKMODEL);
write_coord(origin[0]); // x
write_coord(origin[1]); // y
write_coord(origin[2] + 24); // z
write_coord(16); // size x
write_coord(16); // size y
write_coord(16); // size z
write_coord(random_num(-50,50)); // velocity x
write_coord(random_num(-50,50)); // velocity y
write_coord(25); // 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(taskid,CHAN_BODY,"warcraft3/impalelaunch1.wav",VOL_NORM,ATTN_NORM,0,PITCH_NORM)
emit_sound(novaDisplay[id],CHAN_BODY,"warcraft3/impalelaunch1.wav",VOL_NORM,ATTN_NORM,0,PITCH_LOW);
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
if(fwdPPT)
{
new i;
for(i=1;i<=maxPlayers;i++) if(isFrozen[i]) break;
if(i > maxPlayers)
{
unregister_forward(FM_PlayerPreThink,fwdPPT,0);
fwdPPT = 0;
}
}
if(!is_user_connected(id)) return;
set_maxspeed(id);
set_pev(id,pev_gravity,oldGravity[id]);
// sometimes trail fades during freeze, reapply
if(isChilled[id])
{
new Float:rgb[3];
get_rgb_colors(isChilled[id],rgb);
set_beamfollow(id,30,8,rgb,100);
}
else
{
// let other plugins change speed if they need to
new clip, weapon = get_user_weapon(id,clip);
emessage_begin(MSG_ONE,gmsgCurWeapon,_,id);
ewrite_byte(1); // is current
ewrite_byte(weapon); // weapon id
ewrite_byte(clip); // clip ammo
emessage_end();
}
}
//#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//W PRETHINKU entity_set_vector(id origin,
//POBIERZ W GLOBALU PRZY CHILL/FREEZE I TELEPORTUJ W RPETHINKU
//#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//start cnnor
public OnCBasePlayer_TakeDamage_Post( id, iInflictor, iAttacker, Float:flDamage, bitsDamageType ) // return int
{
if( pev(id, pev_flags) & FL_FROZEN )
{
set_pev(id, pev_punchangle, {0.0,0.0,0.0})
}
}
set_user_frozen(id, bool:bFrozen)
{
if( is_user_alive(id) )
{
new flags = pev(id, pev_flags);
if( !!(flags & FL_FROZEN) != bFrozen )
{
set_pev(id, pev_flags, flags ^ FL_FROZEN)
}
}
}
//end connor
chill_player(id,nadeTeam)
{
static currentmodel[32]
isChilled[id] = nadeTeam;
was_frozen[id] = 1;
set_maxspeed(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 Float:rgb[3];
get_rgb_colors(nadeTeam,rgb);
fm_cs_get_user_model(id, currentmodel, charsmax(currentmodel))
fm_set_playermodel_ent_render(id)
fm_set_rendering(g_ent_playermodel[id], kRenderFxGlowShell, 0, 100, 200, kRenderNormal, 25)
//fm_set_rendering(g_ent_playermodel[id], kRenderFxGlowShell, 0, 0, 255, kRenderNormal, 25)
//set_user_noclip(id, 1)
set_user_frozen(id, true)
//fm_set_user_frozen(id, 1)
//client_print(id, print_chat, "raz")
//set_pev(id,pev_movetype,MOVETYPE_NONE)
//start m
/*
new gmsgShake = get_user_msgid("ScreenShake")
message_begin(MSG_ONE, gmsgShake, {0,0,0}, id)
write_short(255<< 14 ) //ammount
write_short(10 << 14) //lasts this long
write_short(255<< 14) //frequency
message_end()
*/
//end m
// add a blue tint to their screen
message_begin(MSG_ONE,gmsgScreenFade,_,id);
write_short(floatround(4096.0 * duration)); // duration
write_short(floatround(2867.2 * duration)); // hold time (4096.0 * 0.7)
write_short(FFADE_IN); // flags
write_byte(floatround(rgb[0])); // red
write_byte(floatround(rgb[1])); // green
write_byte(floatround(rgb[2])); // blue
write_byte(100); // alpha
message_end();
}
public task_remove_chill(taskid)
{
new id = taskid-TASK_REMOVE_CHILL;
//client_print(0, print_chat, "aaa")
isChilled[id] = 0;
if(!is_user_connected(id)) return;
set_maxspeed(id);
clear_glowshell(id);
clear_beamfollow(id);
fm_set_rendering(g_ent_playermodel[id])
//set_pev(id,pev_movetype,MOVETYPE_WALK)
set_user_frozen(id, false)
//fm_set_user_frozen(id, 0)
//set_user_noclip(id, 0)
//fm_set_rendering(id) //buguje model zombie
// clear tint (might clear a flashbang?)
//start mod
/*
new origin[3];
new Float:originF[3];
pev(id,pev_origin,origin);
FVecIVec(originF,origin);
*/
new Float:origin[3];
pev(id,pev_origin,origin);
//origin[0] = -116.504539;
//origin[1] = -1603.576782;
//origin[2] = -430.968749;
// 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();
client_cmd(0, "spk warcraft3/impalelaunch1")
//emit_sound(id,CHAN_BODY,"warcraft3/impalelaunch1.wav",VOL_NORM,ATTN_NORM,0,PITCH_NORM);
//emit_sound(id,CHAN_BODY,"warcraft3/impalelaunch1.wav",VOL_NORM,ATTN_STATIC,0,PITCH_HIGH);
if(!isFrozen[id])
{
// let other plugins change speed if they need to
new clip, weapon = get_user_weapon(id,clip);
emessage_begin(MSG_ONE,gmsgCurWeapon,_,id);
ewrite_byte(1); // is current
ewrite_byte(weapon); // weapon id
ewrite_byte(clip); // clip ammo
emessage_end();
}
}
public tesst(id)
{
new Float:origin[3];
pev(id,pev_origin,origin);
//origin[0] = -116.504539;
//origin[1] = -1603.576782;
//origin[2] = -430.968749;
// 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_LOW);
}
// set my maxspeed to whatever it should be
set_maxspeed(id)
{
if(isFrozen[id]) return engfunc(EngFunc_SetClientMaxspeed,id,0.00001);
new Float:speed = get_class_data(get_user_class(id), DATA_SPEED);
if(isChilled[id]) speed *= (get_pcvar_float(pcv_chill_speed) / 100.0);
return engfunc(EngFunc_SetClientMaxspeed,id,speed);
}
manage_icon(id)
{
new status, team = _:cs_get_user_team(id);
// so if I have it, status = 1; if I also have it out, status = 2
if(get_pcvar_num(pcv_enabled))
{
if(hasFrostNade[id])
{
status = 1;
if(get_user_weapon(id) == hasFrostNade[id]) status = 2;
}
else if(get_pcvar_num(pcv_override) && (get_pcvar_num(pcv_teams) & team))
{
new weapon = get_user_weapon(id), types = get_pcvar_num(pcv_nadetypes);
if(types & NT_HEGRENADE)
{
if(cs_get_user_bpammo(id,CSW_HEGRENADE))
{
status = 1;
if(weapon == CSW_HEGRENADE) status = 2;
}
}
if(status != 2 && (types & NT_SMOKEGRENADE))
{
if(cs_get_user_bpammo(id,CSW_SMOKEGRENADE))
{
status = 1;
if(weapon == CSW_SMOKEGRENADE) status = 2;
}
}
if(status != 2 && (types & NT_FLASHBANG))
{
if(cs_get_user_bpammo(id,CSW_FLASHBANG))
{
status = 1;
if(weapon == CSW_FLASHBANG) status = 2;
}
}
}
}
}
//
// make the explosion effects
create_blast(team,Float:originF[3])
{
new origin[3];
FVecIVec(originF,origin);
new Float:rgbF[3], rgb[3];
get_rgb_colors(team,rgbF);
FVecIVec(rgbF,rgb);
// smallest ring
message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
write_byte(TE_BEAMCYLINDER);
write_coord(origin[0]); // x
write_coord(origin[1]); // y
write_coord(origin[2]); // z
write_coord(origin[0]); // x axis
write_coord(origin[1]); // y axis
write_coord(origin[2] + 385); // 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(MSG_BROADCAST,SVC_TEMPENTITY);
write_byte(TE_BEAMCYLINDER);
write_coord(origin[0]); // x
write_coord(origin[1]); // y
write_coord(origin[2]); // z
write_coord(origin[0]); // x axis
write_coord(origin[1]); // y axis
write_coord(origin[2] + 470); // 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(MSG_BROADCAST,SVC_TEMPENTITY);
write_byte(TE_BEAMCYLINDER);
write_coord(origin[0]); // x
write_coord(origin[1]); // y
write_coord(origin[2]); // z
write_coord(origin[0]); // x axis
write_coord(origin[1]); // y axis
write_coord(origin[2] + 555); // 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(MSG_BROADCAST,SVC_TEMPENTITY);
write_byte(TE_DLIGHT);
write_coord(origin[0]); // x
write_coord(origin[1]); // y
write_coord(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 glowshell
set_glowshell(ent,Float:rgb[3],Float:amount)
{
set_pev(ent,pev_renderfx,kRenderFxGlowShell);
set_pev(ent,pev_rendercolor,rgb);
set_pev(ent,pev_renderamt,amount);
}
// take away the glowshell
clear_glowshell(ent)
{
set_pev(ent,pev_renderfx,kRenderFxNone);
set_pev(ent,pev_rendercolor,Float:{255.0,255.0,255.0});
set_pev(ent,pev_renderamt,16.0);
}
// give an entity a beam trail
set_beamfollow(ent,life,width,Float: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(floatround(rgb[0])); // red
write_byte(floatround(rgb[1])); // green
write_byte(floatround(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 RGB colors from the cvar
get_rgb_colors(team,Float: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.0;
rgb[1] = 0.0;
rgb[2] = 0.0;
}
else
{
rgb[0] = 0.0;
rgb[1] = 0.0;
rgb[2] = 150.0;
}
}
else
{
parse(color,parts[0],3,parts[1],3,parts[2],3);
rgb[0] = floatstr(parts[0]);
rgb[1] = floatstr(parts[1]);
rgb[2] = floatstr(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));
}
// gives a player a weapon efficiently
stock ham_give_weapon(id,weapon[])
{
if(!equal(weapon,"weapon_",7)) return 0;
new wEnt = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,weapon));
if(!pev_valid(wEnt)) return 0;
set_pev(wEnt,pev_spawnflags,SF_NORESPAWN);
dllfunc(DLLFunc_Spawn,wEnt);
if(!ExecuteHamB(Ham_AddPlayerItem,id,wEnt))
{
if(pev_valid(wEnt)) set_pev(wEnt,pev_flags,pev(wEnt,pev_flags) | FL_KILLME);
return 0;
}
ExecuteHamB(Ham_Item_AttachToPlayer,wEnt,id)
return 1;
}
stock fm_set_rendering(entity, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16)
{
static Float:color[3]
color[0] = float(r)
color[1] = float(g)
color[2] = float(b)
set_pev(entity, pev_renderfx, fx)
set_pev(entity, pev_rendercolor, color)
set_pev(entity, pev_rendermode, render)
set_pev(entity, pev_renderamt, float(amount))
}
stock fm_set_playermodel_ent_render(id)
{
// Make original player entity invisible without hiding shadows or firing effects
fm_set_rendering(g_ent_playermodel[id], kRenderFxGlowShell, 0, 100, 200, kRenderNormal, 25)
// Format model string
static model[100]
//formatex(model, charsmax(model), "models/player/%s/%s.mdl", g_playermodel[id], g_playermodel[id])
formatex(model, charsmax(model), "models/player/slum/slum.mdl")
// Set model on entity or make a new one if unexistant
if (!pev_valid(g_ent_playermodel[id]))
{
g_ent_playermodel[id] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
if (!pev_valid(g_ent_playermodel[id])) return;
set_pev(g_ent_playermodel[id], pev_classname, MODEL_ENT_CLASSNAME)
set_pev(g_ent_playermodel[id], pev_movetype, MOVETYPE_FOLLOW)
set_pev(g_ent_playermodel[id], pev_aiment, id)
set_pev(g_ent_playermodel[id], pev_owner, id)
}
engfunc(EngFunc_SetModel, g_ent_playermodel[id], model)
}
// Get User Model -model passed byref-
stock fm_cs_get_user_model(player, model[], len)
{
get_user_info(player, "model", model, len)
}
stock fm_cs_set_user_model_index(id, value)
{
set_pdata_int(id, OFFSET_MODELINDEX, value, OFFSET_LINUX)
}
stock fm_set_user_frozen(client, frozen)
{
if( !is_user_alive(client) ) return 0;
new flags = pev(client, pev_flags);
if( frozen && !(flags & FL_FROZEN) )
{
set_pev(client, pev_flags, (flags | FL_FROZEN));
}
else if( !frozen && (flags & FL_FROZEN) )
{
set_pev(client, pev_flags, (flags & ~FL_FROZEN));
}
return 1;
}
|