Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #using scripts\codescripts\struct;
- #using scripts\shared\array_shared;
- #using scripts\shared\callbacks_shared;
- #using scripts\shared\clientfield_shared;
- #using scripts\shared\compass;
- #using scripts\shared\exploder_shared;
- #using scripts\shared\flag_shared;
- #using scripts\shared\laststand_shared;
- #using scripts\shared\math_shared;
- #using scripts\shared\scene_shared;
- #using scripts\shared\util_shared;
- #insert scripts\shared\shared.gsh;
- #insert scripts\shared\version.gsh;
- #insert scripts\zm\_zm_utility.gsh;
- #using scripts\zm\_load;
- #using scripts\zm\_zm;
- #using scripts\zm\_zm_audio;
- #using scripts\zm\_zm_powerups;
- #using scripts\zm\_zm_utility;
- #using scripts\zm\_zm_weapons;
- #using scripts\zm\_zm_zonemgr;
- #using scripts\shared\ai\zombie_utility;
- //Perks
- #using scripts\zm\_zm_pack_a_punch;
- #using scripts\zm\_zm_pack_a_punch_util;
- #using scripts\zm\_zm_perk_additionalprimaryweapon;
- #using scripts\zm\_zm_perk_doubletap2;
- #using scripts\zm\_zm_perk_deadshot;
- #using scripts\zm\_zm_perk_juggernaut;
- #using scripts\zm\_zm_perk_quick_revive;
- #using scripts\zm\_zm_perk_sleight_of_hand;
- #using scripts\zm\_zm_perk_staminup;
- #using scripts\zm\_zm_perk_electric_cherry;
- #using scripts\zm\_zm_perk_widows_wine;
- #using scripts\zm\_zm_perk_vulture_aid;
- #using scripts\zm\_zm_perk_whoswho;
- #using scripts\zm\_zm_perk_tombstone;
- #using scripts\zm\_zm_perk_phdflopper;
- #using scripts\zm\_zm_perk_wunderfizz;
- #using scripts\zm\_zm_perks;
- #insert scripts\zm\_zm_perks.gsh;
- //Powerups
- #using scripts\zm\_zm_powerup_double_points;
- #using scripts\zm\_zm_powerup_carpenter;
- #using scripts\zm\_zm_powerup_fire_sale;
- #using scripts\zm\_zm_powerup_free_perk;
- #using scripts\zm\_zm_powerup_full_ammo;
- #using scripts\zm\_zm_powerup_insta_kill;
- #using scripts\zm\_zm_powerup_nuke;
- //#using scripts\zm\_zm_powerup_weapon_minigun;
- //Traps
- #using scripts\zm\_zm_trap_electric;
- #using scripts\zm\zm_usermap;
- #using scripts\zm\zm_howl;
- #using scripts\_NSZ\nsz_powerup_bottomless_clip;
- #using scripts\_NSZ\nsz_powerup_money;
- #using scripts\_NSZ\nsz_powerup_time_warp;
- #using scripts\_ZK\zk_buyable_elevator;
- #using scripts\_NSZ\nsz_kino_teleporter;
- //*****************************************************************************
- // MAIN
- //*****************************************************************************
- function main()
- {
- level flag::set("power_on");
- level thread set_perk_limit(15); // This sets the perk limit to 10
- level thread new_zombie_speed();
- level thread intro_credits();
- level.zombie_powerup_weapon[ "minigun" ] = GetWeapon( "thundergun_upgraded" );
- level flag::set( "power_on" );
- level zm_perks::spare_change();
- level thread zk_buyable_elevator::init();
- level thread nsz_kino_teleporter::init();
- zm_usermap::main();
- level.default_laststandpistol = GetWeapon( "bo3_m1911" );
- level.default_solo_laststandpistol = GetWeapon( "bo3_m1911_upgraded" );
- level.laststandpistol = level.default_laststandpistol;
- level.start_weapon = level.default_laststandpistol;
- startingWeapon = "bo3_m1911";
- weapon = getWeapon(startingWeapon);
- level.start_weapon = (weapon);
- level._zombie_custom_add_weapons =&custom_add_weapons;
- //Setup the levels Zombie Zone Volumes
- level.zones = [];
- level.zone_manager_init_func =&usermap_test_zone_init;
- init_zones[0] = "start_zone";
- level thread zm_zonemgr::manage_zones( init_zones );
- thread soundEasterEggInit();
- thread zm_howl::howl_init();
- thread init_power();
- thread easter_egg();
- level.pathdist_type = PATHDIST_ORIGINAL;
- }
- function usermap_test_zone_init()
- {
- level flag::init( "always_on" );
- level flag::set( "always_on" );
- }
- function custom_add_weapons()
- {
- zm_weapons::load_weapon_spec_from_table("gamedata/weapons/zm/zm_levelcommon_weapons.csv", 1);
- }
- function set_perk_limit(num)
- {
- wait( 30 );
- level.perk_purchase_limit = num;
- }
- function new_zombie_speed()
- {
- level flag::wait_till( "initial_blackscreen_passed" );
- zombie_utility::set_zombie_var( "zombie_move_speed_multiplier", 75, false ); // Multiply by the round number to give the base speed value. 0-40 = walk, 41-70 = run, 71+ = sprint
- zombie_utility::set_zombie_var( "zombie_move_speed_multiplier_easy", 75, false ); // Multiply by the round number to give the base speed value. 0-40 = walk, 41-70 = run, 71+ = sprint
- level.zombie_move_speed = level.round_number * level.zombie_vars["zombie_move_speed_multiplier"];
- }
- function intro_credits()
- {
- thread creat_simple_intro_hud( "Storage Wherehouse", 50, 100, 3, 5 );
- thread creat_simple_intro_hud( "Unknown Location", 50, 75, 2, 5 );
- thread creat_simple_intro_hud( "Credits due to: NateSmithZombies, John Burnette, Partisan Executioner, Sniper Yam, Sammy Custom, Harrybo21, Frost Iceforge, DarkS0uls54, Snprym, Icky(LemursLemursLemurs, DTZxPorter, Scobalula, Ray1235, CanadianPro17th, Azsry, Collie)", 50, 50, 1, 3 );
- }
- function creat_simple_intro_hud( text, align_x, align_y, font_scale, fade_time )
- {
- hud = NewHudElem();
- hud.foreground = true;
- hud.fontScale = font_scale;
- hud.sort = 1;
- hud.hidewheninmenu = false;
- hud.alignX = "left";
- hud.alignY = "bottom";
- hud.horzAlign = "left";
- hud.vertAlign = "bottom";
- hud.x = align_x;
- hud.y = hud.y - align_y;
- hud.alpha = 1;
- hud SetText( text );
- wait( 8 );
- hud fadeOverTime( fade_time );
- hud.alpha = 0;
- wait( fade_time );
- hud Destroy();
- }
- function init_power()
- {
- level flag::wait_till("power_on");
- level util::set_lighting_state(3);
- }
- function soundEasterEggInit()
- {
- level.soundEasterEgg = 0;
- level.playEasterEgg = 3;
- level.playSoundLocation = GetEnt("easter_egg_sound_location", "SpookySkeletons"); // Create a script origin and set it to server, not client, then give it this targetname
- thread shoot1();
- thread shoot2();
- thread shoot3();
- }
- function shoot1()
- {
- shoot_trig1 = GetEnt("egg_shoot1", "targetname");
- shoot_trig1 waittill("trigger", player);
- shoot_model1 = GetEnt("shoot_model1", "targetname");
- shoot_model1 delete();
- level.soundEasterEgg++;
- thread finishedEasterEgg();
- shoot_trig1 delete();
- }
- function shoot2()
- {
- shoot_trig2 = GetEnt("egg_shoot2", "targetname");
- shoot_trig2 waittill("trigger", player);
- shoot_model2 = GetEnt("shoot_model2", "targetname");
- shoot_model2 delete();
- level.soundEasterEgg++;
- thread finishedEasterEgg();
- shoot_trig2 delete();
- }
- function shoot3()
- {
- shoot_trig3 = GetEnt("egg_shoot3", "targetname");
- shoot_trig3 waittill("trigger", player);
- shoot_model3 = GetEnt("shoot_model3", "targetname");
- shoot_model3 delete();
- level.soundEasterEgg++;
- thread finishedEasterEgg();
- shoot_trig3 delete();
- }
- function finishedEasterEgg()
- {
- if(level.soundEasterEgg >= level.playEasterEgg)
- {
- IPrintLnBold("Congratulations!");
- level.playSoundLocation PlaySound("song_easter_egg1"); // Change "sephiroth" to the name of your soundalias.
- players = GetPlayers();
- for (i = 0;i<players.size;i++)
- {
- players[i] PlayLocalSound( "song_easter_egg1");
- }
- }
- }
- function checkForPower()
- {
- level util::set_lighting_state(0); /* set lighting state to [1] in Radiant (by default) */
- level waittill("power_on");
- level util::set_lighting_state(1); /* set lighting state to [2] in Radiant (turn lights on) */
- }
- function easter_egg()
- {
- level.reward = "door"; //what happens when you place the objects. Right now, options are: ("door","powerup","gun")
- level.reward_2 = "gun"; //add another reward if you want. just say "false" or delete the line if you don't want an extra reward.
- level.reward_3 = "false"; //add yet another reward if you want. Note that you cannot do more than one of the same reward.
- level.powerup_type = "random"; //if using a powerup as one of your rewards, this is what type. can be ("full_ammo","nuke","insta_kill","free_perk","fire_sale","double_points","carpenter","minigun",and "random")
- level.reward_weapons = array( "ar_damage", "lmg_cqb", "shotgun_pump", "smg_versatile" ); //weapons it can give you in the "gun" reward. put as many or as little as you like.
- level.gun_expire = true; //whether or not the gun will go away in time.
- level.delete_door_after_move = "true"; //set "true" to delete the door after its done moving. Would recommend if it won't be seen.
- level.gun_hintstring = "Press ^3[{+activate}]^7 to take weapon"; //if gun reward is activated, hintstring for picking up gun.
- level.one_gun_per_player = "true"; //for gun powerup, set "true" if you want a gun to spawn for each player, "false" for just one gun no matter what.
- level.different_guns_per_player = "false"; //for gun powerup, set "true" if you want each gun to be randomly different, false if you want them to be the same random gun. if one_gun_per_player = "false" this doesn't matter.
- level.place_the_objects = "true"; //whether or not you have to place the objects ("true") or just collect them ("false") to get the reward.
- level.trigger_hintstring = "Press ^3[{+activate}]^7 to pickup object"; //hintstring for picking up objects. If you don't want a hintstring for picking up objects delete this entire line.
- level.trigger_place_hintstring = "Press ^3[{+activate}]^7 to place objects"; //hintstring for placing objects after collecting all of them. If you don't want a hintstring for placing objects delete this entire line.
- level.placed_objects = GetEntArray("placed_object","targetname");
- if(isdefined(level.placed_objects))
- {
- for(i=0;i<level.placed_objects.size;i++)
- {
- level.placed_objects[i] Hide();
- }
- trig_place = GetEnt("trig_place","targetname");
- trig_place SetCursorHint( "HINT_NOICON" );
- trig_place SetHintString("");
- }
- level.objects_picked_up = 0;
- level.objects = GetEntArray("easter_egg_object","targetname");
- for(i=0;i<level.objects.size;i++)
- {
- level.objects[i] thread wait_for_pickup();
- }
- }
- function wait_for_pickup()
- {
- trig = GetEnt(self.target,"targetname");
- trig SetCursorHint( "HINT_NOICON" );
- if(isdefined(level.trigger_hintstring))
- trig SetHintString(level.trigger_hintstring);
- trig waittill("trigger",player);
- self Delete();
- trig Delete();
- level.objects_picked_up ++;
- if(level.objects_picked_up == level.objects.size)
- {
- if(level.place_the_objects == true)
- {
- trig_place = GetEnt("trig_place","targetname");
- trig_place SetCursorHint( "HINT_NOICON" );
- if(isDefined(level.trigger_place_hintstring))
- trig_place SetHintString(level.trigger_place_hintstring);
- trig_place waittill("trigger",player);
- if(isdefined(level.placed_objects))
- {
- for(i=0;i<level.placed_objects.size;i++)
- {
- level.placed_objects[i] Show();
- }
- }
- }
- reward();
- }
- }
- function reward()
- {
- if(level.reward == "door" || level.reward_2 == "door" || level.reward_3 == "door")
- {
- time = 2; //2 is amount of time in seconds door takes to move.
- door_parts = GetEntArray("easter_egg_door","targetname");
- for(i=0;i<door_parts.size;i++)
- {
- if(isdefined(door_parts[i].target))
- door_parts[i] MoveTo(door_parts[i].target.origin, time);
- if(isdefined(door_parts[i].script_vector))
- door_parts[i] MoveTo(door_parts[i].origin + (door_parts[i].script_vector), time);
- }
- wait(time);
- if(level.delete_door_after_move == true)
- {
- for(i=0;i<door_parts.size;i++)
- {
- if(isdefined(doors_parts[i].target))
- door_parts[i].target Delete();
- door_parts[i] Delete();
- }
- }
- }
- if(level.reward == "powerup" || level.reward_2 == "powerup" || level.reward_3 == "powerup")
- {
- powerup_struct = GetEnt("powerup_struct","targetname");
- if(level.powerup_type != "random")
- thread zm_powerups::specific_powerup_drop( level.powerup_type, powerup_struct.origin);
- if(level.powerup_type == "random")
- {
- rand = RandomIntRange( 0, 7 ); //("full_ammo","nuke","insta_kill","free_perk","fire_sale","double_points","carpenter","minigun")
- if(rand == 0)
- thread zm_powerups::specific_powerup_drop( "full_ammo", powerup_struct.origin);
- if(rand == 1)
- thread zm_powerups::specific_powerup_drop( "nuke", powerup_struct.origin);
- if(rand == 2)
- thread zm_powerups::specific_powerup_drop( "insta_kill", powerup_struct.origin);
- if(rand == 3)
- thread zm_powerups::specific_powerup_drop( "free_perk", powerup_struct.origin);
- if(rand == 4)
- thread zm_powerups::specific_powerup_drop( "fire_sale", powerup_struct.origin);
- if(rand == 5)
- thread zm_powerups::specific_powerup_drop( "double_points", powerup_struct.origin);
- if(rand == 6)
- thread zm_powerups::specific_powerup_drop( "carpenter", powerup_struct.origin);
- if(rand == 7)
- thread zm_powerups::specific_powerup_drop( "minigun", powerup_struct.origin);
- }
- }
- if(level.reward == "gun" || level.reward_2 == "gun" || level.reward_3 == "gun")
- {
- if(level.one_gun_per_player == false)
- gun_struct = struct::get("gun_struct","targetname");
- thread RewardGun(gun_struct.origin+(0,0,40), array::randomize(level.reward_weapons)[0]);
- if(level.one_gun_per_player == true && level.different_guns_per_player == true)
- {
- gun_structs = struct::get_array("gun_struct","targetname");
- for(i=0;i<level.players.size;i++)
- {
- thread RewardGun(gun_structs[i].origin+(0,0,40), array::randomize(level.reward_weapons)[0]);
- }
- }
- if(level.one_gun_per_player == true && level.different_guns_per_player == false)
- {
- rand = RandomIntRange( 0, level.reward_weapons.size );
- gun_structs = struct::get_array("gun_struct","targetname");
- for(i=0;i<level.players.size;i++)
- {
- thread RewardGun(gun_structs[i].origin+(0,0,40), level.reward_weapons[rand]);
- }
- }
- }
- }
- function RewardGun(pos, weapon)
- {
- gun = spawn("script_model", pos);
- playsoundatposition("zmb_spawn_powerup", pos);
- gun SetModel(GetWeaponWorldModel(GetWeapon(weapon)));
- PlayFX(level._effect["powerup_grabbed_solo"], gun.origin);
- trig = spawn("trigger_radius", gun.origin, 0, 20, 50);
- gun thread SpinMe();
- gun thread GiveMe(weapon, trig);
- if(level.gun_expire == true)
- gun thread LifeTime(trig);
- }
- function LifeTime(trig)
- {
- self endon("death");
- wait(120);//wait 2 minutes then delete
- if(isdefined(self))
- {
- self notify("rewardgun_delete");
- }
- if(isdefined(trig))
- {
- trig delete();
- }
- if(isdefined(self))
- {
- self delete();
- }
- }
- function GiveMe(weapon, trig)
- {
- self endon("rewardgun_delete");
- while(1)
- {
- trig waittill("trigger", player);
- player thread SetGunHint(level.gun_hintstring, trig);
- if(player HasWeapon(getweapon("minigun")))
- {
- continue;
- }
- if(!(player UseButtonPressed()))
- {
- continue;
- }
- if(player laststand::player_is_in_laststand())
- {
- continue;
- }
- trig delete();
- self delete();
- player zm_weapons::weapon_give(getweapon(weapon));
- player SwitchToWeapon(getweapon(weapon));
- break;
- wait(.1);
- }
- }
- function SpinMe()
- {
- self endon("rewardgun_delete");
- self endon("death");
- while(isdefined(self))
- {
- if(isdefined(self))
- {
- self rotateyaw(360,2);
- }
- wait(1.9);
- }
- }
- function SetGunHint(text, trig)
- {
- if(isdefined(self.grow_soul_hud))
- {
- return;
- }
- self.grow_soul_hud = NewClientHudElem( self );
- self.grow_soul_hud.horzAlign = "center";
- self.grow_soul_hud.vertAlign = "middle";
- self.grow_soul_hud.alignX = "center";
- self.grow_soul_hud.alignY = "middle";
- self.grow_soul_hud.foreground = 1;
- self.grow_soul_hud.fontscale = 1;
- self.grow_soul_hud.alpha = 1;
- self.grow_soul_hud.color = ( 0.44, .74, .94 );
- self.grow_soul_hud SetText(text);
- while(isdefined(trig) && self IsTouching(trig))
- {
- wait(.05);
- }
- self.grow_soul_hud SetText("");
- self.grow_soul_hud Destroy();
- self.grow_soul_hud = undefined;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement