UGX-Mods Login

or login with an authentication provider below
Sign In with Google
Sign In with Twitter
Sign In with Discord
Sign In with Steam
Sign In with Facebook
Sign In with Twitch

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Topics - UndeadGaming

Hello there ! As you have seen by now my name is UndeadGaming and i am a donor in this forum.Today i would like to discuss the possibility of UGX becoming more than just a zombies community.As a young person of my age my mind is open to a lot of imagination and alot hope.At this current time i play 5 main games(Call Of Duty World At War,Warface ,Dead Realm, Garry's Mod,Metin2 and Call Of Duty Black Ops 1&2).These games might seem limited but thats because i have exams coming up which is not relevant .Anyway i would like to propose a suggestion based on the miracles i have seen preformed by the current UGX Staff. 

As we all know UGX is not the only gaming forum out there.We have ElitePvPers and Zombiemodding etc.(The count is endless).I feel that UGX could duplicate the wide range of games that Epvp(ElitePvPers) has.In my opinion i would like to see UGX cover more games then just the zombie based ones to bring more people together and to increase the popularity of the forum.Here are some advantages and disadvantages in the effect this idea could cause if it was ever to be brought into action.

Advantages 
1.Has the potential to bring more active members to ugx.
2.Members could contribute alot more to the community as not everyone's heart is with mapping.
3.Has the potential to bring more experienced and willing staff applicants to manage some a huge range of gaming.
4.More people would be willing to pay for V.I.P due to the range of games that members could have special access in some of the forums.
5.Gives the current staff the experience of seeing not only zombie based games
6.Gives the opportunity for current mappers and scripters to participate in other games
7.Gives UGX another sense of purpose and publicity

And Alot More...........


Disadvantages 
1.Higher threat of being hacked
2.Could bring the current forum down for some time if these actions were to take place
3.More strain on the databases
4.If we use the current chat it could overload with members
5.The risk of destroying some group titles in order for most of the titles to become universal
6.A whole redesign on the forum could take ages
7.Not many staff might not know most of the games
8.Requires alot of work
9.More staff are required to this action if it was to take place
10.Having more staff on UGX Ts3 Server(More channels)

Thats it.......


Ok i have to admit i might not be the most liked in this forum but im sure some people out there would love to see a nice and friendly forum where they can post their games and hobbies and im sure some of the current UGX members would like to see a brand new light on UGX after the unfortunate incident with the map Oil Rig going up for beta.Below is a poll Please answer as honest as you can.Dont think about the person who the poll was created by , think about the reason why it was created.
8 years ago
does anyone know the soundtrack behind the gameplay trailer of the giant
! No longer available
https://www.youtube.com/watch?v=OnnhV8rXEmc
8 years ago
Guys i think as respected members such as GUNNS4HIRE and meatwaggon22 (YouAlwaysWin) and other UGX respected Youtubers should have their own rank like donors.What do you think?

9 years ago
hey guys me and my mate are stuck with the mule kick script its broken and we dont know how to fix it so i was wondering if any of you can spot what we are missing
Code Snippet
Plaintext
#include maps\_utility; 
#include common_scripts\utility;
#include maps\_zombiemode_utility;

init()
{
vending_triggers = GetEntArray( "zombie_vending_black_ops", "targetname" );


if ( vending_triggers.size < 1 )
{
return;
}


// this map uses atleast 1 perk machine
PrecacheItem( "zombie_perk_bottle_doubletap" );
PrecacheItem( "zombie_perk_bottle_jugg" );
PrecacheItem( "zombie_perk_bottle_revive" );
PrecacheItem( "zombie_perk_bottle_sleight" );

PrecacheItem( "t6_wpn_zmb_perk_bottle_cherry_view" );

PrecacheShader( "vending_phd_shader" );       
PrecacheShader( "vending_staminup_shader" );
PrecacheShader( "vending_mule_kick_shader" );       
PrecacheShader( "vending_deadshot_shader" );

PrecacheShader( "vending_electric_cherry_shader" );

level._effect["sleight_light"] = loadfx("misc/fx_zombie_cola_on");
level._effect["doubletap_light"] = loadfx("misc/fx_zombie_cola_dtap_on");
level._effect["jugger_light"] = loadfx("misc/fx_zombie_cola_jugg_on");
level._effect["revive_light"] = loadfx("misc/fx_zombie_cola_revive_on");
level._effect["packapunch_fx"] = loadfx("maps/zombie/fx_zombie_packapunch");




//level._effect["sleight_light"] = loadfx("misc/fx_zombie_cola_on");


set_zombie_var( "zombie_perk_cost", 2000 );
set_zombie_var( "zombie_perk_juggernaut_health", 320 );

// this map uses atleast 1 perk machine



array_thread( vending_triggers, ::vending_trigger_think );
//array_thread( vending_triggers, :: electric_perks_dialog);

}

bo_perks_thread()
{
players = getplayers();
for(i=0;i<players.size;i++)
{
players[i] thread staminup();
players[i] thread deadshot();
players[i] thread mulekick();
}
}

vending_trigger_think()
{

//self thread turn_cola_off();

perk = self.script_noteworthy;

self SetHintString( &"ZOMBIE_FLAMES_UNAVAILABLE" );

self SetCursorHint( "HINT_NOICON" );
self UseTriggerRequireLookAt();

notify_name = perk + "_power_on";
flag_wait("electricity_on");
//level waittill( notify_name );

perk_hum = spawn("script_origin", self.origin);
perk_hum playloopsound("perks_machine_loop");

self thread check_player_has_perk(perk);

self vending_set_hintstring(perk);

for( ;; )
{
self waittill( "trigger", player );
index = maps\_zombiemode_weapons::get_player_index(player);

cost = level.zombie_vars["zombie_perk_cost"];
switch( perk )
{
case "specialty_fireproof": //cherry
cost = 3000;
break;

case "specialty_detectexplosive": //phd flopper
cost = 2000;
break;

case "specialty_longersprint": //staminup
cost = 2000;
break;

case "specialty_extraammo": //mule kick
cost = 4000;
break;

case "specialty_bulletaccuracy": //deadshot
cost = 1500;
break;
}

if (player maps\_laststand::player_is_in_laststand() )
{
continue;
}

if(player in_revive_trigger())
{
continue;
}

if( player isThrowingGrenade() )
{
wait( 0.1 );
continue;
}

if( player isSwitchingWeapons() )
{
wait(0.1);
continue;
}

if ( player HasPerk( perk ) )
{
cheat = false;

/#
if ( GetDVarInt( "zombie_cheat" ) >= 5 )
{
cheat = true;
}
#/
}

if ( player.score < cost )
{
//player iprintln( "Not enough points to buy Perk: " + perk );
self playsound("deny");
player thread play_no_money_perk_dialog();
continue;
}

sound = "bottle_dispense3d";
player achievement_notify( "perk_used" );
playsoundatposition(sound, self.origin);
player maps\_zombiemode_score::minus_to_player_score( cost );
///bottle_dispense
switch( perk )
{
case "specialty_detectexplosive":
sound = "mx_jugger_sting";


default:
sound = "mx_jugger_sting";
break;
}

//self thread play_vendor_stings(sound);

//self waittill("sound_done");


// do the drink animation
gun = player perk_give_bottle_begin(perk);
player.is_drinking = 1;
player waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" );

// restore player controls and movement
player perk_give_bottle_end( gun, perk);
player.is_drinking = undefined;
// TODO: race condition?
if ( player maps\_laststand::player_is_in_laststand() )
{
continue;
}

player SetPerk( perk );
//player thread perk_vo("specialty_armorvest");
player setblur( 4, 0.1 );
wait(0.1);
player setblur(0, 0.1);
//earthquake (0.4, 0.2, self.origin, 100);
if(perk == "specialty_armorvest")
{
player.maxhealth = level.zombie_vars["zombie_perk_juggernaut_health"];
player.health = level.zombie_vars["zombie_perk_juggernaut_health"];
player.health = 320;
}


player perk_hud_create( perk );

//stat tracking
player.stats["perks"]++;

//player iprintln( "Bought Perk: " + perk );
bbPrint( "zombie_uses: playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type perk",
player.playername, player.score, level.round_number, cost, perk, self.origin );

player thread perk_think( perk );

}
}



vending_set_hintstring( perk )
{
switch( perk )
{
case "specialty_fireproof":
self SetHintString( "Press & hold &&1 to buy Electric Cherry [Cost: 3000]" );
break;

case "specialty_detectexplosive":
self SetHintString( "Press & hold &&1 to buy PHD-Flopper [Cost: 2000]" );
break;

case "specialty_longersprint":
self SetHintString( "Press & hold &&1 to buy Stamin-up [Cost: 3000]" );
break;

case "specialty_extraammo":
self SetHintString( "Press & hold &&1 to buy Mule Kick [Cost: 4000]" );
break;

case "specialty_bulletaccuracy":
self SetHintString( "Press & hold &&1 to buy DeadShot Daquiri [Cost: 1500]" );
break;

default:
self SetHintString( perk + " Cost: " + level.zombie_vars["zombie_perk_cost"] );
break;

}
}


perk_think( perk )
{
self waittill_any( "fake_death", "death", "player_downed" );

self UnsetPerk( "specialty_detectexplosive" );
self UnsetPerk( "specialty_longersprint" );
self UnsetPerk( "specialty_extraammo" );
self UnsetPerk( "specialty_bulletaccuracy" );
self.maxhealth = 100;
self perk_hud_destroy( perk );
//self iprintln( "Perk Lost: " + perk );
}


perk_hud_create( perk )
{
if ( !IsDefined( self.perk_hud ) )
{
self.perk_hud = [];
}

shader = "";

switch( perk )
{
case "specialty_fireproof":
shader = "vending_electric_cherry_shader";
break;

case "specialty_detectexplosive":
shader = "vending_phd_shader";
break;

case "specialty_longersprint":
shader = "vending_staminup_shader";
break;

case "specialty_extraammo":
shader = "vending_mule_kick_shader";
break;

case "specialty_bulletaccuracy":
shader = "vending_deadshot_shader";
break;

case "specialty_armorvest":
shader = "specialty_juggernaut_zombies";
break;

case "specialty_quickrevive":
shader = "specialty_quickrevive_zombies";
break;

case "specialty_fastreload":
shader = "specialty_fastreload_zombies";
break;

case "specialty_rof":
shader = "specialty_doubletap_zombies";
break;

default:
shader = "";
break;
}

hud = create_simple_hud( self );
hud.foreground = true;
hud.sort = 1;
hud.hidewheninmenu = false;
hud.alignX = "left";
hud.alignY = "bottom";
hud.horzAlign = "left";
hud.vertAlign = "bottom";
hud.x = self.perk_hud.size * 30;
hud.y = hud.y - 70;
hud.alpha = 1;
hud SetShader( shader, 24, 24 );

self.perk_hud[ perk ] = hud;
}


perk_hud_destroy( perk )
{
self.perk_hud[ perk ] destroy_hud();
self.perk_hud[ perk ] = undefined;
}



perk_give_bottle_end( gun, perk )
{
assert( gun != "zombie_perk_bottle_doubletap" );
assert( gun != "zombie_perk_bottle_revive" );
assert( gun != "zombie_perk_bottle_jugg" );
assert( gun != "zombie_perk_bottle_sleight" );
assert( gun != "syrette" );

self EnableOffhandWeapons();
self EnableWeaponCycling();

self AllowLean( true );
self AllowAds( true );
self AllowSprint( true );
self AllowProne( true );
self AllowMelee( true );
weapon = "";
switch( perk )
{
case "specialty_fireproof":
//weapon = "t6_wpn_zmb_perk_bottle_cherry_view";
weapon = "zombie_perk_bottle_revive";
break;

case "specialty_detectexplosive":
weapon = "zombie_perk_bottle_revive";
break;

case "specialty_longersprint":
weapon = "zombie_perk_bottle_doubletap";
break;

case "specialty_extraammo":
weapon = "zombie_perk_bottle_sleight";
break;

case "specialty_bulletaccuracy":
weapon = "zombie_perk_bottle_doubletap";
break;
}

// TODO: race condition?
if ( self maps\_laststand::player_is_in_laststand() )
{
self TakeWeapon(weapon);
return;
}

if ( gun != "none" && gun != "mine_bouncing_betty" )
{
self SwitchToWeapon( gun );
}
else
{
// try to switch to first primary weapon
primaryWeapons = self GetWeaponsListPrimaries();
if( IsDefined( primaryWeapons ) && primaryWeapons.size > 0 )
{
self SwitchToWeapon( primaryWeapons[0] );
}
}

self TakeWeapon(weapon);
}

perk_vo(type)
{
self endon("death");
self endon("disconnect");

index = maps\_zombiemode_weapons::get_player_index(self);
sound = undefined;

if(!isdefined (level.player_is_speaking))
{
level.player_is_speaking = 0;
}
player_index = "plr_" + index + "_";
//wait(randomfloatrange(1,2));

//TUEY We need to eventually store the dialog in an array so you can add multiple variants...but we only have 1 now anyway.
switch(type)
{
case "specialty_armorvest":
sound_to_play = "vox_perk_jugga_0";
break;
case "specialty_fastreload":
sound_to_play = "vox_perk_speed_0";
break;
case "specialty_quickrevive":
sound_to_play = "vox_perk_revive_0";
break;
case "specialty_rof":
sound_to_play = "vox_perk_doubletap_0";
break;
default:
sound_to_play = "vox_perk_jugga_0";
break;
}

wait(1.0);
self maps\_zombiemode_spawner::do_player_playdialog(player_index, sound_to_play, 0.25);
}
machine_watcher()
{
//PI ESM - support for two level switches for Factory
if (isDefined(level.DLC3.perksNeedPowerOn) && level.DLC3.perksNeedPowerOn)
{
level thread machine_watcher_factory("juggernog_on");
level thread machine_watcher_factory("sleight_on");
level thread machine_watcher_factory("doubletap_on");
level thread machine_watcher_factory("revive_on");
level thread machine_watcher_factory("Pack_A_Punch_on");
}
else
{
level waittill("master_switch_activated");
//array_thread(getentarray( "zombie_vending", "targetname" ), ::perks_a_cola_jingle);

}

}

//PI ESM - added for support for two switches in factory
machine_watcher_factory(vending_name)
{
level waittill(vending_name);
switch(vending_name)
{
case "juggernog_on":
temp_script_sound = "mx_jugger_jingle";
break;

case "sleight_on":
temp_script_sound = "mx_speed_jingle";
break;

case "doubletap_on":
temp_script_sound = "mx_doubletap_jingle";
break;

case "revive_on":
temp_script_sound = "mx_revive_jingle";
break;

case "Pack_A_Punch_on":
temp_script_sound = "mx_packa_jingle";
break;

default:
temp_script_sound = "mx_jugger_jingle";
break;
}


temp_machines = getstructarray("perksacola", "targetname");
for (x = 0; x < temp_machines.size; x++)
{
if (temp_machines[x].script_sound == temp_script_sound)
temp_machines[x] thread perks_a_cola_jingle();
}

}

play_vendor_stings(sound)
{
if(!IsDefined (level.speed_jingle))
{
level.speed_jingle = 0;
}
if(!IsDefined (level.revive_jingle))
{
level.revive_jingle = 0;
}
if(!IsDefined (level.doubletap_jingle))
{
level.doubletap_jingle = 0;
}
if(!IsDefined (level.jugger_jingle))
{
level.jugger_jingle = 0;
}
if(!IsDefined (level.packa_jingle))
{
level.packa_jingle = 0;
}
if(!IsDefined (level.eggs))
{
level.eggs = 0;
}
if (level.eggs == 0)
{
if(sound == "mx_speed_sting" && level.speed_jingle == 0 )
{
// iprintlnbold("stinger speed:" + level.speed_jingle);
level.speed_jingle = 1;
temp_org_speed_s = spawn("script_origin", self.origin);
temp_org_speed_s playsound (sound, "sound_done");
temp_org_speed_s waittill("sound_done");
level.speed_jingle = 0;
temp_org_speed_s delete();
// iprintlnbold("stinger speed:" + level.speed_jingle);
}
else if(sound == "mx_revive_sting" && level.revive_jingle == 0)
{
level.revive_jingle = 1;
// iprintlnbold("stinger revive:" + level.revive_jingle);
temp_org_revive_s = spawn("script_origin", self.origin);
temp_org_revive_s playsound (sound, "sound_done");
temp_org_revive_s waittill("sound_done");
level.revive_jingle = 0;
temp_org_revive_s delete();
// iprintlnbold("stinger revive:" + level.revive_jingle);
}
else if(sound == "mx_doubletap_sting" && level.doubletap_jingle == 0)
{
level.doubletap_jingle = 1;
// iprintlnbold("stinger double:" + level.doubletap_jingle);
temp_org_dp_s = spawn("script_origin", self.origin);
temp_org_dp_s playsound (sound, "sound_done");
temp_org_dp_s waittill("sound_done");
level.doubletap_jingle = 0;
temp_org_dp_s delete();
// iprintlnbold("stinger double:" + level.doubletap_jingle);
}
else if(sound == "mx_jugger_sting" && level.jugger_jingle == 0)
{
level.jugger_jingle = 1;
// iprintlnbold("stinger juggernog" + level.jugger_jingle);
temp_org_jugs_s = spawn("script_origin", self.origin);
temp_org_jugs_s playsound (sound, "sound_done");
temp_org_jugs_s waittill("sound_done");
level.jugger_jingle = 0;
temp_org_jugs_s delete();
// iprintlnbold("stinger juggernog:"  + level.jugger_jingle);
}
else if(sound == "mx_packa_sting" && level.packa_jingle == 0)
{
level.packa_jingle = 1;
// iprintlnbold("stinger packapunch:" + level.packa_jingle);
temp_org_pack_s = spawn("script_origin", self.origin);
temp_org_pack_s playsound (sound, "sound_done");
temp_org_pack_s waittill("sound_done");
level.packa_jingle = 0;
temp_org_pack_s delete();
// iprintlnbold("stinger packapunch:"  + level.packa_jingle);
}
}
}

perks_a_cola_jingle()
{
self thread play_random_broken_sounds();
if(!IsDefined(self.perk_jingle_playing))
{
self.perk_jingle_playing = 0;
}
if (!IsDefined (level.eggs))
{
level.eggs = 0;
}
while(1)
{
//wait(randomfloatrange(60, 120));
wait(randomfloatrange(31,45));
if(randomint(100) < 15 && level.eggs == 0)
{
level notify ("jingle_playing");
//playfx (level._effect["electric_short_oneshot"], self.origin);
playsoundatposition ("electrical_surge", self.origin);

if(self.script_sound == "mx_speed_jingle" && level.speed_jingle == 0)
{
level.speed_jingle = 1;
temp_org_speed = spawn("script_origin", self.origin);
wait(0.05);
temp_org_speed playsound (self.script_sound, "sound_done");
temp_org_speed waittill("sound_done");
level.speed_jingle = 0;
temp_org_speed delete();
}
if(self.script_sound == "mx_revive_jingle" && level.revive_jingle == 0)
{
level.revive_jingle = 1;
temp_org_revive = spawn("script_origin", self.origin);
wait(0.05);
temp_org_revive playsound (self.script_sound, "sound_done");
temp_org_revive waittill("sound_done");
level.revive_jingle = 0;
temp_org_revive delete();
}
if(self.script_sound == "mx_doubletap_jingle" && level.doubletap_jingle == 0)
{
level.doubletap_jingle = 1;
temp_org_doubletap = spawn("script_origin", self.origin);
wait(0.05);
temp_org_doubletap playsound (self.script_sound, "sound_done");
temp_org_doubletap waittill("sound_done");
level.doubletap_jingle = 0;
temp_org_doubletap delete();
}
if(self.script_sound == "mx_jugger_jingle" && level.jugger_jingle == 0)
{
level.jugger_jingle = 1;
temp_org_jugger = spawn("script_origin", self.origin);
wait(0.05);
temp_org_jugger playsound (self.script_sound, "sound_done");
temp_org_jugger waittill("sound_done");
level.jugger_jingle = 0;
temp_org_jugger delete();
}
if(self.script_sound == "mx_packa_jingle" && level.packa_jingle == 0)
{
level.packa_jingle = 1;
temp_org_packa = spawn("script_origin", self.origin);
temp_org_packa playsound (self.script_sound, "sound_done");
temp_org_packa waittill("sound_done");
level.packa_jingle = 0;
temp_org_packa delete();
}

self thread play_random_broken_sounds();
}
}
}
play_random_broken_sounds()
{
level endon ("jingle_playing");
if (!isdefined (self.script_sound))
{
self.script_sound = "null";
}
if (self.script_sound == "mx_revive_jingle")
{
while(1)
{
wait(randomfloatrange(7, 18));
playsoundatposition ("broken_random_jingle", self.origin);
//playfx (level._effect["electric_short_oneshot"], self.origin);
playsoundatposition ("electrical_surge", self.origin);

}
}
else
{
while(1)
{
wait(randomfloatrange(7, 18));
// playfx (level._effect["electric_short_oneshot"], self.origin);
playsoundatposition ("electrical_surge", self.origin);
}
}
}

play_packa_wait_dialog(player_index)
{
waittime = 0.05;
if(!IsDefined (self.vox_perk_packa_wait))
{
num_variants = maps\_zombiemode_spawner::get_number_variants(player_index + "vox_perk_packa_wait");
self.vox_perk_packa_wait = [];
for(i=0;i<num_variants;i++)
{
self.vox_perk_packa_wait[self.vox_perk_packa_wait.size] = "vox_perk_packa_wait_" + i;
}
self.vox_perk_packa_wait_available = self.vox_perk_packa_wait;
}
if(!isdefined (level.player_is_speaking))
{
level.player_is_speaking = 0;
}
sound_to_play = random(self.vox_perk_packa_wait_available);
self maps\_zombiemode_spawner::do_player_playdialog(player_index, sound_to_play, waittime);
self.vox_perk_packa_wait_available = array_remove(self.vox_perk_packa_wait_available,sound_to_play);

if (self.vox_perk_packa_wait_available.size < 1 )
{
self.vox_perk_packa_wait_available = self.vox_perk_packa_wait;
}
}

play_packa_get_dialog(player_index)
{
waittime = 0.05;
if(!IsDefined (self.vox_perk_packa_get))
{
num_variants = maps\_zombiemode_spawner::get_number_variants(player_index + "vox_perk_packa_get");
self.vox_perk_packa_get = [];
for(i=0;i<num_variants;i++)
{
self.vox_perk_packa_get[self.vox_perk_packa_get.size] = "vox_perk_packa_get_" + i;
}
self.vox_perk_packa_get_available = self.vox_perk_packa_get;
}
if(!isdefined (level.player_is_speaking))
{
level.player_is_speaking = 0;
}
sound_to_play = random(self.vox_perk_packa_get_available);
self maps\_zombiemode_spawner::do_player_playdialog(player_index, sound_to_play, waittime);
self.vox_perk_packa_get_available = array_remove(self.vox_perk_packa_get_available,sound_to_play);

if (self.vox_perk_packa_get_available.size < 1 )
{
self.vox_perk_packa_get_available = self.vox_perk_packa_get;
}
}

perk_give_bottle_begin( perk )
{
self DisableOffhandWeapons();
self DisableWeaponCycling();

self AllowLean( false );
self AllowAds( false );
self AllowSprint( false );
self AllowProne( false );
self AllowMelee( false );

wait( 0.05 );

if ( self GetStance() == "prone" )
{
self SetStance( "crouch" );
}

gun = self GetCurrentWeapon();
weapon = "";

switch( perk )
{
case "specialty_fireproof":
weapon = "zombie_perk_bottle_revive";
break;

case "specialty_detectexplosive":
weapon = "zombie_perk_bottle_revive";
break;

case "specialty_longersprint":
weapon = "zombie_perk_bottle_doubletap";
break;

case "specialty_extraammo":
weapon = "zombie_perk_bottle_sleight";
break;

case "specialty_bulletaccuracy":
weapon = "zombie_perk_bottle_doubletap";
break;
}

self GiveWeapon( weapon );
self SwitchToWeapon( weapon );

return gun;
}

electric_perks_dialog()
{

self endon ("warning_dialog");
level endon("switch_flipped");
timer =0;
while(1)
{
wait(0.5);
players = get_players();
for(i = 0; i < players.size; i++)
{
dist = distancesquared(players[i].origin, self.origin );
if(dist > 70*70)
{
timer = 0;
continue;
}
if(dist < 70*70 && timer < 3)
{
wait(0.5);
timer ++;
}
if(dist < 70*70 && timer == 3)
{

players[i] thread do_player_vo("vox_start", 5);
wait(3);
self notify ("warning_dialog");
iprintlnbold("warning_given");
}
}
}
}

play_no_money_perk_dialog()
{

index = maps\_zombiemode_weapons::get_player_index(self);

player_index = "plr_" + index + "_";
if(!IsDefined (self.vox_nomoney_perk))
{
num_variants = maps\_zombiemode_spawner::get_number_variants(player_index + "vox_nomoney_perk");
self.vox_nomoney_perk = [];
for(i=0;i<num_variants;i++)
{
self.vox_nomoney_perk[self.vox_nomoney_perk.size] = "vox_nomoney_perk_" + i;
}
self.vox_nomoney_perk_available = self.vox_nomoney_perk;
}
sound_to_play = random(self.vox_nomoney_perk_available);

self.vox_nomoney_perk_available = array_remove(self.vox_nomoney_perk_available,sound_to_play);

if (self.vox_nomoney_perk_available.size < 1 )
{
self.vox_nomoney_perk_available = self.vox_nomoney_perk;
}

self maps\_zombiemode_spawner::do_player_playdialog(player_index, sound_to_play, 0.25);




}
check_player_has_perk(perk)
{
/#
if ( GetDVarInt( "zombie_cheat" ) >= 5 )
{
return;
}
#/

dist = 128 * 128;
while(true)
{
players = get_players();
for( i = 0; i < players.size; i++ )
{
if(DistanceSquared( players[i].origin, self.origin ) < dist)
{
if(!players[i] hasperk(perk) && !(players[i] in_revive_trigger()))
{
//PI CHANGE: this change makes it so that if there are multiple players within the trigger for the perk machine, the hint string is still
//                   visible to all of them, rather than the last player this check is done for
if (IsDefined(level.script) && level.script == "nazi_zombie_theater")
self setinvisibletoplayer(players[i], false);
else
self setvisibletoplayer(players[i]);
//END PI CHANGE
//iprintlnbold("turn it off to player");

}
else
{
self SetInvisibleToPlayer(players[i]);
//iprintlnbold(players[i].health);
}
}


}

wait(0.1);

}

}

staminup()
{
while(1)
{
if(self hasperk("specialty_longersprint"))
self setmovespeedscale(1.3);
else
self setmovespeedscale(1);
wait .5;
}
}

deadshot()
{
while(1)
{
if(self hasperk("specialty_bulletaccuracy"))
self setClientDvar( "cg_laserForceOn", 1 );
else
self setClientDvar( "cg_laserForceOn", 0 );
wait .1;
}
}

mulekick()
{
while(1)
{
if(self hasperk("specialty_extraammo"))
self.inventorySize = 3;
else
self.inventorySize = 2;
wait .1;
}
}

Code Snippet
Plaintext
#include maps\_utility;
#include maps\_hud_util;

init()
{
PrecacheItem( "syrette" );
PrecacheItem( "colt_dirty_harry" );
precachestring( &"GAME_BUTTON_TO_REVIVE_PLAYER" );
precachestring( &"GAME_PLAYER_NEEDS_TO_BE_REVIVED" );
precachestring( &"GAME_PLAYER_IS_REVIVING_YOU" );
precachestring( &"GAME_REVIVING" );

if( !IsDefined( level.laststandpistol ) )
{
level.laststandpistol = "colt";
PrecacheItem( level.laststandpistol );
}

//CODER_MOD: TOMMYK 07/13/2008 - Revive text
if( !arcadeMode() )
{
level thread revive_hud_think();
}

level.primaryProgressBarX = 0;
level.primaryProgressBarY = 110;
level.primaryProgressBarHeight = 4;
level.primaryProgressBarWidth = 120;

if ( IsSplitScreen() )
{
level.primaryProgressBarY = 280;
}

if( GetDvar( "revive_trigger_radius" ) == "" )
{
SetDvar( "revive_trigger_radius", "40" );
}
}


player_is_in_laststand()
{
return ( IsDefined( self.revivetrigger ) );
}


player_num_in_laststand()
{
num = 0;
players = get_players();

for ( i = 0; i < players.size; i++ )
{
if ( players[i] player_is_in_laststand() )
num++;
}

return num;
}


player_all_players_in_laststand()
{
return ( player_num_in_laststand() == get_players().size );
}


player_any_player_in_laststand()
{
return ( player_num_in_laststand() > 0 );
}


PlayerLastStand( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration )
{
primaryWeapons = self GetWeaponsListPrimaries();
    if(primaryWeapons.size == 3) // he has three weapons
    {
current_weapon = self getCurrentWeapon(); // get his current weapon
player_load = self GetWeaponsListPrimaries();
if (current_weapon == primaryWeapons[2])
{
self.take_weapon = player_load[1];
self takeweapon(self.take_weapon);
}
else
{
self.take_weapon = player_load[2];
self takeweapon(self.take_weapon);
}
    }

if( sMeansOfDeath == "MOD_CRUSH" ) // if getting run over by a tank then kill the guy even if in laststand
{
if( self player_is_in_laststand() )
{
self mission_failed_during_laststand( self );
}
return;
}

if( self player_is_in_laststand() )
{
return;
}

//CODER_MOD: TOMMYK 06/26/2008 - For coop scoreboards
self.downs++;
//stat tracking
self.stats["downs"] = self.downs;
dvarName = "player" + self GetEntityNumber() + "downs";
setdvar( dvarName, self.downs );

//PI CHANGE: player shouldn't be able to jump while in last stand mode (only was a problem in water) - specifically disallow this
if (IsDefined(level.script) && level.script == "nazi_zombie_sumpf")
self AllowJump(false);
//END PI CHANGE

if( IsDefined( level.playerlaststand_func ) )
{
[[level.playerlaststand_func]]();
}

//CODER_MOD: Jay (6/18/2008): callback to challenge system
maps\_challenges_coop::doMissionCallback( "playerDied", self );

if ( !laststand_allowed( sWeapon, sMeansOfDeath, sHitLoc ) )
{
self mission_failed_during_laststand( self );
return;
}

// check for all players being in last stand
if ( player_all_players_in_laststand() )
{
self mission_failed_during_laststand( self );
return;
}

// vision set
self VisionSetLastStand( "laststand", 1 );

self.health = 1;

self thread maps\_arcademode::arcadeMode_player_laststand();

// revive trigger
self revive_trigger_spawn();

// laststand weapons
self laststand_take_player_weapons();
self laststand_give_pistol();
self thread laststand_give_grenade();

// AI
self.ignoreme = true;

// bleed out timer
self thread laststand_bleedout( GetDvarFloat( "player_lastStandBleedoutTime" ) );

self notify( "player_downed" );
}


laststand_allowed( sWeapon, sMeansOfDeath, sHitLoc )
{
//MOD TK, loads of stuff will now send u into laststand
if (   sMeansOfDeath != "MOD_PISTOL_BULLET"
&& sMeansOfDeath != "MOD_RIFLE_BULLET"
&& sMeansOfDeath != "MOD_HEAD_SHOT"
&& sMeansOfDeath != "MOD_MELEE"
&& sMeansOfDeath != "MOD_BAYONET"
&& sMeansOfDeath != "MOD_GRENADE"
&& sMeansOfDeath != "MOD_GRENADE_SPLASH"
&& sMeansOfDeath != "MOD_PROJECTILE"
&& sMeansOfDeath != "MOD_PROJECTILE_SPLASH"
&& sMeansOfDeath != "MOD_EXPLOSIVE"
&& sMeansOfDeath != "MOD_BURNED")
{
return false;
}

if( level.laststandpistol == "none" )
{
return false;
}

return true;
}


// self = a player
laststand_take_player_weapons()
{
self.weaponInventory = self GetWeaponsList();
self.lastActiveWeapon = self GetCurrentWeapon();
self.laststandpistol = undefined;

//ASSERTEX( self.lastActiveWeapon != "none", "Last active weapon is 'none,' an unexpected result." );

self.weaponAmmo = [];

for( i = 0; i < self.weaponInventory.size; i++ )
{
weapon = self.weaponInventory[i];

if ( WeaponClass( weapon ) == "pistol" && !IsDefined( self.laststandpistol ) )
{
self.laststandpistol = weapon;
}

switch( weapon )
{
// this player was killed while reviving another player
case "syrette":
// player was killed drinking perks-a-cola
case "zombie_perk_bottle_doubletap":
case "zombie_perk_bottle_revive":
case "zombie_perk_bottle_jugg":
case "zombie_perk_bottle_sleight":
case "zombie_bowie_flourish":
case "zombie_knuckle_crack":
self.lastActiveWeapon = "none";
continue;
}

self.weaponAmmo[weapon]["clip"] = self GetWeaponAmmoClip( weapon );
self.weaponAmmo[weapon]["stock"] = self GetWeaponAmmoStock( weapon );
}

self TakeAllWeapons();

if ( !IsDefined( self.laststandpistol ) )
{
self.laststandpistol = level.laststandpistol;
}

if ( maps\_collectibles::has_collectible( "collectible_dirtyharry" ) )
{
self.laststandpistol = "colt_dirty_harry";
}
}


// self = a player
laststand_giveback_player_weapons()
{
ASSERTEX( IsDefined( self.weaponInventory ), "player.weaponInventory is not defined - did you run laststand_take_player_weapons() first?" );

self TakeAllWeapons();

for( i = 0; i < self.weaponInventory.size; i++ )
{
weapon = self.weaponInventory[i];

switch( weapon )
{
// this player was killed while reviving another player
case "syrette":
// player was killed drinking perks-a-cola
case "zombie_perk_bottle_doubletap":
case "zombie_perk_bottle_revive":
case "zombie_perk_bottle_jugg":
case "zombie_perk_bottle_sleight":
case "zombie_bowie_flourish":
case "zombie_knuckle_crack":
continue;
}

self GiveWeapon( weapon );
self SetWeaponAmmoClip( weapon, self.weaponAmmo[weapon]["clip"] );

if ( WeaponType( weapon ) != "grenade" )
self SetWeaponAmmoStock( weapon, self.weaponAmmo[weapon]["stock"] );
}

// if we can't figure out what the last active weapon was, try to switch a primary weapon
//CHRIS_P: - don't try to give the player back the mortar_round weapon ( this is if the player killed himself with a mortar round)
if( self.lastActiveWeapon != "none" && self.lastActiveWeapon != "mortar_round" && self.lastActiveWeapon != "mine_bouncing_betty" )
{
self SwitchToWeapon( self.lastActiveWeapon );
}
else
{
primaryWeapons = self GetWeaponsListPrimaries();
if( IsDefined( primaryWeapons ) && primaryWeapons.size > 0 )
{
self SwitchToWeapon( primaryWeapons[0] );
}
}
}

laststand_clean_up_on_disconnect( playerBeingRevived, reviverGun )
{
reviveTrigger = playerBeingRevived.revivetrigger;

playerBeingRevived waittill("disconnect");

if( isdefined( reviveTrigger ) )
{
reviveTrigger delete();
}

if( isdefined( self.reviveProgressBar ) )
{
self.reviveProgressBar destroyElem();
}

if( isdefined( self.reviveTextHud ) )
{
self.reviveTextHud destroy();
}

self revive_give_back_weapons( reviverGun );
}

laststand_give_pistol()
{
assert( IsDefined( self.laststandpistol ) );
assert( self.laststandpistol != "none" );
//assert( WeaponClass( self.laststandpistol ) == "pistol" );

if( GetDvar( "zombiemode" ) == "1" || IsSubStr( level.script, "nazi_zombie_" ) ) // CODER_MOD (Austin 5/4/08): zombiemode loadout setup
{
self GiveWeapon( self.laststandpistol );
ammoclip = WeaponClipSize( self.laststandpistol );

if (self.laststandpistol == "ray_gun")
{
self SetWeaponAmmoClip( self.laststandpistol, ammoclip );
self SetWeaponAmmoStock( self.laststandpistol, 0 );

}
else
{
self SetWeaponAmmoStock( self.laststandpistol, ammoclip * 2 );
}

self SwitchToWeapon( self.laststandpistol );
}
else
{
self GiveWeapon( self.laststandpistol );
self GiveMaxAmmo( self.laststandpistol );
self SwitchToWeapon( self.laststandpistol );
}


}


laststand_give_grenade()
{
self endon ("player_revived");
self endon ("disconnect");

while( self isThrowingGrenade() )
{
wait( 0.05 );
}
// needed to throw back grenades while in last stand
if( level.campaign == "russian" )
{
grenade_choice = "stick_grenade";
}
// MM (7/8/9) - give the player german grenades because that's the only kind we're using
else if( GetDvar( "zombiemode" ) == "1" || IsSubStr( level.script, "nazi_zombie_" ) )
{
grenade_choice = "stielhandgranate";
}
else
{
grenade_choice = "fraggrenade";
}
self GiveWeapon( grenade_choice );
self SetWeaponAmmoClip( grenade_choice, 0 );
self SwitchToOffhand( grenade_choice );
}


laststand_bleedout( delay )
{
self endon ("player_revived");
self endon ("disconnect");

//self PlayLoopSound("heart_beat",delay); // happens on client now DSL

// Notify client that we're in last stand.

setClientSysState("lsm", "1", self);

self.bleedout_time = delay;

while ( self.bleedout_time > Int( delay * 0.5 ) )
{
self.bleedout_time -= 1;
wait( 1 );
}

self VisionSetLastStand( "death", delay * 0.5 );

while ( self.bleedout_time > 0 )
{
self.bleedout_time -= 1;
wait( 1 );
}

//CODER_MOD: TOMMYK 07/13/2008
while( self.revivetrigger.beingRevived == 1 )
{
wait( 0.1 );
}

setClientSysState("lsm", "0", self); // Notify client last stand ended.

if (isdefined(level.is_zombie_level ) && level.is_zombie_level)
{
self [[level.player_becomes_zombie]]();
}
else
{
self.ignoreme = false;
self mission_failed_during_laststand( self );
}
}


// spawns the trigger used for the player to get revived
revive_trigger_spawn()
{
radius = GetDvarInt( "revive_trigger_radius" );

self.revivetrigger = spawn( "trigger_radius", self.origin, 0, radius, radius );
self.revivetrigger setHintString( "" ); // only show the hint string if the triggerer is facing me
self.revivetrigger setCursorHint( "HINT_NOICON" );

self.revivetrigger EnableLinkTo();
self.revivetrigger LinkTo( self ); 

//CODER_MOD: TOMMYK 07/13/2008 - Revive text
self.revivetrigger.beingRevived = 0;
self.revivetrigger.createtime = gettime();

if ( maps\_collectibles::has_collectible( "collectible_morphine" ) )
{
self maps\_collectibles_game::morphine_think();
}
else
{
self thread revive_trigger_think();
}

//self.revivetrigger thread revive_debug();
}

revive_debug()
{
for ( ;; )
{
self waittill( "trigger", player );

if ( !player player_is_in_laststand() )
iprintln( "revive triggered!" );

wait( 0.05 );
}
}

// logic for the revive trigger
revive_trigger_think()
{
self endon ( "disconnect" );
self endon ( "zombified" );

while ( 1 )
{
wait ( 0.1 );

//assert( DistanceSquared( self.origin, self.revivetrigger.origin ) <= 25 );
//drawcylinder( self.revivetrigger.origin, 32, 32 );

players = get_players();

self.revivetrigger setHintString( "" );

for ( i = 0; i < players.size; i++ )
{
//PI CHANGES - revive should work in deep water for nazi_zombie_sumpf
is_sumpf = 0;
d = 0;
if (IsDefined(level.script) && level.script == "nazi_zombie_sumpf")
{
is_sumpf = 1;
d = self depthinwater();
}

if ( players[i] can_revive( self ) ||
(is_sumpf == 1 && d > 20))
//END PI CHANGES
{
// TODO: This will turn on the trigger hint for every player within
// the radius once one of them faces the revivee, even if the others
// are facing away. Either we have to display the hints manually here
// (making sure to prioritize against any other hints from nearby objects),
// or we need a new combined radius+lookat trigger type.
self.revivetrigger setHintString( &"GAME_BUTTON_TO_REVIVE_PLAYER" );
break;
}
}

for ( i = 0; i < players.size; i++ )
{
reviver = players[i];

if ( !reviver is_reviving( self ) )
continue;

// give the syrette
gun = reviver GetCurrentWeapon();
assert( IsDefined( gun ) );
//assert( gun != "none" );
if ( gun == "syrette" )
continue;

reviver GiveWeapon( "syrette" );
reviver SwitchToWeapon( "syrette" );
reviver DisableWeaponCycling();
reviver DisableOffhandWeapons();
reviver SetWeaponAmmoStock( "syrette", 1 );

//CODER_MOD: TOMMY K
revive_success = reviver revive_do_revive( self, gun );

reviver revive_give_back_weapons( gun );

//PI CHANGE: player couldn't jump - allow this again now that they are revived
if (IsDefined(level.script) && level.script == "nazi_zombie_sumpf")
self AllowJump(true);
//END PI CHANGE

if ( revive_success )
{
self thread revive_success( reviver );
return;
}
}
}
}

revive_give_back_weapons( gun )
{
// take the syrette
self TakeWeapon( "syrette" );
self EnableWeaponCycling();
self EnableOffhandWeapons();

if ( gun != "none" && gun != "mine_bouncing_betty" )
{
self SwitchToWeapon( gun );
}
else
{
// try to switch to first primary weapon
primaryWeapons = self GetWeaponsListPrimaries();
if( IsDefined( primaryWeapons ) && primaryWeapons.size > 0 )
{
self SwitchToWeapon( primaryWeapons[0] );
}
}
}


can_revive( revivee )
{
if ( !isAlive( self ) )
return false;

if ( self player_is_in_laststand() )
return false;

if( !isDefined( revivee.revivetrigger ) )
return false;

if ( !self IsTouching( revivee.revivetrigger ) )
return false;

//PI CHANGE: can revive in deep water in sumpf
if (IsDefined(level.script) && level.script == "nazi_zombie_sumpf" && (revivee depthinwater() > 10))
return true;
//END PI CHANGE

if ( !self is_facing( revivee ) )
return false;

if( !SightTracePassed( self.origin + ( 0, 0, 50 ), revivee.origin + ( 0, 0, 30 ), false, undefined ) )
return false;

//chrisp - fix issue where guys can sometimes revive thru a wall
if(!bullettracepassed(self.origin + (0,0,50), revivee.origin + ( 0, 0, 30 ), false, undefined) )
{
return false;
}

// SRS 9/2/2008: in zombie mode, disallow revive if potential reviver is a zombie
if( IsDefined( level.is_zombie_level ) && level.is_zombie_level )
{
if( IsDefined( self.is_zombie ) && self.is_zombie )
{
return false;
}
}

//if the level is nazi_zombie_asylum and playeris drinking, disable the trigger
if(level.script == "nazi_zombie_asylum" && isdefined(self.is_drinking))
return false;

if(level.script == "nazi_zombie_sumpf" && isdefined(self.is_drinking))
return false;

return true;
}

is_reviving( revivee )
{
return ( can_revive( revivee ) && self UseButtonPressed() );
}

is_facing( facee )
{
orientation = self getPlayerAngles();
forwardVec = anglesToForward( orientation );
forwardVec2D = ( forwardVec[0], forwardVec[1], 0 );
unitForwardVec2D = VectorNormalize( forwardVec2D );
toFaceeVec = facee.origin - self.origin;
toFaceeVec2D = ( toFaceeVec[0], toFaceeVec[1], 0 );
unitToFaceeVec2D = VectorNormalize( toFaceeVec2D );

dotProduct = VectorDot( unitForwardVec2D, unitToFaceeVec2D );
return ( dotProduct > 0.9 ); // reviver is facing within a ~52-degree cone of the player
}

// self = reviver
revive_do_revive( playerBeingRevived, reviverGun )
{
assert( self is_reviving( playerBeingRevived ) );
// reviveTime used to be set from a Dvar, but this can no longer be tunable:
// it has to match the length of the third-person revive animations for
// co-op gameplay to run smoothly.
reviveTime = 3;

if ( self HasPerk( "specialty_quickrevive" ) )
{
reviveTime = reviveTime / 2;
}

timer = 0;
revived = false;

//CODER_MOD: TOMMYK 07/13/2008
playerBeingRevived.revivetrigger.beingRevived = 1;
playerBeingRevived.revive_hud setText( &"GAME_PLAYER_IS_REVIVING_YOU", self );
playerBeingRevived revive_hud_show_n_fade( 3.0 );

playerBeingRevived.revivetrigger setHintString( "" );

playerBeingRevived startrevive( self );

if( !isdefined(self.reviveProgressBar) )
self.reviveProgressBar = self createPrimaryProgressBar();

if( !isdefined(self.reviveTextHud) )
self.reviveTextHud = newclientHudElem( self );

self thread laststand_clean_up_on_disconnect( playerBeingRevived, reviverGun );

self.reviveProgressBar updateBar( 0.01, 1 / reviveTime );

self.reviveTextHud.alignX = "center";
self.reviveTextHud.alignY = "middle";
self.reviveTextHud.horzAlign = "center";
self.reviveTextHud.vertAlign = "bottom";
self.reviveTextHud.y = -148;
if ( IsSplitScreen() )
self.reviveTextHud.y = -107;
self.reviveTextHud.foreground = true;
self.reviveTextHud.font = "default";
self.reviveTextHud.fontScale = 1.8;
self.reviveTextHud.alpha = 1;
self.reviveTextHud.color = ( 1.0, 1.0, 1.0 );
self.reviveTextHud setText( &"GAME_REVIVING" );

//chrisp - zombiemode addition for reviving vo
// cut , but leave the script just in case
//self thread say_reviving_vo();

while( self is_reviving( playerBeingRevived ) )
{
wait( 0.05 );
timer += 0.05;

if ( self player_is_in_laststand() )
break;

if( timer >= reviveTime)
{
revived = true;
break;
}
}

if( isdefined( self.reviveProgressBar ) )
{
self.reviveProgressBar destroyElem();
}

if( isdefined( self.reviveTextHud ) )
{
self.reviveTextHud destroy();
}

if ( !revived )
{
playerBeingRevived stoprevive( self );
}

//CODER_MOD: TOMMYK 07/13/2008
playerBeingRevived.revivetrigger setHintString( &"GAME_BUTTON_TO_REVIVE_PLAYER" );
playerBeingRevived.revivetrigger.beingRevived = 0;

return revived;
}


say_reviving_vo()
{
if( GetDvar( "zombiemode" ) == "1" || IsSubStr( level.script, "nazi_zombie_" ) ) // CODER_MOD (Austin 5/4/08): zombiemode loadout setup
{

players = get_players();
for(i=0; i<players.size; i++)
{
if (players[i] == self)
{
self playsound("plr_" + i + "_vox_reviving" + "_" + randomintrange(0, 2));

}
}
}
}

say_revived_vo()
{
if( GetDvar( "zombiemode" ) == "1" || IsSubStr( level.script, "nazi_zombie_" ) ) // CODER_MOD (Austin 5/4/08): zombiemode loadout setup
{
players = get_players();
for(i=0; i<players.size; i++)
{
if (players[i] == self)
{
self playsound("plr_" + i + "_vox_revived" + "_" + randomintrange(0, 2));
}
}
}
}


revive_success( reviver )
{
self notify ( "player_revived", reviver );
self reviveplayer();

//CODER_MOD: TOMMYK 06/26/2008 - For coop scoreboards
reviver.revives++;
//stat tracking
reviver.stats["revives"] = reviver.revives;

// CODER MOD: TOMMY K - 07/30/08
reviver thread maps\_arcademode::arcadeMode_player_revive();

//CODER_MOD: Jay (6/17/2008): callback to revive challenge
if( isdefined( level.missionCallbacks ) )
{
maps\_challenges_coop::doMissionCallback( "playerRevived", reviver );
}

setClientSysState("lsm", "0", self); // Notify client last stand ended.

self.revivetrigger delete();
self.revivetrigger = undefined;

self laststand_giveback_player_weapons();

self.ignoreme = false;

self thread say_revived_vo();

}


revive_force_revive( reviver )
{
assert( IsDefined( self ) );
assert( IsPlayer( self ) );
assert( self player_is_in_laststand() );

self thread revive_success( reviver );
}

// the text that tells players that others are in need of a revive
revive_hud_create()
{
self.revive_hud = newclientHudElem( self );
self.revive_hud.alignX = "center";
self.revive_hud.alignY = "middle";
self.revive_hud.horzAlign = "center";
self.revive_hud.vertAlign = "bottom";
self.revive_hud.y = -50;
self.revive_hud.foreground = true;
self.revive_hud.font = "default";
self.revive_hud.fontScale = 1.5;
self.revive_hud.alpha = 0;
self.revive_hud.color = ( 1.0, 1.0, 1.0 );
self.revive_hud setText( "" );

if( GetDvar( "zombiemode" ) == "1" )
{
self.revive_hud.y = -80;
}
}

//CODER_MOD: TOMMYK 07/13/2008
revive_hud_think()
{
self endon ( "disconnect" );

while ( 1 )
{
wait( 0.1 );

if ( !player_any_player_in_laststand() )
{
continue;
}

players = get_players();
playerToRevive = undefined;

for( i = 0; i < players.size; i++ )
{
if( !players[i] player_is_in_laststand() || !isDefined( players[i].revivetrigger.createtime ) )
continue;

if( !isDefined(playerToRevive) || playerToRevive.revivetrigger.createtime > players[i].revivetrigger.createtime )
{
playerToRevive = players[i];
}
}

if( isDefined( playerToRevive ) )
{
for( i = 0; i < players.size; i++ )
{
if( players[i] player_is_in_laststand() )
continue;

players[i] thread fadeReviveMessageOver( playerToRevive, 3.0 );
}

playerToRevive.revivetrigger.createtime = undefined;
wait( 3.5 );
}
}
}

//CODER_MOD: TOMMYK 07/13/2008
fadeReviveMessageOver( playerToRevive, time )
{
revive_hud_show();
self.revive_hud setText( &"GAME_PLAYER_NEEDS_TO_BE_REVIVED", playerToRevive );
self.revive_hud fadeOverTime( time );
self.revive_hud.alpha = 0;
}

revive_hud_hide()
{
assert( IsDefined( self ) );
assert( IsDefined( self.revive_hud ) );

self.revive_hud.alpha = 0;
}

revive_hud_show()
{
assert( IsDefined( self ) );
assert( IsDefined( self.revive_hud ) );

self.revive_hud.alpha = 1;
}

//CODER_MOD: TOMMYK 07/13/2008
revive_hud_show_n_fade(time)
{
revive_hud_show();

self.revive_hud fadeOverTime( time );
self.revive_hud.alpha = 0;
}

drawcylinder(pos, rad, height)
{
currad = rad;
curheight = height;

for (r = 0; r < 20; r++)
{
theta = r / 20 * 360;
theta2 = (r + 1) / 20 * 360;

line(pos + (cos(theta) * currad, sin(theta) * currad, 0), pos + (cos(theta2) * currad, sin(theta2) * currad, 0));
line(pos + (cos(theta) * currad, sin(theta) * currad, curheight), pos + (cos(theta2) * currad, sin(theta2) * currad, curheight));
line(pos + (cos(theta) * currad, sin(theta) * currad, 0), pos + (cos(theta) * currad, sin(theta) * currad, curheight));
}
}

mission_failed_during_laststand( dead_player )
{
if( IsDefined( level.no_laststandmissionfail ) && level.no_laststandmissionfail )
{
return;
}

players = get_players();
for( i = 0; i < players.size; i++ )
{
if( isDefined( players[i] ) )
{
players[i] thread maps\_quotes::displayMissionFailed();
if( players[i] == self )
{
players[i] thread maps\_quotes::displayPlayerDead();
println( "Player #"+i+" is dead" );
}
else
{
players[i] thread maps\_quotes::displayTeammateDead( dead_player );
println( "Player #"+i+" is alive" );
}
}
}
missionfailed();
}
Code Snippet
Plaintext
#include maps\_utility; 
#include common_scripts\utility;
#include maps\_zombiemode_utility;

init()
{
init_weapons();
init_weapon_upgrade();
init_pay_turret();
init_weapon_cabinet();
treasure_chest_init();
level thread add_limited_tesla_gun();
level.box_moved = false;
}

add_zombie_weapon( weapon_name, hint, cost, weaponVO, variation_count, ammo_cost  )
{
if( IsDefined( level.zombie_include_weapons ) && !IsDefined( level.zombie_include_weapons[weapon_name] ) )
{
return;
}

add_weapon_to_sound_array(weaponVO,variation_count);

// Check the table first
table = "mp/zombiemode.csv";
table_cost = TableLookUp( table, 0, weapon_name, 1 );
table_ammo_cost = TableLookUp( table, 0, weapon_name, 2 );

if( IsDefined( table_cost ) && table_cost != "" )
{
cost = round_up_to_ten( int( table_cost ) );
}

if( IsDefined( table_ammo_cost ) && table_ammo_cost != "" )
{
ammo_cost = round_up_to_ten( int( table_ammo_cost ) );
}

PrecacheItem( weapon_name );
PrecacheString( hint );

struct = SpawnStruct();

if( !IsDefined( level.zombie_weapons ) )
{
level.zombie_weapons = [];
}

struct.weapon_name = weapon_name;
struct.weapon_classname = "weapon_" + weapon_name;
struct.hint = hint;
struct.cost = cost;
struct.sound = weaponVO;
struct.variation_count = variation_count;
struct.is_in_box = level.zombie_include_weapons[weapon_name];

if( !IsDefined( ammo_cost ) )
{
ammo_cost = round_up_to_ten( int( cost * 0.5 ) );
}

struct.ammo_cost = ammo_cost;

level.zombie_weapons[weapon_name] = struct;
}

default_weighting_func()
{
return 1;
}

default_tesla_weighting_func()
{
num_to_add = 1;
if( isDefined( level.pulls_since_last_tesla_gun ) )
{
// player has dropped the tesla for another weapon, so we set all future polls to 20%
if( isDefined(level.player_drops_tesla_gun) && level.player_drops_tesla_gun == true )
{
num_to_add += int(.2 * level.zombie_include_weapons.size);
}

// player has not seen tesla gun in late rounds
if( !isDefined(level.player_seen_tesla_gun) || level.player_seen_tesla_gun == false )
{
// after round 10 the Tesla gun percentage increases to 20%
if( level.round_number > 10 )
{
num_to_add += int(.2 * level.zombie_include_weapons.size);
}
// after round 5 the Tesla gun percentage increases to 15%
else if( level.round_number > 5 )
{
// calculate the number of times we have to add it to the array to get the desired percent
num_to_add += int(.15 * level.zombie_include_weapons.size);
}
}
}
return num_to_add;
}

default_ray_gun_weighting_func()
{
if( level.box_moved == true )
{
num_to_add = 1;
// increase the percentage of ray gun
if( isDefined( level.pulls_since_last_ray_gun ) )
{
// after 12 pulls the ray gun percentage increases to 15%
if( level.pulls_since_last_ray_gun > 11 )
{
num_to_add += int(level.zombie_include_weapons.size*0.15);
}
// after 8 pulls the Ray Gun percentage increases to 10%
else if( level.pulls_since_last_ray_gun > 7 )
{
num_to_add += int(.1 * level.zombie_include_weapons.size);
}
}
return num_to_add;
}
else
{
return 0;
}
}


//
// Slightly elevate the chance to get it until someone has it, then make it even
default_cymbal_monkey_weighting_func()
{
players = get_players();
count = 0;
for( i = 0; i < players.size; i++ )
{
if( players[i] has_weapon_or_upgrade( "zombie_cymbal_monkey" ) )
{
count++;
}
}
if ( count > 0 )
{
return 1;
}
else
{
if( level.round_number < 10 )
{
return 3;
}
else
{
return 5;
}
}
}


include_zombie_weapon( weapon_name, in_box, weighting_func )
{
if( !IsDefined( level.zombie_include_weapons ) )
{
level.zombie_include_weapons = [];
}
if( !isDefined( in_box ) )
{
in_box = true;
}

level.zombie_include_weapons[weapon_name] = in_box;

if( !isDefined( weighting_func ) )
{
level.weapon_weighting_funcs[weapon_name] = maps\_zombiemode_weapons::default_weighting_func;
}
else
{
level.weapon_weighting_funcs[weapon_name] = weighting_func;
}
}

init_weapons()
{
// Zombify
PrecacheItem( "zombie_melee" );


// Pistols
//add_zombie_weapon( "colt", &"ZOMBIE_WEAPON_COLT_50", 50, "vox_crappy", 8 );
//add_zombie_weapon( "colt_dirty_harry", &"ZOMBIE_WEAPON_COLT_DH_100", 100, "vox_357", 5 );
add_zombie_weapon( "nambu", &"ZOMBIE_WEAPON_NAMBU_50", 50, "vox_crappy", 8 );
add_zombie_weapon( "sw_357", &"ZOMBIE_WEAPON_SW357_
9 years ago
Loading ...