Raised This Month: $ Target: $400
 0% 

Frostnade Random Color?


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
wundeR
Member
Join Date: Aug 2008
Location: Norway
Old 02-09-2010 , 01:06   Frostnade Random Color?
Reply With Quote #1

Hello, i need some help to fix this frostnade to be in randomcolor.

Can someone help me to fix it?


Sry for baad English.
Attached Files
File Type: sma Get Plugin or Get Source (frostnades.sma - 600 views - 32.9 KB)
__________________
Ehm?

wundeR is offline
Send a message via MSN to wundeR Send a message via Skype™ to wundeR
Old 03-01-2010, 06:30
Xide*
This message has been deleted by Xide*.
lazarev
Veteran Member
Join Date: Sep 2008
Old 03-01-2010 , 07:02   Re: Frostnade Random Color?
Reply With Quote #2

PHP Code:
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]);
        */
        
rgb[0] = random_float(140.0255.0)
        
rgb[1] = random_float(140.0255.0)
        
rgb[2] = random_float(140.0255.0)
    }

lazarev is offline
Xide*
Member
Join Date: Aug 2008
Location: Sweden, Norrkoping
Old 03-03-2010 , 11:59   Re: Frostnade Random Color?
Reply With Quote #3

Where to put in that part? (sry for bad eng)
__________________
EsP-Gaming.se - EsP-Gamings official website!

EsP-Gaming.se - HideNSeek - [EasyBlocks] -

IP: 85.190.11.48:27015

EsP-Gaming.se - HNS - [Noslowdown] {EuroMod}

IP: 94.254.126.11:27015
Xide* is offline
Send a message via MSN to Xide*
lazarev
Veteran Member
Join Date: Sep 2008
Old 03-03-2010 , 12:55   Re: Frostnade Random Color?
Reply With Quote #4

set "fn_color" to "random" to have random color
PHP Code:
#include <amxmodx>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>
    
new const VERSION[] =        "2.09";

#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 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
#define ICON_HASNADE        1
#define ICON_ISCHILLED        2
#define TASK_REMOVE_CHILL    100
#define TASK_REMOVE_FREEZE    200
#define TASK_NADE_EXPLODE    300
    
// used by regular_maxspeed near the bottom
new const Float:maxSpeed[31] = { 0.0250.00.0260.0250.0240.0250.0250.0240.0250.0250.0250.0,
    
250.0210.0240.0240.0250.0250.0210.0250.0220.0230.0230.0250.0210.0250.0250.0,
    
235.0221.0250.0245.0 };

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 
maxPlayersgmsgCurWeapongmsgSetFOVgmsgScreenFadegmsgStatusIcongmsgBlinkAcctgmsgAmmoPickupgmsgTextMsg,
gmsgWeapPickupglassGibstrailSprsmokeSprexploSprmp_friendlyfireczerobot_quotaczBotHamsfwdPPTfreezetime;

new 
isChilled[33], isFrozen[33], frostKilled[33], novaDisplay[33], Float:glowColor[33][3], Float:oldGravity[33], oldRenderFx[33], Float:chillySpeed[33],
Float:oldRenderColor[33][3], oldRenderMode[33], Float:oldRenderAmt[33], hasFrostNade[33], nadesBought[33], Float:flashOver[33], lastWeapon[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","4"); // NT_SMOKEGRENADE
    
pcv_teams register_cvar("fn_teams","3");
    
pcv_price register_cvar("fn_price","300");
    
pcv_limit register_cvar("fn_limit","0");
    
pcv_buyzone register_cvar("fn_buyzone","1");
    
pcv_color register_cvar("fn_color","0 206 209");
    
pcv_icon register_cvar("fn_icon","1");

    
pcv_by_radius register_cvar("fn_by_radius","0.0");
    
pcv_hitself register_cvar("fn_hitself","1");
    
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","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","60.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();
    
gmsgCurWeapon get_user_msgid("CurWeapon");
    
gmsgSetFOV get_user_msgid("SetFOV");
    
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("ScreenFade","event_flashed","be","4=255","5=255","6=255","7>199"); // hit by a flashbang

    
register_forward(FM_SetModel,"fw_setmodel",1);
    
register_message(get_user_msgid("DeathMsg"),"msg_deathmsg");

    
register_event("SetFOV","event_setfov","b");
    
register_event("CurWeapon","event_curweapon","b","1=1");
    
register_event("AmmoX","event_ammox","b","1=11","1=12","1=13"); // flash, HE, smoke
        
    
register_event("HLTV","event_new_round","a","1=0","2=0");
    
register_logevent("logevent_round_start",2,"1=Round_Start");

    
RegisterHam(Ham_Spawn,"player","ham_player_spawn",1);
    
RegisterHam(Ham_Killed,"player","ham_player_killed",1);
    
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");
}

