Skip to content
  • 0 Unread 0
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
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
14 Posts 9 Posters 4.4k 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
                      • Cu1tzZzundefined Offline
                        Cu1tzZzundefined Offline
                        Cu1tzZz
                        wrote on last edited by
                        #11

                        does timer still work

                        AlexInVrundefined 1 Reply Last reply
                        0
                        • GoatedGameplayundefined Offline
                          GoatedGameplayundefined Offline
                          GoatedGameplay
                          wrote on last edited by
                          #12

                          How do I download it?

                          1 Reply Last reply
                          0
                          • Cu1tzZzundefined Cu1tzZz

                            does timer still work

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

                            Cu1tzZz Should be working still

                            1 Reply Last reply
                            0
                            • GoatedGameplayundefined Offline
                              GoatedGameplayundefined Offline
                              GoatedGameplay
                              wrote on last edited by
                              #14

                              Can you make a download option?

                              1 Reply Last reply
                              0

                              Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                              Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                              With your input, this post could be even better 💗

                              Register Login
                              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
                              • Unread 0
                              • Recent
                              • Tags
                              • Popular
                              • Users
                              • Groups