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
#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; } }
#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(); }
#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_