public 
plugin_precache()
{
    
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

    
trailSpr precache_model("sprites/laserbeam.spr");
    
smokeSpr precache_model("sprites/steam1.spr");
    
exploSpr precache_model("sprites/shockwave.spr");
}

public 
client_putinserver(id)
{
    
isChilled[id] = 0;
    
isFrozen[id] = 0;
    
frostKilled[id] = 0;
    
novaDisplay[id] = 0;
    
hasFrostNade[id] = 0;
    
chillySpeed[id] = 0.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);
        
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;

    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_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(!ammoham_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;
}

// the round ends or starts
public event_round_change()
{
    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);
        }
    }
}

// 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);
        }
    }
}

// flashbanged
public event_flashed(id)
{
    
// remember end of flashbang
    
flashOver[id] = get_gametime() + (float(read_data(1)) / 4096.0);
}

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)))
    {
        
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);
        
        
// glowshell
        
set_pev(ent,pev_rendermode,kRenderNormal);
        
set_pev(ent,pev_renderfx,kRenderFxGlowShell);
        
set_pev(ent,pev_rendercolor,rgb);
        
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
        
engfunc(EngFunc_SetClientMaxspeed,id,0.00001); // 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;
    return 
PLUGIN_CONTINUE;
}

// maintain speed on FOV changes
public event_setfov(id)
{
    if(
get_pcvar_num(pcv_enabled) && is_user_alive(id) && isChilled[id] && !isFrozen[id])
    {
        new 
Float:maxspeed;
        
pev(id,pev_maxspeed,maxspeed);
        if(
maxspeed != chillySpeed[id]) engfunc(EngFunc_SetClientMaxspeed,id,chillySpeed[id]);
    }
}

// maintain speed on weapon changes
public event_curweapon(id)
{
    new 
weapon read_data(2);

    if(
get_pcvar_num(pcv_enabled) && is_user_alive(id))
    {
        if(
isChilled[id] && weapon != lastWeapon[id])
        {
            new 
Float:maxspeed;
            
pev(id,pev_maxspeed,maxspeed);
            
chillySpeed[id] = maxspeed get_pcvar_float(pcv_chill_speed) / 100.0;
            if(!
isFrozen[id]) engfunc(EngFunc_SetClientMaxspeed,id,chillySpeed[id]);
        }

        if(
isFrozen[id]) engfunc(EngFunc_SetClientMaxspeed,id,0.00001);

        if(
get_pcvar_num(pcv_icon) == ICON_HASNADEmanage_icon(id,ICON_HASNADE);
    }

    
lastWeapon[id] = weapon;
}

// a player's grenade ammo changes
public event_ammox(id)
{
    if(
get_pcvar_num(pcv_enabled) && is_user_connected(id))
    {
        if(
hasFrostNade[id] && !cs_get_user_bpammo(id,hasFrostNade[id])) hasFrostNade[id] = 0// just lost my frost grenade
        
if(get_pcvar_num(pcv_icon) == ICON_HASNADEmanage_icon(id,ICON_HASNADE);
    }
}

public 
event_new_round()
{
    
freezetime 1;
}

public 
logevent_round_start()
{
    
freezetime 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);
    }
}

// killed to death
public ham_player_killed(id)
{
    
// these two should technically be caught by ammox first
    
hasFrostNade[id] = 0;
    if(
get_pcvar_num(pcv_icon) == ICON_HASNADEmanage_icon(id,ICON_HASNADE);

    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 FMRES_IGNORED;
    
    new 
Float:dmgtime;
    
pev(ent,pev_dmgtime,dmgtime);
    if(
dmgtime get_gametime()) return FMRES_IGNORED;
    
    
// and boom goes the dynamite
    
frostnade_explode(ent);

    return 
FMRES_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);
    
emit_sound(ent,CHAN_BODY,"warcraft3/frostnova.wav",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;
    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))))
        {
            
gotFrozen 1;

            
freeze_player(target,nadeTeam);
            
emit_sound(target,CHAN_BODY,"warcraft3/impalehit.wav",VOL_NORM,ATTN_NORM,0,PITCH_HIGH);
        }
        else 
