Raised This Month: $ Target: $400
 0% 

fm_set_user_frozen()


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
naven
Veteran Member
Join Date: Jun 2008
Location: Poland, Cieszyn
Old 03-15-2013 , 06:12   fm_set_user_frozen()
Reply With Quote #1

Hello, I am using this stock:
Code:
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;
}
After a headshot on frozen player their screen moves like an usual headshot, however it stays like that until player is unfrozen again. How do I get rid of that?
__________________
naven.com.pl
"At the end of the day, there are always going to be mental disorders and people who cause violence for no other reason than the fact that they're fucked up and lost. And all we can do is try to learn from it." Corey Taylor.
naven is offline
ConnorMcLeod
Veteran Member
Join Date: Jul 2006
Location: France (95)
Old 03-15-2013 , 08:36   Re: fm_set_user_frozen()
Reply With Quote #2

Try this :

PHP Code:
public OnCBasePlayer_TakeDamage_PostidiInflictoriAttackerFloat:flDamagebitsDamageType // return int
{
    if( 
pev(idpev_flags) & FL_FROZEN )
    {
        
set_pev(idpev_punchangle, {0.0,0.0,0.0})
    }
}

set_user_frozen(idbool:bFrozen)
{
    if( 
is_user_alive(id) )
    {
        new 
flags pev(idpev_flags);

        if( !!(
flags FL_FROZEN) != bFrozen )
        {
            
set_pev(idpev_flagsflags FL_FROZEN)
        }
    }

You may have to store velocity before freeze and restore it after freeze if player can have lot of HP, velocity is added and added each time player is taking damage.
__________________
- tired and retired -

- my plugins -

Last edited by ConnorMcLeod; 03-15-2013 at 08:39.
ConnorMcLeod is offline
naven
Veteran Member
Join Date: Jun 2008
Location: Poland, Cieszyn
Old 03-15-2013 , 12:50   Re: fm_set_user_frozen()
Reply With Quote #3

This seems to work, but after dying model is not falling to the ground but it stays there like a player was still alive.
__________________
naven.com.pl
"At the end of the day, there are always going to be mental disorders and people who cause violence for no other reason than the fact that they're fucked up and lost. And all we can do is try to learn from it." Corey Taylor.
naven is offline
Alekkkk
Member
Join Date: Mar 2012
Location: Bulgaria
Old 03-15-2013 , 13:01   Re: fm_set_user_frozen()
Reply With Quote #4

try this in plugin_init
PHP Code:
set_msg_blockget_user_msgid"ClCorpse" ), BLOCK_SET 
__________________
Alekkkk is offline
Send a message via Skype™ to Alekkkk
naven
Veteran Member
Join Date: Jun 2008
Location: Poland, Cieszyn
Old 03-15-2013 , 13:08   Re: fm_set_user_frozen()
Reply With Quote #5

It will block everything, this is not what I want.
__________________
naven.com.pl
"At the end of the day, there are always going to be mental disorders and people who cause violence for no other reason than the fact that they're fucked up and lost. And all we can do is try to learn from it." Corey Taylor.
naven is offline
ConnorMcLeod
Veteran Member
Join Date: Jul 2006
Location: France (95)
Old 03-15-2013 , 13:57   Re: fm_set_user_frozen()
Reply With Quote #6

It is not related, trie to remove freeze in Ham_Killed pre forward.
__________________
- tired and retired -

- my plugins -
ConnorMcLeod is offline
naven
Veteran Member
Join Date: Jun 2008
Location: Poland, Cieszyn
Old 03-15-2013 , 14:40   Re: fm_set_user_frozen()
Reply With Quote #7

Code:
RegisterHam(Ham_Killed , "player" , "Fw_HamKilled" , 0 );
Code:
public Fw_HamKilled( victim , attacker , souldgib )
{
	set_user_frozen(victim, false)
}
Did not work.
__________________
naven.com.pl
"At the end of the day, there are always going to be mental disorders and people who cause violence for no other reason than the fact that they're fucked up and lost. And all we can do is try to learn from it." Corey Taylor.
naven is offline
ConnorMcLeod
Veteran Member
Join Date: Jul 2006
Location: France (95)
Old 03-15-2013 , 18:05   Re: fm_set_user_frozen()
Reply With Quote #8

Show your code.
__________________
- tired and retired -

- my plugins -
ConnorMcLeod is offline
naven
Veteran Member
Join Date: Jun 2008
Location: Poland, Cieszyn
Old 03-15-2013 , 18:27   Re: fm_set_user_frozen()
Reply With Quote #9

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;
}
__________________
naven.com.pl
"At the end of the day, there are always going to be mental disorders and people who cause violence for no other reason than the fact that they're fucked up and lost. And all we can do is try to learn from it." Corey Taylor.

Last edited by naven; 03-15-2013 at 18:28.
naven is offline
ConnorMcLeod
Veteran Member
Join Date: Jul 2006
Location: France (95)
Old 03-15-2013 , 20:42   Re: fm_set_user_frozen()
Reply With Quote #10

If it is just about frostnade, you may want to use last avalanche version, i don't think he uses FL_FROZEN anymore.
__________________
- tired and retired -

- my plugins -
ConnorMcLeod is offline
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 21:42.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode