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

Mule Kick Problem

broken avatar :(
Created 9 years ago
by UndeadGaming
0 Members and 1 Guest are viewing this topic.
2,527 views
broken avatar :(
×
broken avatar :(
Location: englandCroydon
Date Registered: 26 May 2014
Last active: 8 years ago
Posts
59
Respect
Forum Rank
Rotting Walker
Primary Group
Banned Elite
My Groups
More
My Contact & Social Links
More
Signature
×
UndeadGaming's Groups
Donator ♥ Benevolent Soul who has our eternal gratitude and exclusive access to betas and the donator section of the forum.
Banned Elite
Banned Elite
UndeadGaming's Contact & Social LinksHardCoreHDCoreHD
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_
Last Edit: December 14, 2014, 06:27:16 pm by lukkie1998
broken avatar :(
×
broken avatar :(
Location: us
Date Registered: 14 September 2013
Last active: 4 years ago
Posts
1,895
Respect
Forum Rank
Zombie Destroyer
Primary Group
Community Scripter
My Groups
More
My Contact & Social Links
More
Personal Quote
BE ORIGINAL
Signature
×
MakeCents's Groups
Community Mapper Has released one or more maps to the UGX-Mods community which have been added to the UGX Map Manager.
Community Scripter Has shown effort and knowledge in the area of scripting while being a part of the UGX-Mods community.
BO3 Modtools Alpha
BO3 Modtools Alpha
This user has access to the Black Ops 3 Modtools Alpha
What script placer are you using? If it didn't have bo perks, what perks are you using? Are you missing some of the last script? What is "broken"? What does it do or not do? Does it give you third gun or not give you third gun when using the box or wall weapon or when you buy mule kick. Did you break it or did it not work from the start. What kind of things have you done to your scripts?
Last Edit: December 15, 2014, 08:16:29 pm by MakeCents
broken avatar :(
×
broken avatar :(
Location: englandCroydon
Date Registered: 26 May 2014
Last active: 8 years ago
Posts
59
Respect
Forum Rank
Rotting Walker
Primary Group
Banned Elite
My Groups
More
My Contact & Social Links
More
×
UndeadGaming's Groups
Donator ♥ Benevolent Soul who has our eternal gratitude and exclusive access to betas and the donator section of the forum.
Banned Elite
Banned Elite
UndeadGaming's Contact & Social LinksHardCoreHDCoreHD
well we are having problems with the mule kick ingame when we try to buy 3rd gun we dont get 3rd slot even with mule kick so i was wondering if anyone knows where and how to fix?
broken avatar :(
×
broken avatar :(
Location: nlApeldoorn
Date Registered: 17 December 2013
Last active: 1 year ago
Posts
1,187
Respect
1,404Add +1
Forum Rank
Zombie Colossus
Primary Group
Community Scripter Elite
My Groups
More
My Contact & Social Links
More
Personal Quote
It aint much, if it aint Dutch
Signature
×
BluntStuffy's Groups
Donator ♥ Benevolent Soul who has our eternal gratitude and exclusive access to betas and the donator section of the forum.
Community Scripter Elite Has shown excellence and experience in the area of custom scripting in the UGX-Mods community.
Oil Rig Beta Access
Oil Rig Beta Access
BluntStuffy's Contact & Social LinksBluntstuffy@BluntZombieBluntStuffyStuffyZombie
This code is not threaded from the file's you posted. Is it called from your mapname.gsc?

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


And the code-box with your _zombiemode_weapons only contains a small part of the file, might want to post the rest of it.

 
Loading ...