Advertisement
Guest User

_clientids.gsc

a guest
Dec 31st, 2020
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 51.41 KB | None | 0 0
  1. #include maps/mp/_utility;
  2. #include common_scripts/utility;
  3. #include maps/mp/gametypes_zm/_hud_util;
  4. #include maps/mp/zombies/_zm;
  5. #include maps/mp/zombies/_zm_utility;
  6. #include maps/mp/zombies/_zm_weapons;
  7. #include maps/mp/zombies/_zm_stats;
  8. #include maps/mp/gametypes_zm/_hud_message;
  9. #include maps/mp/zombies/_zm_powerups;
  10. #include maps/mp/zombies/_zm_perks;
  11. #include maps/mp/zombies/_zm_audio;
  12. #include maps/mp/zombies/_zm_score;
  13.  
  14. init()
  15. {
  16. startInit(); //precaching models
  17. level thread onPlayerConnect(); //on connect
  18. thread initServerDvars(); //initilize server dvars (credit JezuzLizard)
  19. thread startCustomPerkMachines(); //custom perk machines
  20. level.afterlife_give_loadout = maps/mp/gametypes_zm/_clientids::give_afterlife_loadout; //override function that gives loadout back to the player.
  21. level.playerDamageStub = level.callbackplayerdamage; //damage callback for phd flopper
  22. level.callbackplayerdamage = ::phd_flopper_dmg_check; //more damage callback stuff. everybody do the flop
  23. //level.using_solo_revive = 0; //disables solo revive, fixing only 3 revives per game.
  24. //level.is_forever_solo_game = 0; //changes afterlives on motd from 3 to 1
  25. isTown(); //jezuzlizard's fix for tombstone :)
  26. }
  27.  
  28. onPlayerConnect()
  29. {
  30. level endon( "end_game" );
  31. self endon( "disconnect" );
  32. for (;;)
  33. {
  34. level waittill( "connected", player );
  35.  
  36. player thread [[level.givecustomcharacters]]();
  37. player thread doPHDdive();
  38. player thread onPlayerSpawned();
  39. player thread onPlayerDowned();
  40. player thread onPlayerRevived();
  41. player thread spawnIfRoundOne(); //force spawns if round 1. no more spectating one player on round 1
  42. }
  43. }
  44.  
  45. onPlayerSpawned()
  46. {
  47. level endon( "end_game" );
  48. self endon( "disconnect" );
  49. for(;;)
  50. {
  51. self waittill( "spawned_player" );
  52. }
  53. }
  54.  
  55. startCustomPerkMachines()
  56. {
  57. if(level.disableAllCustomPerks == 0)
  58. {
  59. if(getDvar("mapname") == "zm_prison") //mob of the dead
  60. {
  61. if(level.enablePHDFlopper == 1)
  62. 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) );
  63. if(level.enableStaminUp == 1)
  64. 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) );
  65. }
  66. else if(getDvar("mapname") == "zm_highrise") //die rise
  67. {
  68. if(level.enablePHDFlopper == 1)
  69. 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) );
  70. if(level.enableDeadshot == 1)
  71. level thread CustomPerkMachine( "zombie_perk_bottle_whoswho", "zombie_vending_revive", "Deadshot Daiquiri", 1500, (3690.54, 1932.36, 1420), "specialty_deadshot", (-15, 0, 0) );
  72. if(level.enableStaminUp == 1)
  73. level thread CustomPerkMachine( "zombie_perk_bottle_revive", "zombie_vending_doubletap2", "Stamin-Up", 2000, (1704, -35, 1120.13), "specialty_longersprint", (0, -30, 0) );
  74. }
  75. else if(getDvar("mapname") == "zm_buried") //buried
  76. {
  77. if(level.enablePHDFlopper == 1)
  78. level thread CustomPerkMachine( "zombie_perk_bottle_marathon", "zombie_vending_jugg", "PHD Flopper", 3000, (2631.73, 304.165, 240.125), "PHD_FLOPPER", (5, 0, 0) );
  79. if(level.enableDeadshot == 1)
  80. level thread CustomPerkMachine( "zombie_perk_bottle_marathon", "zombie_vending_revive", "Deadshot Daiquiri", 1500, (1055.18, -1055.55, 201), "specialty_deadshot", (3, 270, 0) );
  81. }
  82. else if(getDvar("mapname") == "zm_nuked") //nuketown
  83. {
  84. if(level.enablePHDFlopper == 1)
  85. level thread CustomPerkMachine( "zombie_perk_bottle_revive", "zombie_vending_jugg", "PHD Flopper", 3000, (683, 727, -56), "PHD_FLOPPER", (5, 250, 0) );
  86. if(level.enableDeadshot == 1)
  87. level thread CustomPerkMachine( "zombie_perk_bottle_jugg", "zombie_vending_revive", "Deadshot Daiquiri", 1500, (747, 356, 91), "specialty_deadshot", (0, 330, 0) );
  88. if(level.enableStaminUp == 1)
  89. level thread CustomPerkMachine( "zombie_perk_bottle_revive", "zombie_vending_doubletap2", "Stamin-Up", 2000, (-638, 268, -54), "specialty_longersprint", (0, 165, 0) );
  90. if(level.enableMuleKick == 1)
  91. level thread CustomPerkMachine( "zombie_perk_bottle_jugg", "zombie_vending_sleight", "Mule Kick", 3000, (-953, 715, 83), "specialty_additionalprimaryweapon", (0, 75, 0) );
  92. }
  93. else if(getDvar("mapname") == "zm_transit") //transit
  94. {
  95. if(level.enablePHDFlopper == 1)
  96. level thread CustomPerkMachine( "zombie_perk_bottle_revive", "zombie_vending_jugg", "PHD Flopper", 3000, (-6304, 5430, -55), "PHD_FLOPPER", (0, 90, 0) );
  97. if(level.enableDeadshot == 1)
  98. level thread CustomPerkMachine( "zombie_perk_bottle_jugg", "zombie_vending_revive", "Deadshot Daiquiri", 1500, (-6088, -7419, 0), "specialty_deadshot", (0, 90, 0) );
  99. if(level.enableMuleKick == 1)
  100. level thread CustomPerkMachine( "zombie_perk_bottle_jugg", "zombie_vending_sleight", "Mule Kick", 3000, (1149, -215, -304), "specialty_additionalprimaryweapon", (0, 180, 0) );
  101. }
  102. }
  103. }
  104.  
  105. onPlayerDowned()
  106. {
  107. self endon("disconnect");
  108. level endon("end_game");
  109.  
  110. for(;;)
  111. {
  112. self waittill_any( "player_downed", "fake_death", "entering_last_stand");
  113. self unsetperk( "specialty_additionalprimaryweapon" ); //removes the mulekick perk functionality
  114. self unsetperk( "specialty_longersprint" ); //removes the staminup perk functionality
  115. self unsetperk( "specialty_deadshot" ); //removes the deadshot perk functionality
  116. self.hasPHD = undefined; //resets the flopper variable
  117. self.hasMuleKick = undefined; //resets the mule kick variable
  118. self.hasStaminUp = undefined; //resets the staminup variable
  119. self.hasDeadshot = undefined; //resets the deadshot variable
  120. self.icon1 Destroy();self.icon1 = undefined; //deletes the perk icons and resets the variable
  121. self.icon2 Destroy();self.icon2 = undefined; //deletes the perk icons and resets the variable
  122. self.icon3 Destroy();self.icon3 = undefined; //deletes the perk icons and resets the variable
  123. self.icon4 Destroy();self.icon4 = undefined; //deletes the perk icons and resets the variable
  124. }
  125. }
  126.  
  127. doPHDdive() //credit to extinct. just edited to add self.hasPHD variable
  128. {
  129. self endon("disconnect");
  130. level endon("end_game");
  131.  
  132. for(;;)
  133. {
  134. if(isDefined(self.divetoprone) && self.divetoprone)
  135. {
  136. if(self isOnGround() && isDefined(self.hasPHD))
  137. {
  138. if(level.script == "zm_tomb" || level.script == "zm_buried")
  139. explosionfx = level._effect["divetonuke_groundhit"];
  140. else
  141. explosionfx = loadfx("explosions/fx_default_explosion");
  142. self playSound("zmb_phdflop_explo");
  143. playfx(explosionfx, self.origin);
  144. self damageZombiesInRange(310, self, "kill");
  145. wait .3;
  146. }
  147. }
  148. wait .05;
  149. }
  150. }
  151.  
  152. damageZombiesInRange(range, what, amount) //damage zombies for phd flopper
  153. {
  154. enemy = getAiArray(level.zombie_team);
  155. foreach(zombie in enemy)
  156. {
  157. if(distance(zombie.origin, what.origin) < range)
  158. {
  159. if(amount == "kill")
  160. zombie doDamage(zombie.health * 2, zombie.origin, self);
  161. else
  162. zombie doDamage(amount, zombie.origin, self);
  163. }
  164. }
  165. }
  166.  
  167. phd_flopper_dmg_check( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ) //phdflopdmgchecker lmao
  168. {
  169. if ( smeansofdeath == "MOD_SUICIDE" || smeansofdeath == "MOD_FALLING" || smeansofdeath == "MOD_PROJECTILE" || smeansofdeath == "MOD_PROJECTILE_SPLASH" || smeansofdeath == "MOD_GRENADE" || smeansofdeath == "MOD_GRENADE_SPLASH" || smeansofdeath == "MOD_EXPLOSIVE" )
  170. {
  171. if(isDefined(self.hasPHD)) //if player has phd flopper, dont damage the player
  172. return;
  173. }
  174. [[ level.playerDamageStub ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex );
  175. }
  176.  
  177. 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
  178. {
  179. level endon( "end_game" );
  180. if(!isDefined(level.customPerkNum))
  181. level.customPerkNum = 1;
  182. else
  183. level.customPerkNum += 1;
  184. collision = spawn("script_model", origin);
  185. collision setModel("collision_geo_cylinder_32x128_standard");
  186. collision rotateTo(angles, .1);
  187. RPerks = spawn( "script_model", origin );
  188. RPerks setModel( model );
  189. RPerks rotateTo(angles, .1);
  190. level thread LowerMessage( "Custom Perks", "Hold ^3F ^7for "+perkname+" [Cost: "+cost+"]" );
  191. trig = spawn("trigger_radius", origin, 1, 25, 25);
  192. trig SetCursorHint( "HINT_NOICON" );
  193. trig setLowerMessage( trig, "Custom Perks" );
  194. for(;;)
  195. {
  196. trig waittill("trigger", player);
  197. if(player useButtonPressed() && player.score >= cost)
  198. {
  199. wait .25;
  200. if(player useButtonPressed())
  201. {
  202. if(perk != "PHD_FLOPPER" && !player hasPerk(perk) || perk == "PHD_FLOPPER" && !isDefined(player.hasPHD))
  203. {
  204. player playsound( "zmb_cha_ching" ); //money shot
  205. player.score -= cost; //take points
  206. level.trig hide();
  207. player thread GivePerk( bottle, perk, perkname ); //give perk
  208. wait 2;
  209. level.trig show();
  210. }
  211. else
  212. player iprintln("You Already Have "+perkname+"!");
  213. }
  214. }
  215. }
  216. }
  217.  
  218. GivePerk( model, perk, perkname )
  219. {
  220. self DisableOffhandWeapons();
  221. self DisableWeaponCycling();
  222. weaponA = self getCurrentWeapon();
  223. weaponB = model;
  224. self GiveWeapon( weaponB );
  225. self SwitchToWeapon( weaponB );
  226. self waittill( "weapon_change_complete" );
  227. self EnableOffhandWeapons();
  228. self EnableWeaponCycling();
  229. self TakeWeapon( weaponB );
  230. self SwitchToWeapon( weaponA );
  231. self setperk( perk );
  232. self maps/mp/zombies/_zm_audio::playerexert( "burp" );
  233. self setblur( 4, 0.1 );
  234. wait 0.1;
  235. self setblur( 0, 0.1 );
  236. if(perk == "PHD_FLOPPER")
  237. {
  238. self.hasPHD = true;
  239. self thread drawCustomPerkHUD("specialty_doubletap_zombies", 0, (1, 0.25, 1));
  240. }
  241. else if(perk == "specialty_additionalprimaryweapon")
  242. {
  243. self.hasMuleKick = true;
  244. self thread drawCustomPerkHUD("specialty_fastreload_zombies", 0, (0, 0.7, 0));
  245. }
  246. else if(perk == "specialty_longersprint")
  247. {
  248. self.hasStaminUp = true;
  249. self thread drawCustomPerkHUD("specialty_juggernaut_zombies", 0, (1, 1, 0));
  250. }
  251. else if(perk == "specialty_deadshot")
  252. {
  253. self.hasDeadshot = true;
  254. self thread drawCustomPerkHUD("specialty_quickrevive_zombies", 0, (0.125, 0.125, 0.125));
  255. }
  256. }
  257.  
  258. LowerMessage( ref, text )
  259. {
  260. if( !IsDefined( level.zombie_hints ) )
  261. level.zombie_hints = [];
  262. PrecacheString( text );
  263. level.zombie_hints[ref] = text;
  264. }
  265.  
  266. setLowerMessage( ent, default_ref )
  267. {
  268. if( IsDefined( ent.script_hint ) )
  269. self SetHintString( get_zombie_hint( ent.script_hint ) );
  270. else
  271. self SetHintString( get_zombie_hint( default_ref ) );
  272. }
  273.  
  274. drawshader( shader, x, y, width, height, color, alpha, sort )
  275. {
  276. hud = newclienthudelem( self );
  277. hud.elemtype = "icon";
  278. hud.color = color;
  279. hud.alpha = alpha;
  280. hud.sort = sort;
  281. hud.children = [];
  282. hud setparent( level.uiparent );
  283. hud setshader( shader, width, height );
  284. hud.x = x;
  285. hud.y = y;
  286. return hud;
  287. }
  288.  
  289. drawCustomPerkHUD(perk, x, color, perkname) //perk hud thinking or whatever. probably not the best method but whatever lol
  290. {
  291. if(!isDefined(self.icon1))
  292. {
  293. x = -408;
  294. if(getDvar("mapname") == "zm_buried")
  295. self.icon1 = self drawshader( perk, x, 293, 24, 25, color, 100, 0 );
  296. else
  297. self.icon1 = self drawshader( perk, x, 320, 24, 25, color, 100, 0 );
  298. }
  299. else if(!isDefined(self.icon2))
  300. {
  301. x = -378;
  302. if(getDvar("mapname") == "zm_buried")
  303. self.icon2 = self drawshader( perk, x, 293, 24, 25, color, 100, 0 );
  304. else
  305. self.icon2 = self drawshader( perk, x, 320, 24, 25, color, 100, 0 );
  306. }
  307. else if(!isDefined(self.icon3))
  308. {
  309. x = -348;
  310. if(getDvar("mapname") == "zm_buried")
  311. self.icon3 = self drawshader( perk, x, 293, 24, 25, color, 100, 0 );
  312. else
  313. self.icon3 = self drawshader( perk, x, 320, 24, 25, color, 100, 0 );
  314. }
  315. else if(!isDefined(self.icon4))
  316. {
  317. x = -318;
  318. if(getDvar("mapname") == "zm_buried")
  319. self.icon4 = self drawshader( perk, x, 293, 24, 25, color, 100, 0 );
  320. else
  321. self.icon4 = self drawshader( perk, x, 320, 24, 25, color, 100, 0 );
  322. }
  323. }
  324.  
  325. LowerMessage( ref, text )
  326. {
  327. if( !IsDefined( level.zombie_hints ) )
  328. level.zombie_hints = [];
  329. PrecacheString( text );
  330. level.zombie_hints[ref] = text;
  331. }
  332.  
  333. setLowerMessage( ent, default_ref )
  334. {
  335. if( IsDefined( ent.script_hint ) )
  336. self SetHintString( get_zombie_hint( ent.script_hint ) );
  337. else
  338. self SetHintString( get_zombie_hint( default_ref ) );
  339. }
  340.  
  341. startInit()
  342. {
  343. PrecacheModel("collision_geo_cylinder_32x128_standard");
  344. PrecacheModel("zombie_vending_jugg");
  345. PrecacheModel("zombie_perk_bottle_marathon");
  346. PrecacheModel("zombie_perk_bottle_whoswho");
  347. PrecacheModel("zombie_vending_nuke_on_lo");
  348. PrecacheModel("p6_zm_al_vending_pap_on");
  349. PrecacheModel("p6_anim_zm_buildable_pap");
  350. PrecacheModel("p6_zm_al_vending_pap_on");
  351. PrecacheModel("p6_zm_al_vending_jugg_on");
  352. PrecacheModel("p6_zm_al_vending_sleight_on");
  353. PrecacheModel("p6_zm_al_vending_doubletap2_on");
  354. PrecacheModel("p6_zm_al_vending_ads_on");
  355. PrecacheModel("p6_zm_al_vending_nuke_on");
  356. PrecacheModel("p6_zm_al_vending_three_gun_on");
  357. PrecacheModel("zombie_vending_revive");
  358. PrecacheModel("zombie_vending_doubletap2");
  359. PrecacheModel("zombie_x2_icon");
  360. PrecacheModel("zombie_bomb");
  361. PrecacheModel("zombie_ammocan");
  362. PrecacheModel("zombie_x2_icon");
  363. PrecacheModel("zombie_skull");
  364. PrecacheShader("specialty_deadshot_zombies");
  365. if(isDefined(level.player_out_of_playable_area_monitor))
  366. level.player_out_of_playable_area_monitor = false;
  367. level.pers_sniper_misses = 9999; //sniper perma perk! never lose it hahahahahahahahaha
  368. thread gscRestart(); //JezuzLizard fix sound stuff
  369. thread setPlayersToSpectator(); //JezuzLizard fix sound stuff
  370. }
  371.  
  372. initServerDvars() //credits to JezuzLizard!!! This is a huge help in making this happen
  373. {
  374. level.player_starting_points = getDvarIntDefault( "playerStartingPoints", 500 );
  375. //sets the perk limit for all players
  376. level.perk_purchase_limit = getDvarIntDefault( "perkLimit", 4 );
  377. //sets the maximum number of zombies that can be on the map at once 32 max
  378. level.zombie_ai_limit = getDvarIntDefault( "zombieAiLimit", 24 );
  379. //sets the number of zombie bodies that can be on the map at once
  380. level.zombie_actor_limit = getDvarIntDefault( "zombieActorLimit", 32 );
  381. //enables midround hellhounds WARNING: causes permanent round pauses on maps that aren't bus depot, town or farm
  382. level.mixed_rounds_enabled = getDvarIntDefault( "midroundDogs", 0 );
  383. //disables the end game check WARNING: make sure to include a spectator respawner and auto revive function
  384. level.no_end_game_check = getDvarIntDefault( "noEndGameCheck", 0 );
  385. //sets the solo laststand pistol
  386. level.default_solo_laststandpistol = getDvar( "soloLaststandWeapon" );
  387. //the default laststand pistol
  388. level.default_laststandpistol = getDvar( "coopLaststandWeapon" );
  389. //set the starting weapon
  390. level.start_weapon = getDvar( "startWeaponZm" );
  391. //sets all zombies to this speed lower values result in walkers higher values sprinters
  392. level.zombie_move_speed = getDvarIntDefault( "zombieMoveSpeed", 1 );
  393. //locks the zombie movespeed to the above value
  394. level.zombieMoveSpeedLocked = getDvarIntDefault( "zombieMoveSpeedLocked", 0 );
  395. //sets whether there is a cap to the zombie movespeed active
  396. level.zombieMoveSpeedCap = getDvarIntDefault( "zombieMoveSpeedCap", 0 );
  397. //sets the value to the zombie movespeed cap
  398. level.zombieMoveSpeedCapValue = getDvarIntDefault( "zombieMoveSpeedCapValue", 1 );
  399. //sets the round number any value between 1-255
  400. level.round_number = getDvarIntDefault( "roundNumber", 1 );
  401. //enables the override for zombies per round
  402. level.overrideZombieTotalPermanently = getDvarIntDefault( "overrideZombieTotalPermanently", 0 );
  403. //sets the number of zombies per round to the value indicated
  404. level.overrideZombieTotalPermanentlyValue = getDvarIntDefault( "overrideZombieTotalPermanentlyValue", 6 );
  405. //enables the override for zombie health
  406. level.overrideZombieHealthPermanently = getDvarIntDefault( "overrideZombieHealthPermanently", 0 );
  407. //sets the health of zombies every round to the value indicated
  408. level.overrideZombieHealthPermanentlyValue = getDvarIntDefault( "overrideZombieHealthPermanentlyValue", 150 );
  409. //enables the health cap override so zombies health won't grow beyond the value indicated
  410. level.overrideZombieMaxHealth = getDvarIntDefault( "overrideZombieMaxHealth", 0 );
  411. //sets the maximum health zombie health will increase to
  412. level.overrideZombieMaxHealthValue = getDvarIntDefault( "overrideZombieMaxHealthValue" , 150 );
  413.  
  414. //disables walkers
  415. level.disableWalkers = getDvarIntDefault( "disableWalkers", 0 );
  416. if ( level.disableWalkers )
  417. {
  418. level.speed_change_round = undefined;
  419. }
  420. //set afterlives on mob to 1 like a normal coop match and sets the prices of doors on origins to be higher
  421. level.disableSoloMode = getDvarIntDefault( "disableSoloMode", 0 );
  422. if ( level.disableSoloMode )
  423. {
  424. level.is_forever_solo_game = undefined;
  425. }
  426. //disables all drops
  427. level.zmPowerupsNoPowerupDrops = getDvarIntDefault( "zmPowerupsNoPowerupDrops", 0 );
  428.  
  429. //Zombie_Vars:
  430. //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
  431. //sets the maximum number of drops per round
  432. level.maxPowerupsPerRound = getDvarIntDefault( "maxPowerupsPerRound", 4 );
  433. level.zombie_vars["zombie_powerup_drop_max_per_round"] = level.maxPowerupsPerRound;
  434. //sets the powerup drop rate lower is better
  435. level.powerupDropRate = getDvarIntDefault( "powerupDropRate", 2000 );
  436. level.zombie_vars["zombie_powerup_drop_increment"] = level.powerupDropRate;
  437. //makes every zombie drop a powerup
  438. level.zombiesAlwaysDropPowerups = getDvarIntDefault( "zombiesAlwaysDropPowerups", 0 );
  439. level.zombie_vars[ "zombie_drop_item" ] = level.zombiesAlwaysDropPowerups;
  440. //increase these below vars to increase drop rate
  441. //points to the powerup increment to a powerup drop related to level.zombie_vars["zombie_powerup_drop_increment"]
  442. level.fourPlayerPowerupScore = getDvarIntDefault( "fourPlayerPowerupScore", 50 );
  443. level.zombie_vars[ "zombie_score_kill_4p_team" ] = level.fourPlayerPowerupScore;
  444. //points to the powerup increment to a powerup drop related to level.zombie_vars["zombie_powerup_drop_increment"]
  445. level.threePlayerPowerupScore = getDvarIntDefault( "threePlayerPowerupScore", 50 );
  446. level.zombie_vars[ "zombie_score_kill_3p_team" ] = level.threePlayerPowerupScore;
  447. //points to the powerup increment to a powerup drop related to level.zombie_vars["zombie_powerup_drop_increment"]
  448. level.twoPlayerPowerupScore = getDvarIntDefault( "twoPlayerPowerupScore", 50 );
  449. level.zombie_vars[ "zombie_score_kill_2p_team" ] = level.twoPlayerPowerupScore;
  450. //points to the powerup increment to a powerup drop related to level.zombie_vars["zombie_powerup_drop_increment"]
  451. level.onePlayerPowerupScore = getDvarIntDefault( "onePlayerPowerupScore", 50 );
  452. level.zombie_vars[ "zombie_score_kill_1p_team" ] = level.onePlayerPowerupScore;
  453. //points for melee kills to the powerup increment to a powerup drop
  454. level.powerupScoreMeleeKill = getDvarIntDefault( "powerupScoreMeleeKill", 80 );
  455. level.zombie_vars[ "zombie_score_bonus_melee" ] = level.powerupScoreMeleeKill;
  456. //points for headshot kills to the powerup increment to a powerup drop
  457. level.powerupScoreHeadshotKill = getDvarIntDefault( "powerupScoreHeadshotKill", 50 );
  458. level.zombie_vars[ "zombie_score_bonus_head" ] = level.powerupScoreHeadshotKill;
  459. //points for neck kills to the powerup increment to a powerup drop
  460. level.powerupScoreNeckKill = getDvarIntDefault( "powerupScoreNeckKill", 20 );
  461. level.zombie_vars[ "zombie_score_bonus_neck" ] = level.powerupScoreNeckKill;
  462. //points for torso kills to the powerup increment to a powerup drop
  463. level.powerupScoreTorsoKill = getDvarIntDefault( "powerupScoreTorsoKill", 10 );
  464. level.zombie_vars[ "zombie_score_bonus_torso" ] = level.powerupScoreTorsoKill;
  465. //sets the zombie spawnrate; max is 0.08
  466. level.zombieSpawnRate = getDvarFloatDefault( "zombieSpawnRate", 2 );
  467. level.zombie_vars[ "zombie_spawn_delay" ] = level.zombieSpawnRate;
  468. //sets the zombie spawnrate multiplier increase
  469. level.zombieSpawnRateMultiplier = getDvarFloatDefault( "zombieSpawnRateMultiplier", 0.95 );
  470. //locks the spawnrate so it does not change throughout gameplay
  471. level.zombieSpawnRateLocked = getDvarIntDefault( "zombieSpawnRateLocked", 0 );
  472. //alters the number of zombies per round formula amount of zombies per round is roughly correlated to this value
  473. //ie half as many zombies per player is half as many zombies per round
  474. level.zombiesPerPlayer = getDvarIntDefault( "zombiesPerPlayer", 6 );
  475. level.zombie_vars["zombie_ai_per_player"] = level.zombiesPerPlayer;
  476. //sets the flat amount of hp the zombies gain per round not used after round 10
  477. level.zombieHealthIncreaseFlat = getDvarIntDefault( "zombieHealthIncreaseFlat", 100 );
  478. level.zombie_vars[ "zombie_health_increase" ] = level.zombieHealthIncreaseFlat;
  479. //multiplies zombie health by this value every round after round 10
  480. level.zombieHealthIncreaseMultiplier = getDvarFloatDefault( "zombieHealthIncreaseMultiplier", 0.1 );
  481. level.zombie_vars[ "zombie_health_increase_multiplier" ] = level.zombieHealthIncreaseMultiplier;
  482. //base zombie health before any multipliers or additions
  483. level.zombieHealthStart = getDvarIntDefault( "zombieHealthStart", 150 );
  484. level.zombie_vars[ "zombie_health_start" ] = level.zombieHealthStart;
  485. //time before new runners spawn on early rounds
  486. level.zombieNewRunnerInterval = getDvarIntDefault( "zombieNewRunnerInterval", 10 );
  487. level.zombie_vars[ "zombie_new_runner_interval" ] = level.zombieNewRunnerInterval;
  488. //determines level.zombie_move_speed on original
  489. level.zombieMoveSpeedMultiplier = getDvarIntDefault( "zombieMoveSpeedMultiplier", 10 );
  490. level.zombie_vars[ "zombie_move_speed_multiplier" ] = level.zombieMoveSpeedMultiplier;
  491. //determines level.zombie_move_speed on easy
  492. level.zombieMoveSpeedMultiplierEasy = getDvarIntDefault( "zombieMoveSpeedMultiplierEasy", 8 );
  493. level.zombie_vars[ "zombie_move_speed_multiplier_easy"] = level.zombieMoveSpeedMultiplierEasy;
  494. //affects the number of zombies per round formula
  495. level.zombieMaxAi = getDvarIntDefault( "zombieMaxAi", 24 );
  496. level.zombie_vars[ "zombie_max_ai" ] = level.zombieMaxAi;
  497. //affects the check for zombies that have fallen thru the map
  498. level.belowWorldCheck = getDvarIntDefault( "belowWorldCheck", -1000 );
  499. level.zombie_vars[ "below_world_check" ] = level.belowWorldCheck;
  500. //sets whether spectators respawn at the end of the round
  501. level.customSpectatorsRespawn = getDvarIntDefault( "customSpectatorsRespawn", 1 );
  502. level.zombie_vars[ "spectators_respawn" ] = level.customSpectatorsRespawn;
  503. //sets the time that the game takes during the end game intermission
  504. level.zombieIntermissionTime = getDvarIntDefault( "zombieIntermissionTime", 20 );
  505. level.zombie_vars["zombie_intermission_time"] = level.zombieIntermissionTime;
  506. //the time between rounds
  507. level.zombieBetweenRoundTime = getDvarIntDefault( "zombieBetweenRoundTime", 15 );
  508. level.zombie_vars["zombie_between_round_time"] = level.zombieBetweenRoundTime;
  509. //time before the game starts
  510. level.roundStartDelay = getDvarIntDefault( "roundStartDelay", 0 );
  511. level.zombie_vars[ "game_start_delay" ] = level.roundStartDelay;
  512. //points all players lose when a player bleeds out %10 default
  513. level.bleedoutPointsLostAllPlayers = getDvarFloatDefault( "bleedoutPointsLostAllPlayers", 0.1 );
  514. level.zombie_vars[ "penalty_no_revive" ] = level.bleedoutPointsLostAllPlayers;
  515. //penalty to the player who died 10% of points by default
  516. level.bleedoutPointsLostSelf = getDvarFloatDefault( "bleedoutPointsLostSelf", 0.1 );
  517. level.zombie_vars[ "penalty_died" ] = level.bleedoutPointsLostSelf;
  518. //points players lose on down %5 by default
  519. level.downedPointsLostSelf = getDvarFloatDefault( "downedPointsLostSelf", 0.05 );
  520. level.zombie_vars[ "penalty_downed" ] = level.downedPointsLostSelf;
  521. //unknown
  522. level.playerStartingLives = getDvarIntDefault( "playerStartingLives", 1 );
  523. level.zombie_vars[ "starting_lives" ] = level.playerStartingLives;
  524. //points earned per zombie kill in a 4 player game
  525. level.fourPlayerScorePerZombieKill = getDvarIntDefault( "fourPlayerScorePerZombieKill", 50 );
  526. level.zombie_vars[ "zombie_score_kill_4player" ] = level.fourPlayerScorePerZombieKill;
  527. //points earned per zombie kill in a 3 player game
  528. level.threePlayerScorePerZombieKill = getDvarIntDefault( "threePlayerScorePerZombieKill", 50 );
  529. level.zombie_vars[ "zombie_score_kill_3player" ] = level.threePlayerScorePerZombieKill;
  530. //points earned per zombie kill in a 2 player game
  531. level.twoPlayerScorePerZombieKill = getDvarIntDefault( "twoPlayerScorePerZombieKill", 50 );
  532. level.zombie_vars[ "zombie_score_kill_2player" ] = level.twoPlayerScorePerZombieKill;
  533. //points earned per zombie kill in a 1 player game
  534. level.onePlayerScorePerZombieKill = getDvarIntDefault( "onePlayerScorePerZombieKill", 50 );
  535. level.zombie_vars[ "zombie_score_kill_1player" ] = level.onePlayerScorePerZombieKill;
  536. //points given for a normal attack
  537. level.pointsPerNormalAttack = getDvarIntDefault( "pointsPerNormalAttack", 10 );
  538. level.zombie_vars[ "zombie_score_damage_normal" ] = level.pointsPerNormalAttack;
  539. //points given for a light attack
  540. level.pointsPerLightAttack = getDvarIntDefault( "pointsPerLightAttack", 10 );
  541. level.zombie_vars[ "zombie_score_damage_light" ] = level.pointsPerLightAttack;
  542. //players turn into a zombie on death WARNING: buggy as can be and is missing assets
  543. level.shouldZombifyPlayer = getDvarIntDefault( "shouldZombifyPlayer", 0 );
  544. level.zombie_vars[ "zombify_player" ] = level.shouldZombifyPlayer;
  545. //points scalar for allies team
  546. level.alliesPointsMultiplier = getDvarIntDefault( "alliesPointsMultiplier", 1 );
  547. level.zombie_vars[ "allies" ][ "zombie_point_scalar" ] = level.alliesPointsMultiplier;
  548. //points scalar for axis team
  549. level.axisPointsMultiplier = getDvarIntDefault( "axisPointsMultiplier", 1 );
  550. level.zombie_vars[ "axis" ][ "zombie_point_scalar" ] = level.axisPointsMultiplier;
  551. //sets the radius of emps explosion lower this to 1 to render emps useless
  552. level.empPerkExplosionRadius = getDvarIntDefault( "empPerkExplosionRadius", 420 );
  553. level.zombie_vars[ "emp_perk_off_range" ] = level.empPerkExplosionRadius;
  554. //sets the duration of emps on perks set to 0 for infiinite emps
  555. level.empPerkOffDuration = getDvarIntDefault( "empPerkOffDuration", 90 );
  556. level.zombie_vars[ "emp_perk_off_time" ] = level.empPerkOffDuration;
  557. //riotshield health
  558. level.riotshieldHitPoints = getDvarIntDefault( "riotshieldHitPoints", 2250 );
  559. level.zombie_vars[ "riotshield_hit_points" ] = level.riotshieldHitPoints;
  560. //jugg health bonus
  561. level.juggHealthBonus = getDvarIntDefault( "juggHealthBonus", 160 );
  562. level.zombie_vars[ "zombie_perk_juggernaut_health" ] = level.juggHealthBonus;
  563. //perma jugg health bonus
  564. level.permaJuggHealthBonus = getDvarIntDefault( "permaJuggHealthBonus", 190 );
  565. level.zombie_vars[ "zombie_perk_juggernaut_health_upgrade" ] = level.permaJuggHealthBonus;
  566. //phd min explosion damage
  567. level.minPhdExplosionDamage = getDvarIntDefault( "minPhdExplosionDamage", 1000 );
  568. level.zombie_vars[ "zombie_perk_divetonuke_min_damage" ] = level.minPhdExplosionDamage;
  569. //phd max explosion damage
  570. level.maxPhdExplosionDamage = getDvarIntDefault( "maxPhdExplosionDamage", 5000 );
  571. level.zombie_vars[ "zombie_perk_divetonuke_max_damage" ] = level.maxPhdExplosionDamage;
  572. //phd explosion radius
  573. level.phdDamageRadius = getDvarIntDefault( "phdDamageRadius", 300 );
  574. level.zombie_vars[ "zombie_perk_divetonuke_radius" ] = level.phdDamageRadius;
  575. //zombie counter onscreen
  576. level.enableZombieCounter = getDvarIntDefault( "enableZombieCounter", 1 );
  577. level.zombie_vars[ "enableZombieCounter" ] = level.enableZombieCounter;
  578. //change mystery box price
  579. level.customMysteryBoxPriceEnabled = getDvarIntDefault( "customMysteryBoxPriceEnabled", 0 );
  580. level.zombie_vars[ "customMysteryBoxPriceEnabled" ] = level.customMysteryBoxPriceEnabled;
  581. //set mystery box price
  582. level.customMysteryBoxPrice = getDvarIntDefault( "customMysteryBoxPrice", 500 );
  583. level.zombie_vars[ "customMysteryBoxPrice" ] = level.customMysteryBoxPrice;
  584. //disable custom perks
  585. level.disableAllCustomPerks = getDvarIntDefault( "disableAllCustomPerks", 0 );
  586. level.zombie_vars[ "disableAllCustomPerks" ] = level.disableAllCustomPerks;
  587. //enable custom phdflopper
  588. level.enablePHDFlopper = getDvarIntDefault( "enablePHDFlopper", 1 );
  589. level.zombie_vars[ "enablePHDFlopper" ] = level.enablePHDFlopper;
  590. //enable custom staminup
  591. level.enableStaminUp = getDvarIntDefault( "enableStaminUp", 1 );
  592. level.zombie_vars[ "enableStaminUp" ] = level.enableStaminUp;
  593. //enable custom deadshot
  594. level.enableDeadshot = getDvarIntDefault( "enableDeadshot", 1 );
  595. level.zombie_vars[ "enableDeadshot" ] = level.enableDeadshot;
  596. //enable custom mule kick
  597. level.enableMuleKick = getDvarIntDefault( "enableMuleKick", 1 );
  598. level.zombie_vars[ "enableMuleKick" ] = level.enableMuleKick;
  599. disable_specific_powerups();
  600. checks();
  601. thread zombies_always_drop_powerups();
  602. thread zombies_per_round_override();
  603. thread zombie_health_override();
  604. thread zombie_health_cap_override();
  605. thread zombie_spawn_delay_fix();
  606. thread zombie_speed_fix();
  607. }
  608.  
  609. trackPackAPunchDrops()
  610. {
  611. level endon("end_game");
  612. level.rounds_since_last_pack_a_punch = 0;
  613. for(;;)
  614. {
  615. level waittill("start_of_round");
  616. level.rounds_since_last_pack_a_punch_drop += 1;
  617. wait 0.5;
  618. }
  619. }
  620.  
  621. gscRestart()
  622. {
  623. level waittill( "end_game" );
  624. wait 15;
  625. map_restart( false );
  626. }
  627.  
  628. setPlayersToSpectator()
  629. {
  630. level.no_end_game_check = 1;
  631. wait 3;
  632. players = get_players();
  633. i = 0;
  634. while ( i < players.size )
  635. {
  636. if ( i == 0 )
  637. {
  638. i++;
  639. }
  640. players[ i ] setToSpectator();
  641. i++;
  642. }
  643. wait 5;
  644. spawnAllPlayers();
  645. }
  646.  
  647. setToSpectator()
  648. {
  649. self.sessionstate = "spectator";
  650. if (isDefined(self.is_playing))
  651. {
  652. self.is_playing = false;
  653. }
  654. }
  655.  
  656. spawnAllPlayers()
  657. {
  658. players = get_players();
  659. i = 0;
  660. while ( i < players.size )
  661. {
  662. if ( players[ i ].sessionstate == "spectator" && isDefined( players[ i ].spectator_respawn ) )
  663. {
  664. players[ i ] [[ level.spawnplayer ]]();
  665. if ( level.script != "zm_tomb" || level.script != "zm_prison" || !is_classic() )
  666. {
  667. thread maps\mp\zombies\_zm::refresh_player_navcard_hud();
  668. }
  669. }
  670. i++;
  671. }
  672. level.no_end_game_check = 0;
  673. }
  674.  
  675. disable_all_powerups()
  676. {
  677. if ( level.zmPowerupsNoPowerupDrops )
  678. {
  679. flag_clear( "zombie_drop_powerups" );
  680. }
  681. }
  682.  
  683. zombies_always_drop_powerups()
  684. {
  685. if ( !level.zombiesAlwaysDropPowerups )
  686. {
  687. return;
  688. }
  689. while ( 1 )
  690. {
  691. level.zombie_vars[ "zombie_drop_item" ] = level.zombiesAlwaysDropPowerups;
  692. wait 0.05;
  693. }
  694. }
  695.  
  696. zombies_per_round_override()
  697. {
  698. if ( !level.overrideZombieTotalPermanently )
  699. {
  700. return;
  701. }
  702. while ( 1 )
  703. {
  704. level waittill( "start_of_round" );
  705. level.zombie_total = getDvarIntDefault( "overrideZombieTotalPermanentlyValue", 6 );
  706. }
  707. }
  708.  
  709. zombie_health_override()
  710. {
  711. if ( !level.overrideZombieHealthPermanently )
  712. {
  713. return;
  714. }
  715. while ( 1 )
  716. {
  717. level waittill( "start_of_round" );
  718. level.zombie_health = getDvarIntDefault( "overrideZombieHealthPermanentlyValue", 150 );
  719. }
  720. }
  721.  
  722. zombie_health_cap_override()
  723. {
  724. if ( !level.overrideZombieMaxHealth )
  725. {
  726. return;
  727. }
  728. while ( 1 )
  729. {
  730. level waittill( "start_of_round" );
  731. if ( level.zombie_health > level.overrideZombieMaxHealthValue )
  732. {
  733. level.zombie_health = getDvarIntDefault( "overrideZombieHealthMaxHealthValue", 150 );
  734. }
  735. }
  736. }
  737.  
  738. zombie_spawn_delay_fix()
  739. {
  740. if ( level.zombieSpawnRateLocked )
  741. {
  742. return;
  743. }
  744. i = 1;
  745. while ( i <= level.round_number )
  746. {
  747. timer = level.zombieSpawnRate;
  748. if ( timer > 0.08 )
  749. {
  750. level.zombieSpawnRate = timer * level.zombieSpawnRateMultiplier;
  751. i++;
  752. continue;
  753. }
  754. else if ( timer < 0.08 )
  755. {
  756. level.zombieSpawnRate = 0.08;
  757. break;
  758. }
  759. i++;
  760. }
  761. while ( 1 )
  762. {
  763. level waittill( "start_of_round" );
  764. if ( level.zombieSpawnRate > 0.08 )
  765. {
  766. level.zombieSpawnRate = level.zombieSpawnRate * level.zombieSpawnRateMultiplier;
  767. }
  768. level.zombie_vars[ "zombie_spawn_delay" ] = level.zombieSpawnRate;
  769. }
  770. }
  771.  
  772. zombie_speed_fix()
  773. {
  774. if ( level.zombieMoveSpeedLocked )
  775. {
  776. return;
  777. }
  778. if ( level.gamedifficulty == 0 )
  779. {
  780. level.zombie_move_speed = level.round_number * level.zombie_vars[ "zombie_move_speed_multiplier_easy" ];
  781. }
  782. else
  783. {
  784. level.zombie_move_speed = level.round_number * level.zombie_vars[ "zombie_move_speed_multiplier" ];
  785. }
  786. }
  787.  
  788. zombie_speed_override()
  789. {
  790. if ( !level.zombieMoveSpeedLocked )
  791. {
  792. return;
  793. }
  794. while ( 1 )
  795. {
  796. level waittill( "start_of_round" );
  797. level.zombie_move_speed = getDvarIntDefault( "zombieMoveSpeed", 1 );
  798. }
  799. }
  800.  
  801. zombie_speed_cap_override()
  802. {
  803. if ( !level.zombieMoveSpeedCap )
  804. {
  805. return;
  806. }
  807. while ( 1 )
  808. {
  809. level waittill( "start_of_round" );
  810. if ( level.zombie_move_speed > level.zombieMoveSpeedCapValue )
  811. {
  812. level.zombie_move_speed = level.zombieMoveSpeedCapValue;
  813. }
  814. }
  815. }
  816.  
  817. checks()
  818. {
  819. if( level.customMysteryBoxPriceEnabled == 1) //custom mystery box price
  820. {
  821. level thread setMysteryBoxPrice();
  822. }
  823. if( level.enableZombieCounter == 1 ) //draw zombie counter
  824. {
  825. level thread drawZombiesCounter(); //credit carbonmodding
  826. }
  827. if ( level.mixed_rounds_enabled )
  828. {
  829. if ( level.script != "zm_transit" || is_classic() || level.scr_zm_ui_gametype == "zgrief" )
  830. {
  831. level.mixed_rounds_enabled = 0;
  832. }
  833. }
  834.  
  835. if ( level.start_weapon == "" || level.start_weapon== "m1911_zm" )
  836. {
  837. level.start_weapon = "m1911_zm";
  838. if ( level.script == "zm_tomb" )
  839. {
  840. level.start_weapon = "c96_zm";
  841. }
  842. }
  843. if ( level.default_laststandpistol == "" || level.default_laststandpistol == "m1911_zm" )
  844. {
  845. level.default_laststandpistol = "m1911_zm";
  846. if ( level.script == "zm_tomb" )
  847. {
  848. level.default_laststandpistol = "c96_zm";
  849. }
  850. }
  851. if ( level.default_solo_laststandpistol == "" || level.default_solo_laststandpistol == "m1911_upgraded_zm" )
  852. {
  853. level.default_solo_laststandpistol = "m1911_upgraded_zm";
  854. if ( level.script == "zm_tomb" )
  855. {
  856. level.default_solo_laststandpistol = "c96_upgraded_zm";
  857. }
  858. }
  859.  
  860. }
  861.  
  862. disable_specific_powerups()
  863. {
  864. level.powerupNames = array( "fast_feet", "unlimited_ammo", "pack_a_punch", "money_drop", "nuke", "insta_kill", "full_ammo", "double_points", "fire_sale", "free_perk", "carpenter" );
  865. array = level.powerupNames;
  866. //custom powerups and regular powerups
  867. level.zmPowerupsEnabled = [];
  868. //fast feet custom drop
  869. level.zmPowerupsEnabled[ "fast_feet" ] = spawnstruct();
  870. level.zmPowerupsEnabled[ "fast_feet" ].name = "fast_feet";
  871. level.zmPowerupsEnabled[ "fast_feet" ].active = getDvarIntDefault( "zmPowerupsFastFeetEnabled", 1 );
  872. //custom unlimited ammo drop
  873. level.zmPowerupsEnabled[ "unlimited_ammo" ] = spawnstruct();
  874. level.zmPowerupsEnabled[ "unlimited_ammo" ].name = "unlimited_ammo";
  875. level.zmPowerupsEnabled[ "unlimited_ammo" ].active = getDvarIntDefault( "zmPowerupsUnlimitedAmmoEnabled", 1 );
  876. //custom pack a punch drop
  877. level.zmPowerupsEnabled[ "pack_a_punch" ] = spawnstruct();
  878. level.zmPowerupsEnabled[ "pack_a_punch" ].name = "pack_a_punch";
  879. level.zmPowerupsEnabled[ "pack_a_punch" ].active = getDvarIntDefault( "zmPowerupsPackAPunchEnabled", 1 );
  880. //custom money drop
  881. level.zmPowerupsEnabled[ "money_drop" ] = spawnstruct();
  882. level.zmPowerupsEnabled[ "money_drop" ].name = "money_drop";
  883. level.zmPowerupsEnabled[ "money_drop" ].active = getDvarIntDefault( "zmPowerupsMoneyDropEnabled", 1 );
  884. //nuke
  885. level.zmPowerupsEnabled[ "nuke" ] = spawnstruct();
  886. level.zmPowerupsEnabled[ "nuke" ].name = "nuke";
  887. level.zmPowerupsEnabled[ "nuke" ].active = getDvarIntDefault( "zmPowerupsNukeEnabled", 1 );
  888. //remove insta kills from the drop cycle and special drops
  889. level.zmPowerupsEnabled[ "insta_kill" ] = spawnstruct();
  890. level.zmPowerupsEnabled[ "insta_kill" ].name = "insta_kill";
  891. level.zmPowerupsEnabled[ "insta_kill" ].active = getDvarIntDefault( "zmPowerupsInstaKillEnabled", 1 );
  892. //remove max ammos from the drop cycle and special drops
  893. level.zmPowerupsEnabled[ "full_ammo" ] = spawnstruct();
  894. level.zmPowerupsEnabled[ "full_ammo" ].name = "full_ammo";
  895. level.zmPowerupsEnabled[ "full_ammo" ].active = getDvarIntDefault( "zmPowerupsMaxAmmoEnabled", 1 );
  896. //remove carpenter from the drop cycle and special drops
  897. level.zmPowerupsEnabled[ "double_points" ] = spawnstruct();
  898. level.zmPowerupsEnabled[ "double_points" ].name = "double_points";
  899. level.zmPowerupsEnabled[ "double_points" ].active = getDvarIntDefault( "zmPowerupsDoublePointsEnabled", 1 );
  900. //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
  901. level.zmPowerupsEnabled[ "fire_sale" ] = spawnstruct();
  902. level.zmPowerupsEnabled[ "fire_sale" ].name = "fire_sale";
  903. level.zmPowerupsEnabled[ "fire_sale" ].active = getDvarIntDefault( "zmPowerupsFireSaleEnabled", 1 );
  904. //remove the perk bottle from the drop cycle and special drops
  905. level.zmPowerupsEnabled[ "free_perk" ] = spawnstruct();
  906. level.zmPowerupsEnabled[ "free_perk" ].name = "free_perk";
  907. level.zmPowerupsEnabled[ "free_perk" ].active = getDvarIntDefault( "zmPowerupsPerkBottleEnabled", 1 );
  908. //removes carpenter from the drop cycle and special drops
  909. level.zmPowerupsEnabled[ "carpenter" ] = spawnstruct();
  910. level.zmPowerupsEnabled[ "carpenter" ].name = "carpenter";
  911. level.zmPowerupsEnabled[ "carpenter" ].active = getDvarIntDefault( "zmPowerupsCarpenterEnabled", 1 );
  912. //removes zombie blood from the drop cycle and special drops
  913. level.zmPowerupsEnabled[ "zombie_blood" ] = spawnstruct();
  914. level.zmPowerupsEnabled[ "zombie_blood" ].name = "zombie_blood";
  915. level.zmPowerupsEnabled[ "zombie_blood" ].active = getDvarIntDefault( "zmPowerupsZombieBloodEnabled", 1 );
  916.  
  917. //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
  918.  
  919. for ( i = 0; i < array.size; i++ )
  920. {
  921. if ( !level.zmPowerupsEnabled[ array[ i ] ].active )
  922. {
  923. name = level.zmPowerupsEnabled[ array[ i ] ].name;
  924. if ( isInArray( level.zombie_include_powerups, name ) )
  925. {
  926. arrayremovevalue( level.zombie_include_powerups, name );
  927. }
  928. if ( isInArray( level.zombie_powerups, name ) )
  929. {
  930. arrayremovevalue( level.zombie_powerups, name );
  931. }
  932. if ( isInArray( level.zombie_powerup_array, name ) )
  933. {
  934. arrayremovevalue( level.zombie_powerup_array, name );
  935. }
  936. }
  937. }
  938. }
  939.  
  940. drawZombiesCounter()
  941. {
  942. level.zombiesCounter = createServerFontString("hudsmall" , 1.9);
  943. level.zombiesCounter setPoint("CENTER", "CENTER", "CENTER", 190);
  944. while(true)
  945. {
  946. enemies = get_round_enemy_array().size + level.zombie_total;
  947. if( enemies != 0 )
  948. level.zombiesCounter.label = &"Zombies: ^1";
  949. else
  950. level.zombiesCounter.label = &"Zombies: ^6";
  951. level.zombiesCounter setValue( enemies );
  952. wait 0.05;
  953. }
  954. }
  955.  
  956. setMysteryBoxPrice() //mystery box price
  957. {
  958. i = 0;
  959. while (i < level.chests.size)
  960. {
  961. level.chests[ i ].zombie_cost = level.customMysteryBoxPrice;
  962. level.chests[ i ].old_cost = level.customMysteryBoxPrice;
  963. i++;
  964. }
  965. }
  966.  
  967. spawnIfRoundOne() //spawn player
  968. {
  969. wait 3;
  970. if ( self.sessionstate == "spectator" && level.round_number == 1 )
  971. self iprintln("Get ready to be spawned!");
  972. wait 5;
  973. if ( self.sessionstate == "spectator" && level.round_number == 1 )
  974. {
  975. self [[ level.spawnplayer ]]();
  976. if ( level.script != "zm_tomb" || level.script != "zm_prison" || !is_classic() )
  977. thread maps\mp\zombies\_zm::refresh_player_navcard_hud();
  978. }
  979. }
  980.  
  981. solo_tombstone_removal()
  982. {
  983. notify( "tombstone_on" );
  984. }
  985.  
  986. turn_tombstone_on()
  987. {
  988. while ( 1 )
  989. {
  990. machine = getentarray( "vending_tombstone", "targetname" );
  991. machine_triggers = getentarray( "vending_tombstone", "target" );
  992. i = 0;
  993. while ( i < machine.size )
  994. {
  995. machine[ i ] setmodel( level.machine_assets[ "tombstone" ].off_model );
  996. i++;
  997. }
  998. level thread do_initial_power_off_callback( machine, "tombstone" );
  999. array_thread( machine_triggers, ::set_power_on, 0 );
  1000. level waittill( "tombstone_on" );
  1001. i = 0;
  1002. while ( i < machine.size )
  1003. {
  1004. machine[ i ] setmodel( level.machine_assets[ "tombstone" ].on_model );
  1005. machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0,3, 0,4, 3 );
  1006. machine[ i ] playsound( "zmb_perks_power_on" );
  1007. machine[ i ] thread perk_fx( "tombstone_light" );
  1008. machine[ i ] thread play_loop_on_machine();
  1009. i++;
  1010. }
  1011. level notify( "specialty_scavenger_power_on" );
  1012. array_thread( machine_triggers, ::set_power_on, 1 );
  1013. if ( isDefined( level.machine_assets[ "tombstone" ].power_on_callback ) )
  1014. {
  1015. array_thread( machine, level.machine_assets[ "tombstone" ].power_on_callback );
  1016. }
  1017. level waittill( "tombstone_off" );
  1018. if ( isDefined( level.machine_assets[ "tombstone" ].power_off_callback ) )
  1019. {
  1020. array_thread( machine, level.machine_assets[ "tombstone" ].power_off_callback );
  1021. }
  1022. array_thread( machine, ::turn_perk_off );
  1023. players = get_players();
  1024. _a1718 = players;
  1025. _k1718 = getFirstArrayKey( _a1718 );
  1026. while ( isDefined( _k1718 ) )
  1027. {
  1028. player = _a1718[ _k1718 ];
  1029. player.hasperkspecialtytombstone = undefined;
  1030. _k1718 = getNextArrayKey( _a1718, _k1718 );
  1031. }
  1032. }
  1033. }
  1034.  
  1035. perk_machine_spawn_init()
  1036. {
  1037. match_string = "";
  1038. location = level.scr_zm_map_start_location;
  1039. if ( location != "default" && location == "" && isDefined( level.default_start_location ) )
  1040. {
  1041. location = level.default_start_location;
  1042. }
  1043. match_string = ( level.scr_zm_ui_gametype + "_perks_" ) + location;
  1044. pos = [];
  1045. if ( isDefined( level.override_perk_targetname ) )
  1046. {
  1047. structs = getstructarray( level.override_perk_targetname, "targetname" );
  1048. }
  1049. else
  1050. {
  1051. structs = getstructarray( "zm_perk_machine", "targetname" );
  1052. }
  1053. _a3578 = structs;
  1054. _k3578 = getFirstArrayKey( _a3578 );
  1055. while ( isDefined( _k3578 ) )
  1056. {
  1057. struct = _a3578[ _k3578 ];
  1058. if ( isDefined( struct.script_string ) )
  1059. {
  1060. tokens = strtok( struct.script_string, " " );
  1061. _a3583 = tokens;
  1062. _k3583 = getFirstArrayKey( _a3583 );
  1063. while ( isDefined( _k3583 ) )
  1064. {
  1065. token = _a3583[ _k3583 ];
  1066. if ( token == match_string )
  1067. {
  1068. pos[ pos.size ] = struct;
  1069. }
  1070. _k3583 = getNextArrayKey( _a3583, _k3583 );
  1071. }
  1072. }
  1073. else pos[ pos.size ] = struct;
  1074. _k3578 = getNextArrayKey( _a3578, _k3578 );
  1075. }
  1076. if ( !isDefined( pos ) || pos.size == 0 )
  1077. {
  1078. return;
  1079. }
  1080. precachemodel( "zm_collision_perks1" );
  1081. i = 0;
  1082. while ( i < pos.size )
  1083. {
  1084. perk = pos[ i ].script_noteworthy;
  1085. if ( isDefined( perk ) && isDefined( pos[ i ].model ) )
  1086. {
  1087. use_trigger = spawn( "trigger_radius_use", pos[ i ].origin + vectorScale( ( 0, -1, 0 ), 30 ), 0, 40, 70 );
  1088. use_trigger.targetname = "zombie_vending";
  1089. use_trigger.script_noteworthy = perk;
  1090. use_trigger triggerignoreteam();
  1091. perk_machine = spawn( "script_model", pos[ i ].origin );
  1092. perk_machine.angles = pos[ i ].angles;
  1093. perk_machine setmodel( pos[ i ].model );
  1094. if ( isDefined( level._no_vending_machine_bump_trigs ) && level._no_vending_machine_bump_trigs )
  1095. {
  1096. bump_trigger = undefined;
  1097. }
  1098. else
  1099. {
  1100. bump_trigger = spawn( "trigger_radius", pos[ i ].origin, 0, 35, 64 );
  1101. bump_trigger.script_activated = 1;
  1102. bump_trigger.script_sound = "zmb_perks_bump_bottle";
  1103. bump_trigger.targetname = "audio_bump_trigger";
  1104. if ( perk != "specialty_weapupgrade" )
  1105. {
  1106. bump_trigger thread thread_bump_trigger();
  1107. }
  1108. }
  1109. collision = spawn( "script_model", pos[ i ].origin, 1 );
  1110. collision.angles = pos[ i ].angles;
  1111. collision setmodel( "zm_collision_perks1" );
  1112. collision.script_noteworthy = "clip";
  1113. collision disconnectpaths();
  1114. use_trigger.clip = collision;
  1115. use_trigger.machine = perk_machine;
  1116. use_trigger.bump = bump_trigger;
  1117. if ( isDefined( pos[ i ].blocker_model ) )
  1118. {
  1119. use_trigger.blocker_model = pos[ i ].blocker_model;
  1120. }
  1121. if ( isDefined( pos[ i ].script_int ) )
  1122. {
  1123. perk_machine.script_int = pos[ i ].script_int;
  1124. }
  1125. if ( isDefined( pos[ i ].turn_on_notify ) )
  1126. {
  1127. perk_machine.turn_on_notify = pos[ i ].turn_on_notify;
  1128. }
  1129. if ( perk == "specialty_scavenger" || perk == "specialty_scavenger_upgrade" )
  1130. {
  1131. use_trigger.script_sound = "mus_perks_tombstone_jingle";
  1132. use_trigger.script_string = "tombstone_perk";
  1133. use_trigger.script_label = "mus_perks_tombstone_sting";
  1134. use_trigger.target = "vending_tombstone";
  1135. perk_machine.script_string = "tombstone_perk";
  1136. perk_machine.targetname = "vending_tombstone";
  1137. if ( isDefined( bump_trigger ) )
  1138. {
  1139. bump_trigger.script_string = "tombstone_perk";
  1140. }
  1141. }
  1142. if ( isDefined( level._custom_perks[ perk ] ) && isDefined( level._custom_perks[ perk ].perk_machine_set_kvps ) )
  1143. {
  1144. [[ level._custom_perks[ perk ].perk_machine_set_kvps ]]( use_trigger, perk_machine, bump_trigger, collision );
  1145. }
  1146. }
  1147. i++;
  1148. }
  1149. }
  1150.  
  1151. isTown()
  1152. {
  1153. if (isDefined(level.zombiemode_using_tombstone_perk) && level.zombiemode_using_tombstone_perk)
  1154. {
  1155. level thread perk_machine_spawn_init();
  1156. thread solo_tombstone_removal();
  1157. thread turn_tombstone_on();
  1158. }
  1159. }
  1160. give_afterlife_loadout()
  1161. {
  1162.  
  1163. self takeallweapons();
  1164. loadout = self.loadout;
  1165. primaries = self getweaponslistprimaries();
  1166. if ( loadout.weapons.size > 1 || primaries.size > 1 )
  1167. {
  1168. foreach ( weapon in primaries )
  1169. {
  1170. self takeweapon( weapon );
  1171. }
  1172. }
  1173. i = 0;
  1174. while ( i < loadout.weapons.size )
  1175. {
  1176.  
  1177. if ( !isDefined( loadout.weapons[ i ] ) )
  1178. {
  1179. i++;
  1180.  
  1181. continue;
  1182. }
  1183. if ( loadout.weapons[ i ][ "name" ] == "none" )
  1184. {
  1185. i++;
  1186.  
  1187. continue;
  1188. }
  1189. self maps/mp/zombies/_zm_weapons::weapondata_give( loadout.weapons[ i ] );
  1190. i++;
  1191. }
  1192. self setspawnweapon( loadout.weapons[ loadout.current_weapon ] );
  1193. self switchtoweaponimmediate( loadout.weapons[ loadout.current_weapon ] );
  1194. if ( isDefined( self get_player_melee_weapon() ) )
  1195. {
  1196. self giveweapon( self get_player_melee_weapon() );
  1197. }
  1198. self maps/mp/zombies/_zm_equipment::equipment_give( self.loadout.equipment );
  1199. if ( isDefined( loadout.hasclaymore ) && loadout.hasclaymore && !self hasweapon( "claymore_zm" ) )
  1200. {
  1201. self giveweapon( "claymore_zm" );
  1202. self set_player_placeable_mine( "claymore_zm" );
  1203. self setactionslot( 4, "weapon", "claymore_zm" );
  1204. self setweaponammoclip( "claymore_zm", loadout.claymoreclip );
  1205. }
  1206. if ( isDefined( loadout.hasemp ) && loadout.hasemp )
  1207. {
  1208. self giveweapon( "emp_grenade_zm" );
  1209. self setweaponammoclip( "emp_grenade_zm", loadout.empclip );
  1210. }
  1211. if ( isDefined( loadout.hastomahawk ) && loadout.hastomahawk )
  1212. {
  1213. self giveweapon( self.current_tomahawk_weapon );
  1214. self set_player_tactical_grenade( self.current_tomahawk_weapon );
  1215. self setclientfieldtoplayer( "tomahawk_in_use", 1 );
  1216. }
  1217. self.score = loadout.score;
  1218. perk_array = maps/mp/zombies/_zm_perks::get_perk_array( 1 );
  1219. i = 0;
  1220. while ( i < perk_array.size )
  1221. {
  1222. perk = perk_array[ i ];
  1223. self unsetperk( perk );
  1224. self set_perk_clientfield( perk, 0 );
  1225. i++;
  1226. }
  1227. if (is_true(self.keep_perks))
  1228. {
  1229. if(is_true(self.hadphd))
  1230. {
  1231. self.hasphd = true;
  1232. self.hadphd = undefined;
  1233. self thread maps/mp/gametypes_zm/_clientids::drawCustomPerkHUD("specialty_doubletap_zombies", 0, (1, 0.25, 1));
  1234. }
  1235. }
  1236. if ( isDefined( self.keep_perks ) && self.keep_perks && isDefined( loadout.perks ) && loadout.perks.size > 0 )
  1237. {
  1238. i = 0;
  1239. while ( i < loadout.perks.size )
  1240. {
  1241. if ( self hasperk( loadout.perks[ i ] ) )
  1242. {
  1243. i++;
  1244. continue;
  1245. }
  1246. if ( loadout.perks[ i ] == "specialty_quickrevive" && flag( "solo_game" ) )
  1247. {
  1248. level.solo_game_free_player_quickrevive = 1;
  1249. }
  1250. if ( loadout.perks[ i ] == "specialty_longersprint" )
  1251. {
  1252. self setperk( "specialty_longersprint" ); //removes the staminup perk functionality
  1253. self.hasStaminUp = true; //resets the staminup variable
  1254. self thread maps/mp/gametypes_zm/_clientids::drawCustomPerkHUD("specialty_juggernaut_zombies", 0, (1, 1, 0));
  1255. arrayremovevalue( loadout.perks, "specialty_longersprint" );
  1256.  
  1257. continue;
  1258. }
  1259. if ( loadout.perks[ i ] == "specialty_additionalprimaryweapon" )
  1260. {
  1261. self setperk( "specialty_additionalprimaryweapon"); //removes the deadshot perk functionality
  1262. self.hasMuleKick = true; //resets the deadshot variable
  1263. self thread maps/mp/gametypes_zm/_clientids::drawCustomPerkHUD("specialty_fastreload_zombies", 0, (0, 0.7, 0));
  1264. arrayremovevalue( loadout.perks, "specialty_additionalprimaryweapon" );
  1265. continue;
  1266. }
  1267. if ( loadout.perks[ i ] == "specialty_finalstand" )
  1268. {
  1269. i++;
  1270. continue;
  1271. }
  1272. maps/mp/zombies/_zm_perks::give_perk( loadout.perks[ i ] );
  1273. i++;
  1274. wait 0.05;
  1275. }
  1276. }
  1277. self.keep_perks = undefined;
  1278. self set_player_lethal_grenade( self.loadout.lethal_grenade );
  1279. if ( loadout.grenade > 0 )
  1280. {
  1281. curgrenadecount = 0;
  1282. if ( self hasweapon( self get_player_lethal_grenade() ) )
  1283. {
  1284. self getweaponammoclip( self get_player_lethal_grenade() );
  1285. }
  1286. else
  1287. {
  1288. self giveweapon( self get_player_lethal_grenade() );
  1289. }
  1290. self setweaponammoclip( self get_player_lethal_grenade(), loadout.grenade + curgrenadecount );
  1291. }
  1292.  
  1293. }
  1294. save_afterlife_loadout() //checked changed to match cerberus output
  1295. {
  1296. primaries = self getweaponslistprimaries();
  1297. currentweapon = self getcurrentweapon();
  1298. self.loadout = spawnstruct();
  1299. self.loadout.player = self;
  1300. self.loadout.weapons = [];
  1301. self.loadout.score = self.score;
  1302. self.loadout.current_weapon = -1;
  1303. index = 0;
  1304. foreach ( weapon in primaries )
  1305. {
  1306. self.loadout.weapons[ index ] = maps/mp/zombies/_zm_weapons::get_player_weapondata( self, weapon );
  1307. if ( weapon == currentweapon || self.loadout.weapons[ index ][ "alt_name" ] == currentweapon )
  1308. {
  1309. self.loadout.current_weapon = index;
  1310. }
  1311. index++;
  1312. }
  1313. self.loadout.equipment = self get_player_equipment();
  1314. if ( isDefined( self.loadout.equipment ) )
  1315. {
  1316. self maps/mp/zombies/_zm_equipment::equipment_take( self.loadout.equipment );
  1317. }
  1318. if ( self hasweapon( "claymore_zm" ) )
  1319. {
  1320. self.loadout.hasclaymore = 1;
  1321. self.loadout.claymoreclip = self getweaponammoclip( "claymore_zm" );
  1322. }
  1323. if ( self hasweapon( "emp_grenade_zm" ) )
  1324. {
  1325. self.loadout.hasemp = 1;
  1326. self.loadout.empclip = self getweaponammoclip( "emp_grenade_zm" );
  1327. }
  1328. if ( self hasweapon( "bouncing_tomahawk_zm" ) || self hasweapon( "upgraded_tomahawk_zm" ) )
  1329. {
  1330. self.loadout.hastomahawk = 1;
  1331. self setclientfieldtoplayer( "tomahawk_in_use", 0 );
  1332. }
  1333. self.loadout.perks = afterlife_save_perks( self );
  1334. lethal_grenade = self get_player_lethal_grenade();
  1335. if ( self hasweapon( lethal_grenade ) )
  1336. {
  1337. self.loadout.grenade = self getweaponammoclip( lethal_grenade );
  1338. }
  1339. else
  1340. {
  1341. self.loadout.grenade = 0;
  1342. }
  1343. self.loadout.lethal_grenade = lethal_grenade;
  1344. self set_player_lethal_grenade( undefined );
  1345. }
  1346.  
  1347. afterlife_save_perks( ent ) //checked changed to match cerberus output
  1348. {
  1349. perk_array = ent get_perk_array( 1 );
  1350. foreach ( perk in perk_array )
  1351. {
  1352. ent unsetperk( perk );
  1353. }
  1354. return perk_array;
  1355. }
  1356. onPlayerRevived()
  1357. {
  1358. self endon("disconnect");
  1359. level endon("end_game");
  1360.  
  1361. for(;;)
  1362. {
  1363. self waittill_any( "whos_who_self_revive","player_revived","fake_revive","do_revive_ended_normally", "al_t" );
  1364. wait 1;
  1365. if(is_true(self.hadPHD))
  1366. {
  1367. self setperk( "PHD_FLOPPER" ); //removes the staminup perk functionality
  1368. self.hasPHD = true;
  1369. self.hadPHD = undefined;
  1370. self thread drawCustomPerkHUD("specialty_doubletap_zombies", 0, (1, 0.25, 1));
  1371. }
  1372. else
  1373. return;
  1374. }
  1375. }
  1376.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement