Skip to content
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Donate
Collapse

Plutonium

  1. Home
  2. WAW Modding Releases & Resources
  3. [ZM][RELEASE] Shi no numa first box + timer + movement speed patch

[ZM][RELEASE] Shi no numa first box + timer + movement speed patch

Scheduled Pinned Locked Moved WAW Modding Releases & Resources
10 Posts 7 Posters 2.1k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • AlexInVrundefined Offline
    AlexInVrundefined Offline
    AlexInVr
    wrote on last edited by AlexInVr
    #1

    Again, another First box patch by your fav waw modder 😄

    This release adds a timer synchronized with the game without the need for external software

    it also fixes the movement speed to be the same as console

    #include maps\_utility;
    #include common_scripts\utility;
    #include maps\_zombiemode_utility;
    
    //First Box by twitch.tv/AlexInVR
    
    init()
    {
    	 replacefunc(maps\_zombiemode_weapons::treasure_chest_ChooseRandomWeapon, ::custom_treasure_chest_ChooseRandomWeapon);
    	 replacefunc(maps\_zombiemode_weapons::treasure_chest_weapon_spawn, ::custom_treasure_chest_weapon_spawn);
    	 replacefunc(maps\_zombiemode_weapons_sumpf::treasure_chest_ChooseRandomWeapon, ::custom_treasure_chest_ChooseRandomWeapon);
    	 replacefunc(maps\_zombiemode_weapons_sumpf::treasure_chest_weapon_spawn, ::custom_treasure_chest_weapon_spawn);
    	replacefunc(maps\_zombiemode::round_think, ::custom_round_think);
    	thread onConnect();
       
    }
    
    onConnect()
    {
    	for(;;)
    	{
    		level waittill( "connecting", player );
    		player thread onPlayerSpawned();
    	}
    }
    
    
    custom_round_think()
    {
    	for( ;; )
    	{
    		level.round_spawn_func = maps\_zombiemode::round_spawning;
    		//////////////////////////////////////////
    		//designed by prod DT#36173
    		maxreward = 50 * level.round_number;
    		if ( maxreward > 500 )
    			maxreward = 500;
    		level.zombie_vars["rebuild_barrier_cap_per_round"] = maxreward;
    		//////////////////////////////////////////
    
    		level.round_timer = level.zombie_vars["zombie_round_time"]; 
    		
    		add_later_round_spawners();
    
    		maps\_zombiemode::chalk_one_up();
    		//		round_text( &"ZOMBIE_ROUND_BEGIN" );
    
    		maps\_zombiemode_powerups::powerup_round_start();
    
    		players = get_players();
    		array_thread( players, maps\_zombiemode_blockers::rebuild_barrier_reward_reset );
    
    		level thread maps\_zombiemode::award_grenades_for_survivors();
    
    		level.round_start_time = getTime();
    		level thread [[level.round_spawn_func]]();
    		level notify("start_of_round");
    
    		maps\_zombiemode::round_wait(); 
    		level.first_round = false;
    		level notify("end_of_round");
    
    		level thread maps\_zombiemode::spectators_respawn();
    
    		//		round_text( &"ZOMBIE_ROUND_END" );
    		level thread maps\_zombiemode::chalk_round_hint();
    
    		wait( level.zombie_vars["zombie_between_round_time"] ); 
    
    		// here's the difficulty increase over time area
    		timer = level.zombie_vars["zombie_spawn_delay"];
    
    		if( timer < 0.08 )
    		{
    			timer = 0.08; 
    		}	
    
    		level.zombie_vars["zombie_spawn_delay"] = timer * 0.95;
    
    		// Increase the zombie move speed
    		level.zombie_move_speed = level.round_number * 8;
    
    		level.round_number++;
    
    		level notify( "between_round_over" );
    	}
    }
    
    custom_treasure_chest_ChooseRandomWeapon(player)
    {
        	if (level.round_number <= 15){
    			if (!(player HasWeapon("tesla_gun"))){
    				return "tesla_gun";
    			}
    
    			if (!(player HasWeapon("zombie_ppsh"))){
    				return "zombie_ppsh";
    			}
    		} else {
    			keys = GetArrayKeys( level.zombie_weapons );
    
    	// Filter out any weapons the player already has
    	filtered = [];
    	for( i = 0; i < keys.size; i++ )
    	{
    		if( player HasWeapon( keys[i] ) )
    		{
    			continue;
    		}
    				
    		//chrisP - make sure the chest doesn't give the player a bouncing betty
    		if(keys[i] == "mine_bouncing_betty")
    		{
    			continue;
    		}
    
    		// PI_CHANGE_BEGIN
    		if( isDefined(level.script) && level.script == "nazi_zombie_sumpf")
    		{
    			//make sure box moves once before allowing ray gun to be accessed.
    			if( level.box_moved == false )
    			{
    				if( keys[i] == "ray_gun" )
    				{
    					continue;
    				}
    			}
    		}
    		// PI_CHANGE_END
    		
    		if( !IsDefined( keys[i] ) )
    			continue;
    
    		filtered[filtered.size] = keys[i];
    	}
    	
    	// PI_CHANGE_BEGIN - adjusting the percentages of the ray gun and tesla gun showing up 
    	if( isDefined(level.script) && level.script == "nazi_zombie_sumpf" )
    	{	
    		if( level.box_moved == true )
    		{	
    			if( !(player HasWeapon( "ray_gun" )) )
    			{
    				// increase the percentage of ray gun
    				if( isDefined( level.pulls_since_last_ray_gun ) )
    				{
    					// after 12 pulls the ray gun percentage increases to 15%
    					
    					if( level.pulls_since_last_ray_gun > 11 )
    					{
    						// calculate the number of times we have to add it to the array to get the desired percent
    						number_to_add = .15 * filtered.size;
    						for(i=1; i<number_to_add; i++)
    						{
    							filtered[filtered.size] = "ray_gun";
    						}				
    					}			
    					// after 8 pulls the Ray Gun percentage increases to 10%
    					else if( level.pulls_since_last_ray_gun > 7 )
    					{
    						// calculate the number of times we have to add it to the array to get the desired percent
    						number_to_add = .1 * filtered.size;
    						for(i=1; i<number_to_add; i++)
    						{
    							filtered[filtered.size] = "ray_gun";
    						}				
    					}				
    				}
    			}
    		}
    			
    		// increase the percentage of tesla gun
    		if( isDefined( level.pulls_since_last_tesla_gun ) )
    		{
    			// player has dropped the tesla for another weapon, so we set all future polls to 20%
    			if( isDefined(level.player_drops_tesla_gun) && level.player_drops_tesla_gun == true )
    			{						
    				// calculate the number of times we have to add it to the array to get the desired percent
    				number_to_add = .2 * filtered.size;
    				for(i=1; i<number_to_add; i++)
    				{
    					filtered[filtered.size] = "tesla_gun";
    				}				
    			}
    			
    			// player has not seen tesla gun in late rounds
    			if( !isDefined(level.player_seen_tesla_gun) || level.player_seen_tesla_gun == false )
    			{
    
    				// after round 10 the Tesla gun percentage increases to 20%
    				if( level.round_number > 10 )
    				{
    					// calculate the number of times we have to add it to the array to get the desired percent
    					number_to_add = .2 * filtered.size;
    					for(i=1; i<number_to_add; i++)
    					{
    						filtered[filtered.size] = "tesla_gun";
    					}				
    				}		
    				// after round 5 the Tesla gun percentage increases to 15%
    				else if( level.round_number > 5 )
    				{
    					// calculate the number of times we have to add it to the array to get the desired percent
    					number_to_add = .15 * filtered.size;
    					for(i=1; i<number_to_add; i++)
    					{
    						filtered[filtered.size] = "tesla_gun";
    					}				
    				}						
    			}
    		}
    	}
    	// PI_CHANGE_END	
    
    	// Filter out the limited weapons
    	if( IsDefined( level.limited_weapons ) )
    	{
    		keys2 = GetArrayKeys( level.limited_weapons );
    		players = get_players();
    		for( q = 0; q < keys2.size; q++ )
    		{
    			count = 0;
    			for( i = 0; i < players.size; i++ )
    			{
    				if( players[i] HasWeapon( keys2[q] ) )
    				{
    					count++;
    				}
    
    				// check for last stand weapons that might not be on the player at the time
    				if (players[i] maps\_laststand::player_is_in_laststand())
    				{
    					for( m = 0; m < players[i].weaponInventory.size; m++ )
    					{
    						if (players[i].weaponInventory[m] == keys2[q])
    						{
    							count++;
    						}
    					}
    				}
    			}
    
    			if( count == level.limited_weapons[keys2[q]] )
    			{
    				filtered = array_remove( filtered, keys2[q] );
    			}
    		}
    	}
    
    	return filtered[RandomInt( filtered.size )];
    		}
    }
    
    custom_treasure_chest_weapon_spawn( chest, player )
    {
    	assert(IsDefined(player));
    	// spawn the model
    	model = spawn( "script_model", self.origin ); 
    	model.angles = self.angles +( 0, 90, 0 );
    
    	floatHeight = 40;
    
    	//move it up
    	model moveto( model.origin +( 0, 0, floatHeight ), 3, 2, 0.9 ); 
    
    	// rotation would go here
    
    	// make with the mario kart
    	modelname = undefined; 
    	rand = undefined; 
    	for( i = 0; i < 40; i++ )
    	{
    
    		if( i < 20 )
    		{
    			wait( 0.05 ); 
    		}
    		else if( i < 30 )
    		{
    			wait( 0.1 ); 
    		}
    		else if( i < 35 )
    		{
    			wait( 0.2 ); 
    		}
    		else if( i < 38 )
    		{
    			wait( 0.3 ); 
    		}
    
    		rand = custom_treasure_chest_ChooseRandomWeapon( player );
    		
    		/#
    			if( maps\_zombiemode_tesla::tesla_gun_exists() )	
    			{
    				if ( i == 39 && GetDvar( "scr_spawn_tesla" ) != "" )
    				{
    					SetDvar( "scr_spawn_tesla", "" );
    					rand = "tesla_gun";
    				}
    			}
    		#/
    		
    		modelname = GetWeaponModel( rand );
    		model setmodel( modelname ); 
    
    
    	}
    
    	self.weapon_string = rand; // here's where the org get it's weapon type for the give function
    
    	// random change of getting the joker that moves the box
    	random = Randomint(100);
    
    
    	//increase the chance of joker appearing from 0-100 based on amount of the time chest has been opened.
    	if(level.script != "nazi_zombie_prototype" && getdvar("magic_chest_movable") == "1")
    	{
    
    		if(level.chest_accessed < 4)
    		{		
    			// PI_CHANGE_BEGIN - JMA - RandomInt(100) can return a number between 0-99.  If it's zero and chance_of_joker is zero
    			//									we can possibly have a teddy bear one after another.
    			chance_of_joker = -1;
    			// PI_CHANGE_END
    		}
    		else
    		{
    			chance_of_joker = level.chest_accessed + 20;
    			
    			// PI_CHANGE_BEGIN - JMA 
    			if( isDefined(level.script) && level.script == "nazi_zombie_sumpf" )
    			{
    				// make sure teddy bear appears on the 8th pull if it hasn't moved from the attic
    				if( (!isDefined(level.magic_box_first_move) || level.magic_box_first_move == false ) && level.chest_accessed >= 8)
    				{
    					chance_of_joker = 100;
    				}
    				
    				// pulls 4 thru 8, there is a 15% chance of getting the teddy bear
    				// NOTE:  this happens in all cases
    				if( level.chest_accessed >= 4 && level.chest_accessed < 8 )
    				{
    					if( random < 15 )
    					{
    						chance_of_joker = 100;
    					}
    					else
    					{
    						chance_of_joker = -1;
    					}
    				}
    				
    				// after the first magic box move the teddy bear percentages changes
    				if( isDefined(level.magic_box_first_move) && level.magic_box_first_move == true )
    				{
    					// between pulls 8 thru 12, the teddy bear percent is 30%
    					if( level.chest_accessed >= 8 && level.chest_accessed < 13 )
    					{
    						if( random < 30 )
    						{
    							chance_of_joker = 100;
    						}
    						else
    						{
    							chance_of_joker = -1;
    						}
    					}
    					
    					// after 12th pull, the teddy bear percent is 50%
    					if( level.chest_accessed >= 13 )
    					{
    						if( random < 50 )
    						{
    							chance_of_joker = 100;
    						}
    						else
    						{
    							chance_of_joker = -1;
    						}
    					}
    				}
    			}					
    			// PI_CHANGE_END
    		}
    
    		if (random <= chance_of_joker)
    		{
    			model SetModel("zombie_teddybear");
    		//	model rotateto(level.chests[level.chest_index].angles, 0.01);
    			//wait(1);
    			model.angles = self.angles;		
    			wait 1;
    			flag_set("moving_chest_now");
    			level.chest_accessed = 0;
    
    			player maps\_zombiemode_score::add_to_player_score( 950 );
    
    			//allow power weapon to be accessed.
    			level.box_moved = true;
    
    
    		}
    
    	}
    
    	self notify( "randomization_done" );
    
    	if (flag("moving_chest_now"))
    	{
    		wait .5;	// we need a wait here before this notify
    		level notify("weapon_fly_away_start");
    		wait 2;
    		model MoveZ(500, 4, 3);
    		model waittill("movedone");
    		model delete();
    		self notify( "box_moving" );
    		level notify("weapon_fly_away_end");
    	}
    	else
    	{
    		
    		//turn off power weapon, since player just got one
    		if( rand == "tesla_gun" || rand == "ray_gun" )
    		{
    			// PI_CHANGE_BEGIN - JMA - reset the counters for tesla gun and ray gun pulls
    			if( isDefined( level.script ) && level.script == "nazi_zombie_sumpf" )
    			{
    				if( rand == "ray_gun" )
    				{
    					level.box_moved = false;
    					level.pulls_since_last_ray_gun = 0;
    				}
    				
    				if( rand == "tesla_gun" )
    				{
    					level.pulls_since_last_tesla_gun = 0;
    					level.player_seen_tesla_gun = true;
    				}			
    			}
    			else
    			{
    				level.box_moved = false;
    			}
    			// PI_CHANGE_END			
    		}
    
    		model thread timer_til_despawn(floatHeight);
    		self waittill( "weapon_grabbed" );
    
    		if( !chest.timedOut )
    		{
    			model Delete();
    		}
    
    
    	}
    }
    
    timer_til_despawn(floatHeight)
    {
    
    
    	// SRS 9/3/2008: if we timed out, move the weapon back into the box instead of deleting it
    	putBackTime = 12;
    	self MoveTo( self.origin - ( 0, 0, floatHeight ), putBackTime, ( putBackTime * 0.5 ) );
    	wait( putBackTime );
    
    	if(isdefined(self))
    	{	
    		self Delete();
    	}
    }
    
    game_timer()
    {	
    	hud = create_simple_hud( self );
    	hud.foreground = true; 
    	hud.sort = 1; 
    	hud.hidewheninmenu = true; 
    	hud.alignX = "left"; 
    	hud.alignY = "top";
    	hud.horzAlign = "user_left"; 
    	hud.vertAlign = "user_top";
    	hud.x = hud.x - -700; 
    	hud.y = hud.y + 35; 
    	hud.alpha = 1;
    	flag_wait("all_players_spawned");
    	hud setTimerUp(1);
    }
    
    round_timer()
    {	
    	timerHud = create_simple_hud( self );
    	timerHud.foreground = true; 
    	timerHud.sort = 1; 
    	timerHud.hidewheninmenu = true; 
    	timerHud.alignX = "left"; 
    	timerHud.alignY = "top";
    	timerHud.horzAlign = "user_left"; 
    	timerHud.vertAlign = "user_top";
    	timerHud.x = timerHud.x - -700; 
    	timerHud.y = timerHud.y + 45;
    	timerHud.color =  (1, 0, 0);
    	timerHud.alpha = 1;
    	flag_wait("all_players_spawned");
    	for (;;){
    		start_time = GetTime() / 1000;
    		timerHud setTimerUp(0);
    		level waittill("end_of_round");
    		end_time = GetTime() / 1000;
    		time = end_time - start_time;
    		set_time_frozen(timerHud, time); 
    	}
    	
    }
    
    set_time_frozen(hud, time)
    {
    	level endon("start_of_round");
    	time = time - 0.1;
    	while(1)
    	{
    		hud settimer(time);
    		wait(0.5);
    	}
    }
    
    onPlayerSpawned()
    {
    	self endon( "disconnect" ); 
    
    	for( ;; )
    	{
    		
    		level waittill( "connected", player ); 
    		self thread game_timer();
    		self thread round_timer();
    		self SetClientDvars( 
    			"player_backSpeedScale", "1", 
    			"player_strafeSpeedScale", "1");
    		
    		wait 3;
    
    		self IPrintLnBold("First box patch by ^1twitch.tv/^2AlexInVR");
    	}
    	level waittill( "connected", player ); 
    	
    }  
    

    pic of what it looks like upon spawning in the game.

    download (9).jpg
    download (3).jpg

    download (4).jpg

    download (5).jpg

    kamthescholarundefined 1 Reply Last reply
    2
    • A Former User? Offline
      A Former User? Offline
      A Former User
      wrote on last edited by
      #2

      Hey can you maybe make one without the first box patch?

      And how do i add this code to the game?

      AlexInVrundefined 1 Reply Last reply
      0
      • AlexInVrundefined Offline
        AlexInVrundefined Offline
        AlexInVr
        wrote on last edited by
        #3

        UPDATE: 2/3/2023 3:34PM

        • Implemented timer in a better way to make sure the game stays stable

        • Implemented round timer

        1 Reply Last reply
        0
        • A Former User? A Former User

          Hey can you maybe make one without the first box patch?

          And how do i add this code to the game?

          AlexInVrundefined Offline
          AlexInVrundefined Offline
          AlexInVr
          wrote on last edited by
          #4

          @frost_EU I will update the post with a no first box version

          1 Reply Last reply
          0
          • AlexInVrundefined AlexInVr

            Again, another First box patch by your fav waw modder 😄

            This release adds a timer synchronized with the game without the need for external software

            it also fixes the movement speed to be the same as console

            #include maps\_utility;
            #include common_scripts\utility;
            #include maps\_zombiemode_utility;
            
            //First Box by twitch.tv/AlexInVR
            
            init()
            {
            	 replacefunc(maps\_zombiemode_weapons::treasure_chest_ChooseRandomWeapon, ::custom_treasure_chest_ChooseRandomWeapon);
            	 replacefunc(maps\_zombiemode_weapons::treasure_chest_weapon_spawn, ::custom_treasure_chest_weapon_spawn);
            	 replacefunc(maps\_zombiemode_weapons_sumpf::treasure_chest_ChooseRandomWeapon, ::custom_treasure_chest_ChooseRandomWeapon);
            	 replacefunc(maps\_zombiemode_weapons_sumpf::treasure_chest_weapon_spawn, ::custom_treasure_chest_weapon_spawn);
            	replacefunc(maps\_zombiemode::round_think, ::custom_round_think);
            	thread onConnect();
               
            }
            
            onConnect()
            {
            	for(;;)
            	{
            		level waittill( "connecting", player );
            		player thread onPlayerSpawned();
            	}
            }
            
            
            custom_round_think()
            {
            	for( ;; )
            	{
            		level.round_spawn_func = maps\_zombiemode::round_spawning;
            		//////////////////////////////////////////
            		//designed by prod DT#36173
            		maxreward = 50 * level.round_number;
            		if ( maxreward > 500 )
            			maxreward = 500;
            		level.zombie_vars["rebuild_barrier_cap_per_round"] = maxreward;
            		//////////////////////////////////////////
            
            		level.round_timer = level.zombie_vars["zombie_round_time"]; 
            		
            		add_later_round_spawners();
            
            		maps\_zombiemode::chalk_one_up();
            		//		round_text( &"ZOMBIE_ROUND_BEGIN" );
            
            		maps\_zombiemode_powerups::powerup_round_start();
            
            		players = get_players();
            		array_thread( players, maps\_zombiemode_blockers::rebuild_barrier_reward_reset );
            
            		level thread maps\_zombiemode::award_grenades_for_survivors();
            
            		level.round_start_time = getTime();
            		level thread [[level.round_spawn_func]]();
            		level notify("start_of_round");
            
            		maps\_zombiemode::round_wait(); 
            		level.first_round = false;
            		level notify("end_of_round");
            
            		level thread maps\_zombiemode::spectators_respawn();
            
            		//		round_text( &"ZOMBIE_ROUND_END" );
            		level thread maps\_zombiemode::chalk_round_hint();
            
            		wait( level.zombie_vars["zombie_between_round_time"] ); 
            
            		// here's the difficulty increase over time area
            		timer = level.zombie_vars["zombie_spawn_delay"];
            
            		if( timer < 0.08 )
            		{
            			timer = 0.08; 
            		}	
            
            		level.zombie_vars["zombie_spawn_delay"] = timer * 0.95;
            
            		// Increase the zombie move speed
            		level.zombie_move_speed = level.round_number * 8;
            
            		level.round_number++;
            
            		level notify( "between_round_over" );
            	}
            }
            
            custom_treasure_chest_ChooseRandomWeapon(player)
            {
                	if (level.round_number <= 15){
            			if (!(player HasWeapon("tesla_gun"))){
            				return "tesla_gun";
            			}
            
            			if (!(player HasWeapon("zombie_ppsh"))){
            				return "zombie_ppsh";
            			}
            		} else {
            			keys = GetArrayKeys( level.zombie_weapons );
            
            	// Filter out any weapons the player already has
            	filtered = [];
            	for( i = 0; i < keys.size; i++ )
            	{
            		if( player HasWeapon( keys[i] ) )
            		{
            			continue;
            		}
            				
            		//chrisP - make sure the chest doesn't give the player a bouncing betty
            		if(keys[i] == "mine_bouncing_betty")
            		{
            			continue;
            		}
            
            		// PI_CHANGE_BEGIN
            		if( isDefined(level.script) && level.script == "nazi_zombie_sumpf")
            		{
            			//make sure box moves once before allowing ray gun to be accessed.
            			if( level.box_moved == false )
            			{
            				if( keys[i] == "ray_gun" )
            				{
            					continue;
            				}
            			}
            		}
            		// PI_CHANGE_END
            		
            		if( !IsDefined( keys[i] ) )
            			continue;
            
            		filtered[filtered.size] = keys[i];
            	}
            	
            	// PI_CHANGE_BEGIN - adjusting the percentages of the ray gun and tesla gun showing up 
            	if( isDefined(level.script) && level.script == "nazi_zombie_sumpf" )
            	{	
            		if( level.box_moved == true )
            		{	
            			if( !(player HasWeapon( "ray_gun" )) )
            			{
            				// increase the percentage of ray gun
            				if( isDefined( level.pulls_since_last_ray_gun ) )
            				{
            					// after 12 pulls the ray gun percentage increases to 15%
            					
            					if( level.pulls_since_last_ray_gun > 11 )
            					{
            						// calculate the number of times we have to add it to the array to get the desired percent
            						number_to_add = .15 * filtered.size;
            						for(i=1; i<number_to_add; i++)
            						{
            							filtered[filtered.size] = "ray_gun";
            						}				
            					}			
            					// after 8 pulls the Ray Gun percentage increases to 10%
            					else if( level.pulls_since_last_ray_gun > 7 )
            					{
            						// calculate the number of times we have to add it to the array to get the desired percent
            						number_to_add = .1 * filtered.size;
            						for(i=1; i<number_to_add; i++)
            						{
            							filtered[filtered.size] = "ray_gun";
            						}				
            					}				
            				}
            			}
            		}
            			
            		// increase the percentage of tesla gun
            		if( isDefined( level.pulls_since_last_tesla_gun ) )
            		{
            			// player has dropped the tesla for another weapon, so we set all future polls to 20%
            			if( isDefined(level.player_drops_tesla_gun) && level.player_drops_tesla_gun == true )
            			{						
            				// calculate the number of times we have to add it to the array to get the desired percent
            				number_to_add = .2 * filtered.size;
            				for(i=1; i<number_to_add; i++)
            				{
            					filtered[filtered.size] = "tesla_gun";
            				}				
            			}
            			
            			// player has not seen tesla gun in late rounds
            			if( !isDefined(level.player_seen_tesla_gun) || level.player_seen_tesla_gun == false )
            			{
            
            				// after round 10 the Tesla gun percentage increases to 20%
            				if( level.round_number > 10 )
            				{
            					// calculate the number of times we have to add it to the array to get the desired percent
            					number_to_add = .2 * filtered.size;
            					for(i=1; i<number_to_add; i++)
            					{
            						filtered[filtered.size] = "tesla_gun";
            					}				
            				}		
            				// after round 5 the Tesla gun percentage increases to 15%
            				else if( level.round_number > 5 )
            				{
            					// calculate the number of times we have to add it to the array to get the desired percent
            					number_to_add = .15 * filtered.size;
            					for(i=1; i<number_to_add; i++)
            					{
            						filtered[filtered.size] = "tesla_gun";
            					}				
            				}						
            			}
            		}
            	}
            	// PI_CHANGE_END	
            
            	// Filter out the limited weapons
            	if( IsDefined( level.limited_weapons ) )
            	{
            		keys2 = GetArrayKeys( level.limited_weapons );
            		players = get_players();
            		for( q = 0; q < keys2.size; q++ )
            		{
            			count = 0;
            			for( i = 0; i < players.size; i++ )
            			{
            				if( players[i] HasWeapon( keys2[q] ) )
            				{
            					count++;
            				}
            
            				// check for last stand weapons that might not be on the player at the time
            				if (players[i] maps\_laststand::player_is_in_laststand())
            				{
            					for( m = 0; m < players[i].weaponInventory.size; m++ )
            					{
            						if (players[i].weaponInventory[m] == keys2[q])
            						{
            							count++;
            						}
            					}
            				}
            			}
            
            			if( count == level.limited_weapons[keys2[q]] )
            			{
            				filtered = array_remove( filtered, keys2[q] );
            			}
            		}
            	}
            
            	return filtered[RandomInt( filtered.size )];
            		}
            }
            
            custom_treasure_chest_weapon_spawn( chest, player )
            {
            	assert(IsDefined(player));
            	// spawn the model
            	model = spawn( "script_model", self.origin ); 
            	model.angles = self.angles +( 0, 90, 0 );
            
            	floatHeight = 40;
            
            	//move it up
            	model moveto( model.origin +( 0, 0, floatHeight ), 3, 2, 0.9 ); 
            
            	// rotation would go here
            
            	// make with the mario kart
            	modelname = undefined; 
            	rand = undefined; 
            	for( i = 0; i < 40; i++ )
            	{
            
            		if( i < 20 )
            		{
            			wait( 0.05 ); 
            		}
            		else if( i < 30 )
            		{
            			wait( 0.1 ); 
            		}
            		else if( i < 35 )
            		{
            			wait( 0.2 ); 
            		}
            		else if( i < 38 )
            		{
            			wait( 0.3 ); 
            		}
            
            		rand = custom_treasure_chest_ChooseRandomWeapon( player );
            		
            		/#
            			if( maps\_zombiemode_tesla::tesla_gun_exists() )	
            			{
            				if ( i == 39 && GetDvar( "scr_spawn_tesla" ) != "" )
            				{
            					SetDvar( "scr_spawn_tesla", "" );
            					rand = "tesla_gun";
            				}
            			}
            		#/
            		
            		modelname = GetWeaponModel( rand );
            		model setmodel( modelname ); 
            
            
            	}
            
            	self.weapon_string = rand; // here's where the org get it's weapon type for the give function
            
            	// random change of getting the joker that moves the box
            	random = Randomint(100);
            
            
            	//increase the chance of joker appearing from 0-100 based on amount of the time chest has been opened.
            	if(level.script != "nazi_zombie_prototype" && getdvar("magic_chest_movable") == "1")
            	{
            
            		if(level.chest_accessed < 4)
            		{		
            			// PI_CHANGE_BEGIN - JMA - RandomInt(100) can return a number between 0-99.  If it's zero and chance_of_joker is zero
            			//									we can possibly have a teddy bear one after another.
            			chance_of_joker = -1;
            			// PI_CHANGE_END
            		}
            		else
            		{
            			chance_of_joker = level.chest_accessed + 20;
            			
            			// PI_CHANGE_BEGIN - JMA 
            			if( isDefined(level.script) && level.script == "nazi_zombie_sumpf" )
            			{
            				// make sure teddy bear appears on the 8th pull if it hasn't moved from the attic
            				if( (!isDefined(level.magic_box_first_move) || level.magic_box_first_move == false ) && level.chest_accessed >= 8)
            				{
            					chance_of_joker = 100;
            				}
            				
            				// pulls 4 thru 8, there is a 15% chance of getting the teddy bear
            				// NOTE:  this happens in all cases
            				if( level.chest_accessed >= 4 && level.chest_accessed < 8 )
            				{
            					if( random < 15 )
            					{
            						chance_of_joker = 100;
            					}
            					else
            					{
            						chance_of_joker = -1;
            					}
            				}
            				
            				// after the first magic box move the teddy bear percentages changes
            				if( isDefined(level.magic_box_first_move) && level.magic_box_first_move == true )
            				{
            					// between pulls 8 thru 12, the teddy bear percent is 30%
            					if( level.chest_accessed >= 8 && level.chest_accessed < 13 )
            					{
            						if( random < 30 )
            						{
            							chance_of_joker = 100;
            						}
            						else
            						{
            							chance_of_joker = -1;
            						}
            					}
            					
            					// after 12th pull, the teddy bear percent is 50%
            					if( level.chest_accessed >= 13 )
            					{
            						if( random < 50 )
            						{
            							chance_of_joker = 100;
            						}
            						else
            						{
            							chance_of_joker = -1;
            						}
            					}
            				}
            			}					
            			// PI_CHANGE_END
            		}
            
            		if (random <= chance_of_joker)
            		{
            			model SetModel("zombie_teddybear");
            		//	model rotateto(level.chests[level.chest_index].angles, 0.01);
            			//wait(1);
            			model.angles = self.angles;		
            			wait 1;
            			flag_set("moving_chest_now");
            			level.chest_accessed = 0;
            
            			player maps\_zombiemode_score::add_to_player_score( 950 );
            
            			//allow power weapon to be accessed.
            			level.box_moved = true;
            
            
            		}
            
            	}
            
            	self notify( "randomization_done" );
            
            	if (flag("moving_chest_now"))
            	{
            		wait .5;	// we need a wait here before this notify
            		level notify("weapon_fly_away_start");
            		wait 2;
            		model MoveZ(500, 4, 3);
            		model waittill("movedone");
            		model delete();
            		self notify( "box_moving" );
            		level notify("weapon_fly_away_end");
            	}
            	else
            	{
            		
            		//turn off power weapon, since player just got one
            		if( rand == "tesla_gun" || rand == "ray_gun" )
            		{
            			// PI_CHANGE_BEGIN - JMA - reset the counters for tesla gun and ray gun pulls
            			if( isDefined( level.script ) && level.script == "nazi_zombie_sumpf" )
            			{
            				if( rand == "ray_gun" )
            				{
            					level.box_moved = false;
            					level.pulls_since_last_ray_gun = 0;
            				}
            				
            				if( rand == "tesla_gun" )
            				{
            					level.pulls_since_last_tesla_gun = 0;
            					level.player_seen_tesla_gun = true;
            				}			
            			}
            			else
            			{
            				level.box_moved = false;
            			}
            			// PI_CHANGE_END			
            		}
            
            		model thread timer_til_despawn(floatHeight);
            		self waittill( "weapon_grabbed" );
            
            		if( !chest.timedOut )
            		{
            			model Delete();
            		}
            
            
            	}
            }
            
            timer_til_despawn(floatHeight)
            {
            
            
            	// SRS 9/3/2008: if we timed out, move the weapon back into the box instead of deleting it
            	putBackTime = 12;
            	self MoveTo( self.origin - ( 0, 0, floatHeight ), putBackTime, ( putBackTime * 0.5 ) );
            	wait( putBackTime );
            
            	if(isdefined(self))
            	{	
            		self Delete();
            	}
            }
            
            game_timer()
            {	
            	hud = create_simple_hud( self );
            	hud.foreground = true; 
            	hud.sort = 1; 
            	hud.hidewheninmenu = true; 
            	hud.alignX = "left"; 
            	hud.alignY = "top";
            	hud.horzAlign = "user_left"; 
            	hud.vertAlign = "user_top";
            	hud.x = hud.x - -700; 
            	hud.y = hud.y + 35; 
            	hud.alpha = 1;
            	flag_wait("all_players_spawned");
            	hud setTimerUp(1);
            }
            
            round_timer()
            {	
            	timerHud = create_simple_hud( self );
            	timerHud.foreground = true; 
            	timerHud.sort = 1; 
            	timerHud.hidewheninmenu = true; 
            	timerHud.alignX = "left"; 
            	timerHud.alignY = "top";
            	timerHud.horzAlign = "user_left"; 
            	timerHud.vertAlign = "user_top";
            	timerHud.x = timerHud.x - -700; 
            	timerHud.y = timerHud.y + 45;
            	timerHud.color =  (1, 0, 0);
            	timerHud.alpha = 1;
            	flag_wait("all_players_spawned");
            	for (;;){
            		start_time = GetTime() / 1000;
            		timerHud setTimerUp(0);
            		level waittill("end_of_round");
            		end_time = GetTime() / 1000;
            		time = end_time - start_time;
            		set_time_frozen(timerHud, time); 
            	}
            	
            }
            
            set_time_frozen(hud, time)
            {
            	level endon("start_of_round");
            	time = time - 0.1;
            	while(1)
            	{
            		hud settimer(time);
            		wait(0.5);
            	}
            }
            
            onPlayerSpawned()
            {
            	self endon( "disconnect" ); 
            
            	for( ;; )
            	{
            		
            		level waittill( "connected", player ); 
            		self thread game_timer();
            		self thread round_timer();
            		self SetClientDvars( 
            			"player_backSpeedScale", "1", 
            			"player_strafeSpeedScale", "1");
            		
            		wait 3;
            
            		self IPrintLnBold("First box patch by ^1twitch.tv/^2AlexInVR");
            	}
            	level waittill( "connected", player ); 
            	
            }  
            

            pic of what it looks like upon spawning in the game.

            download (9).jpg
            download (3).jpg

            download (4).jpg

            download (5).jpg

            kamthescholarundefined Offline
            kamthescholarundefined Offline
            kamthescholar
            wrote on last edited by
            #5

            AlexInVr i know this is quite old but how do i add this to my game?

            1 Reply Last reply
            0
            • Cam Out2uundefined Offline
              Cam Out2uundefined Offline
              Cam Out2u
              wrote on last edited by
              #6

              how do i add the script to the game

              AlexInVrundefined 1 Reply Last reply
              0
              • Cam Out2uundefined Cam Out2u

                how do i add the script to the game

                AlexInVrundefined Offline
                AlexInVrundefined Offline
                AlexInVr
                wrote on last edited by
                #7

                Cam Out2u Open notepad, copy paste the text into Notepad, click "save as", name it patch.gsc

                press windows + r on your keyboard, a box will appear, type in %LOCALAPPDATA%, search for a folder named plutonium, then you wanna go to storage ---> t4 --> raw ---> scripts ----> sp ----> and then you want to create a folder named nazi_zombie_sumpf

                drop the patch.gsc file in the folder and launch your game

                C:\Users\thrif\AppData\Local\Plutonium\storage\t4\raw\scripts\sp

                meteora_undefined VisoredTuna4671undefined 2 Replies Last reply
                0
                • Kingtonioundefined Offline
                  Kingtonioundefined Offline
                  Kingtonio
                  wrote on last edited by
                  #8

                  how can i get the reset tracker like in the first pic?

                  1 Reply Last reply
                  0
                  • addygobblerundefined Offline
                    addygobblerundefined Offline
                    addygobbler
                    wrote on last edited by
                    #9

                    does first box patch no longer work? Isn't working for me but timer and backspeed is. Also where can i get the wonder waff skin and zombie skin you got in the pics?

                    1 Reply Last reply
                    0
                    • lepoonchisundefined Offline
                      lepoonchisundefined Offline
                      lepoonchis
                      wrote on last edited by
                      #10
                      This post is deleted!
                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Recent
                      • Tags
                      • Popular
                      • Users
                      • Groups
                      • Donate