gotFrozen 0;
        
        
// chilled
        
if(by_radius || random_num(1,100) <= floatround(radius_calc(distance,FROST_RADIUS,chill_maxchance,chill_minchance)))
        {
            
chill_player(target,nadeTeam);
            if(!
gotFrozenemit_sound(target,CHAN_BODY,"player/pl_duct2.wav",VOL_NORM,ATTN_NORM,0,PITCH_LOW);
        }
    }

    
free_tr2(tr);
    
set_pev(ent,pev_flags,pev(ent,pev_flags)|FL_KILLME);
}

freeze_player(id,nadeTeam)
{
    if(!
isFrozen[id])
    {
        
//oldGravity[id] = 1.0;
        
pev(id,pev_gravity,oldGravity[id]);

        
// register our forward only when we need it
        
if(!fwdPPTfwdPPT register_forward(FM_PlayerPreThink,"fw_playerprethink",0);
        
        if(!
chillySpeed[id])
        {
            new 
Float:maxspeed;
            
pev(id,pev_maxspeed,maxspeed);
            
chillySpeed[id] = maxspeed get_pcvar_float(pcv_chill_speed) / 100.0;
        }
    }

    
isFrozen[id] = nadeTeam;
    
    
set_pev(id,pev_velocity,Float:{0.0,0.0,0.0});
    
engfunc(EngFunc_SetClientMaxspeed,id,0.00001);
    
    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_ISCHILLEDmanage_icon(id,ICON_ISCHILLED);
}

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,"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
    
unregister_prethink();

    if(!
is_user_connected(id)) return;
    
    
restore_speed(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);
    }
    
    if(
get_pcvar_num(pcv_icon) == ICON_ISCHILLEDmanage_icon(id,ICON_ISCHILLED);
}

chill_player(id,nadeTeam)
{
    
// 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

        
if(!isFrozen[id])
        {
            new 
Float:maxspeed;
            
pev(id,pev_maxspeed,maxspeed);
            
chillySpeed[id] = maxspeed get_pcvar_float(pcv_chill_speed) / 100.0;
            
engfunc(EngFunc_SetClientMaxspeed,id,chillySpeed[id]);
        }

        
// register our forward only when we need it
        //if(!fwdPPT) fwdPPT = register_forward(FM_PlayerPreThink,"fw_playerprethink",0);
    
}
    
    
isChilled[id] = nadeTeam;
    
    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);
    
    
glowColor[id] = rgb;
    
    
// glowshell
    
set_pev(id,pev_rendermode,kRenderNormal);
    
set_pev(id,pev_renderfx,kRenderFxGlowShell);
    
set_pev(id,pev_rendercolor,rgb);
    
set_pev(id,pev_renderamt,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(floatround(rgb[0])); // red
    
write_byte(floatround(rgb[1])); // green
    
write_byte(floatround(rgb[2])); // blue
    
write_byte(100); // alpha
    
message_end();
    
    if(
get_pcvar_num(pcv_icon) == ICON_ISCHILLEDmanage_icon(id,ICON_ISCHILLED);
}

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;

    if(!
isFrozen[id]) restore_speed(id);
    
chillySpeed[id] = 0.0;

    
// reset rendering
    
set_pev(id,pev_renderfx,oldRenderFx[id]);
    
set_pev(id,pev_rendercolor,oldRenderColor[id]);
    
set_pev(id,pev_rendermode,oldRenderMode[id]);
    
set_pev(id,pev_renderamt,oldRenderAmt[id]);

    
clear_beamfollow(id);
    
    
// not blinded
    
if(get_gametime() >= flashOver[id])
    {
        
// 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_ISCHILLEDmanage_icon(id,ICON_ISCHILLED);
}

// set maxspeed back to regular
restore_speed(id)
{
    if(
freezetime) return;

    
engfunc(EngFunc_SetClientMaxspeed,id,regular_maxspeed(id));

    
lastWeapon[id] = 0;

    new 
clipweapon 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();

    new 
Float:fov;
    
pev(id,pev_fov,fov);
    
emessage_begin(MSG_ONE,gmsgSetFOV,_,id);
    
ewrite_byte(floatround(fov));
    
emessage_end();
}

// 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,"models/frostnova.mdl");

    
// 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:playerMins[3], Float:novaOrigin[3];
    
pev(id,pev_mins,playerMins);
    
pev(id,pev_origin,novaOrigin);
    
novaOrigin[2] += playerMins[2];
    
engfunc(EngFunc_SetOrigin,nova,novaOrigin);

    
// make it translucent
    
get_rgb_colors(isFrozen[id],angles); // let's just use angles
    
set_pev(nova,pev_rendercolor,angles); // ^
    
set_pev(nova,pev_rendermode,kRenderTransColor);
    
set_pev(nova,pev_renderamt,100.0);

    
novaDisplay[id] = nova;
}

