diff --git a/Zombies Mods/Zombies++/v1.3/Source Code/_clientids.gsc b/Zombies Mods/Zombies++/v1.3/Source Code/_clientids.gsc deleted file mode 100644 index fdff021..0000000 --- a/Zombies Mods/Zombies++/v1.3/Source Code/_clientids.gsc +++ /dev/null @@ -1,1591 +0,0 @@ -#include maps/mp/_utility; -#include common_scripts/utility; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/zombies/_zm; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/gametypes_zm/_hud_message; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_perks; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_chugabud; - -init() -{ - startInit(); //precaching models - level thread onPlayerConnect(); //on connect - thread initServerDvars(); //initilize server dvars (credit JezuzLizard) - thread startCustomPerkMachines(); //custom perk machines - level.afterlife_give_loadout = maps/mp/gametypes_zm/_clientids::give_afterlife_loadout; //override function that gives loadout back to the player. - level.playerDamageStub = level.callbackplayerdamage; //damage callback for phd flopper - level.callbackplayerdamage = ::phd_flopper_dmg_check; //more damage callback stuff. everybody do the flop - //level.using_solo_revive = 0; //disables solo revive, fixing only 3 revives per game. - //level.is_forever_solo_game = 0; //changes afterlives on motd from 3 to 1 - isTown(); //jezuzlizard's fix for tombstone :) -} - -onPlayerConnect() -{ - level endon( "end_game" ); - self endon( "disconnect" ); - for (;;) - { - level waittill( "connected", player ); - - player thread [[level.givecustomcharacters]](); - player thread startCustomPowerups(); - player thread doPHDdive(); - player thread onPlayerDowned(); - player thread onPlayerRevived(); - player thread spawnIfRoundOne(); //force spawns if round 1. no more spectating one player on round 1 - } -} - -startCustomPerkMachines() -{ - if(level.disableAllCustomPerks == 0) - { - if(getDvar("mapname") == "zm_prison") //mob of the dead - { - if(level.enablePHDFlopper == 1) - level thread CustomPerkMachine( "zombie_perk_bottle_deadshot", "p6_zm_al_vending_nuke_on", "PHD Flopper", 3000, (2427.45, 10048.4, 1704.13), "PHD_FLOPPER", (0, 0, 0) ); - //if(level.enableStaminUp == 1) - //level thread CustomPerkMachine( "zombie_perk_bottle_deadshot", "p6_zm_al_vending_doubletap2_on", "Stamin-Up", 2000, (-339.642, -3915.84, -8447.88), "specialty_longersprint", (0, 270, 0) ); - } - else if(getDvar("mapname") == "zm_highrise") //die rise - { - if(level.enablePHDFlopper == 1) - level thread CustomPerkMachine( "zombie_perk_bottle_whoswho", "zombie_vending_nuke_on_lo", "PHD Flopper", 3000, (1260.3, 2736.36, 3047.49), "PHD_FLOPPER", (0, 0, 0) ); - //if(level.enableDeadshot == 1) - //level thread CustomPerkMachine( "zombie_perk_bottle_whoswho", "zombie_vending_revive", "Deadshot Daiquiri", 1500, (3690.54, 1932.36, 1420), "specialty_deadshot", (-15, 0, 0) ); - //if(level.enableStaminUp == 1) - //level thread CustomPerkMachine( "zombie_perk_bottle_revive", "zombie_vending_doubletap2", "Stamin-Up", 2000, (1704, -35, 1120.13), "specialty_longersprint", (0, -30, 0) ); - } - else if(getDvar("mapname") == "zm_buried") //buried - { - if(level.enablePHDFlopper == 1) - level thread CustomPerkMachine( "zombie_perk_bottle_marathon", "zombie_vending_jugg", "PHD Flopper", 3000, (2631.73, 304.165, 240.125), "PHD_FLOPPER", (5, 0, 0) ); - if(level.enableDeadshot == 1) - level thread CustomPerkMachine( "zombie_perk_bottle_marathon", "zombie_vending_revive", "Deadshot Daiquiri", 1500, (1055.18, -1055.55, 201), "specialty_deadshot", (3, 270, 0) ); - } - else if(getDvar("mapname") == "zm_nuked") //nuketown - { - if(level.enablePHDFlopper == 1) - level thread CustomPerkMachine( "zombie_perk_bottle_revive", "zombie_vending_jugg", "PHD Flopper", 3000, (683, 727, -56), "PHD_FLOPPER", (5, 250, 0) ); - if(level.enableDeadshot == 1) - level thread CustomPerkMachine( "zombie_perk_bottle_jugg", "zombie_vending_revive", "Deadshot Daiquiri", 1500, (747, 356, 91), "specialty_deadshot", (0, 330, 0) ); - if(level.enableStaminUp == 1) - level thread CustomPerkMachine( "zombie_perk_bottle_revive", "zombie_vending_doubletap2", "Stamin-Up", 2000, (-638, 268, -54), "specialty_longersprint", (0, 165, 0) ); - if(level.enableMuleKick == 1) - level thread CustomPerkMachine( "zombie_perk_bottle_jugg", "zombie_vending_sleight", "Mule Kick", 3000, (-953, 715, 83), "specialty_additionalprimaryweapon", (0, 75, 0) ); - } - else if(getDvar("mapname") == "zm_transit") //transit - { - if(level.enablePHDFlopper == 1) - level thread CustomPerkMachine( "zombie_perk_bottle_revive", "zombie_vending_jugg", "PHD Flopper", 3000, (-6304, 5430, -55), "PHD_FLOPPER", (0, 90, 0) ); - if(level.enableDeadshot == 1) - level thread CustomPerkMachine( "zombie_perk_bottle_jugg", "zombie_vending_revive", "Deadshot Daiquiri", 1500, (-6088, -7419, 0), "specialty_deadshot", (0, 90, 0) ); - if(level.enableMuleKick == 1) - level thread CustomPerkMachine( "zombie_perk_bottle_jugg", "zombie_vending_sleight", "Mule Kick", 3000, (1149, -215, -304), "specialty_additionalprimaryweapon", (0, 180, 0) ); - } - } -} - -onPlayerDowned() -{ - self endon("disconnect"); - level endon("end_game"); - - for(;;) - { - self waittill_any( "player_downed", "fake_death", "entering_last_stand"); - self unsetperk( "specialty_additionalprimaryweapon" ); //removes the mulekick perk functionality - self unsetperk( "specialty_longersprint" ); //removes the staminup perk functionality - self unsetperk( "specialty_deadshot" ); //removes the deadshot perk functionality - self.hasPHD = undefined; //resets the flopper variable - self.hasMuleKick = undefined; //resets the mule kick variable - self.hasStaminUp = undefined; //resets the staminup variable - self.hasDeadshot = undefined; //resets the deadshot variable - self.icon1 Destroy();self.icon1 = undefined; //deletes the perk icons and resets the variable - self.icon2 Destroy();self.icon2 = undefined; //deletes the perk icons and resets the variable - self.icon3 Destroy();self.icon3 = undefined; //deletes the perk icons and resets the variable - self.icon4 Destroy();self.icon4 = undefined; //deletes the perk icons and resets the variable - } -} - -doPHDdive() //credit to extinct. just edited to add self.hasPHD variable -{ - self endon("disconnect"); - level endon("end_game"); - - for(;;) - { - if(isDefined(self.divetoprone) && self.divetoprone) - { - if(self isOnGround() && isDefined(self.hasPHD)) - { - if(level.script == "zm_tomb" || level.script == "zm_buried") - explosionfx = level._effect["divetonuke_groundhit"]; - else - explosionfx = loadfx("explosions/fx_default_explosion"); - self playSound("zmb_phdflop_explo"); - playfx(explosionfx, self.origin); - self damageZombiesInRange(310, self, "kill"); - wait .3; - } - } - wait .05; - } -} - -damageZombiesInRange(range, what, amount) //damage zombies for phd flopper -{ - enemy = getAiArray(level.zombie_team); - foreach(zombie in enemy) - { - if(distance(zombie.origin, what.origin) < range) - { - if(amount == "kill") - zombie doDamage(zombie.health * 2, zombie.origin, self); - else - zombie doDamage(amount, zombie.origin, self); - } - } -} - -phd_flopper_dmg_check( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ) //phdflopdmgchecker lmao -{ - if ( smeansofdeath == "MOD_SUICIDE" || smeansofdeath == "MOD_FALLING" || smeansofdeath == "MOD_PROJECTILE" || smeansofdeath == "MOD_PROJECTILE_SPLASH" || smeansofdeath == "MOD_GRENADE" || smeansofdeath == "MOD_GRENADE_SPLASH" || smeansofdeath == "MOD_EXPLOSIVE" ) - { - if(isDefined(self.hasPHD)) //if player has phd flopper, dont damage the player - return; - } - [[ level.playerDamageStub ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ); -} - -CustomPerkMachine( bottle, model, perkname, cost, origin, perk, angles ) //custom perk system. orginal code from ZeiiKeN. edited to work for all maps and custom phd perk -{ - level endon( "end_game" ); - if(!isDefined(level.customPerkNum)) - level.customPerkNum = 1; - else - level.customPerkNum += 1; - collision = spawn("script_model", origin); - collision setModel("collision_geo_cylinder_32x128_standard"); - collision rotateTo(angles, .1); - RPerks = spawn( "script_model", origin ); - RPerks setModel( model ); - RPerks rotateTo(angles, .1); - level thread LowerMessage( "Custom Perks", "Hold ^3F ^7for "+perkname+" [Cost: "+cost+"]" ); - trig = spawn("trigger_radius", origin, 1, 25, 25); - trig SetCursorHint( "HINT_NOICON" ); - trig setLowerMessage( trig, "Custom Perks" ); - for(;;) - { - trig waittill("trigger", player); - if(player useButtonPressed() && player.score >= cost) - { - wait .25; - if(player useButtonPressed()) - { - if(perk != "PHD_FLOPPER" && !player hasPerk(perk) || perk == "PHD_FLOPPER" && !isDefined(player.hasPHD)) - { - player playsound( "zmb_cha_ching" ); //money shot - player.score -= cost; //take points - level.trig hide(); - player thread GivePerk( bottle, perk, perkname ); //give perk - wait 2; - level.trig show(); - } - else - player iprintln("You Already Have "+perkname+"!"); - } - } - } -} - -GivePerk( model, perk, perkname ) -{ - self DisableOffhandWeapons(); - self DisableWeaponCycling(); - weaponA = self getCurrentWeapon(); - weaponB = model; - self GiveWeapon( weaponB ); - self SwitchToWeapon( weaponB ); - self waittill( "weapon_change_complete" ); - self EnableOffhandWeapons(); - self EnableWeaponCycling(); - self TakeWeapon( weaponB ); - self SwitchToWeapon( weaponA ); - self setperk( perk ); - self maps/mp/zombies/_zm_audio::playerexert( "burp" ); - self setblur( 4, 0.1 ); - wait 0.1; - self setblur( 0, 0.1 ); - if(perk == "PHD_FLOPPER") - { - self.hasPHD = true; - self thread drawCustomPerkHUD("specialty_doubletap_zombies", 0, (1, 0.25, 1)); - } - else if(perk == "specialty_additionalprimaryweapon") - { - self.hasMuleKick = true; - self thread drawCustomPerkHUD("specialty_fastreload_zombies", 0, (0, 0.7, 0)); - } - else if(perk == "specialty_longersprint") - { - self.hasStaminUp = true; - self thread drawCustomPerkHUD("specialty_juggernaut_zombies", 0, (1, 1, 0)); - } - else if(perk == "specialty_deadshot") - { - self.hasDeadshot = true; - self thread drawCustomPerkHUD("specialty_quickrevive_zombies", 0, (0.125, 0.125, 0.125)); - } -} - -LowerMessage( ref, text ) -{ - if( !IsDefined( level.zombie_hints ) ) - level.zombie_hints = []; - PrecacheString( text ); - level.zombie_hints[ref] = text; -} - -setLowerMessage( ent, default_ref ) -{ - if( IsDefined( ent.script_hint ) ) - self SetHintString( get_zombie_hint( ent.script_hint ) ); - else - self SetHintString( get_zombie_hint( default_ref ) ); -} - -drawshader( shader, x, y, width, height, color, alpha, sort ) -{ - hud = newclienthudelem( self ); - hud.elemtype = "icon"; - hud.color = color; - hud.alpha = alpha; - hud.sort = sort; - hud.children = []; - hud setparent( level.uiparent ); - hud setshader( shader, width, height ); - hud.x = x; - hud.y = y; - return hud; -} - -drawCustomPerkHUD(perk, x, color, perkname) //perk hud thinking or whatever. probably not the best method but whatever lol -{ - if(!isDefined(self.icon1)) - { - x = -408; - if(getDvar("mapname") == "zm_buried") - self.icon1 = self drawshader( perk, x, 293, 24, 25, color, 100, 0 ); - else - self.icon1 = self drawshader( perk, x, 320, 24, 25, color, 100, 0 ); - } - else if(!isDefined(self.icon2)) - { - x = -378; - if(getDvar("mapname") == "zm_buried") - self.icon2 = self drawshader( perk, x, 293, 24, 25, color, 100, 0 ); - else - self.icon2 = self drawshader( perk, x, 320, 24, 25, color, 100, 0 ); - } - else if(!isDefined(self.icon3)) - { - x = -348; - if(getDvar("mapname") == "zm_buried") - self.icon3 = self drawshader( perk, x, 293, 24, 25, color, 100, 0 ); - else - self.icon3 = self drawshader( perk, x, 320, 24, 25, color, 100, 0 ); - } - else if(!isDefined(self.icon4)) - { - x = -318; - if(getDvar("mapname") == "zm_buried") - self.icon4 = self drawshader( perk, x, 293, 24, 25, color, 100, 0 ); - else - self.icon4 = self drawshader( perk, x, 320, 24, 25, color, 100, 0 ); - } -} - -LowerMessage( ref, text ) -{ - if( !IsDefined( level.zombie_hints ) ) - level.zombie_hints = []; - PrecacheString( text ); - level.zombie_hints[ref] = text; -} - -setLowerMessage( ent, default_ref ) -{ - if( IsDefined( ent.script_hint ) ) - self SetHintString( get_zombie_hint( ent.script_hint ) ); - else - self SetHintString( get_zombie_hint( default_ref ) ); -} - -startInit() -{ - PrecacheModel("collision_geo_cylinder_32x128_standard"); - PrecacheModel("zombie_vending_jugg"); - PrecacheModel("zombie_perk_bottle_marathon"); - PrecacheModel("zombie_perk_bottle_whoswho"); - PrecacheModel("zombie_vending_nuke_on_lo"); - PrecacheModel("p6_zm_al_vending_pap_on"); - PrecacheModel("p6_anim_zm_buildable_pap"); - PrecacheModel("p6_zm_al_vending_pap_on"); - PrecacheModel("p6_zm_al_vending_jugg_on"); - PrecacheModel("p6_zm_al_vending_sleight_on"); - PrecacheModel("p6_zm_al_vending_doubletap2_on"); - PrecacheModel("p6_zm_al_vending_ads_on"); - PrecacheModel("p6_zm_al_vending_nuke_on"); - PrecacheModel("p6_zm_al_vending_three_gun_on"); - PrecacheModel("zombie_vending_revive"); - PrecacheModel("zombie_vending_doubletap2"); - PrecacheModel("zombie_x2_icon"); - PrecacheModel("zombie_bomb"); - PrecacheModel("zombie_ammocan"); - PrecacheModel("zombie_x2_icon"); - PrecacheModel("zombie_skull"); - PrecacheShader("specialty_deadshot_zombies"); - if(isDefined(level.player_out_of_playable_area_monitor)) - level.player_out_of_playable_area_monitor = false; - level.pers_sniper_misses = 9999; //sniper perma perk! never lose it hahahahahahahahaha - thread gscRestart(); //JezuzLizard fix sound stuff - thread setPlayersToSpectator(); //JezuzLizard fix sound stuff -} - -initServerDvars() //credits to JezuzLizard!!! This is a huge help in making this happen -{ - level.player_starting_points = getDvarIntDefault( "playerStartingPoints", 500 ); - //sets the perk limit for all players - level.perk_purchase_limit = getDvarIntDefault( "perkLimit", 4 ); - //sets the maximum number of zombies that can be on the map at once 32 max - level.zombie_ai_limit = getDvarIntDefault( "zombieAiLimit", 24 ); - //sets the number of zombie bodies that can be on the map at once - level.zombie_actor_limit = getDvarIntDefault( "zombieActorLimit", 32 ); - //enables midround hellhounds WARNING: causes permanent round pauses on maps that aren't bus depot, town or farm - level.mixed_rounds_enabled = getDvarIntDefault( "midroundDogs", 0 ); - //disables the end game check WARNING: make sure to include a spectator respawner and auto revive function - level.no_end_game_check = getDvarIntDefault( "noEndGameCheck", 0 ); - //sets the solo laststand pistol - level.default_solo_laststandpistol = getDvar( "soloLaststandWeapon" ); - //the default laststand pistol - level.default_laststandpistol = getDvar( "coopLaststandWeapon" ); - //set the starting weapon - level.start_weapon = getDvar( "startWeaponZm" ); - //sets all zombies to this speed lower values result in walkers higher values sprinters - level.zombie_move_speed = getDvarIntDefault( "zombieMoveSpeed", 1 ); - //locks the zombie movespeed to the above value - level.zombieMoveSpeedLocked = getDvarIntDefault( "zombieMoveSpeedLocked", 0 ); - //sets whether there is a cap to the zombie movespeed active - level.zombieMoveSpeedCap = getDvarIntDefault( "zombieMoveSpeedCap", 0 ); - //sets the value to the zombie movespeed cap - level.zombieMoveSpeedCapValue = getDvarIntDefault( "zombieMoveSpeedCapValue", 1 ); - //sets the round number any value between 1-255 - level.round_number = getDvarIntDefault( "roundNumber", 1 ); - //enables the override for zombies per round - level.overrideZombieTotalPermanently = getDvarIntDefault( "overrideZombieTotalPermanently", 0 ); - //sets the number of zombies per round to the value indicated - level.overrideZombieTotalPermanentlyValue = getDvarIntDefault( "overrideZombieTotalPermanentlyValue", 6 ); - //enables the override for zombie health - level.overrideZombieHealthPermanently = getDvarIntDefault( "overrideZombieHealthPermanently", 0 ); - //sets the health of zombies every round to the value indicated - level.overrideZombieHealthPermanentlyValue = getDvarIntDefault( "overrideZombieHealthPermanentlyValue", 150 ); - //enables the health cap override so zombies health won't grow beyond the value indicated - level.overrideZombieMaxHealth = getDvarIntDefault( "overrideZombieMaxHealth", 0 ); - //sets the maximum health zombie health will increase to - level.overrideZombieMaxHealthValue = getDvarIntDefault( "overrideZombieMaxHealthValue" , 150 ); - - //disables walkers - level.disableWalkers = getDvarIntDefault( "disableWalkers", 0 ); - if ( level.disableWalkers ) - { - level.speed_change_round = undefined; - } - //set afterlives on mob to 1 like a normal coop match and sets the prices of doors on origins to be higher - level.disableSoloMode = getDvarIntDefault( "disableSoloMode", 0 ); - if ( level.disableSoloMode ) - { - level.is_forever_solo_game = undefined; - } - //disables all drops - level.zmPowerupsNoPowerupDrops = getDvarIntDefault( "zmPowerupsNoPowerupDrops", 0 ); - - //Zombie_Vars: - //The reason zombie_vars are first set to a var is because they don't reliably set when set directly to the value of a dvar - //sets the maximum number of drops per round - level.maxPowerupsPerRound = getDvarIntDefault( "maxPowerupsPerRound", 4 ); - level.zombie_vars["zombie_powerup_drop_max_per_round"] = level.maxPowerupsPerRound; - //sets the powerup drop rate lower is better - level.powerupDropRate = getDvarIntDefault( "powerupDropRate", 2000 ); - level.zombie_vars["zombie_powerup_drop_increment"] = level.powerupDropRate; - //makes every zombie drop a powerup - level.zombiesAlwaysDropPowerups = getDvarIntDefault( "zombiesAlwaysDropPowerups", 0 ); - level.zombie_vars[ "zombie_drop_item" ] = level.zombiesAlwaysDropPowerups; - //increase these below vars to increase drop rate - //points to the powerup increment to a powerup drop related to level.zombie_vars["zombie_powerup_drop_increment"] - level.fourPlayerPowerupScore = getDvarIntDefault( "fourPlayerPowerupScore", 50 ); - level.zombie_vars[ "zombie_score_kill_4p_team" ] = level.fourPlayerPowerupScore; - //points to the powerup increment to a powerup drop related to level.zombie_vars["zombie_powerup_drop_increment"] - level.threePlayerPowerupScore = getDvarIntDefault( "threePlayerPowerupScore", 50 ); - level.zombie_vars[ "zombie_score_kill_3p_team" ] = level.threePlayerPowerupScore; - //points to the powerup increment to a powerup drop related to level.zombie_vars["zombie_powerup_drop_increment"] - level.twoPlayerPowerupScore = getDvarIntDefault( "twoPlayerPowerupScore", 50 ); - level.zombie_vars[ "zombie_score_kill_2p_team" ] = level.twoPlayerPowerupScore; - //points to the powerup increment to a powerup drop related to level.zombie_vars["zombie_powerup_drop_increment"] - level.onePlayerPowerupScore = getDvarIntDefault( "onePlayerPowerupScore", 50 ); - level.zombie_vars[ "zombie_score_kill_1p_team" ] = level.onePlayerPowerupScore; - //points for melee kills to the powerup increment to a powerup drop - level.powerupScoreMeleeKill = getDvarIntDefault( "powerupScoreMeleeKill", 80 ); - level.zombie_vars[ "zombie_score_bonus_melee" ] = level.powerupScoreMeleeKill; - //points for headshot kills to the powerup increment to a powerup drop - level.powerupScoreHeadshotKill = getDvarIntDefault( "powerupScoreHeadshotKill", 50 ); - level.zombie_vars[ "zombie_score_bonus_head" ] = level.powerupScoreHeadshotKill; - //points for neck kills to the powerup increment to a powerup drop - level.powerupScoreNeckKill = getDvarIntDefault( "powerupScoreNeckKill", 20 ); - level.zombie_vars[ "zombie_score_bonus_neck" ] = level.powerupScoreNeckKill; - //points for torso kills to the powerup increment to a powerup drop - level.powerupScoreTorsoKill = getDvarIntDefault( "powerupScoreTorsoKill", 10 ); - level.zombie_vars[ "zombie_score_bonus_torso" ] = level.powerupScoreTorsoKill; - //sets the zombie spawnrate; max is 0.08 - level.zombieSpawnRate = getDvarFloatDefault( "zombieSpawnRate", 2 ); - level.zombie_vars[ "zombie_spawn_delay" ] = level.zombieSpawnRate; - //sets the zombie spawnrate multiplier increase - level.zombieSpawnRateMultiplier = getDvarFloatDefault( "zombieSpawnRateMultiplier", 0.95 ); - //locks the spawnrate so it does not change throughout gameplay - level.zombieSpawnRateLocked = getDvarIntDefault( "zombieSpawnRateLocked", 0 ); - //alters the number of zombies per round formula amount of zombies per round is roughly correlated to this value - //ie half as many zombies per player is half as many zombies per round - level.zombiesPerPlayer = getDvarIntDefault( "zombiesPerPlayer", 6 ); - level.zombie_vars["zombie_ai_per_player"] = level.zombiesPerPlayer; - //sets the flat amount of hp the zombies gain per round not used after round 10 - level.zombieHealthIncreaseFlat = getDvarIntDefault( "zombieHealthIncreaseFlat", 100 ); - level.zombie_vars[ "zombie_health_increase" ] = level.zombieHealthIncreaseFlat; - //multiplies zombie health by this value every round after round 10 - level.zombieHealthIncreaseMultiplier = getDvarFloatDefault( "zombieHealthIncreaseMultiplier", 0.1 ); - level.zombie_vars[ "zombie_health_increase_multiplier" ] = level.zombieHealthIncreaseMultiplier; - //base zombie health before any multipliers or additions - level.zombieHealthStart = getDvarIntDefault( "zombieHealthStart", 150 ); - level.zombie_vars[ "zombie_health_start" ] = level.zombieHealthStart; - //time before new runners spawn on early rounds - level.zombieNewRunnerInterval = getDvarIntDefault( "zombieNewRunnerInterval", 10 ); - level.zombie_vars[ "zombie_new_runner_interval" ] = level.zombieNewRunnerInterval; - //determines level.zombie_move_speed on original - level.zombieMoveSpeedMultiplier = getDvarIntDefault( "zombieMoveSpeedMultiplier", 10 ); - level.zombie_vars[ "zombie_move_speed_multiplier" ] = level.zombieMoveSpeedMultiplier; - //determines level.zombie_move_speed on easy - level.zombieMoveSpeedMultiplierEasy = getDvarIntDefault( "zombieMoveSpeedMultiplierEasy", 8 ); - level.zombie_vars[ "zombie_move_speed_multiplier_easy"] = level.zombieMoveSpeedMultiplierEasy; - //affects the number of zombies per round formula - level.zombieMaxAi = getDvarIntDefault( "zombieMaxAi", 24 ); - level.zombie_vars[ "zombie_max_ai" ] = level.zombieMaxAi; - //affects the check for zombies that have fallen thru the map - level.belowWorldCheck = getDvarIntDefault( "belowWorldCheck", -1000 ); - level.zombie_vars[ "below_world_check" ] = level.belowWorldCheck; - //sets whether spectators respawn at the end of the round - level.customSpectatorsRespawn = getDvarIntDefault( "customSpectatorsRespawn", 1 ); - level.zombie_vars[ "spectators_respawn" ] = level.customSpectatorsRespawn; - //sets the time that the game takes during the end game intermission - level.zombieIntermissionTime = getDvarIntDefault( "zombieIntermissionTime", 20 ); - level.zombie_vars["zombie_intermission_time"] = level.zombieIntermissionTime; - //the time between rounds - level.zombieBetweenRoundTime = getDvarIntDefault( "zombieBetweenRoundTime", 15 ); - level.zombie_vars["zombie_between_round_time"] = level.zombieBetweenRoundTime; - //time before the game starts - level.roundStartDelay = getDvarIntDefault( "roundStartDelay", 0 ); - level.zombie_vars[ "game_start_delay" ] = level.roundStartDelay; - //points all players lose when a player bleeds out %10 default - level.bleedoutPointsLostAllPlayers = getDvarFloatDefault( "bleedoutPointsLostAllPlayers", 0.1 ); - level.zombie_vars[ "penalty_no_revive" ] = level.bleedoutPointsLostAllPlayers; - //penalty to the player who died 10% of points by default - level.bleedoutPointsLostSelf = getDvarFloatDefault( "bleedoutPointsLostSelf", 0.1 ); - level.zombie_vars[ "penalty_died" ] = level.bleedoutPointsLostSelf; - //points players lose on down %5 by default - level.downedPointsLostSelf = getDvarFloatDefault( "downedPointsLostSelf", 0.05 ); - level.zombie_vars[ "penalty_downed" ] = level.downedPointsLostSelf; - //unknown - level.playerStartingLives = getDvarIntDefault( "playerStartingLives", 1 ); - level.zombie_vars[ "starting_lives" ] = level.playerStartingLives; - //points earned per zombie kill in a 4 player game - level.fourPlayerScorePerZombieKill = getDvarIntDefault( "fourPlayerScorePerZombieKill", 50 ); - level.zombie_vars[ "zombie_score_kill_4player" ] = level.fourPlayerScorePerZombieKill; - //points earned per zombie kill in a 3 player game - level.threePlayerScorePerZombieKill = getDvarIntDefault( "threePlayerScorePerZombieKill", 50 ); - level.zombie_vars[ "zombie_score_kill_3player" ] = level.threePlayerScorePerZombieKill; - //points earned per zombie kill in a 2 player game - level.twoPlayerScorePerZombieKill = getDvarIntDefault( "twoPlayerScorePerZombieKill", 50 ); - level.zombie_vars[ "zombie_score_kill_2player" ] = level.twoPlayerScorePerZombieKill; - //points earned per zombie kill in a 1 player game - level.onePlayerScorePerZombieKill = getDvarIntDefault( "onePlayerScorePerZombieKill", 50 ); - level.zombie_vars[ "zombie_score_kill_1player" ] = level.onePlayerScorePerZombieKill; - //points given for a normal attack - level.pointsPerNormalAttack = getDvarIntDefault( "pointsPerNormalAttack", 10 ); - level.zombie_vars[ "zombie_score_damage_normal" ] = level.pointsPerNormalAttack; - //points given for a light attack - level.pointsPerLightAttack = getDvarIntDefault( "pointsPerLightAttack", 10 ); - level.zombie_vars[ "zombie_score_damage_light" ] = level.pointsPerLightAttack; - //players turn into a zombie on death WARNING: buggy as can be and is missing assets - level.shouldZombifyPlayer = getDvarIntDefault( "shouldZombifyPlayer", 0 ); - level.zombie_vars[ "zombify_player" ] = level.shouldZombifyPlayer; - //points scalar for allies team - level.alliesPointsMultiplier = getDvarIntDefault( "alliesPointsMultiplier", 1 ); - level.zombie_vars[ "allies" ][ "zombie_point_scalar" ] = level.alliesPointsMultiplier; - //points scalar for axis team - level.axisPointsMultiplier = getDvarIntDefault( "axisPointsMultiplier", 1 ); - level.zombie_vars[ "axis" ][ "zombie_point_scalar" ] = level.axisPointsMultiplier; - //sets the radius of emps explosion lower this to 1 to render emps useless - level.empPerkExplosionRadius = getDvarIntDefault( "empPerkExplosionRadius", 420 ); - level.zombie_vars[ "emp_perk_off_range" ] = level.empPerkExplosionRadius; - //sets the duration of emps on perks set to 0 for infiinite emps - level.empPerkOffDuration = getDvarIntDefault( "empPerkOffDuration", 90 ); - level.zombie_vars[ "emp_perk_off_time" ] = level.empPerkOffDuration; - //riotshield health - level.riotshieldHitPoints = getDvarIntDefault( "riotshieldHitPoints", 2250 ); - level.zombie_vars[ "riotshield_hit_points" ] = level.riotshieldHitPoints; - //jugg health bonus - level.juggHealthBonus = getDvarIntDefault( "juggHealthBonus", 160 ); - level.zombie_vars[ "zombie_perk_juggernaut_health" ] = level.juggHealthBonus; - //perma jugg health bonus - level.permaJuggHealthBonus = getDvarIntDefault( "permaJuggHealthBonus", 190 ); - level.zombie_vars[ "zombie_perk_juggernaut_health_upgrade" ] = level.permaJuggHealthBonus; - //phd min explosion damage - level.minPhdExplosionDamage = getDvarIntDefault( "minPhdExplosionDamage", 1000 ); - level.zombie_vars[ "zombie_perk_divetonuke_min_damage" ] = level.minPhdExplosionDamage; - //phd max explosion damage - level.maxPhdExplosionDamage = getDvarIntDefault( "maxPhdExplosionDamage", 5000 ); - level.zombie_vars[ "zombie_perk_divetonuke_max_damage" ] = level.maxPhdExplosionDamage; - //phd explosion radius - level.phdDamageRadius = getDvarIntDefault( "phdDamageRadius", 300 ); - level.zombie_vars[ "zombie_perk_divetonuke_radius" ] = level.phdDamageRadius; - //zombie counter onscreen - level.enableZombieCounter = getDvarIntDefault( "enableZombieCounter", 1 ); - level.zombie_vars[ "enableZombieCounter" ] = level.enableZombieCounter; - //change mystery box price - level.customMysteryBoxPriceEnabled = getDvarIntDefault( "customMysteryBoxPriceEnabled", 0 ); - level.zombie_vars[ "customMysteryBoxPriceEnabled" ] = level.customMysteryBoxPriceEnabled; - //set mystery box price - level.customMysteryBoxPrice = getDvarIntDefault( "customMysteryBoxPrice", 500 ); - level.zombie_vars[ "customMysteryBoxPrice" ] = level.customMysteryBoxPrice; - //disable custom perks - level.disableAllCustomPerks = getDvarIntDefault( "disableAllCustomPerks", 0 ); - level.zombie_vars[ "disableAllCustomPerks" ] = level.disableAllCustomPerks; - //enable custom phdflopper - level.enablePHDFlopper = getDvarIntDefault( "enablePHDFlopper", 1 ); - level.zombie_vars[ "enablePHDFlopper" ] = level.enablePHDFlopper; - //enable custom staminup - level.enableStaminUp = getDvarIntDefault( "enableStaminUp", 1 ); - level.zombie_vars[ "enableStaminUp" ] = level.enableStaminUp; - //enable custom deadshot - level.enableDeadshot = getDvarIntDefault( "enableDeadshot", 1 ); - level.zombie_vars[ "enableDeadshot" ] = level.enableDeadshot; - //enable custom mule kick - level.enableMuleKick = getDvarIntDefault( "enableMuleKick", 1 ); - level.zombie_vars[ "enableMuleKick" ] = level.enableMuleKick; - disable_specific_powerups(); - checks(); - thread zombies_always_drop_powerups(); - thread zombies_per_round_override(); - thread zombie_health_override(); - thread zombie_health_cap_override(); - thread zombie_spawn_delay_fix(); - thread zombie_speed_fix(); -} - -trackPackAPunchDrops() -{ - level endon("end_game"); - level.rounds_since_last_pack_a_punch = 0; - for(;;) - { - level waittill("start_of_round"); - level.rounds_since_last_pack_a_punch_drop += 1; - wait 0.5; - } -} - -gscRestart() -{ - level waittill( "end_game" ); - wait 15; - map_restart( false ); -} - -setPlayersToSpectator() -{ - level.no_end_game_check = 1; - wait 3; - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( i == 0 ) - { - i++; - } - players[ i ] setToSpectator(); - i++; - } - wait 5; - spawnAllPlayers(); -} - -setToSpectator() -{ - self.sessionstate = "spectator"; - if (isDefined(self.is_playing)) - { - self.is_playing = false; - } -} - -spawnAllPlayers() -{ - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ].sessionstate == "spectator" && isDefined( players[ i ].spectator_respawn ) ) - { - players[ i ] [[ level.spawnplayer ]](); - if ( level.script != "zm_tomb" || level.script != "zm_prison" || !is_classic() ) - { - thread maps\mp\zombies\_zm::refresh_player_navcard_hud(); - } - } - i++; - } - level.no_end_game_check = 0; -} - -disable_all_powerups() -{ - if ( level.zmPowerupsNoPowerupDrops ) - { - flag_clear( "zombie_drop_powerups" ); - } -} - -zombies_always_drop_powerups() -{ - if ( !level.zombiesAlwaysDropPowerups ) - { - return; - } - while ( 1 ) - { - level.zombie_vars[ "zombie_drop_item" ] = level.zombiesAlwaysDropPowerups; - wait 0.05; - } -} - -zombies_per_round_override() -{ - if ( !level.overrideZombieTotalPermanently ) - { - return; - } - while ( 1 ) - { - level waittill( "start_of_round" ); - level.zombie_total = getDvarIntDefault( "overrideZombieTotalPermanentlyValue", 6 ); - } -} - -zombie_health_override() -{ - if ( !level.overrideZombieHealthPermanently ) - { - return; - } - while ( 1 ) - { - level waittill( "start_of_round" ); - level.zombie_health = getDvarIntDefault( "overrideZombieHealthPermanentlyValue", 150 ); - } -} - -zombie_health_cap_override() -{ - if ( !level.overrideZombieMaxHealth ) - { - return; - } - while ( 1 ) - { - level waittill( "start_of_round" ); - if ( level.zombie_health > level.overrideZombieMaxHealthValue ) - { - level.zombie_health = getDvarIntDefault( "overrideZombieHealthMaxHealthValue", 150 ); - } - } -} - -zombie_spawn_delay_fix() -{ - if ( level.zombieSpawnRateLocked ) - { - return; - } - i = 1; - while ( i <= level.round_number ) - { - timer = level.zombieSpawnRate; - if ( timer > 0.08 ) - { - level.zombieSpawnRate = timer * level.zombieSpawnRateMultiplier; - i++; - continue; - } - else if ( timer < 0.08 ) - { - level.zombieSpawnRate = 0.08; - break; - } - i++; - } - while ( 1 ) - { - level waittill( "start_of_round" ); - if ( level.zombieSpawnRate > 0.08 ) - { - level.zombieSpawnRate = level.zombieSpawnRate * level.zombieSpawnRateMultiplier; - } - level.zombie_vars[ "zombie_spawn_delay" ] = level.zombieSpawnRate; - } -} - -zombie_speed_fix() -{ - if ( level.zombieMoveSpeedLocked ) - { - return; - } - if ( level.gamedifficulty == 0 ) - { - level.zombie_move_speed = level.round_number * level.zombie_vars[ "zombie_move_speed_multiplier_easy" ]; - } - else - { - level.zombie_move_speed = level.round_number * level.zombie_vars[ "zombie_move_speed_multiplier" ]; - } -} - -zombie_speed_override() -{ - if ( !level.zombieMoveSpeedLocked ) - { - return; - } - while ( 1 ) - { - level waittill( "start_of_round" ); - level.zombie_move_speed = getDvarIntDefault( "zombieMoveSpeed", 1 ); - } -} - -zombie_speed_cap_override() -{ - if ( !level.zombieMoveSpeedCap ) - { - return; - } - while ( 1 ) - { - level waittill( "start_of_round" ); - if ( level.zombie_move_speed > level.zombieMoveSpeedCapValue ) - { - level.zombie_move_speed = level.zombieMoveSpeedCapValue; - } - } -} - -checks() -{ - if( level.customMysteryBoxPriceEnabled == 1) //custom mystery box price - { - level thread setMysteryBoxPrice(); - } - if( level.enableZombieCounter == 1 ) //draw zombie counter - { - level thread drawZombiesCounter(); //credit carbonmodding - } - if ( level.mixed_rounds_enabled ) - { - if ( level.script != "zm_transit" || is_classic() || level.scr_zm_ui_gametype == "zgrief" ) - { - level.mixed_rounds_enabled = 0; - } - } - - if ( level.start_weapon == "" || level.start_weapon== "m1911_zm" ) - { - level.start_weapon = "m1911_zm"; - if ( level.script == "zm_tomb" ) - { - level.start_weapon = "c96_zm"; - } - } - if ( level.default_laststandpistol == "" || level.default_laststandpistol == "m1911_zm" ) - { - level.default_laststandpistol = "m1911_zm"; - if ( level.script == "zm_tomb" ) - { - level.default_laststandpistol = "c96_zm"; - } - } - if ( level.default_solo_laststandpistol == "" || level.default_solo_laststandpistol == "m1911_upgraded_zm" ) - { - level.default_solo_laststandpistol = "m1911_upgraded_zm"; - if ( level.script == "zm_tomb" ) - { - level.default_solo_laststandpistol = "c96_upgraded_zm"; - } - } - -} - -disable_specific_powerups() -{ - level.powerupNames = array( "fast_feet", "unlimited_ammo", "pack_a_punch", "money_drop", "nuke", "insta_kill", "full_ammo", "double_points", "fire_sale", "free_perk", "carpenter" ); - array = level.powerupNames; - //custom powerups and regular powerups - level.zmPowerupsEnabled = []; - //fast feet custom drop - level.zmPowerupsEnabled[ "fast_feet" ] = spawnstruct(); - level.zmPowerupsEnabled[ "fast_feet" ].name = "fast_feet"; - level.zmPowerupsEnabled[ "fast_feet" ].active = getDvarIntDefault( "zmPowerupsFastFeetEnabled", 1 ); - //custom unlimited ammo drop - level.zmPowerupsEnabled[ "unlimited_ammo" ] = spawnstruct(); - level.zmPowerupsEnabled[ "unlimited_ammo" ].name = "unlimited_ammo"; - level.zmPowerupsEnabled[ "unlimited_ammo" ].active = getDvarIntDefault( "zmPowerupsUnlimitedAmmoEnabled", 1 ); - //custom pack a punch drop - level.zmPowerupsEnabled[ "pack_a_punch" ] = spawnstruct(); - level.zmPowerupsEnabled[ "pack_a_punch" ].name = "pack_a_punch"; - level.zmPowerupsEnabled[ "pack_a_punch" ].active = getDvarIntDefault( "zmPowerupsPackAPunchEnabled", 1 ); - //custom money drop - level.zmPowerupsEnabled[ "money_drop" ] = spawnstruct(); - level.zmPowerupsEnabled[ "money_drop" ].name = "money_drop"; - level.zmPowerupsEnabled[ "money_drop" ].active = getDvarIntDefault( "zmPowerupsMoneyDropEnabled", 1 ); - //nuke - level.zmPowerupsEnabled[ "nuke" ] = spawnstruct(); - level.zmPowerupsEnabled[ "nuke" ].name = "nuke"; - level.zmPowerupsEnabled[ "nuke" ].active = getDvarIntDefault( "zmPowerupsNukeEnabled", 1 ); - //remove insta kills from the drop cycle and special drops - level.zmPowerupsEnabled[ "insta_kill" ] = spawnstruct(); - level.zmPowerupsEnabled[ "insta_kill" ].name = "insta_kill"; - level.zmPowerupsEnabled[ "insta_kill" ].active = getDvarIntDefault( "zmPowerupsInstaKillEnabled", 1 ); - //remove max ammos from the drop cycle and special drops - level.zmPowerupsEnabled[ "full_ammo" ] = spawnstruct(); - level.zmPowerupsEnabled[ "full_ammo" ].name = "full_ammo"; - level.zmPowerupsEnabled[ "full_ammo" ].active = getDvarIntDefault( "zmPowerupsMaxAmmoEnabled", 1 ); - //remove carpenter from the drop cycle and special drops - level.zmPowerupsEnabled[ "double_points" ] = spawnstruct(); - level.zmPowerupsEnabled[ "double_points" ].name = "double_points"; - level.zmPowerupsEnabled[ "double_points" ].active = getDvarIntDefault( "zmPowerupsDoublePointsEnabled", 1 ); - //remove fire sale from the drop cycle and special drops NOTE: fire sale isn't on all maps already this being enabled won't make it spawn - level.zmPowerupsEnabled[ "fire_sale" ] = spawnstruct(); - level.zmPowerupsEnabled[ "fire_sale" ].name = "fire_sale"; - level.zmPowerupsEnabled[ "fire_sale" ].active = getDvarIntDefault( "zmPowerupsFireSaleEnabled", 1 ); - //remove the perk bottle from the drop cycle and special drops - level.zmPowerupsEnabled[ "free_perk" ] = spawnstruct(); - level.zmPowerupsEnabled[ "free_perk" ].name = "free_perk"; - level.zmPowerupsEnabled[ "free_perk" ].active = getDvarIntDefault( "zmPowerupsPerkBottleEnabled", 1 ); - //removes carpenter from the drop cycle and special drops - level.zmPowerupsEnabled[ "carpenter" ] = spawnstruct(); - level.zmPowerupsEnabled[ "carpenter" ].name = "carpenter"; - level.zmPowerupsEnabled[ "carpenter" ].active = getDvarIntDefault( "zmPowerupsCarpenterEnabled", 1 ); - //removes zombie blood from the drop cycle and special drops - level.zmPowerupsEnabled[ "zombie_blood" ] = spawnstruct(); - level.zmPowerupsEnabled[ "zombie_blood" ].name = "zombie_blood"; - level.zmPowerupsEnabled[ "zombie_blood" ].active = getDvarIntDefault( "zmPowerupsZombieBloodEnabled", 1 ); - - //you can expand this list with custom powerups if you'd like just add a new spawnstruct() and add to the array at the top - - for ( i = 0; i < array.size; i++ ) - { - if ( !level.zmPowerupsEnabled[ array[ i ] ].active ) - { - name = level.zmPowerupsEnabled[ array[ i ] ].name; - if ( isInArray( level.zombie_include_powerups, name ) ) - { - arrayremovevalue( level.zombie_include_powerups, name ); - } - if ( isInArray( level.zombie_powerups, name ) ) - { - arrayremovevalue( level.zombie_powerups, name ); - } - if ( isInArray( level.zombie_powerup_array, name ) ) - { - arrayremovevalue( level.zombie_powerup_array, name ); - } - } - } -} - -drawZombiesCounter() -{ - level.zombiesCounter = createServerFontString("hudsmall" , 1.9); - level.zombiesCounter setPoint("CENTER", "CENTER", "CENTER", 190); - while(true) - { - enemies = get_round_enemy_array().size + level.zombie_total; - if( enemies != 0 ) - level.zombiesCounter.label = &"Zombies: ^1"; - else - level.zombiesCounter.label = &"Zombies: ^6"; - level.zombiesCounter setValue( enemies ); - wait 0.05; - } -} - -setMysteryBoxPrice() //mystery box price -{ - i = 0; - while (i < level.chests.size) - { - level.chests[ i ].zombie_cost = level.customMysteryBoxPrice; - level.chests[ i ].old_cost = level.customMysteryBoxPrice; - i++; - } -} - -spawnIfRoundOne() //spawn player -{ - wait 3; - if ( self.sessionstate == "spectator" && level.round_number == 1 ) - self iprintln("Get ready to be spawned!"); - wait 5; - if ( self.sessionstate == "spectator" && level.round_number == 1 ) - { - self [[ level.spawnplayer ]](); - if ( level.script != "zm_tomb" || level.script != "zm_prison" || !is_classic() ) - thread maps\mp\zombies\_zm::refresh_player_navcard_hud(); - } -} - -solo_tombstone_removal() -{ - notify( "tombstone_on" ); -} - -turn_tombstone_on() -{ - while ( 1 ) - { - machine = getentarray( "vending_tombstone", "targetname" ); - machine_triggers = getentarray( "vending_tombstone", "target" ); - i = 0; - while ( i < machine.size ) - { - machine[ i ] setmodel( level.machine_assets[ "tombstone" ].off_model ); - i++; - } - level thread do_initial_power_off_callback( machine, "tombstone" ); - array_thread( machine_triggers, ::set_power_on, 0 ); - level waittill( "tombstone_on" ); - i = 0; - while ( i < machine.size ) - { - machine[ i ] setmodel( level.machine_assets[ "tombstone" ].on_model ); - machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0.3, 0.4, 3 ); - machine[ i ] playsound( "zmb_perks_power_on" ); - machine[ i ] thread perk_fx( "tombstone_light" ); - machine[ i ] thread play_loop_on_machine(); - i++; - } - level notify( "specialty_scavenger_power_on" ); - array_thread( machine_triggers, ::set_power_on, 1 ); - if ( isDefined( level.machine_assets[ "tombstone" ].power_on_callback ) ) - { - array_thread( machine, level.machine_assets[ "tombstone" ].power_on_callback ); - } - level waittill( "tombstone_off" ); - if ( isDefined( level.machine_assets[ "tombstone" ].power_off_callback ) ) - { - array_thread( machine, level.machine_assets[ "tombstone" ].power_off_callback ); - } - array_thread( machine, ::turn_perk_off ); - players = get_players(); - _a1718 = players; - _k1718 = getFirstArrayKey( _a1718 ); - while ( isDefined( _k1718 ) ) - { - player = _a1718[ _k1718 ]; - player.hasperkspecialtytombstone = undefined; - _k1718 = getNextArrayKey( _a1718, _k1718 ); - } - } -} - -perk_machine_spawn_init() -{ - match_string = ""; - location = level.scr_zm_map_start_location; - if ( location != "default" && location == "" && isDefined( level.default_start_location ) ) - { - location = level.default_start_location; - } - match_string = ( level.scr_zm_ui_gametype + "_perks_" ) + location; - pos = []; - if ( isDefined( level.override_perk_targetname ) ) - { - structs = getstructarray( level.override_perk_targetname, "targetname" ); - } - else - { - structs = getstructarray( "zm_perk_machine", "targetname" ); - } - _a3578 = structs; - _k3578 = getFirstArrayKey( _a3578 ); - while ( isDefined( _k3578 ) ) - { - struct = _a3578[ _k3578 ]; - if ( isDefined( struct.script_string ) ) - { - tokens = strtok( struct.script_string, " " ); - _a3583 = tokens; - _k3583 = getFirstArrayKey( _a3583 ); - while ( isDefined( _k3583 ) ) - { - token = _a3583[ _k3583 ]; - if ( token == match_string ) - { - pos[ pos.size ] = struct; - } - _k3583 = getNextArrayKey( _a3583, _k3583 ); - } - } - else pos[ pos.size ] = struct; - _k3578 = getNextArrayKey( _a3578, _k3578 ); - } - if ( !isDefined( pos ) || pos.size == 0 ) - { - return; - } - precachemodel( "zm_collision_perks1" ); - i = 0; - while ( i < pos.size ) - { - perk = pos[ i ].script_noteworthy; - if ( isDefined( perk ) && isDefined( pos[ i ].model ) ) - { - use_trigger = spawn( "trigger_radius_use", pos[ i ].origin + vectorScale( ( 0, -1, 0 ), 30 ), 0, 40, 70 ); - use_trigger.targetname = "zombie_vending"; - use_trigger.script_noteworthy = perk; - use_trigger triggerignoreteam(); - perk_machine = spawn( "script_model", pos[ i ].origin ); - perk_machine.angles = pos[ i ].angles; - perk_machine setmodel( pos[ i ].model ); - if ( isDefined( level._no_vending_machine_bump_trigs ) && level._no_vending_machine_bump_trigs ) - { - bump_trigger = undefined; - } - else - { - bump_trigger = spawn( "trigger_radius", pos[ i ].origin, 0, 35, 64 ); - bump_trigger.script_activated = 1; - bump_trigger.script_sound = "zmb_perks_bump_bottle"; - bump_trigger.targetname = "audio_bump_trigger"; - if ( perk != "specialty_weapupgrade" ) - { - bump_trigger thread thread_bump_trigger(); - } - } - collision = spawn( "script_model", pos[ i ].origin, 1 ); - collision.angles = pos[ i ].angles; - collision setmodel( "zm_collision_perks1" ); - collision.script_noteworthy = "clip"; - collision disconnectpaths(); - use_trigger.clip = collision; - use_trigger.machine = perk_machine; - use_trigger.bump = bump_trigger; - if ( isDefined( pos[ i ].blocker_model ) ) - { - use_trigger.blocker_model = pos[ i ].blocker_model; - } - if ( isDefined( pos[ i ].script_int ) ) - { - perk_machine.script_int = pos[ i ].script_int; - } - if ( isDefined( pos[ i ].turn_on_notify ) ) - { - perk_machine.turn_on_notify = pos[ i ].turn_on_notify; - } - if ( perk == "specialty_scavenger" || perk == "specialty_scavenger_upgrade" ) - { - use_trigger.script_sound = "mus_perks_tombstone_jingle"; - use_trigger.script_string = "tombstone_perk"; - use_trigger.script_label = "mus_perks_tombstone_sting"; - use_trigger.target = "vending_tombstone"; - perk_machine.script_string = "tombstone_perk"; - perk_machine.targetname = "vending_tombstone"; - if ( isDefined( bump_trigger ) ) - { - bump_trigger.script_string = "tombstone_perk"; - } - } - if ( isDefined( level._custom_perks[ perk ] ) && isDefined( level._custom_perks[ perk ].perk_machine_set_kvps ) ) - { - [[ level._custom_perks[ perk ].perk_machine_set_kvps ]]( use_trigger, perk_machine, bump_trigger, collision ); - } - } - i++; - } -} - -isTown() -{ - if (isDefined(level.zombiemode_using_tombstone_perk) && level.zombiemode_using_tombstone_perk) - { - level thread perk_machine_spawn_init(); - thread solo_tombstone_removal(); - thread turn_tombstone_on(); - } -} -give_afterlife_loadout() -{ - - self takeallweapons(); - loadout = self.loadout; - primaries = self getweaponslistprimaries(); - if ( loadout.weapons.size > 1 || primaries.size > 1 ) - { - foreach ( weapon in primaries ) - { - self takeweapon( weapon ); - } - } - i = 0; - while ( i < loadout.weapons.size ) - { - - if ( !isDefined( loadout.weapons[ i ] ) ) - { - i++; - - continue; - } - if ( loadout.weapons[ i ][ "name" ] == "none" ) - { - i++; - - continue; - } - self maps/mp/zombies/_zm_weapons::weapondata_give( loadout.weapons[ i ] ); - i++; - } - self setspawnweapon( loadout.weapons[ loadout.current_weapon ] ); - self switchtoweaponimmediate( loadout.weapons[ loadout.current_weapon ] ); - if ( isDefined( self get_player_melee_weapon() ) ) - { - self giveweapon( self get_player_melee_weapon() ); - } - self maps/mp/zombies/_zm_equipment::equipment_give( self.loadout.equipment ); - if ( isDefined( loadout.hasclaymore ) && loadout.hasclaymore && !self hasweapon( "claymore_zm" ) ) - { - self giveweapon( "claymore_zm" ); - self set_player_placeable_mine( "claymore_zm" ); - self setactionslot( 4, "weapon", "claymore_zm" ); - self setweaponammoclip( "claymore_zm", loadout.claymoreclip ); - } - if ( isDefined( loadout.hasemp ) && loadout.hasemp ) - { - self giveweapon( "emp_grenade_zm" ); - self setweaponammoclip( "emp_grenade_zm", loadout.empclip ); - } - if ( isDefined( loadout.hastomahawk ) && loadout.hastomahawk ) - { - self giveweapon( self.current_tomahawk_weapon ); - self set_player_tactical_grenade( self.current_tomahawk_weapon ); - self setclientfieldtoplayer( "tomahawk_in_use", 1 ); - } - self.score = loadout.score; - perk_array = maps/mp/zombies/_zm_perks::get_perk_array( 1 ); - i = 0; - while ( i < perk_array.size ) - { - perk = perk_array[ i ]; - self unsetperk( perk ); - self set_perk_clientfield( perk, 0 ); - i++; - } - if (is_true(self.keep_perks)) - { - if(is_true(self.hadphd)) - { - self.hasphd = true; - self.hadphd = undefined; - self thread maps/mp/gametypes_zm/_clientids::drawCustomPerkHUD("specialty_doubletap_zombies", 0, (1, 0.25, 1)); - } - } - if ( isDefined( self.keep_perks ) && self.keep_perks && isDefined( loadout.perks ) && loadout.perks.size > 0 ) - { - i = 0; - while ( i < loadout.perks.size ) - { - if ( self hasperk( loadout.perks[ i ] ) ) - { - i++; - continue; - } - if ( loadout.perks[ i ] == "specialty_quickrevive" && flag( "solo_game" ) ) - { - level.solo_game_free_player_quickrevive = 1; - } - if ( loadout.perks[ i ] == "specialty_longersprint" ) - { - self setperk( "specialty_longersprint" ); //removes the staminup perk functionality - self.hasStaminUp = true; //resets the staminup variable - self thread maps/mp/gametypes_zm/_clientids::drawCustomPerkHUD("specialty_juggernaut_zombies", 0, (1, 1, 0)); - arrayremovevalue( loadout.perks, "specialty_longersprint" ); - - continue; - } - if ( loadout.perks[ i ] == "specialty_additionalprimaryweapon" ) - { - self setperk( "specialty_additionalprimaryweapon"); //removes the deadshot perk functionality - self.hasMuleKick = true; //resets the deadshot variable - self thread maps/mp/gametypes_zm/_clientids::drawCustomPerkHUD("specialty_fastreload_zombies", 0, (0, 0.7, 0)); - arrayremovevalue( loadout.perks, "specialty_additionalprimaryweapon" ); - continue; - } - if ( loadout.perks[ i ] == "specialty_finalstand" ) - { - i++; - continue; - } - maps/mp/zombies/_zm_perks::give_perk( loadout.perks[ i ] ); - i++; - wait 0.05; - } - } - self.keep_perks = undefined; - self set_player_lethal_grenade( self.loadout.lethal_grenade ); - if ( loadout.grenade > 0 ) - { - curgrenadecount = 0; - if ( self hasweapon( self get_player_lethal_grenade() ) ) - { - self getweaponammoclip( self get_player_lethal_grenade() ); - } - else - { - self giveweapon( self get_player_lethal_grenade() ); - } - self setweaponammoclip( self get_player_lethal_grenade(), loadout.grenade + curgrenadecount ); - } - -} -save_afterlife_loadout() //checked changed to match cerberus output -{ - primaries = self getweaponslistprimaries(); - currentweapon = self getcurrentweapon(); - self.loadout = spawnstruct(); - self.loadout.player = self; - self.loadout.weapons = []; - self.loadout.score = self.score; - self.loadout.current_weapon = -1; - index = 0; - foreach ( weapon in primaries ) - { - self.loadout.weapons[ index ] = maps/mp/zombies/_zm_weapons::get_player_weapondata( self, weapon ); - if ( weapon == currentweapon || self.loadout.weapons[ index ][ "alt_name" ] == currentweapon ) - { - self.loadout.current_weapon = index; - } - index++; - } - self.loadout.equipment = self get_player_equipment(); - if ( isDefined( self.loadout.equipment ) ) - { - self maps/mp/zombies/_zm_equipment::equipment_take( self.loadout.equipment ); - } - if ( self hasweapon( "claymore_zm" ) ) - { - self.loadout.hasclaymore = 1; - self.loadout.claymoreclip = self getweaponammoclip( "claymore_zm" ); - } - if ( self hasweapon( "emp_grenade_zm" ) ) - { - self.loadout.hasemp = 1; - self.loadout.empclip = self getweaponammoclip( "emp_grenade_zm" ); - } - if ( self hasweapon( "bouncing_tomahawk_zm" ) || self hasweapon( "upgraded_tomahawk_zm" ) ) - { - self.loadout.hastomahawk = 1; - self setclientfieldtoplayer( "tomahawk_in_use", 0 ); - } - self.loadout.perks = afterlife_save_perks( self ); - lethal_grenade = self get_player_lethal_grenade(); - if ( self hasweapon( lethal_grenade ) ) - { - self.loadout.grenade = self getweaponammoclip( lethal_grenade ); - } - else - { - self.loadout.grenade = 0; - } - self.loadout.lethal_grenade = lethal_grenade; - self set_player_lethal_grenade( undefined ); -} - -afterlife_save_perks( ent ) //checked changed to match cerberus output -{ - perk_array = ent get_perk_array( 1 ); - foreach ( perk in perk_array ) - { - ent unsetperk( perk ); - } - return perk_array; -} -onPlayerRevived() -{ - self endon("disconnect"); - level endon("end_game"); - - for(;;) - { - self waittill_any( "whos_who_self_revive","player_revived","fake_revive","do_revive_ended_normally", "al_t" ); - wait 1; - if(is_true(self.hadPHD)) - { - self setperk( "PHD_FLOPPER" ); //removes the staminup perk functionality - self.hasPHD = true; - self.hadPHD = undefined; - self thread drawCustomPerkHUD("specialty_doubletap_zombies", 0, (1, 0.25, 1)); - } - else - return; - } -} - -init_custom_powerups() //credit goes to _Ox for most code -{ - level.unlimited_ammo_duration = 20; - include_zombie_powerup("unlimited_ammo"); - add_zombie_powerup("unlimited_ammo", "T6_WPN_AR_GALIL_WORLD", &"ZOMBIE_POWERUP_UNLIMITED_AMMO", ::func_should_always_drop, 0, 0, 0); - powerup_set_can_pick_up_in_last_stand("unlimited_ammo", 1); - if(getDvar("mapname") == "zm_prison") - { - - include_zombie_powerup("fast_feet"); - add_zombie_powerup("fast_feet", "bottle_whisky_01", &"ZOMBIE_POWERUP_FAST_FEET", ::func_should_always_drop, 0, 0, 0); - powerup_set_can_pick_up_in_last_stand("fast_feet", 1); - - include_zombie_powerup("pack_a_punch"); - add_zombie_powerup("pack_a_punch", "p6_zm_al_vending_pap_on", &"ZOMBIE_POWERUP_PACK_A_PUNCH", ::func_should_drop_pack_a_punch, 0, 0, 0); - powerup_set_can_pick_up_in_last_stand("pack_a_punch", 0); - - include_zombie_powerup("money_drop"); - add_zombie_powerup("money_drop", "p6_anim_zm_al_magic_box_lock_red", &"ZOMBIE_POWERUP_MONEY_DROP", ::func_should_always_drop, 0, 0, 0); - powerup_set_can_pick_up_in_last_stand("money_drop", 1); - } - else if ( level.script == "zm_nuked" ) - { - include_zombie_powerup("fast_feet"); - add_zombie_powerup("fast_feet", "t6_wpn_zmb_perk_bottle_doubletap_world", &"ZOMBIE_POWERUP_FAST_FEET", ::func_should_always_drop, 0, 0, 0); - powerup_set_can_pick_up_in_last_stand("fast_feet", 1); - - include_zombie_powerup("pack_a_punch"); - add_zombie_powerup("pack_a_punch", "p6_anim_zm_buildable_pap", &"ZOMBIE_POWERUP_PACK_A_PUNCH", ::func_should_drop_pack_a_punch, 0, 0, 0); - powerup_set_can_pick_up_in_last_stand("pack_a_punch", 0); - - include_zombie_powerup("money_drop"); - add_zombie_powerup("money_drop", "zombie_teddybear", &"ZOMBIE_POWERUP_MONEY_DROP", ::func_should_always_drop, 0, 0, 0); - powerup_set_can_pick_up_in_last_stand("money_drop", 1); - } - else - { - include_zombie_powerup("fast_feet"); - add_zombie_powerup("fast_feet", "zombie_pickup_perk_bottle", &"ZOMBIE_POWERUP_FAST_FEET", ::func_should_always_drop, 0, 0, 0); - powerup_set_can_pick_up_in_last_stand("fast_feet", 1); - - include_zombie_powerup("pack_a_punch"); - add_zombie_powerup("pack_a_punch", "p6_anim_zm_buildable_pap", &"ZOMBIE_POWERUP_PACK_A_PUNCH", ::func_should_drop_pack_a_punch, 0, 0, 0); - powerup_set_can_pick_up_in_last_stand("pack_a_punch", 0); - - include_zombie_powerup("money_drop"); - add_zombie_powerup("money_drop", "zombie_teddybear", &"ZOMBIE_POWERUP_MONEY_DROP", ::func_should_always_drop, 0, 0, 0); - powerup_set_can_pick_up_in_last_stand("money_drop", 1); - } -} - -custom_powerup_grab(powerup, player) //credit to _Ox much thx for powerup functions -{ - if(powerup.powerup_name == "money_drop") - player thread doRandomScore(); - else if(powerup.powerup_name == "pack_a_punch") - player thread doPackAPunchWeapon(); - else if(powerup.powerup_name == "unlimited_ammo") - player thread doUnlimitedAmmo(); - else if(powerup.powerup_name == "fast_feet") - player thread doFastFeet(); - else if (isDefined(level.original_zombiemode_powerup_grab)) - level thread [[level.original_zombiemode_powerup_grab]](powerup, player); -} - -startCustomPowerups() -{ - if(!isDefined(level.custompowerupinit)) - { - level.custompowerupinit = true; - wait 2; - if(isDefined(level._zombiemode_powerup_grab)) - level.original_zombiemode_powerup_grab = level._zombiemode_powerup_grab; - wait 2; - level._zombiemode_powerup_grab = ::custom_powerup_grab; - } -} - -doFastFeet() -{ - level endon("end_game"); - self endon( "disconnect" ); - self thread poweruptext("Fast Feet!"); - self playsound("zmb_cha_ching"); - self setmovespeedscale(3); - wait 15; - self setmovespeedscale(1); - self playsound("zmb_insta_kill"); -} - -doUnlimitedAmmo() -{ - level endon("end_game"); - foreach(player in level.players) - { - player notify("end_unlimited_ammo"); - player playsound("zmb_cha_ching"); - player thread poweruptext("Bottomless Clip"); - player thread monitorUnlimitedAmmo(); - player thread notifyUnlimitedAmmoEnd(); - } -} - -monitorUnlimitedAmmo() -{ - level endon("end_game"); - self endon("disonnect"); - self endon("end_unlimited_ammo"); - for(;;) - { - self setWeaponAmmoClip(self GetCurrentWeapon(), 150); - wait .05; - } -} - -notifyUnlimitedAmmoEnd() -{ - level endon("end_game"); - self endon("disonnect"); - self endon("end_unlimited_ammo"); - wait level.unlimited_ammo_duration; - self playsound("zmb_insta_kill"); - self notify("end_unlimited_ammo"); -} - -doPackAPunchWeapon() -{ - baseweapon = get_base_name(self getcurrentweapon()); - weapon = get_upgrade(baseweapon); - if(IsDefined(weapon) && isDefined(self.packapunching)) - { - level.rounds_since_last_pack_a_punch_drop = 0; - self.packapunching = undefined; - self takeweapon(baseweapon); - self giveweapon(weapon, 0, self get_pack_a_punch_weapon_options(weapon)); - self switchtoweapon(weapon); - self givemaxammo(weapon); - } - else - self playsoundtoplayer( level.zmb_laugh_alias, self ); -} - -get_upgrade(weapon) -{ - if(IsDefined(level.zombie_weapons[weapon].upgrade_name) && IsDefined(level.zombie_weapons[weapon])) - { - self.packapunching = true; - return get_upgrade_weapon(weapon, 0 ); - } - else - return get_upgrade_weapon(weapon, 1 ); -} - -doRandomScore() -{ - x = randomInt(9); - self playsound("zmb_cha_ching"); - if(x==1) - self.score += 50; - else if(x==2) - self.score += 100; - else if(x==3) - self.score += 250; - else if(x==4) - self.score += 500; - else if(x==5) - self.score += 750; - else if(x==6) - self.score += 1000; - else if(x==7) - self.score += 2500; - else if(x==8) - self.score += 5000; - else if(x==9) - self.score += 7500; - else - self.score += 10000; -} - -poweruptext(text) -{ - self endon("disconnect"); - level endon("end_game"); - hud_string = newclienthudelem(self); - hud_string.elemtype = "font"; - hud_string.font = "objective"; - hud_string.fontscale = 2; - hud_string.x = 0; - hud_string.y = 0; - hud_string.width = 0; - hud_string.height = int( level.fontheight * 2 ); - hud_string.xoffset = 0; - hud_string.yoffset = 0; - hud_string.children = []; - hud_string setparent(level.uiparent); - hud_string.hidden = 0; - hud_string maps/mp/gametypes_zm/_hud_util::setpoint("TOP", undefined, 0, level.zombie_vars["zombie_timer_offset"] - (level.zombie_vars["zombie_timer_offset_interval"] * 2)); - hud_string.sort = .5; - hud_string.alpha = 0; - hud_string fadeovertime(.5); - hud_string.alpha = 1; - hud_string setText(text); - hud_string thread poweruptextmove(); -} - -poweruptextmove() -{ - wait .5; - self fadeovertime(1.5); - self moveovertime(1.5); - self.y = 270; - self.alpha = 0; - wait 1.5; - self destroy(); -} - -func_should_drop_pack_a_punch() -{ - if ( level.zmPowerupsEnabled[ "pack_a_punch" ].active != 1 || level.round_number < 12 || isDefined( level.rounds_since_last_pack_a_punch_drop ) && level.rounds_since_last_pack_a_punch_drop < 5 ) - { - return 0; - } - return 1; -}