Guest User

zombies ++ map restart audio fix

a guest
May 21st, 2020
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 60.13 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/gametypes_zm/_weapons;
  10. #include maps/mp/zombies/_zm_powerups;
  11. #include maps/mp/zombies/_zm_perks;
  12.  
  13. starinit()
  14. {
  15.         thread startinit();
  16.         thread onplayerconnect();
  17.         thread initcustompowerups();
  18.         thread initserverdvars();
  19.         level.playerdamagestub;
  20.         level.callbackplayerdamage;
  21. }
  22.  
  23. onplayerconnect()
  24. {
  25.     for(;;)
  26.     {
  27.         level waittill("connected", player);
  28.         player thread [[level.givecustomcharacters]]();
  29.         player thread onplayerspawned();
  30.         player thread spawnifroundone();
  31.         player thread startcustompowerups();
  32.         player thread startcustomperkmachines();
  33.         player thread startcustombank();
  34.     }
  35. }
  36.  
  37. /*
  38.     Name: onplayerspawned
  39.     Namespace: _imcsx_gsc_studio
  40.     Checksum: 0x1FD75731
  41.     Offset: 0x2C1E
  42.     Size: 0x72
  43.     Parameters: 0
  44.     Flags: None
  45. */
  46. onplayerspawned()
  47. {
  48.     level endon("end_game");
  49.     self endon("disconnect");
  50.     for(;;)
  51.     {
  52.         self waittill("spawned_player");
  53.         if(level.round_number >= 5 && self.score < 2500)
  54.         {
  55.             self.score = 2500;
  56.         }
  57.         else if(level.round_number >= 15 && self.score < 5000)
  58.         {
  59.             self.score = 5000;
  60.         }
  61.         wait(5);
  62.         self thread connectmessages();
  63.         self thread initcustomperksonplayer();
  64.     }
  65. }
  66.  
  67. /*
  68.     Name: connectmessages
  69.     Namespace: _imcsx_gsc_studio
  70.     Checksum: 0x29EF3EB3
  71.     Offset: 0x2C92
  72.     Size: 0x247
  73.     Parameters: 0
  74.     Flags: None
  75. */
  76. connectmessages()
  77. {
  78.     wait(5);
  79.     self connectmessage("Welcome to ^1ZOMBIES++^7!
  80. Developed by ^5@ItsCahz", 0);
  81.     wait(5);
  82.     self connectmessage("Your ^2Perk Limit ^7is ^2" + level.perk_purchase_limit + " ^7perks!", 0);
  83.     wait(5);
  84.     if(GetDvar("mapname") == "zm_prison" || GetDvar("mapname") == "zm_highrise" || (GetDvar("mapname") == "zm_buried" || GetDvar("mapname") == "zm_nuked") || GetDvar("mapname") == "zm_transit")
  85.     {
  86.         if(level.disableallcustomperks == 0)
  87.         {
  88.             if(isdefined(level.customperksarespawned))
  89.             {
  90.                 self connectmessage("There are extra perk machines located within the map!", 0);
  91.             }
  92.             if(isdefined(self.customperknum) && self.customperknum == 4)
  93.             {
  94.                 wait(5);
  95.             }
  96.             if(GetDvar("mapname") == "zm_highrise")
  97.             {
  98.                 if(level.enablephdflopper == 1)
  99.                 {
  100.                     self connectmessage("-^6PHD Flopper", 0);
  101.                 }
  102.                 if(level.enabledeadshot == 1)
  103.                 {
  104.                     self connectmessage("-^8Deadshot Daiquiari", 0);
  105.                 }
  106.                 if(level.enablestaminup == 1)
  107.                 {
  108.                     self connectmessage("-^3Stamin-Up", 0);
  109.                 }
  110.             }
  111.             else if(GetDvar("mapname") == "zm_buried")
  112.             {
  113.                 if(level.enablephdflopper == 1)
  114.                 {
  115.                     self connectmessage("-^6PHD Flopper", 0);
  116.                 }
  117.                 if(level.enabledeadshot == 1)
  118.                 {
  119.                     self connectmessage("-^8Deadshot Daiquiari", 0);
  120.                 }
  121.             }
  122.             else if(GetDvar("mapname") == "zm_prison")
  123.             {
  124.                 if(level.enablephdflopper == 1)
  125.                 {
  126.                     self connectmessage("-^6PHD Flopper", 0);
  127.                 }
  128.                 if(level.enablestaminup == 1)
  129.                 {
  130.                     self connectmessage("-^3Stamin-Up", 0);
  131.                 }
  132.             }
  133.             else if(GetDvar("mapname") == "zm_nuked" || GetDvar("mapname") == "zm_transit")
  134.             {
  135.                 if(level.enablephdflopper == 1)
  136.                 {
  137.                     self connectmessage("-^6PHD Flopper", 0);
  138.                 }
  139.                 if(level.enabledeadshot == 1)
  140.                 {
  141.                     self connectmessage("-^8Deadshot Daiquiari", 0);
  142.                 }
  143.                 if(level.enablestaminup == 1)
  144.                 {
  145.                     self connectmessage("-^3Stamin-Up", 0);
  146.                 }
  147.                 if(level.enablemulekick == 1)
  148.                 {
  149.                     self connectmessage("-^2Mule Kick", 0);
  150.                 }
  151.             }
  152.         }
  153.     }
  154.     else if(GetDvar("mapname") != "zm_tomb" && level.disableallcustomperks == 0 && level.enablephdflopper == 1)
  155.     {
  156.         self connectmessage("^6PHD Flopper ^7is ^2Enabled ^7Automatically On This Map!", 0);
  157.     }
  158. }
  159.  
  160. /*
  161.     Name: onplayerdowned
  162.     Namespace: _imcsx_gsc_studio
  163.     Checksum: 0xDF6A417A
  164.     Offset: 0x2EDA
  165.     Size: 0xB0
  166.     Parameters: 0
  167.     Flags: None
  168. */
  169. onplayerdowned()
  170. {
  171.     self endon("disconnect");
  172.     self endon("death");
  173.     level endon("game_ended");
  174.     for(;;)
  175.     {
  176.         self waittill("player_downed");
  177.         self unsetperk("specialty_additionalprimaryweapon");
  178.         self unsetperk("specialty_longersprint");
  179.         self unsetperk("specialty_deadshot");
  180.         self.hasphd = undefined;
  181.         self.hasmulekick = undefined;
  182.         self.hasstaminup = undefined;
  183.         self.hasdeadshot = undefined;
  184.         self.icon1 destroy();
  185.         self.icon1 = undefined;
  186.         self.icon2 destroy();
  187.         self.icon2 = undefined;
  188.         self.icon3 destroy();
  189.         self.icon3 = undefined;
  190.         self.icon4 destroy();
  191.         self.icon4 = undefined;
  192.     }
  193. }
  194.  
  195. /*
  196.     Name: initcustomperksonplayer
  197.     Namespace: _imcsx_gsc_studio
  198.     Checksum: 0xB86CD2E2
  199.     Offset: 0x2F8C
  200.     Size: 0x91
  201.     Parameters: 0
  202.     Flags: None
  203. */
  204. initcustomperksonplayer()
  205. {
  206.     self.hasphd = undefined;
  207.     if(GetDvar("mapname") == "zm_nuked" || GetDvar("mapname") == "zm_transit" || (GetDvar("mapname") == "zm_buried" || GetDvar("mapname") == "zm_highrise") || GetDvar("mapname") == "zm_prison")
  208.     {
  209.         self thread onplayerdowned();
  210.     }
  211.     else if(GetDvar("mapname") != "zm_tomb" && level.disableallcustomperks == 0 && level.enablephdflopper == 1)
  212.     {
  213.         self.hasphd = 1;
  214.         self thread drawcustomperkhud("specialty_doubletap_zombies", 0, (1, 0.25, 1));
  215.     }
  216. }
  217.  
  218. /*
  219.     Name: startcustomperkmachines
  220.     Namespace: _imcsx_gsc_studio
  221.     Checksum: 0x158FE7D7
  222.     Offset: 0x301E
  223.     Size: 0x3EF
  224.     Parameters: 0
  225.     Flags: None
  226. */
  227. startcustomperkmachines()
  228. {
  229.     if(level.disableallcustomperks == 0)
  230.     {
  231.         self thread dophddive();
  232.         if(GetDvar("mapname") == "zm_prison")
  233.         {
  234.             if(level.enablephdflopper == 1)
  235.             {
  236.                 self 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);
  237.             }
  238.             if(level.enablestaminup == 1)
  239.             {
  240.                 self 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));
  241.             }
  242.         }
  243.         else if(GetDvar("mapname") == "zm_highrise")
  244.         {
  245.             if(level.enablephdflopper == 1)
  246.             {
  247.                 self 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);
  248.             }
  249.             if(level.enabledeadshot == 1)
  250.             {
  251.                 self thread customperkmachine("zombie_perk_bottle_whoswho", "zombie_vending_revive", "Deadshot Daiquiri", 1500, (3690.54, 1932.36, 1420), "specialty_deadshot", (-15, 0, 0));
  252.             }
  253.             if(level.enablestaminup == 1)
  254.             {
  255.                 self thread customperkmachine("zombie_perk_bottle_revive", "zombie_vending_doubletap2", "Stamin-Up", 2000, (1704, -35, 1120.13), "specialty_longersprint", (0, -30, 0));
  256.             }
  257.         }
  258.         else if(GetDvar("mapname") == "zm_buried")
  259.         {
  260.             if(level.enablephdflopper == 1)
  261.             {
  262.                 self thread customperkmachine("zombie_perk_bottle_marathon", "zombie_vending_jugg", "PHD Flopper", 3000, (2631.73, 304.165, 240.125), "PHD_FLOPPER", (5, 0, 0));
  263.             }
  264.             if(level.enabledeadshot == 1)
  265.             {
  266.                 self thread customperkmachine("zombie_perk_bottle_marathon", "zombie_vending_revive", "Deadshot Daiquiri", 1500, (1055.18, -1055.55, 201), "specialty_deadshot", (3, 270, 0));
  267.             }
  268.         }
  269.         else if(GetDvar("mapname") == "zm_nuked")
  270.         {
  271.             if(level.enablephdflopper == 1)
  272.             {
  273.                 self thread customperkmachine("zombie_perk_bottle_revive", "zombie_vending_jugg", "PHD Flopper", 3000, (683, 727, -56), "PHD_FLOPPER", (5, 250, 0));
  274.             }
  275.             if(level.enabledeadshot == 1)
  276.             {
  277.                 self thread customperkmachine("zombie_perk_bottle_jugg", "zombie_vending_revive", "Deadshot Daiquiri", 1500, (747, 356, 91), "specialty_deadshot", (0, 330, 0));
  278.             }
  279.             if(level.enablestaminup == 1)
  280.             {
  281.                 self thread customperkmachine("zombie_perk_bottle_revive", "zombie_vending_doubletap2", "Stamin-Up", 2000, (-638, 268, -54), "specialty_longersprint", (0, 165, 0));
  282.             }
  283.             if(level.enablemulekick == 1)
  284.             {
  285.                 self thread customperkmachine("zombie_perk_bottle_jugg", "zombie_vending_sleight", "Mule Kick", 3000, (-953, 715, 83), "specialty_additionalprimaryweapon", (0, 75, 0));
  286.             }
  287.         }
  288.         else if(GetDvar("mapname") == "zm_transit")
  289.         {
  290.             if(level.enablephdflopper == 1)
  291.             {
  292.                 self thread customperkmachine("zombie_perk_bottle_revive", "zombie_vending_jugg", "PHD Flopper", 3000, (-6304, 5430, -55), "PHD_FLOPPER", (0, 90, 0));
  293.             }
  294.             if(level.enabledeadshot == 1)
  295.             {
  296.                 self thread customperkmachine("zombie_perk_bottle_jugg", "zombie_vending_revive", "Deadshot Daiquiri", 1500, (-6088, -7419, 0), "specialty_deadshot", (0, 90, 0));
  297.             }
  298.             if(level.enablestaminup == 1)
  299.             {
  300.                 self thread customperkmachine("zombie_perk_bottle_revive", "zombie_vending_doubletap2", "Stamin-Up", 2000, (-11753, -2598, 228), "specialty_longersprint", (0, -225, 0));
  301.             }
  302.             if(level.enablemulekick == 1)
  303.             {
  304.                 self thread customperkmachine("zombie_perk_bottle_jugg", "zombie_vending_sleight", "Mule Kick", 3000, (1149, -215, -304), "specialty_additionalprimaryweapon", (0, 180, 0));
  305.             }
  306.         }
  307.     }
  308. }
  309.  
  310. /*
  311.     Name: dophddive
  312.     Namespace: _imcsx_gsc_studio
  313.     Checksum: 0x9571BE64
  314.     Offset: 0x340E
  315.     Size: 0xB2
  316.     Parameters: 0
  317.     Flags: None
  318. */
  319. dophddive()
  320. {
  321.     self endon("disconnect");
  322.     level endon("game_ended");
  323.     while(isdefined(self.divetoprone) && self.divetoprone)
  324.     {
  325.         if(self isonground() && isdefined(self.hasphd))
  326.         {
  327.             if(level.script == "zm_tomb" || level.script == "zm_buried")
  328.             {
  329.                 explosionfx = level._effect["divetonuke_groundhit"];
  330.             }
  331.             else
  332.             {
  333.                 explosionfx = loadfx("explosions/fx_default_explosion");
  334.             }
  335.             self playsound("zmb_phdflop_explo");
  336.             playfx(explosionfx, self.origin);
  337.             self damagezombiesinrange(310, self, "kill");
  338.             wait(0.3);
  339.         }
  340.         wait(0.05);
  341.     }
  342. }
  343.  
  344. /*
  345.     Name: damagezombiesinrange
  346.     Namespace: _imcsx_gsc_studio
  347.     Checksum: 0x3F731474
  348.     Offset: 0x34C2
  349.     Size: 0x9E
  350.     Parameters: 3
  351.     Flags: None
  352. */
  353. damagezombiesinrange(range, what, amount)
  354. {
  355.     enemy = getaiarray(level.zombie_team);
  356.     foreach(zombie in enemy)
  357.     {
  358.         if(distance(zombie.origin, what.origin) < range)
  359.         {
  360.             if(amount == "kill")
  361.             {
  362.                 zombie dodamage(zombie.health * 2, zombie.origin, self);
  363.                 continue;
  364.             }
  365.             zombie dodamage(amount, zombie.origin, self);
  366.         }
  367.     }
  368. }
  369.  
  370. /*
  371.     Name: phd_flopper_dmg_check
  372.     Namespace: _imcsx_gsc_studio
  373.     Checksum: 0x95ADBAB9
  374.     Offset: 0x3562
  375.     Size: 0x81
  376.     Parameters: 11
  377.     Flags: None
  378. */
  379. phd_flopper_dmg_check(einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex)
  380. {
  381.     self endon("disconnect");
  382.     if(smeansofdeath == "MOD_FALLING" || smeansofdeath == "MOD_PROJECTILE" || (smeansofdeath == "MOD_PROJECTILE_SPLASH" || smeansofdeath == "MOD_GRENADE") || (smeansofdeath == "MOD_GRENADE_SPLASH" || smeansofdeath == "MOD_EXPLOSIVE"))
  383.     {
  384.         if(isdefined(self.hasphd))
  385.         {
  386.             return;
  387.         }
  388.     }
  389.     [[level.playerdamagestub]](einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex);
  390. }
  391.  
  392. /*
  393.     Name: customperkmachine
  394.     Namespace: _imcsx_gsc_studio
  395.     Checksum: 0x153F2CBE
  396.     Offset: 0x35E4
  397.     Size: 0x1E4
  398.     Parameters: 7
  399.     Flags: None
  400. */
  401. customperkmachine(bottle, model, perkname, cost, origin, perk, angles)
  402. {
  403.     if(!isdefined(level.customperksarespawned))
  404.     {
  405.         level.customperksarespawned = 1;
  406.     }
  407.     if(!isdefined(self.customperknum))
  408.     {
  409.         self.customperknum = 1;
  410.     }
  411.     else
  412.     {
  413.         self.customperknum = self.customperknum + 1;
  414.     }
  415.     collision = spawn("script_model", origin);
  416.     collision setmodel("collision_geo_cylinder_32x128_standard");
  417.     collision rotateto(angles, 0.1);
  418.     rperks = spawn("script_model", origin);
  419.     rperks setmodel(model);
  420.     rperks rotateto(angles, 0.1);
  421.     level thread lowermessage("Custom Perks", "Hold ^3F ^7for " + perkname + " [Cost: " + cost + "]");
  422.     trig = spawn("trigger_radius", origin, 1, 25, 25);
  423.     trig setcursorhint("HINT_NOICON");
  424.     trig setlowermessage(trig, "Custom Perks");
  425.     for(;;)
  426.     {
  427.         trig waittill("trigger", €GSC
  428. );
  429.         if(self usebuttonpressed() && self.score >= cost && distance(self.origin, origin) < 125)
  430.         {
  431.             wait(0.25);
  432.             if(self usebuttonpressed())
  433.             {
  434.                 if(perk != "PHD_FLOPPER" && !self hasperk(perk) || (perk == "PHD_FLOPPER" && !isdefined(self.hasphd)))
  435.                 {
  436.                     self playsound("zmb_cha_ching");
  437.                     self.score = self.score - cost;
  438.                     level.trig hide();
  439.                     self thread giveperk(bottle, perk, perkname);
  440.                     wait(2);
  441.                     level.trig show();
  442.                     continue;
  443.                 }
  444.                 self iprintln("You Already Have " + perkname + "!");
  445.             }
  446.         }
  447.     }
  448. }
  449.  
  450. /*
  451.     Name: giveperk
  452.     Namespace: _imcsx_gsc_studio
  453.     Checksum: 0x2C187D29
  454.     Offset: 0x37CA
  455.     Size: 0x183
  456.     Parameters: 3
  457.     Flags: None
  458. */
  459. giveperk(model, perk, perkname)
  460. {
  461.     self disableoffhandweapons();
  462.     self disableweaponcycling();
  463.     weapona = self getcurrentweapon();
  464.     weaponb = model;
  465.     self giveweapon(weaponb);
  466.     self switchtoweapon(weaponb);
  467.     self waittill("weapon_change_complete");
  468.     self enableoffhandweapons();
  469.     self enableweaponcycling();
  470.     self takeweapon(weaponb);
  471.     self switchtoweapon(weapona);
  472.     self setperk(perk);
  473.     self maps/mp/zombies/_zm_audio::playerexert("burp");
  474.     self setblur(4, 0.1);
  475.     wait(0.1);
  476.     self setblur(0, 0.1);
  477.     if(perk == "PHD_FLOPPER")
  478.     {
  479.         self.hasphd = 1;
  480.         self thread drawcustomperkhud("specialty_doubletap_zombies", 0, (1, 0.25, 1));
  481.     }
  482.     else if(perk == "specialty_additionalprimaryweapon")
  483.     {
  484.         self.hasmulekick = 1;
  485.         self thread drawcustomperkhud("specialty_fastreload_zombies", 0, (0, 0.7, 0));
  486.     }
  487.     else if(perk == "specialty_longersprint")
  488.     {
  489.         self.hasstaminup = 1;
  490.         self thread drawcustomperkhud("specialty_juggernaut_zombies", 0,  1, 1, 0);
  491.     }
  492.     else if(perk == "specialty_deadshot")
  493.     {
  494.         self.hasdeadshot = 1;
  495.         self thread drawcustomperkhud("specialty_quickrevive_zombies", 0, (0.125, 0.125, 0.125));
  496.     }
  497. }
  498.  
  499. /*
  500.     Name: lowermessage
  501.     Namespace: _imcsx_gsc_studio
  502.     Checksum: 0x24C017C2
  503.     Offset: 0x394E
  504.     Size: 0x2E
  505.     Parameters: 2
  506.     Flags: None
  507. */
  508. lowermessage(ref, text)
  509. {
  510.     if(!isdefined(level.zombie_hints))
  511.     {
  512.         level.zombie_hints = [];
  513.     }
  514.     precachestring(text);
  515.     level.zombie_hints[ref] = text;
  516. }
  517.  
  518. /*
  519.     Name: setlowermessage
  520.     Namespace: _imcsx_gsc_studio
  521.     Checksum: 0x7E12BEC7
  522.     Offset: 0x397E
  523.     Size: 0x3F
  524.     Parameters: 2
  525.     Flags: None
  526. */
  527. setlowermessage(ent, default_ref)
  528. {
  529.     if(isdefined(ent.script_hint))
  530.     {
  531.         self sethintstring(get_zombie_hint(ent.script_hint));
  532.     }
  533.     else
  534.     {
  535.         self sethintstring(get_zombie_hint(default_ref));
  536.     }
  537. }
  538.  
  539. /*
  540.     Name: drawshader
  541.     Namespace: _imcsx_gsc_studio
  542.     Checksum: 0xB6336CFD
  543.     Offset: 0x39BE
  544.     Size: 0x86
  545.     Parameters: 8
  546.     Flags: None
  547. */
  548. drawshader(shader, x, y, width, height, color, alpha, sort)
  549. {
  550.     hud = newclienthudelem(self);
  551.     hud.elemtype = "icon";
  552.     hud.color = color;
  553.     hud.alpha = alpha;
  554.     hud.sort = sort;
  555.     hud.children = [];
  556.     hud setparent(level.uiparent);
  557.     hud setshader(shader, width, height);
  558.     hud.x = x;
  559.     hud.y = y;
  560.     return hud;
  561. }
  562.  
  563. /*
  564.     Name: drawcustomperkhud
  565.     Namespace: _imcsx_gsc_studio
  566.     Checksum: 0x29EC1038
  567.     Offset: 0x3A46
  568.     Size: 0x197
  569.     Parameters: 4
  570.     Flags: None
  571. */
  572. drawcustomperkhud(perk, x, color, perkname)
  573. {
  574.     if(!isdefined(self.icon1))
  575.     {
  576.         x = -408;
  577.         if(GetDvar("mapname") == "zm_buried")
  578.         {
  579.             self.icon1 = self drawshader(perk, x, 293, 24, 25, color, 100, 0);
  580.         }
  581.         else
  582.         {
  583.             self.icon1 = self drawshader(perk, x, 320, 24, 25, color, 100, 0);
  584.         }
  585.     }
  586.     else if(!isdefined(self.icon2))
  587.     {
  588.         x = -378;
  589.         if(GetDvar("mapname") == "zm_buried")
  590.         {
  591.             self.icon2 = self drawshader(perk, x, 293, 24, 25, color, 100, 0);
  592.         }
  593.         else
  594.         {
  595.             self.icon2 = self drawshader(perk, x, 320, 24, 25, color, 100, 0);
  596.         }
  597.     }
  598.     else if(!isdefined(self.icon3))
  599.     {
  600.         x = -348;
  601.         if(GetDvar("mapname") == "zm_buried")
  602.         {
  603.             self.icon3 = self drawshader(perk, x, 293, 24, 25, color, 100, 0);
  604.         }
  605.         else
  606.         {
  607.             self.icon3 = self drawshader(perk, x, 320, 24, 25, color, 100, 0);
  608.         }
  609.     }
  610.     else if(!isdefined(self.icon4))
  611.     {
  612.         x = -318;
  613.         if(GetDvar("mapname") == "zm_buried")
  614.         {
  615.             self.icon4 = self drawshader(perk, x, 293, 24, 25, color, 100, 0);
  616.         }
  617.         else
  618.         {
  619.             self.icon4 = self drawshader(perk, x, 320, 24, 25, color, 100, 0);
  620.         }
  621.     }
  622. }
  623.  
  624. /*
  625.     Name: startcustompowerups
  626.     Namespace: _imcsx_gsc_studio
  627.     Checksum: 0xF8AC6025
  628.     Offset: 0x3BDE
  629.     Size: 0x23
  630.     Parameters: 0
  631.     Flags: None
  632. */
  633. startcustompowerups()
  634. {
  635.     if(!isdefined(level.custompowerupinit))
  636.     {
  637.         level.custompowerupinit = 1;
  638.         wait(2);
  639.         level._zombiemode_powerup_grab = &custom_powerup_grab;
  640.     }
  641. }
  642.  
  643. /*
  644.     Name: initcustompowerups
  645.     Namespace: _imcsx_gsc_studio
  646.     Checksum: 0x176616C3
  647.     Offset: 0x3C02
  648.     Size: 0x1B7
  649.     Parameters: 0
  650.     Flags: None
  651. */
  652. initcustompowerups()
  653. {
  654.     level.unlimited_ammo_duration = 20;
  655.     include_zombie_powerup("unlimited_ammo");
  656.     add_zombie_powerup("unlimited_ammo", "T6_WPN_AR_GALIL_WORLD", &"ZOMBIE_POWERUP_UNLIMITED_AMMO", &func_should_always_drop, 0, 0, 0);
  657.     powerup_set_can_pick_up_in_last_stand("unlimited_ammo", 1);
  658.     if(GetDvar("mapname") == "zm_prison")
  659.     {
  660.         include_zombie_powerup("fast_feet");
  661.         add_zombie_powerup("fast_feet", "bottle_whisky_01", &"ZOMBIE_POWERUP_FAST_FEET", &func_should_always_drop, 0, 0, 0);
  662.         powerup_set_can_pick_up_in_last_stand("fast_feet", 1);
  663.         include_zombie_powerup("pack_a_punch");
  664.         add_zombie_powerup("pack_a_punch", "p6_zm_al_vending_pap_on", &"ZOMBIE_POWERUP_PACK_A_PUNCH", &func_should_always_drop, 0, 0, 0);
  665.         powerup_set_can_pick_up_in_last_stand("pack_a_punch", 0);
  666.         include_zombie_powerup("money_drop");
  667.         add_zombie_powerup("money_drop", "p6_anim_zm_al_magic_box_lock_red", &"ZOMBIE_POWERUP_MONEY_DROP", &func_should_always_drop, 0, 0, 0);
  668.         powerup_set_can_pick_up_in_last_stand("money_drop", 1);
  669.     }
  670.     else
  671.     {
  672.         include_zombie_powerup("fast_feet");
  673.         add_zombie_powerup("fast_feet", "zombie_pickup_perk_bottle", &"ZOMBIE_POWERUP_FAST_FEET", &func_should_always_drop, 0, 0, 0);
  674.         powerup_set_can_pick_up_in_last_stand("fast_feet", 1);
  675.         include_zombie_powerup("pack_a_punch");
  676.         add_zombie_powerup("pack_a_punch", "p6_anim_zm_buildable_pap", &"ZOMBIE_POWERUP_PACK_A_PUNCH", &func_should_always_drop, 0, 0, 0);
  677.         powerup_set_can_pick_up_in_last_stand("pack_a_punch", 0);
  678.         include_zombie_powerup("money_drop");
  679.         add_zombie_powerup("money_drop", "zombie_teddybear", &"ZOMBIE_POWERUP_MONEY_DROP", &func_should_always_drop, 0, 0, 0);
  680.         powerup_set_can_pick_up_in_last_stand("money_drop", 1);
  681.     }
  682. }
  683.  
  684. /*
  685.     Name: custom_powerup_grab
  686.     Namespace: _imcsx_gsc_studio
  687.     Checksum: 0xC8D72F14
  688.     Offset: 0x3DBA
  689.     Size: 0x73
  690.     Parameters: 2
  691.     Flags: None
  692. */
  693. custom_powerup_grab(powerup, player)
  694. {
  695.     if(powerup.powerup_name == "money_drop")
  696.     {
  697.         player thread dorandomscore();
  698.     }
  699.     else if(powerup.powerup_name == "pack_a_punch")
  700.     {
  701.         player thread dopackapunchweapon();
  702.     }
  703.     else if(powerup.powerup_name == "unlimited_ammo")
  704.     {
  705.         player thread dounlimitedammo();
  706.     }
  707.     else if(powerup.powerup_name == "fast_feet")
  708.     {
  709.         player thread dofastfeet();
  710.     }
  711. }
  712.  
  713. /*
  714.     Name: dofastfeet
  715.     Namespace: _imcsx_gsc_studio
  716.     Checksum: 0x82850421
  717.     Offset: 0x3E2E
  718.     Size: 0x4B
  719.     Parameters: 0
  720.     Flags: None
  721. */
  722. dofastfeet()
  723. {
  724.     self thread poweruptext("Fast Feet!");
  725.     self playsound("zmb_cha_ching");
  726.     self setmovespeedscale(3);
  727.     wait(15);
  728.     self setmovespeedscale(1);
  729.     self playsound("zmb_insta_kill");
  730. }
  731.  
  732. /*
  733.     Name: dounlimitedammo
  734.     Namespace: _imcsx_gsc_studio
  735.     Checksum: 0xA4E25BF
  736.     Offset: 0x3E7A
  737.     Size: 0x6E
  738.     Parameters: 0
  739.     Flags: None
  740. */
  741. dounlimitedammo()
  742. {
  743.     foreach(player in level.players)
  744.     {
  745.         player notify("end_unlimited_ammo");
  746.         player playsound("zmb_cha_ching");
  747.         player thread poweruptext("Bottomless Clip");
  748.         player thread monitorunlimitedammo();
  749.         player thread notifyunlimitedammoend();
  750.     }
  751. }
  752.  
  753. /*
  754.     Name: monitorunlimitedammo
  755.     Namespace: _imcsx_gsc_studio
  756.     Checksum: 0x2F3BB50
  757.     Offset: 0x3EEA
  758.     Size: 0x32
  759.     Parameters: 0
  760.     Flags: None
  761. */
  762. monitorunlimitedammo()
  763. {
  764.     level endon("end_game");
  765.     self endon("disonnect");
  766.     self endon("end_unlimited_ammo");
  767.     for(;;)
  768.     {
  769.         self setweaponammoclip(self getcurrentweapon(), 150);
  770.         wait(0.05);
  771.     }
  772. }
  773.  
  774. /*
  775.     Name: notifyunlimitedammoend
  776.     Namespace: _imcsx_gsc_studio
  777.     Checksum: 0x3125888C
  778.     Offset: 0x3F1E
  779.     Size: 0x2E
  780.     Parameters: 0
  781.     Flags: None
  782. */
  783. notifyunlimitedammoend()
  784. {
  785.     level endon("end_game");
  786.     self endon("disonnect");
  787.     self endon("end_unlimited_ammo");
  788.     wait(level.unlimited_ammo_duration);
  789.     self playsound("zmb_insta_kill");
  790.     self notify("end_unlimited_ammo");
  791. }
  792.  
  793. /*
  794.     Name: dopackapunchweapon
  795.     Namespace: _imcsx_gsc_studio
  796.     Checksum: 0x9532E5A8
  797.     Offset: 0x3F4E
  798.     Size: 0x77
  799.     Parameters: 0
  800.     Flags: None
  801. */
  802. dopackapunchweapon()
  803. {
  804.     level endon("end_game");
  805.     self endon("disonnect");
  806.     baseweapon = get_base_name(self getcurrentweapon());
  807.     weapon = get_upgrade(baseweapon);
  808.     if(isdefined(weapon))
  809.     {
  810.         self takeweapon(baseweapon);
  811.         self giveweapon(weapon, 0, self get_pack_a_punch_weapon_options(weapon));
  812.         self switchtoweapon(weapon);
  813.         self givemaxammo(weapon);
  814.     }
  815. }
  816.  
  817. /*
  818.     Name: get_upgrade
  819.     Namespace: _imcsx_gsc_studio
  820.     Checksum: 0x5F8CCD4B
  821.     Offset: 0x3FC6
  822.     Size: 0x3B
  823.     Parameters: 1
  824.     Flags: None
  825. */
  826. get_upgrade(weapon)
  827. {
  828.     if(isdefined(level.zombie_weapons[weapon].upgrade_name) && isdefined(level.zombie_weapons[weapon]))
  829.     {
  830.         return get_upgrade_weapon(weapon, 0);
  831.     }
  832.     else
  833.     {
  834.         return get_upgrade_weapon(weapon, 1);
  835.     }
  836. }
  837.  
  838. /*
  839.     Name: dorandomscore
  840.     Namespace: _imcsx_gsc_studio
  841.     Checksum: 0x2EEE5F97
  842.     Offset: 0x4002
  843.     Size: 0x113
  844.     Parameters: 0
  845.     Flags: None
  846. */
  847. dorandomscore()
  848. {
  849.     x = randomint(9);
  850.     self playsound("zmb_cha_ching");
  851.     if(x == 1)
  852.     {
  853.         self.score = self.score + 50;
  854.     }
  855.     else if(x == 2)
  856.     {
  857.         self.score = self.score + 100;
  858.     }
  859.     else if(x == 3)
  860.     {
  861.         self.score = self.score + 250;
  862.     }
  863.     else if(x == 4)
  864.     {
  865.         self.score = self.score + 500;
  866.     }
  867.     else if(x == 5)
  868.     {
  869.         self.score = self.score + 750;
  870.     }
  871.     else if(x == 6)
  872.     {
  873.         self.score = self.score + 1000;
  874.     }
  875.     else if(x == 7)
  876.     {
  877.         self.score = self.score + 2500;
  878.     }
  879.     else if(x == 8)
  880.     {
  881.         self.score = self.score + 5000;
  882.     }
  883.     else if(x == 9)
  884.     {
  885.         self.score = self.score + 7500;
  886.     }
  887.     else
  888.     {
  889.         self.score = self.score + 10000;
  890.     }
  891. }
  892.  
  893. /*
  894.     Name: poweruptext
  895.     Namespace: _imcsx_gsc_studio
  896.     Checksum: 0x4CD4EF28
  897.     Offset: 0x4116
  898.     Size: 0x103
  899.     Parameters: 1
  900.     Flags: None
  901. */
  902. poweruptext(text)
  903. {
  904.     self endon("disconnect");
  905.     hud_string = newclienthudelem(self);
  906.     hud_string.elemtype = "font";
  907.     hud_string.font = "objective";
  908.     hud_string.fontscale = 2;
  909.     hud_string.x = 0;
  910.     hud_string.y = 0;
  911.     hud_string.width = 0;
  912.     hud_string.height = int(level.fontheight * 2);
  913.     hud_string.xoffset = 0;
  914.     hud_string.yoffset = 0;
  915.     hud_string.children = [];
  916.     hud_string setparent(level.uiparent);
  917.     hud_string.hidden = 0;
  918.     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);
  919.     hud_string.sort = 0.5;
  920.     hud_string.alpha = 0;
  921.     hud_string fadeovertime(0.5);
  922.     hud_string.alpha = 1;
  923.     hud_string settext(text);
  924.     hud_string thread poweruptextmove();
  925. }
  926.  
  927. /*
  928.     Name: poweruptextmove
  929.     Namespace: _imcsx_gsc_studio
  930.     Checksum: 0x6D8D6C2F
  931.     Offset: 0x421A
  932.     Size: 0x47
  933.     Parameters: 0
  934.     Flags: None
  935. */
  936. poweruptextmove()
  937. {
  938.     wait(0.5);
  939.     self fadeovertime(1.5);
  940.     self moveovertime(1.5);
  941.     self.y = 270;
  942.     self.alpha = 0;
  943.     wait(1.5);
  944.     self destroy();
  945. }
  946.  
  947. /*
  948.     Name: startinit
  949.     Namespace: _imcsx_gsc_studio
  950.     Checksum: 0x55249C3C
  951.     Offset: 0x4262
  952.     Size: 0x13B
  953.     Parameters: 0
  954.     Flags: None
  955. */
  956. startinit()
  957. {
  958.     precachemodel("collision_geo_cylinder_32x128_standard");
  959.     precachemodel("zombie_vending_jugg");
  960.     precachemodel("zombie_perk_bottle_marathon");
  961.     precachemodel("zombie_perk_bottle_whoswho");
  962.     precachemodel("zombie_vending_nuke_on_lo");
  963.     precachemodel("p6_zm_al_vending_pap_on");
  964.     precachemodel("p6_anim_zm_buildable_pap");
  965.     precachemodel("p6_zm_al_vending_pap_on");
  966.     precachemodel("p6_zm_al_vending_jugg_on");
  967.     precachemodel("p6_zm_al_vending_sleight_on");
  968.     precachemodel("p6_zm_al_vending_doubletap2_on");
  969.     precachemodel("p6_zm_al_vending_ads_on");
  970.     precachemodel("p6_zm_al_vending_nuke_on");
  971.     precachemodel("p6_zm_al_vending_three_gun_on");
  972.     precachemodel("zombie_vending_revive");
  973.     precachemodel("zombie_vending_doubletap2");
  974.     precachemodel("zombie_x2_icon");
  975.     precachemodel("zombie_bomb");
  976.     precachemodel("zombie_ammocan");
  977.     precachemodel("zombie_x2_icon");
  978.     precachemodel("zombie_skull");
  979.     precacheshader("specialty_deadshot_zombies");
  980.     if(isdefined(level.player_out_of_playable_area_monitor))
  981.     {
  982.         level.player_out_of_playable_area_monitor = 0;
  983.     }
  984.     level.pers_sniper_misses = 9999;
  985.     level.is_forever_solo_game = undefined;
  986.     thread gscRestart();
  987.     thread setPlayersToSpectator();
  988.     for(;;)
  989.     {
  990.         level waittill("connected", player);
  991.         player thread [[level.givecustomcharacters]]();
  992.         //The real cause of the invisible player glitch is that this isn't always called on map_restart so call it here.
  993.         //This will just call the method the map uses for give_personality_characters or give_team_characters without all the includes and it workes on NukeTown as well.
  994.         //We don't need to check the game mode since each game mode's init does set level.givecustomcharacters with an pointer to the correct method.
  995.     }
  996. }
  997.  
  998. /*
  999.     Name: initserverdvars
  1000.     Namespace: _imcsx_gsc_studio
  1001.     Checksum: 0x8E1D8EC6
  1002.     Offset: 0x439E
  1003.     Size: 0x9AF
  1004.     Parameters: 0
  1005.     Flags: None
  1006. */
  1007. initserverdvars()
  1008. {
  1009.     level.player_starting_points = getdvarintdefault("playerStartingPoints", 500);
  1010.     level.perk_purchase_limit = getdvarintdefault("perkLimit", 4);
  1011.     level.zombie_ai_limit = getdvarintdefault("zombieAiLimit", 24);
  1012.     level.zombie_actor_limit = getdvarintdefault("zombieActorLimit", 32);
  1013.     level.mixed_rounds_enabled = getdvarintdefault("midroundDogs", 0);
  1014.     level.no_end_game_check = getdvarintdefault("noEndGameCheck", 0);
  1015.     level.default_solo_laststandpistol = GetDvar("soloLaststandWeapon");
  1016.     level.default_laststandpistol = GetDvar("coopLaststandWeapon");
  1017.     level.start_weapon = GetDvar("startWeaponZm");
  1018.     level.zombie_move_speed = getdvarintdefault("zombieMoveSpeed", 1);
  1019.     level.zombiemovespeedlocked = getdvarintdefault("zombieMoveSpeedLocked", 0);
  1020.     level.zombiemovespeedcap = getdvarintdefault("zombieMoveSpeedCap", 0);
  1021.     level.zombiemovespeedcapvalue = getdvarintdefault("zombieMoveSpeedCapValue", 1);
  1022.     level.round_number = getdvarintdefault("roundNumber", 1);
  1023.     level.overridezombietotalpermanently = getdvarintdefault("overrideZombieTotalPermanently", 0);
  1024.     level.overridezombietotalpermanentlyvalue = getdvarintdefault("overrideZombieTotalPermanentlyValue", 6);
  1025.     level.overridezombiehealthpermanently = getdvarintdefault("overrideZombieHealthPermanently", 0);
  1026.     level.overridezombiehealthpermanentlyvalue = getdvarintdefault("overrideZombieHealthPermanentlyValue", 150);
  1027.     level.overridezombiemaxhealth = getdvarintdefault("overrideZombieMaxHealth", 0);
  1028.     level.overridezombiemaxhealthvalue = getdvarintdefault("overrideZombieMaxHealthValue", 150);
  1029.     level.disablewalkers = getdvarintdefault("disableWalkers", 0);
  1030.     if(level.disablewalkers)
  1031.     {
  1032.         level.speed_change_round = undefined;
  1033.     }
  1034.     level.disablesolomode = getdvarintdefault("disableSoloMode", 0);
  1035.     if(level.disablesolomode)
  1036.     {
  1037.         level.is_forever_solo_game = undefined;
  1038.     }
  1039.     level.zmpowerupsnopowerupdrops = getdvarintdefault("zmPowerupsNoPowerupDrops", 0);
  1040.     level.maxpowerupsperround = getdvarintdefault("maxPowerupsPerRound", 4);
  1041.     level.zombie_vars["zombie_powerup_drop_max_per_round"] = level.maxpowerupsperround;
  1042.     level.powerupdroprate = getdvarintdefault("powerupDropRate", 2000);
  1043.     level.zombie_vars["zombie_powerup_drop_increment"] = level.powerupdroprate;
  1044.     level.zombiesalwaysdroppowerups = getdvarintdefault("zombiesAlwaysDropPowerups", 0);
  1045.     level.zombie_vars["zombie_drop_item"] = level.zombiesalwaysdroppowerups;
  1046.     level.fourplayerpowerupscore = getdvarintdefault("fourPlayerPowerupScore", 50);
  1047.     level.zombie_vars["zombie_score_kill_4p_team"] = level.fourplayerpowerupscore;
  1048.     level.threeplayerpowerupscore = getdvarintdefault("threePlayerPowerupScore", 50);
  1049.     level.zombie_vars["zombie_score_kill_3p_team"] = level.threeplayerpowerupscore;
  1050.     level.twoplayerpowerupscore = getdvarintdefault("twoPlayerPowerupScore", 50);
  1051.     level.zombie_vars["zombie_score_kill_2p_team"] = level.twoplayerpowerupscore;
  1052.     level.oneplayerpowerupscore = getdvarintdefault("onePlayerPowerupScore", 50);
  1053.     level.zombie_vars["zombie_score_kill_1p_team"] = level.oneplayerpowerupscore;
  1054.     level.powerupscoremeleekill = getdvarintdefault("powerupScoreMeleeKill", 80);
  1055.     level.zombie_vars["zombie_score_bonus_melee"] = level.powerupscoremeleekill;
  1056.     level.powerupscoreheadshotkill = getdvarintdefault("powerupScoreHeadshotKill", 50);
  1057.     level.zombie_vars["zombie_score_bonus_head"] = level.powerupscoreheadshotkill;
  1058.     level.powerupscoreneckkill = getdvarintdefault("powerupScoreNeckKill", 20);
  1059.     level.zombie_vars["zombie_score_bonus_neck"] = level.powerupscoreneckkill;
  1060.     level.powerupscoretorsokill = getdvarintdefault("powerupScoreTorsoKill", 10);
  1061.     level.zombie_vars["zombie_score_bonus_torso"] = level.powerupscoretorsokill;
  1062.     level.zombiespawnrate = getdvarfloatdefault("zombieSpawnRate", 2);
  1063.     level.zombie_vars["zombie_spawn_delay"] = level.zombiespawnrate;
  1064.     level.zombiespawnratemultiplier = getdvarfloatdefault("zombieSpawnRateMultiplier", 0.95);
  1065.     level.zombiespawnratelocked = getdvarintdefault("zombieSpawnRateLocked", 0);
  1066.     level.zombiesperplayer = getdvarintdefault("zombiesPerPlayer", 6);
  1067.     level.zombie_vars["zombie_ai_per_player"] = level.zombiesperplayer;
  1068.     level.zombiehealthincreaseflat = getdvarintdefault("zombieHealthIncreaseFlat", 100);
  1069.     level.zombie_vars["zombie_health_increase"] = level.zombiehealthincreaseflat;
  1070.     level.zombiehealthincreasemultiplier = getdvarfloatdefault("zombieHealthIncreaseMultiplier", 0.1);
  1071.     level.zombie_vars["zombie_health_increase_multiplier"] = level.zombiehealthincreasemultiplier;
  1072.     level.zombiehealthstart = getdvarintdefault("zombieHealthStart", 150);
  1073.     level.zombie_vars["zombie_health_start"] = level.zombiehealthstart;
  1074.     level.zombienewrunnerinterval = getdvarintdefault("zombieNewRunnerInterval", 10);
  1075.     level.zombie_vars["zombie_new_runner_interval"] = level.zombienewrunnerinterval;
  1076.     level.zombiemovespeedmultiplier = getdvarintdefault("zombieMoveSpeedMultiplier", 10);
  1077.     level.zombie_vars["zombie_move_speed_multiplier"] = level.zombiemovespeedmultiplier;
  1078.     level.zombiemovespeedmultipliereasy = getdvarintdefault("zombieMoveSpeedMultiplierEasy", 8);
  1079.     level.zombie_vars["zombie_move_speed_multiplier_easy"] = level.zombiemovespeedmultipliereasy;
  1080.     level.zombiemaxai = getdvarintdefault("zombieMaxAi", 24);
  1081.     level.zombie_vars["zombie_max_ai"] = level.zombiemaxai;
  1082.     level.belowworldcheck = getdvarintdefault("belowWorldCheck", -1000);
  1083.     level.zombie_vars["below_world_check"] = level.belowworldcheck;
  1084.     level.customspectatorsrespawn = getdvarintdefault("customSpectatorsRespawn", 1);
  1085.     level.zombie_vars["spectators_respawn"] = level.customspectatorsrespawn;
  1086.     level.zombieintermissiontime = getdvarintdefault("zombieIntermissionTime", 20);
  1087.     level.zombie_vars["zombie_intermission_time"] = level.zombieintermissiontime;
  1088.     level.zombiebetweenroundtime = getdvarintdefault("zombieBetweenRoundTime", 15);
  1089.     level.zombie_vars["zombie_between_round_time"] = level.zombiebetweenroundtime;
  1090.     level.roundstartdelay = getdvarintdefault("roundStartDelay", 0);
  1091.     level.zombie_vars["game_start_delay"] = level.roundstartdelay;
  1092.     level.bleedoutpointslostallplayers = getdvarfloatdefault("bleedoutPointsLostAllPlayers", 0.1);
  1093.     level.zombie_vars["penalty_no_revive"] = level.bleedoutpointslostallplayers;
  1094.     level.bleedoutpointslostself = getdvarfloatdefault("bleedoutPointsLostSelf", 0.1);
  1095.     level.zombie_vars["penalty_died"] = level.bleedoutpointslostself;
  1096.     level.downedpointslostself = getdvarfloatdefault("downedPointsLostSelf", 0.05);
  1097.     level.zombie_vars["penalty_downed"] = level.downedpointslostself;
  1098.     level.playerstartinglives = getdvarintdefault("playerStartingLives", 1);
  1099.     level.zombie_vars["starting_lives"] = level.playerstartinglives;
  1100.     level.fourplayerscoreperzombiekill = getdvarintdefault("fourPlayerScorePerZombieKill", 50);
  1101.     level.zombie_vars["zombie_score_kill_4player"] = level.fourplayerscoreperzombiekill;
  1102.     level.threeplayerscoreperzombiekill = getdvarintdefault("threePlayerScorePerZombieKill", 50);
  1103.     level.zombie_vars["zombie_score_kill_3player"] = level.threeplayerscoreperzombiekill;
  1104.     level.twoplayerscoreperzombiekill = getdvarintdefault("twoPlayerScorePerZombieKill", 50);
  1105.     level.zombie_vars["zombie_score_kill_2player"] = level.twoplayerscoreperzombiekill;
  1106.     level.oneplayerscoreperzombiekill = getdvarintdefault("onePlayerScorePerZombieKill", 50);
  1107.     level.zombie_vars["zombie_score_kill_1player"] = level.oneplayerscoreperzombiekill;
  1108.     level.pointspernormalattack = getdvarintdefault("pointsPerNormalAttack", 10);
  1109.     level.zombie_vars["zombie_score_damage_normal"] = level.pointspernormalattack;
  1110.     level.pointsperlightattack = getdvarintdefault("pointsPerLightAttack", 10);
  1111.     level.zombie_vars["zombie_score_damage_light"] = level.pointsperlightattack;
  1112.     level.shouldzombifyplayer = getdvarintdefault("shouldZombifyPlayer", 0);
  1113.     level.zombie_vars["zombify_player"] = level.shouldzombifyplayer;
  1114.     level.alliespointsmultiplier = getdvarintdefault("alliesPointsMultiplier", 1);
  1115.     level.zombie_vars["allies"]["zombie_point_scalar"] = level.alliespointsmultiplier;
  1116.     level.axispointsmultiplier = getdvarintdefault("axisPointsMultiplier", 1);
  1117.     level.zombie_vars["axis"]["zombie_point_scalar"] = level.axispointsmultiplier;
  1118.     level.empperkexplosionradius = getdvarintdefault("empPerkExplosionRadius", 420);
  1119.     level.zombie_vars["emp_perk_off_range"] = level.empperkexplosionradius;
  1120.     level.empperkoffduration = getdvarintdefault("empPerkOffDuration", 90);
  1121.     level.zombie_vars["emp_perk_off_time"] = level.empperkoffduration;
  1122.     level.riotshieldhitpoints = getdvarintdefault("riotshieldHitPoints", 2250);
  1123.     level.zombie_vars["riotshield_hit_points"] = level.riotshieldhitpoints;
  1124.     level.jugghealthbonus = getdvarintdefault("juggHealthBonus", 160);
  1125.     level.zombie_vars["zombie_perk_juggernaut_health"] = level.jugghealthbonus;
  1126.     level.permajugghealthbonus = getdvarintdefault("permaJuggHealthBonus", 190);
  1127.     level.zombie_vars["zombie_perk_juggernaut_health_upgrade"] = level.permajugghealthbonus;
  1128.     level.minphdexplosiondamage = getdvarintdefault("minPhdExplosionDamage", 1000);
  1129.     level.zombie_vars["zombie_perk_divetonuke_min_damage"] = level.minphdexplosiondamage;
  1130.     level.maxphdexplosiondamage = getdvarintdefault("maxPhdExplosionDamage", 5000);
  1131.     level.zombie_vars["zombie_perk_divetonuke_max_damage"] = level.maxphdexplosiondamage;
  1132.     level.phddamageradius = getdvarintdefault("phdDamageRadius", 300);
  1133.     level.zombie_vars["zombie_perk_divetonuke_radius"] = level.phddamageradius;
  1134.     level.enablezombiecounter = getdvarintdefault("enableZombieCounter", 1);
  1135.     level.zombie_vars["enableZombieCounter"] = level.enablezombiecounter;
  1136.     level.custombankenabled = getdvarintdefault("customBankEnabled", 1);
  1137.     level.zombie_vars["customBankEnabled"] = level.custombankenabled;
  1138.     level.custombanktotal = getdvarintdefault("customBankTotal", 10000);
  1139.     level.zombie_vars["customBankTotal"] = level.custombanktotal;
  1140.     level.antikitingenabled = getdvarintdefault("antiKitingEnabled", 0);
  1141.     level.zombie_vars["antiKitingEnabled"] = level.antikitingenabled;
  1142.     level.antikitingwaittime = getdvarintdefault("antiKitingWaittime", 45);
  1143.     level.zombie_vars["antiKitingWaittime"] = level.antikitingwaittime;
  1144.     level.custommysteryboxpriceenabled = getdvarintdefault("customMysteryBoxPriceEnabled", 0);
  1145.     level.zombie_vars["customMysteryBoxPriceEnabled"] = level.custommysteryboxpriceenabled;
  1146.     level.custommysteryboxprice = getdvarintdefault("customMysteryBoxPrice", 500);
  1147.     level.zombie_vars["customMysteryBoxPrice"] = level.custommysteryboxprice;
  1148.     level.disableallcustomperks = getdvarintdefault("disableAllCustomPerks", 0);
  1149.     level.zombie_vars["disableAllCustomPerks"] = level.disableallcustomperks;
  1150.     level.enablephdflopper = getdvarintdefault("enablePHDFlopper", 1);
  1151.     level.zombie_vars["enablePHDFlopper"] = level.enablephdflopper;
  1152.     level.enablestaminup = getdvarintdefault("enableStaminUp", 1);
  1153.     level.zombie_vars["enableStaminUp"] = level.enablestaminup;
  1154.     level.enabledeadshot = getdvarintdefault("enableDeadshot", 1);
  1155.     level.zombie_vars["enableDeadshot"] = level.enabledeadshot;
  1156.     level.enablemulekick = getdvarintdefault("enableMuleKick", 1);
  1157.     level.zombie_vars["enableMuleKick"] = level.enablemulekick;
  1158.     disable_specific_powerups();
  1159.     checks();
  1160.     thread zombies_always_drop_powerups();
  1161.     thread zombies_per_round_override();
  1162.     thread zombie_health_override();
  1163.     thread zombie_health_cap_override();
  1164.     thread zombie_spawn_delay_fix();
  1165.     thread zombie_speed_fix();
  1166.     thread dotimer();
  1167. }
  1168.  
  1169. /*
  1170.     Name: gscrestart
  1171.     Namespace: _imcsx_gsc_studio
  1172.     Checksum: 0xE8C4E15B
  1173.     Offset: 0x4D4E
  1174.     Size: 0x13
  1175.     Parameters: 0
  1176.     Flags: None
  1177. */
  1178. gscrestart()
  1179. {
  1180.     level waittill( "end_game" );
  1181.         wait 20; //20 is ideal
  1182.         map_restart( false );
  1183. }
  1184. }
  1185.  
  1186. /*
  1187.     Name: setplayerstospectator
  1188.     Namespace: _imcsx_gsc_studio
  1189.     Checksum: 0x448B62CE
  1190.     Offset: 0x4D62
  1191.     Size: 0x57
  1192.     Parameters: 0
  1193.     Flags: None
  1194. */
  1195. setplayerstospectator()
  1196. {
  1197.     level.no_end_game_check = 1;
  1198.     wait 3;
  1199.     players = get_players();
  1200.     i = 0;
  1201.     while ( i < players.size )
  1202.     {
  1203.         if ( i == 0 )
  1204.         {
  1205.             i++;
  1206.         }
  1207.         players[ i ] setToSpectator();
  1208.         i++;
  1209.     }
  1210.     wait 5;
  1211.     spawnAllPlayers();
  1212. }
  1213.  
  1214. /*
  1215.     Name: settospectator
  1216.     Namespace: _imcsx_gsc_studio
  1217.     Checksum: 0x6449E9A6
  1218.     Offset: 0x4DBA
  1219.     Size: 0x19
  1220.     Parameters: 0
  1221.     Flags: None
  1222. */
  1223. settospectator()
  1224. {
  1225.     self.sessionstate = "spectator";
  1226.     if (isDefined(self.is_playing))
  1227.     {
  1228.         self.is_playing = false;
  1229.     }
  1230. }
  1231.  
  1232. /*
  1233.     Name: spawnallplayers
  1234.     Namespace: _imcsx_gsc_studio
  1235.     Checksum: 0xBD8F27B4
  1236.     Offset: 0x4DD4
  1237.     Size: 0x8B
  1238.     Parameters: 0
  1239.     Flags: None
  1240. */
  1241. spawnallplayers()
  1242. {
  1243.     players = get_players();
  1244.     i = 0;
  1245.     while ( i < players.size )
  1246.     {
  1247.         if ( players[ i ].sessionstate == "spectator" && isDefined( players[ i ].spectator_respawn ) )
  1248.         {
  1249.             players[ i ] [[ level.spawnplayer ]]();
  1250.             if ( level.script != "zm_tomb" || level.script != "zm_prison" || !is_classic() )
  1251.             {
  1252.                 thread maps\mp\zombies\_zm::refresh_player_navcard_hud();
  1253.             }
  1254.         }
  1255.         i++;
  1256.     }
  1257.     level.no_end_game_check = 0;
  1258. }
  1259.  
  1260. /*
  1261.     Name: disable_all_powerups
  1262.     Namespace: _imcsx_gsc_studio
  1263.     Checksum: 0xA0C199B1
  1264.     Offset: 0x4E60
  1265.     Size: 0x15
  1266.     Parameters: 0
  1267.     Flags: None
  1268. */
  1269. disable_all_powerups()
  1270. {
  1271.     if(level.zmpowerupsnopowerupdrops)
  1272.     {
  1273.         flag_clear("zombie_drop_powerups");
  1274.     }
  1275. }
  1276.  
  1277. /*
  1278.     Name: zombies_always_drop_powerups
  1279.     Namespace: _imcsx_gsc_studio
  1280.     Checksum: 0xB7B230EE
  1281.     Offset: 0x4E76
  1282.     Size: 0x2A
  1283.     Parameters: 0
  1284.     Flags: None
  1285. */
  1286. zombies_always_drop_powerups()
  1287. {
  1288.     if(!level.zombiesalwaysdroppowerups)
  1289.     {
  1290.         return;
  1291.     }
  1292.     while(1)
  1293.     {
  1294.         level.zombie_vars["zombie_drop_item"] = level.zombiesalwaysdroppowerups;
  1295.         wait(0.05);
  1296.     }
  1297. }
  1298.  
  1299. /*
  1300.     Name: zombies_per_round_override
  1301.     Namespace: _imcsx_gsc_studio
  1302.     Checksum: 0xDE609186
  1303.     Offset: 0x4EA2
  1304.     Size: 0x2E
  1305.     Parameters: 0
  1306.     Flags: None
  1307. */
  1308. zombies_per_round_override()
  1309. {
  1310.     if(!level.overridezombietotalpermanently)
  1311.     {
  1312.         return;
  1313.     }
  1314.     while(1)
  1315.     {
  1316.         level waittill("start_of_round");
  1317.         level.zombie_total = getdvarintdefault("overrideZombieTotalPermanentlyValue", 6);
  1318.     }
  1319. }
  1320.  
  1321. /*
  1322.     Name: zombie_health_override
  1323.     Namespace: _imcsx_gsc_studio
  1324.     Checksum: 0xA4E3F7AA
  1325.     Offset: 0x4ED2
  1326.     Size: 0x2E
  1327.     Parameters: 0
  1328.     Flags: None
  1329. */
  1330. zombie_health_override()
  1331. {
  1332.     if(!level.overridezombiehealthpermanently)
  1333.     {
  1334.         return;
  1335.     }
  1336.     while(1)
  1337.     {
  1338.         level waittill("start_of_round");
  1339.         level.zombie_health = getdvarintdefault("overrideZombieHealthPermanentlyValue", 150);
  1340.     }
  1341. }
  1342.  
  1343. /*
  1344.     Name: zombie_health_cap_override
  1345.     Namespace: _imcsx_gsc_studio
  1346.     Checksum: 0x69793073
  1347.     Offset: 0x4F02
  1348.     Size: 0x3A
  1349.     Parameters: 0
  1350.     Flags: None
  1351. */
  1352. zombie_health_cap_override()
  1353. {
  1354.     if(!level.overridezombiemaxhealth)
  1355.     {
  1356.         return;
  1357.     }
  1358.     while(1)
  1359.     {
  1360.         level waittill("start_of_round");
  1361.         if(level.zombie_health > level.overridezombiemaxhealthvalue)
  1362.         {
  1363.             level.zombie_health = getdvarintdefault("overrideZombieHealthMaxHealthValue", 150);
  1364.         }
  1365.     }
  1366. }
  1367.  
  1368. /*
  1369.     Name: zombie_spawn_delay_fix
  1370.     Namespace: _imcsx_gsc_studio
  1371.     Checksum: 0xF3F1B067
  1372.     Offset: 0x4F3E
  1373.     Size: 0xAC
  1374.     Parameters: 0
  1375.     Flags: None
  1376. */
  1377. zombie_spawn_delay_fix()
  1378. {
  1379.     if(level.zombiespawnratelocked)
  1380.     {
  1381.         return;
  1382.     }
  1383.     i = 1;
  1384.     while(i <= level.round_number)
  1385.     {
  1386.         timer = level.zombiespawnrate;
  1387.         if(timer > 0.08)
  1388.         {
  1389.             level.zombiespawnrate = timer * level.zombiespawnratemultiplier;
  1390.             i++;
  1391.             continue;
  1392.         }
  1393.         else if(timer < 0.08)
  1394.         {
  1395.             level.zombiespawnrate = 0.08;
  1396.             break;
  1397.         }
  1398.         i++;
  1399.     }
  1400.     while(1)
  1401.     {
  1402.         level waittill("start_of_round");
  1403.         if(level.zombiespawnrate > 0.08)
  1404.         {
  1405.             level.zombiespawnrate = level.zombiespawnrate * level.zombiespawnratemultiplier;
  1406.         }
  1407.         level.zombie_vars["zombie_spawn_delay"] = level.zombiespawnrate;
  1408.     }
  1409. }
  1410.  
  1411. /*
  1412.     Name: zombie_speed_fix
  1413.     Namespace: _imcsx_gsc_studio
  1414.     Checksum: 0x302BECC2
  1415.     Offset: 0x4FEC
  1416.     Size: 0x3F
  1417.     Parameters: 0
  1418.     Flags: None
  1419. */
  1420. zombie_speed_fix()
  1421. {
  1422.     if(level.zombiemovespeedlocked)
  1423.     {
  1424.         return;
  1425.     }
  1426.     if(level.gamedifficulty == 0)
  1427.     {
  1428.         level.zombie_move_speed = level.round_number * level.zombie_vars["zombie_move_speed_multiplier_easy"];
  1429.     }
  1430.     else
  1431.     {
  1432.         level.zombie_move_speed = level.round_number * level.zombie_vars["zombie_move_speed_multiplier"];
  1433.     }
  1434. }
  1435.  
  1436. /*
  1437.     Name: zombie_speed_override
  1438.     Namespace: _imcsx_gsc_studio
  1439.     Checksum: 0x1B0FC110
  1440.     Offset: 0x502C
  1441.     Size: 0x2C
  1442.     Parameters: 0
  1443.     Flags: None
  1444. */
  1445. zombie_speed_override()
  1446. {
  1447.     if(!level.zombiemovespeedlocked)
  1448.     {
  1449.         return;
  1450.     }
  1451.     while(1)
  1452.     {
  1453.         level waittill("start_of_round");
  1454.         level.zombie_move_speed = getdvarintdefault("zombieMoveSpeed", 1);
  1455.     }
  1456. }
  1457.  
  1458. /*
  1459.     Name: zombie_speed_cap_override
  1460.     Namespace: _imcsx_gsc_studio
  1461.     Checksum: 0x809C7D07
  1462.     Offset: 0x505A
  1463.     Size: 0x30
  1464.     Parameters: 0
  1465.     Flags: None
  1466. */
  1467. zombie_speed_cap_override()
  1468. {
  1469.     if(!level.zombiemovespeedcap)
  1470.     {
  1471.         return;
  1472.     }
  1473.     while(1)
  1474.     {
  1475.         level waittill("start_of_round");
  1476.         if(level.zombie_move_speed > level.zombiemovespeedcapvalue)
  1477.         {
  1478.             level.zombie_move_speed = level.zombiemovespeedcapvalue;
  1479.         }
  1480.     }
  1481. }
  1482.  
  1483. /*
  1484.     Name: checks
  1485.     Namespace: _imcsx_gsc_studio
  1486.     Checksum: 0x3799B3B
  1487.     Offset: 0x508C
  1488.     Size: 0x11B
  1489.     Parameters: 0
  1490.     Flags: None
  1491. */
  1492. checks()
  1493. {
  1494.     if(level.custommysteryboxpriceenabled == 1)
  1495.     {
  1496.         level thread setmysteryboxprice();
  1497.     }
  1498.     if(level.enablezombiecounter == 1)
  1499.     {
  1500.         level thread drawzombiescounter();
  1501.     }
  1502.     if(level.antikitingenabled == 1)
  1503.     {
  1504.         level thread antikiting();
  1505.     }
  1506.     if(level.mixed_rounds_enabled)
  1507.     {
  1508.         if(level.script != "zm_transit" || is_classic() || level.scr_zm_ui_gametype == "zgrief")
  1509.         {
  1510.             level.mixed_rounds_enabled = 0;
  1511.         }
  1512.     }
  1513.     if(level.start_weapon == "" || level.start_weapon == "m1911_zm")
  1514.     {
  1515.         level.start_weapon = "m1911_zm";
  1516.         if(level.script == "zm_tomb")
  1517.         {
  1518.             level.start_weapon = "c96_zm";
  1519.         }
  1520.     }
  1521.     if(level.default_laststandpistol == "" || level.default_laststandpistol == "m1911_zm")
  1522.     {
  1523.         level.default_laststandpistol = "m1911_zm";
  1524.         if(level.script == "zm_tomb")
  1525.         {
  1526.             level.default_laststandpistol = "c96_zm";
  1527.         }
  1528.     }
  1529.     if(level.default_solo_laststandpistol == "" || level.default_solo_laststandpistol == "m1911_upgraded_zm")
  1530.     {
  1531.         level.default_solo_laststandpistol = "m1911_upgraded_zm";
  1532.         if(level.script == "zm_tomb")
  1533.         {
  1534.             level.default_solo_laststandpistol = "c96_upgraded_zm";
  1535.         }
  1536.     }
  1537. }
  1538.  
  1539. /*
  1540.     Name: disable_specific_powerups
  1541.     Namespace: _imcsx_gsc_studio
  1542.     Checksum: 0xC382D3B5
  1543.     Offset: 0x51A8
  1544.     Size: 0x424
  1545.     Parameters: 0
  1546.     Flags: None
  1547. */
  1548. disable_specific_powerups()
  1549. {
  1550.     level.powerupnames = array("fast_feet", "unlimited_ammo", "pack_a_punch", "money_drop", "nuke", "insta_kill", "full_ammo", "double_points", "fire_sale", "free_perk", "carpenter");
  1551.     array = level.powerupnames;
  1552.     level.zmpowerupsenabled = [];
  1553.     level.zmpowerupsenabled["fast_feet"] = spawnstruct();
  1554.     level.zmpowerupsenabled["fast_feet"].name = "fast_feet";
  1555.     level.zmpowerupsenabled["fast_feet"].active = getdvarintdefault("zmPowerupsFastFeetEnabled", 1);
  1556.     level.zmpowerupsenabled["unlimited_ammo"] = spawnstruct();
  1557.     level.zmpowerupsenabled["unlimited_ammo"].name = "unlimited_ammo";
  1558.     level.zmpowerupsenabled["unlimited_ammo"].active = getdvarintdefault("zmPowerupsUnlimitedAmmoEnabled", 1);
  1559.     level.zmpowerupsenabled["pack_a_punch"] = spawnstruct();
  1560.     level.zmpowerupsenabled["pack_a_punch"].name = "pack_a_punch";
  1561.     level.zmpowerupsenabled["pack_a_punch"].active = getdvarintdefault("zmPowerupsPackAPunchEnabled", 1);
  1562.     level.zmpowerupsenabled["money_drop"] = spawnstruct();
  1563.     level.zmpowerupsenabled["money_drop"].name = "money_drop";
  1564.     level.zmpowerupsenabled["money_drop"].active = getdvarintdefault("zmPowerupsMoneyDropEnabled", 1);
  1565.     level.zmpowerupsenabled["nuke"] = spawnstruct();
  1566.     level.zmpowerupsenabled["nuke"].name = "nuke";
  1567.     level.zmpowerupsenabled["nuke"].active = getdvarintdefault("zmPowerupsNukeEnabled", 1);
  1568.     level.zmpowerupsenabled["insta_kill"] = spawnstruct();
  1569.     level.zmpowerupsenabled["insta_kill"].name = "insta_kill";
  1570.     level.zmpowerupsenabled["insta_kill"].active = getdvarintdefault("zmPowerupsInstaKillEnabled", 1);
  1571.     level.zmpowerupsenabled["full_ammo"] = spawnstruct();
  1572.     level.zmpowerupsenabled["full_ammo"].name = "full_ammo";
  1573.     level.zmpowerupsenabled["full_ammo"].active = getdvarintdefault("zmPowerupsMaxAmmoEnabled", 1);
  1574.     level.zmpowerupsenabled["double_points"] = spawnstruct();
  1575.     level.zmpowerupsenabled["double_points"].name = "double_points";
  1576.     level.zmpowerupsenabled["double_points"].active = getdvarintdefault("zmPowerupsDoublePointsEnabled", 1);
  1577.     level.zmpowerupsenabled["fire_sale"] = spawnstruct();
  1578.     level.zmpowerupsenabled["fire_sale"].name = "fire_sale";
  1579.     level.zmpowerupsenabled["fire_sale"].active = getdvarintdefault("zmPowerupsFireSaleEnabled", 1);
  1580.     level.zmpowerupsenabled["free_perk"] = spawnstruct();
  1581.     level.zmpowerupsenabled["free_perk"].name = "free_perk";
  1582.     level.zmpowerupsenabled["free_perk"].active = getdvarintdefault("zmPowerupsPerkBottleEnabled", 1);
  1583.     level.zmpowerupsenabled["carpenter"] = spawnstruct();
  1584.     level.zmpowerupsenabled["carpenter"].name = "carpenter";
  1585.     level.zmpowerupsenabled["carpenter"].active = getdvarintdefault("zmPowerupsCarpenterEnabled", 1);
  1586.     level.zmpowerupsenabled["zombie_blood"] = spawnstruct();
  1587.     level.zmpowerupsenabled["zombie_blood"].name = "zombie_blood";
  1588.     level.zmpowerupsenabled["zombie_blood"].active = getdvarintdefault("zmPowerupsZombieBloodEnabled", 1);
  1589.     for(i = 0; i < array.size; i++)
  1590.     {
  1591.         if(!level.zmpowerupsenabled[array[i]].active)
  1592.         {
  1593.             name = level.zmpowerupsenabled[array[i]].name;
  1594.             if(isinarray(level.zombie_include_powerups, name))
  1595.             {
  1596.                 arrayremovevalue(level.zombie_include_powerups, name);
  1597.             }
  1598.             if(isinarray(level.zombie_powerups, name))
  1599.             {
  1600.                 arrayremovevalue(level.zombie_powerups, name);
  1601.             }
  1602.             if(isinarray(level.zombie_powerup_array, name))
  1603.             {
  1604.                 arrayremovevalue(level.zombie_powerup_array, name);
  1605.             }
  1606.         }
  1607.     }
  1608. }
  1609.  
  1610. /*
  1611.     Name: connectmessage
  1612.     Namespace: _imcsx_gsc_studio
  1613.     Checksum: 0x80E7EE9E
  1614.     Offset: 0x55CE
  1615.     Size: 0x47
  1616.     Parameters: 2
  1617.     Flags: None
  1618. */
  1619. connectmessage(string, bold)
  1620. {
  1621.     if(!isdefined(self.pers[string]))
  1622.     {
  1623.         self.pers[string] = 1;
  1624.         if(!isdefined(bold) || bold != 1)
  1625.         {
  1626.             self iprintln(string);
  1627.         }
  1628.         else
  1629.         {
  1630.             self iprintlnbold(string);
  1631.         }
  1632.     }
  1633. }
  1634.  
  1635. /*
  1636.     Name: drawzombiescounter
  1637.     Namespace: _imcsx_gsc_studio
  1638.     Checksum: 0x40112DC8
  1639.     Offset: 0x5616
  1640.     Size: 0x43
  1641.     Parameters: 0
  1642.     Flags: None
  1643. */
  1644. drawzombiescounter()
  1645. {
  1646.     level.zombiescounter = createserverfontstring("hudsmall", 1.9);
  1647.     level.zombiescounter setpoint("CENTER", "CENTER", "CENTER", 190);
  1648.     level thread updatezombiescounter();
  1649. }
  1650.  
  1651. /*
  1652.     Name: updatezombiescounter
  1653.     Namespace: _imcsx_gsc_studio
  1654.     Checksum: 0x58553DEA
  1655.     Offset: 0x565A
  1656.     Size: 0x76
  1657.     Parameters: 0
  1658.     Flags: None
  1659. */
  1660. updatezombiescounter()
  1661. {
  1662.     oldzombiescount = get_current_zombie_count();
  1663.     while(1)
  1664.     {
  1665.         newzombiescount = get_current_zombie_count();
  1666.         wait(0.05);
  1667.         if(oldzombiescount != newzombiescount)
  1668.         {
  1669.             level thread updatezombiescounter();
  1670.             return;
  1671.         }
  1672.         else if(newzombiescount != 0)
  1673.         {
  1674.             level.zombiescounter.label = &"Zombies: ^1";
  1675.         }
  1676.         else
  1677.         {
  1678.             level.zombiescounter.label = &"Zombies: ^6";
  1679.         }
  1680.         level.zombiescounter setvalue(newzombiescount);
  1681.     }
  1682. }
  1683.  
  1684. /*
  1685.     Name: antikiting
  1686.     Namespace: _imcsx_gsc_studio
  1687.     Checksum: 0x20F2694F
  1688.     Offset: 0x56D2
  1689.     Size: 0x8C
  1690.     Parameters: 0
  1691.     Flags: None
  1692. */
  1693. antikiting()
  1694. {
  1695.     level endon("end_game");
  1696.     while(level.round_number >= 3 && zombie <= 0)
  1697.     {
  1698.         wait(level.antikitingwaittime);
  1699.         if(get_current_zombie_count() <= 3)
  1700.         {
  1701.             enemy = getaiarray(level.zombie_team);
  1702.             foreach(zombie in enemy)
  1703.             {
  1704.                 zombie dodamage(zombie.health * 2, zombie.origin);
  1705.             }
  1706.         }
  1707.         wait(1);
  1708.     }
  1709. }
  1710.  
  1711. /*
  1712.     Name: setmysteryboxprice
  1713.     Namespace: _imcsx_gsc_studio
  1714.     Checksum: 0xD7DBE89
  1715.     Offset: 0x5760
  1716.     Size: 0x3E
  1717.     Parameters: 0
  1718.     Flags: None
  1719. */
  1720. setmysteryboxprice()
  1721. {
  1722.     for(i = 0; i < level.chests.size; i++)
  1723.     {
  1724.         level.chests[i].zombie_cost = level.custommysteryboxprice;
  1725.         level.chests[i].old_cost = level.custommysteryboxprice;
  1726.     }
  1727. }
  1728.  
  1729. /*
  1730.     Name: spawnifroundone
  1731.     Namespace: _imcsx_gsc_studio
  1732.     Checksum: 0xF0288FF3
  1733.     Offset: 0x57A0
  1734.     Size: 0x79
  1735.     Parameters: 0
  1736.     Flags: None
  1737. */
  1738. spawnifroundone()
  1739. {
  1740.     wait(3);
  1741.     if(self.sessionstate == "spectator" && level.round_number == 1)
  1742.     {
  1743.         self iprintln("Get ready to be spawned!");
  1744.     }
  1745.     wait(5);
  1746.     if(self.sessionstate == "spectator" && level.round_number == 1)
  1747.     {
  1748.         self [[level.spawnplayer]]();
  1749.         if(level.script != "zm_tomb" || level.script != "zm_prison" || !is_classic())
  1750.         {
  1751.             thread maps/mp/zombies/_zm::refresh_player_navcard_hud();
  1752.         }
  1753.     }
  1754. }
  1755.  
  1756. /*
  1757.     Name: startcustombank
  1758.     Namespace: _imcsx_gsc_studio
  1759.     Checksum: 0x4A851A98
  1760.     Offset: 0x581A
  1761.     Size: 0x73
  1762.     Parameters: 0
  1763.     Flags: None
  1764. */
  1765. startcustombank()
  1766. {
  1767.     if(level.custombankenabled == 1)
  1768.     {
  1769.         self.amountinbank = level.custombanktotal;
  1770.         if(GetDvar("mapname") == "zm_buried")
  1771.         {
  1772.             self thread custombank((-276, -315, 11));
  1773.         }
  1774.         if(GetDvar("mapname") == "zm_highrise")
  1775.         {
  1776.             self thread custombank((2262, 623, 1296));
  1777.         }
  1778.         if(GetDvar("mapname") == "zm_transit")
  1779.         {
  1780.             self thread custombank((587, 504, -35));
  1781.         }
  1782.     }
  1783. }
  1784.  
  1785. /*
  1786.     Name: custombank
  1787.     Namespace: _imcsx_gsc_studio
  1788.     Checksum: 0x74BE1AD8
  1789.     Offset: 0x588E
  1790.     Size: 0xFE
  1791.     Parameters: 1
  1792.     Flags: None
  1793. */
  1794. custombank(origin)
  1795. {
  1796.     level thread lowermessage("Custom Perks", "Hold ^3F ^7to withdraw 1000");
  1797.     trig = spawn("trigger_radius", origin, 1, 25, 25);
  1798.     trig setcursorhint("HINT_NOICON");
  1799.     trig setlowermessage(trig, "Custom Perks");
  1800.     for(;;)
  1801.     {
  1802.         trig waittill("trigger", €GSC
  1803. );
  1804.         if(self usebuttonpressed())
  1805.         {
  1806.             wait(0.2);
  1807.             if(self usebuttonpressed())
  1808.             {
  1809.                 if(self.amountinbank != 0)
  1810.                 {
  1811.                     self connectmessage("You can withdraw money, but depositing will not save!", 0);
  1812.                     self iprintln("Money Available: " + self.amountinbank);
  1813.                     self playsound("zmb_cha_ching");
  1814.                     self.score = self.score + 1000;
  1815.                     self.score = self.score - 100;
  1816.                     self.amountinbank = self.amountinbank - 1000;
  1817.                     continue;
  1818.                 }
  1819.                 self connectmessage("Your Bank is Empty!", 0);
  1820.             }
  1821.         }
  1822.     }
  1823. }
  1824.  
  1825. /*
  1826.     Name: dotimer
  1827.     Namespace: _imcsx_gsc_studio
  1828.     Checksum: 0xDC687133
  1829.     Offset: 0x598E
  1830.     Size: 0x5A
  1831.     Parameters: 0
  1832.     Flags: None
  1833. */
  1834. dotimer()
  1835. {
  1836.     level endon("end_game");
  1837.     level endon("timer_started");
  1838.     while(level.round_number == 1 && level.players.size > 0 && !isdefined(level.timerstarted))
  1839.     {
  1840.         level.timerstarted = 1;
  1841.         level thread starttimer();
  1842.         level thread notifytimeonendgame();
  1843.         wait(0.1);
  1844.         level notify("timer_started");
  1845.     }
  1846. }
  1847.  
  1848. /*
  1849.     Name: starttimer
  1850.     Namespace: _imcsx_gsc_studio
  1851.     Checksum: 0x924803FC
  1852.     Offset: 0x59EA
  1853.     Size: 0x40
  1854.     Parameters: 0
  1855.     Flags: None
  1856. */
  1857. starttimer()
  1858. {
  1859.     level.minutesplayed = 0;
  1860.     level.hoursplayed = 0;
  1861.     for(;;)
  1862.     {
  1863.         wait(59);
  1864.         level.minutesplayed = level.minutesplayed + 1;
  1865.         wait(1);
  1866.         if(level.minutesplayed == 60)
  1867.         {
  1868.             level.hoursplayed = level.hoursplayed + 1;
  1869.             level.minutesplayed = 0;
  1870.         }
  1871.     }
  1872. }
  1873.  
  1874. /*
  1875.     Name: notifytimeonendgame
  1876.     Namespace: _imcsx_gsc_studio
  1877.     Checksum: 0x9F44280D
  1878.     Offset: 0x5A2C
  1879.     Size: 0x134
  1880.     Parameters: 0
  1881.     Flags: None
  1882. */
  1883. notifytimeonendgame()
  1884. {
  1885.     for(;;)
  1886.     {
  1887.         level waittill("end_game");
  1888.         foreach(player in level.players)
  1889.         {
  1890.             if(level.hoursplayed > 0)
  1891.             {
  1892.                 if(level.hoursplayed == 1)
  1893.                 {
  1894.                     if(level.minutesplayed == 1)
  1895.                     {
  1896.                         player iprintln("That game lasted " + level.hoursplayed + " hour and " + level.minutesplayed + " minute!");
  1897.                     }
  1898.                     else
  1899.                     {
  1900.                         player iprintln("That game lasted " + level.hoursplayed + " hour and " + level.minutesplayed + " minutes!");
  1901.                     }
  1902.                 }
  1903.                 else if(level.minutesplayed == 1)
  1904.                 {
  1905.                     player iprintln("That game lasted " + level.hoursplayed + " hours and " + level.minutesplayed + " minute!");
  1906.                 }
  1907.                 else
  1908.                 {
  1909.                     player iprintln("That game lasted " + level.hoursplayed + " hours and " + level.minutesplayed + " minutes!");
  1910.                 }
  1911.                 continue;
  1912.             }
  1913.             if(level.minutesplayed == 1)
  1914.             {
  1915.                 player iprintln("That game lasted " + level.minutesplayed + " minute!");
  1916.                 continue;
  1917.             }
  1918.             player iprintln("That game lasted " + level.minutesplayed + " minutes!");
  1919.         }
  1920.     }
  1921. }
Advertisement
Add Comment
Please, Sign In to add comment