// manage our snowflake (show it, hide it, flash it?)
manage_icon(id,mode)
{
    new 
statusteam _:cs_get_user_team(id);
    
    if(
get_pcvar_num(pcv_enabled))
    {
        
// so if I have it, status = 1; if I also have it out, status = 2
        
if(mode == ICON_HASNADE)
        {
            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_HEGRENADEstatus 2;
                    }
                }
                if(
status != && (types NT_SMOKEGRENADE))
                {
                    if(
cs_get_user_bpammo(id,CSW_SMOKEGRENADE))
                    {
                        
status 1;
                        if(
weapon == CSW_SMOKEGRENADEstatus 2;
                    }
                }
                if(
status != && (types NT_FLASHBANG))
                {
                    if(
cs_get_user_bpammo(id,CSW_FLASHBANG))
                    {
                        
status 1;
                        if(
weapon == CSW_FLASHBANGstatus 2;
                    }
                }
            }
        }
        else 
// ICON_ISCHILLED
        
{
            if(
isFrozen[id]) status 2;
            else if(
isChilled[id]) status 1;
        }
    }
    
    new 
Float:rgb[3];
    if(
statusget_rgb_colors(team,rgb); // only get colors if we need to
    
    
message_begin(MSG_ONE_UNRELIABLE,gmsgStatusIcon,_,id);
    
write_byte(status); // status (0=hide, 1=show, 2=flash)
    
write_string("dmg_cold"); // sprite name
    
write_byte(floatround(rgb[0])); // red
    
write_byte(floatround(rgb[1])); // green
    
write_byte(floatround(rgb[2])); // blue
    
message_end();
}

/****************************************
* UTILITY FUNCTIONS
****************************************/

// check if prethink is still being used, if not, unhook it
unregister_prethink()
{
    if(
fwdPPT)
    {
        new 
i;
        for(
i=1;i<=maxPlayers;i++) if(isChilled[i] || isFrozen[i]) break;
        if(
maxPlayers)
        {
            
unregister_forward(FM_PlayerPreThink,fwdPPT,0);
            
fwdPPT 0;
        }
    }
}

// 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 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 the regular maxspeed for this player based on his weapon
Float:regular_maxspeed(id)
{
    if(!
is_user_alive(id)) return 0.0;
    
    new 
shield get_pdata_int(id,OFFSET_SHIELD);
    if(
shield USING_SHIELD) return 180.0;
    if(
shield HAS_SHIELD) return 250.0;
    
    new 
weapon get_user_weapon(id);
    if(
weapon || weapon 30) return 0.0;
    
    return 
maxSpeed[weapon];
}

// 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 if(
equali(color,"random"5))
    {
        
rgb[0] = random_float(140.0255.0)
        
rgb[1] = random_float(140.0255.0)
        
rgb[2] = random_float(140.0255.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;

lazarev is offline
Xide*
Member
Join Date: Aug 2008
Location: Sweden, Norrkoping
Old 03-03-2010 , 18:25   Re: Frostnade Random Color?
Reply With Quote #5

Thanks man!
__________________
EsP-Gaming.se - EsP-Gamings official website!

EsP-Gaming.se - HideNSeek - [EasyBlocks] -

IP: 85.190.11.48:27015

EsP-Gaming.se - HNS - [Noslowdown] {EuroMod}

IP: 94.254.126.11:27015
Xide* is offline
Send a message via MSN to Xide*
wundeR
Member
Join Date: Aug 2008
Location: Norway
Old 03-21-2010 , 05:51   Re: Frostnade Random Color?
Reply With Quote #6

Tanks!
__________________
Ehm?

wundeR is offline
Send a message via MSN to wundeR Send a message via Skype™ to wundeR
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 07:17.


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