Skip to content
  • 0 Unread 0
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
Collapse

Plutonium

  1. Home
  2. BO2 Modding Releases & Resources
  3. 🔮 BO2 Zombies – Shared Mystery Box Script

🔮 BO2 Zombies – Shared Mystery Box Script

Scheduled Pinned Locked Moved BO2 Modding Releases & Resources
10 Posts 7 Posters 3.4k Views 2 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.
  • mahmodhalah2undefined Offline
    mahmodhalah2undefined Offline
    mahmodhalah2
    wrote on last edited by
    #1

    🔥 About:
    This script upgrades the way players interact with the Mystery Box in BO2 Zombies,
    adding new co-op focused features that make gameplay smoother, faster, and more fun.

    ✨ Features:

    • Press V while the Mystery Box is open to share it with your teammate.
      No more fighting over rolls – now both players can access the box together.
    • Press Shift while the Mystery Box is open to instantly close it.
      Perfect for shutting it down during hectic moments, trolling your friends,
      or preventing wasted spins.

    💀 Why Use It?

    • Perfect for co-op sessions where teamwork and timing matter.
    • Adds a unique twist to the Mystery Box mechanic, making it feel more dynamic.
    • Helps avoid box-hogging and gives both players fair chances.
    • Quick-close feature with Shift makes the box easier to control.
    • Useful for speedruns, challenge games, and custom fun runs.

    ⚡ Installation:
    Just drop the script into your Plutonium BO2 Zombies GSC mods folder
    and enjoy the upgraded Mystery Box experience!
    [code]

    #include maps/mp/_utility;
    #include common_scripts/utility;
    #include maps/mp/gametypes_zm/_hud_util;
    #include maps/mp/zombies/_zm_weapons;
    #include maps/mp/zombies/_zm_magicbox;
    #include maps/mp/zombies/_zm;
    #include maps/mp/zombies/_zm_unitrigger;
    #include maps/mp/zombies/_zm_utility;
    #include maps/mp/_zm_tomb_capture_zones;
    init()
    {
        if(getdvar( "mapname" ) == "zm_tomb" )
        	thread monitor_boxes();
        else
            thread CheckForCurrentBox();
            
        level.shared_box = 0;
        add_zombie_hint( "default_shared_box", "Hold ^3&&1^7 for weapon");
    }
    
    CheckForCurrentBox()
    {
    	flag_wait( "initial_blackscreen_passed" );
        if( getdvar( "mapname" ) == "zm_nuked" )
        {
            wait 10;
        }
        for(i = 0; i < level.chests.size; i++)
        {
            level.chests[ i ] thread reset_box();
    		if(level.chests[ i ].hidden)
        	{
    			level.chests[ i ] get_chest_pieces();
        	}
    		if(!level.chests[ i ].hidden)
    		{
    			level.chests[ i ].unitrigger_stub.prompt_and_visibility_func = ::boxtrigger_update_prompt;
    		}
    	}
    }
    
    monitor_boxes()
    {
    	flag_wait( "initial_blackscreen_passed" );
        wait 10;
        for(i = 0; i < level.chests.size; i++)
        {
            level.chests[ i ] thread reset_box();		
    	}
        for(;;)
        {
            for(i = 0; i < level.chests.size; i++)
            {
                if(!level.chests[ i ].hidden)
                {
                    level.chests[ i ].unitrigger_stub.prompt_and_visibility_func = ::boxtrigger_update_prompt;
                    level.chests[ i ].zbarrier waittill( "left" );
                    //iPrintLn("left");
                }
            }
            wait 15;
            //iPrintLn("15");
    	}
    }
    
    reset_box()
    {
    	self notify("kill_chest_think");
        wait .1;
    	if(!self.hidden)
        {
    		self.grab_weapon_hint = 0;
    		self thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::magicbox_unitrigger_think );
        	self.unitrigger_stub run_visibility_function_for_all_triggers();
    	}
    	self thread custom_treasure_chest_think();
    }
    
    get_chest_pieces()
    {
    	self.chest_box = getent( self.script_noteworthy + "_zbarrier", "script_noteworthy" );
    	self.chest_rubble = [];
    	rubble = getentarray( self.script_noteworthy + "_rubble", "script_noteworthy" );
    	i = 0;
    	while ( i < rubble.size )
    	{
    		if ( distancesquared( self.origin, rubble[ i ].origin ) < 10000 )
    		{
    			self.chest_rubble[ self.chest_rubble.size ] = rubble[ i ];
    		}
    		i++;
    	}
    	self.zbarrier = getent( self.script_noteworthy + "_zbarrier", "script_noteworthy" );
    	if ( isDefined( self.zbarrier ) )
    	{
    		self.zbarrier zbarrierpieceuseboxriselogic( 3 );
    		self.zbarrier zbarrierpieceuseboxriselogic( 4 );
    	}
    	self.unitrigger_stub = spawnstruct();
    	self.unitrigger_stub.origin = self.origin + ( anglesToRight( self.angles ) * -22.5 );
    	self.unitrigger_stub.angles = self.angles;
    	self.unitrigger_stub.script_unitrigger_type = "unitrigger_box_use";
    	self.unitrigger_stub.script_width = 104;
    	self.unitrigger_stub.script_height = 50;
    	self.unitrigger_stub.script_length = 45;
    	self.unitrigger_stub.trigger_target = self;
    	unitrigger_force_per_player_triggers( self.unitrigger_stub, 1 );
    	self.unitrigger_stub.prompt_and_visibility_func = ::boxtrigger_update_prompt;
    	self.zbarrier.owner = self;
    }
    
    boxtrigger_update_prompt( player )
    {
    	can_use = self custom_boxstub_update_prompt( player );
    	if ( isDefined( self.hint_string ) )
    	{
    		if ( isDefined( self.hint_parm1 ) )
    		{
    			self sethintstring( self.hint_string, self.hint_parm1 );
    		}
    		else
    		{
    			self sethintstring( self.hint_string );
    		}
    	}
    	return can_use;
    }
    
    custom_boxstub_update_prompt( player )
    {
        self setcursorhint( "HINT_NOICON" );
        if(!self trigger_visible_to_player( player ))
        {
            if(level.shared_box)
            {
                self setvisibletoplayer( player );
                self.hint_string = get_hint_string( self, "default_shared_box" );
                return 1;
            }
            return 0;
        }
        self.hint_parm1 = undefined;
                    if(level.shared_box)
        {
                    self.hint_string = "Press ^2F^7 to take weapon"; // Any player can now take it
            return 1;
        }
    
            if ( isDefined( self.stub.trigger_target.grab_weapon_hint ) && self.stub.trigger_target.grab_weapon_hint && !level.shared_box )
        {
            if (isDefined( level.magic_box_check_equipment ) && [[ level.magic_box_check_equipment ]]( self.stub.trigger_target.grab_weapon_name ) )
            {
                self.hint_string = "Press ^2F^7 for Equipment, ^3V^7 to share, or ^1Shift^7 to close";
            }
            else 
            {
                self.hint_string = "Press ^2F^7 for Weapon, ^3V^7 to share, or ^1Shift^7 to close";
            }
        }
        else if(getdvar("mapname") == "zm_tomb" && isDefined(level.zone_capture.zones) && !level.zone_capture.zones[self.stub.zone] ent_flag( "player_controlled" )) 
        {
            self.stub.hint_string = &"ZM_TOMB_ZC";
            return 0;
        }
        else
        {
            if ( isDefined( level.using_locked_magicbox ) && level.using_locked_magicbox && isDefined( self.stub.trigger_target.is_locked ) && self.stub.trigger_target.is_locked )
            {
                self.hint_string = get_hint_string( self, "locked_magic_box_cost" );
            }
            else
            {
                self.hint_parm1 = self.stub.trigger_target.zombie_cost;
                self.hint_string = get_hint_string( self, "default_treasure_chest" );
            }
        }
        return 1;
    }
    
    custom_treasure_chest_think()
    {
    	self endon( "kill_chest_think" );
    	user = undefined;
    	user_cost = undefined;
    	self.box_rerespun = undefined;
    	self.weapon_out = undefined;
    	self thread unregister_unitrigger_on_kill_think();
    	while ( 1 )
    	{
    		if ( !isdefined( self.forced_user ) )
    		{
    			self waittill( "trigger", user );
    			if ( user == level )
    			{
    				wait 0.1;
    				continue;
    			}
    		}
    		else
    		{
    			user = self.forced_user;
    		}
    		if ( user in_revive_trigger() )
    		{
    			wait 0.1;
    			continue;
    		}
    		if ( user.is_drinking > 0 )
    		{
    			wait 0.1;
    			continue;
    		}
    		if ( isdefined( self.disabled ) && self.disabled )
    		{
    			wait 0.1;
    			continue;
    		}
    		if ( user getcurrentweapon() == "none" )
    		{
    			wait 0.1;
    			continue;
    		}
    		reduced_cost = undefined;
    		if ( is_player_valid( user ) && user maps/mp/zombies/_zm_pers_upgrades_functions::is_pers_double_points_active() )
    		{
    			reduced_cost = int( self.zombie_cost / 2 );
    		}
    		if ( isdefined( level.using_locked_magicbox ) && level.using_locked_magicbox && isdefined( self.is_locked ) && self.is_locked ) 
    		{
    			if ( user.score >= level.locked_magic_box_cost )
    			{
    				user maps/mp/zombies/_zm_score::minus_to_player_score( level.locked_magic_box_cost );
    				self.zbarrier set_magic_box_zbarrier_state( "unlocking" );
    				self.unitrigger_stub run_visibility_function_for_all_triggers();
    			}
    			else
    			{
    				user maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_box" );
    			}
    			wait 0.1 ;
    			continue;
    		}
    		else if ( isdefined( self.auto_open ) && is_player_valid( user ) )
    		{
    			if ( !isdefined( self.no_charge ) )
    			{
    				user maps/mp/zombies/_zm_score::minus_to_player_score( self.zombie_cost );
    				user_cost = self.zombie_cost;
    			}
    			else
    			{
    				user_cost = 0;
    			}
    			self.chest_user = user;
    			break;
    		}
    		else if ( is_player_valid( user ) && user.score >= self.zombie_cost )
    		{
    			user maps/mp/zombies/_zm_score::minus_to_player_score( self.zombie_cost );
    			user_cost = self.zombie_cost;
    			self.chest_user = user;
    			break;
    		}
    		else if ( isdefined( reduced_cost ) && user.score >= reduced_cost )
    		{
    			user maps/mp/zombies/_zm_score::minus_to_player_score( reduced_cost );
    			user_cost = reduced_cost;
    			self.chest_user = user;
    			break;
    		}
    		else if ( user.score < self.zombie_cost )
    		{
    			play_sound_at_pos( "no_purchase", self.origin );
    			user maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_box" );
    			wait 0.1;
    			continue;
    		}
    		wait 0.05;
    	}
    	flag_set( "chest_has_been_used" );
    	maps/mp/_demo::bookmark( "zm_player_use_magicbox", getTime(), user );
    	user maps/mp/zombies/_zm_stats::increment_client_stat( "use_magicbox" );
    	user maps/mp/zombies/_zm_stats::increment_player_stat( "use_magicbox" );
    	if ( isDefined( level._magic_box_used_vo ) )
    	{
    		user thread [[ level._magic_box_used_vo ]]();
    	}
    	self thread watch_for_emp_close();
    	if ( isDefined( level.using_locked_magicbox ) && level.using_locked_magicbox )
    	{
    		self thread custom_watch_for_lock();
    	}
    	self._box_open = 1;
    	level.box_open = 1;
    	self._box_opened_by_fire_sale = 0;
    	if ( isDefined( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] ) && level.zombie_vars[ "zombie_powerup_fire_sale_on" ] && !isDefined( self.auto_open ) && self [[ level._zombiemode_check_firesale_loc_valid_func ]]() )
    	{
    		self._box_opened_by_fire_sale = 1;
    	}
    	if ( isDefined( self.chest_lid ) )
    	{
    		self.chest_lid thread treasure_chest_lid_open();
    	}
    	if ( isDefined( self.zbarrier ) )
    	{
    		play_sound_at_pos( "open_chest", self.origin );
    		play_sound_at_pos( "music_chest", self.origin );
    		self.zbarrier set_magic_box_zbarrier_state( "open" );
    	}
    	self.timedout = 0;
    	self.weapon_out = 1;
    	self.zbarrier thread treasure_chest_weapon_spawn( self, user );
    	self.zbarrier thread treasure_chest_glowfx();
    	thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.unitrigger_stub );
    	self.zbarrier waittill_any( "randomization_done", "box_hacked_respin" );
    	if ( flag( "moving_chest_now" ) && !self._box_opened_by_fire_sale && isDefined( user_cost ) )
    	{
    		user maps/mp/zombies/_zm_score::add_to_player_score( user_cost, 0 );
    	}
    	if ( flag( "moving_chest_now" ) && !level.zombie_vars[ "zombie_powerup_fire_sale_on" ] && !self._box_opened_by_fire_sale )
    	{
    		self thread treasure_chest_move( self.chest_user );
    	}
    	else
    	{
    		self.grab_weapon_hint = 1;
    		self.grab_weapon_name = self.zbarrier.weapon_string;
    		self.chest_user = user;
    		thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::magicbox_unitrigger_think );
    		if ( isDefined( self.zbarrier ) && !is_true( self.zbarrier.closed_by_emp ) )
    		{
    			self thread treasure_chest_timeout();
    		}
    		timeout_time = 105;
    		grabber = user;
    		for( i=0;i<105;i++ )
    		{
    			// SKIPPING with SHIFT
    			if(user sprintButtonPressed() && isplayer( user ) && distance(self.origin, user.origin) <= 100)
    			{
    				self.timedout = 1;
    				if(isDefined(self.zbarrier.weapon_model))
    				{
    					self.zbarrier.weapon_model delete();
    				}
    				self.zbarrier notify( "weapon_grabbed" );
    				break;
    			}
    
    			// SHARING with V
    			if(user meleebuttonpressed() && isplayer( user ) && distance(self.origin, user.origin) <= 100)
    			{
    				level.magic_box_grab_by_anyone = 1;
    				level.shared_box = 1;
    				self.unitrigger_stub run_visibility_function_for_all_triggers();
    				for( a=i;a<105;a++ )
    				{
    					foreach(player in level.players)
    					{
    						if(player usebuttonpressed() && distance(self.origin, player.origin) <= 100 && isDefined( player.is_drinking ) && !player.is_drinking)
    						{
    							player thread treasure_chest_give_weapon( self.zbarrier.weapon_string );
    							a = 105;
    							break;
    						}
    					}
    					wait 0.1;
    				}
    				break;
    			}
    
    			// GRABBING with F
    			if(grabber usebuttonpressed() && isplayer( grabber ) && user == grabber && distance(self.origin, grabber.origin) <= 100 && isDefined( grabber.is_drinking ) && !grabber.is_drinking)
    			{
    				grabber thread treasure_chest_give_weapon( self.zbarrier.weapon_string );
    				break;
    			}
    			wait 0.1;
    		}
    		self.weapon_out = undefined;
    		self notify( "user_grabbed_weapon" );
    		user notify( "user_grabbed_weapon" );
    		self.grab_weapon_hint = 0;
    		self.zbarrier notify( "weapon_grabbed" );
    		if ( isDefined( self._box_opened_by_fire_sale ) && !self._box_opened_by_fire_sale )
    		{
    			level.chest_accessed += 1;
    		}
    		if ( level.chest_moves > 0 && isDefined( level.pulls_since_last_ray_gun ) )
    		{
    			level.pulls_since_last_ray_gun += 1;
    		}
    		thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.unitrigger_stub );
    		if ( isDefined( self.chest_lid ) )
    		{
    			self.chest_lid thread treasure_chest_lid_close( self.timedout );
    		}
    		if ( isDefined( self.zbarrier ) )
    		{
    			self.zbarrier set_magic_box_zbarrier_state( "close" );
    			play_sound_at_pos( "close_chest", self.origin );
    			self.zbarrier waittill( "closed" );
    			wait 1;
    		}
    		else
    		{
    			wait 3;
    		}
    		if ( isDefined( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] ) && level.zombie_vars[ "zombie_powerup_fire_sale_on" ] || self [[ level._zombiemode_check_firesale_loc_valid_func ]]() || self == level.chests[ level.chest_index ] )
    		{
    			thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::magicbox_unitrigger_think );
    		}
    	}
    	self._box_open = 0;
    	level.box_open = 0;
    	level.shared_box = 0;
    	level.magic_box_grab_by_anyone = 0;
    	self._box_opened_by_fire_sale = 0;
    	self.chest_user = undefined;
    	self notify( "chest_accessed" );
    	self thread custom_treasure_chest_think();
    }
    
    custom_watch_for_lock()
    {
        self endon( "user_grabbed_weapon" );
        self endon( "chest_accessed" );
        self waittill( "box_locked" );
        self notify( "kill_chest_think" );
        self.grab_weapon_hint = 0;
        wait 0.1;
        self thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::magicbox_unitrigger_think );
        self.unitrigger_stub run_visibility_function_for_all_triggers();
        self thread custom_treasure_chest_think();
    }
    
    

    [/code]

    🚀 Play smarter, share faster, and survive longer with the Shared Mystery Box Script!

    GhostRider0125undefined PunctualBoat203undefined 2 Replies Last reply
    3
    • GhostRider0125undefined Offline
      GhostRider0125undefined Offline
      GhostRider0125
      Banned
      wrote on last edited by GhostRider0125
      #2

      Nice dude! Can please add to be able to get the rest of the perks from the box past the 4 limit so could have an other way to get the rest of the perks😅

      Somebody made it before but when you got the fourth perk it will not give anymore
      its in this little script pack if you're interested 😁
      https://forum.plutonium.pw/topic/38491/share-mystery-box-perks-in-bo3-aats-tranzit-fog-cw-trial-system-scripts

      AdrX003undefined 1 Reply Last reply
      1
      • GhostRider0125undefined GhostRider0125

        Nice dude! Can please add to be able to get the rest of the perks from the box past the 4 limit so could have an other way to get the rest of the perks😅

        Somebody made it before but when you got the fourth perk it will not give anymore
        its in this little script pack if you're interested 😁
        https://forum.plutonium.pw/topic/38491/share-mystery-box-perks-in-bo3-aats-tranzit-fog-cw-trial-system-scripts

        AdrX003undefined Offline
        AdrX003undefined Offline
        AdrX003
        wrote on last edited by
        #3

        GhostRider0125 depending on what you want i thinkn (unsure if i got it) you could just merge the perk limit function on the same script or just add the thread from here https://forum.plutonium.pw/post/162265

        GhostRider0125undefined 1 Reply Last reply
        1
        • AdrX003undefined AdrX003

          GhostRider0125 depending on what you want i thinkn (unsure if i got it) you could just merge the perk limit function on the same script or just add the thread from here https://forum.plutonium.pw/post/162265

          GhostRider0125undefined Offline
          GhostRider0125undefined Offline
          GhostRider0125
          Banned
          wrote on last edited by
          #4

          AdrX003 yeah that works but i want it so the perk limit is still 4 when you buy from machines but if you buy from the box you can get the rest😅

          1 Reply Last reply
          0
          • kamuuiiundefined Offline
            kamuuiiundefined Offline
            kamuuii
            wrote on last edited by
            #5

            need to be compiled to work

            AdrX003undefined 1 Reply Last reply
            2
            • kamuuiiundefined kamuuii

              need to be compiled to work

              AdrX003undefined Offline
              AdrX003undefined Offline
              AdrX003
              wrote on last edited by AdrX003
              #6

              kamuuii nope, plutonium autocompiles/reads the open file normally, with any open source script in its folder before starting a match

              1 Reply Last reply
              0
              • DJseanyBundefined Offline
                DJseanyBundefined Offline
                DJseanyB
                wrote on last edited by
                #7

                Always a good shout to give credit to person who wrote the script when reposting!

                1 Reply Last reply
                0
                • mahmodhalah2undefined mahmodhalah2

                  🔥 About:
                  This script upgrades the way players interact with the Mystery Box in BO2 Zombies,
                  adding new co-op focused features that make gameplay smoother, faster, and more fun.

                  ✨ Features:

                  • Press V while the Mystery Box is open to share it with your teammate.
                    No more fighting over rolls – now both players can access the box together.
                  • Press Shift while the Mystery Box is open to instantly close it.
                    Perfect for shutting it down during hectic moments, trolling your friends,
                    or preventing wasted spins.

                  💀 Why Use It?

                  • Perfect for co-op sessions where teamwork and timing matter.
                  • Adds a unique twist to the Mystery Box mechanic, making it feel more dynamic.
                  • Helps avoid box-hogging and gives both players fair chances.
                  • Quick-close feature with Shift makes the box easier to control.
                  • Useful for speedruns, challenge games, and custom fun runs.

                  ⚡ Installation:
                  Just drop the script into your Plutonium BO2 Zombies GSC mods folder
                  and enjoy the upgraded Mystery Box experience!
                  [code]

                  #include maps/mp/_utility;
                  #include common_scripts/utility;
                  #include maps/mp/gametypes_zm/_hud_util;
                  #include maps/mp/zombies/_zm_weapons;
                  #include maps/mp/zombies/_zm_magicbox;
                  #include maps/mp/zombies/_zm;
                  #include maps/mp/zombies/_zm_unitrigger;
                  #include maps/mp/zombies/_zm_utility;
                  #include maps/mp/_zm_tomb_capture_zones;
                  init()
                  {
                      if(getdvar( "mapname" ) == "zm_tomb" )
                      	thread monitor_boxes();
                      else
                          thread CheckForCurrentBox();
                          
                      level.shared_box = 0;
                      add_zombie_hint( "default_shared_box", "Hold ^3&&1^7 for weapon");
                  }
                  
                  CheckForCurrentBox()
                  {
                  	flag_wait( "initial_blackscreen_passed" );
                      if( getdvar( "mapname" ) == "zm_nuked" )
                      {
                          wait 10;
                      }
                      for(i = 0; i < level.chests.size; i++)
                      {
                          level.chests[ i ] thread reset_box();
                  		if(level.chests[ i ].hidden)
                      	{
                  			level.chests[ i ] get_chest_pieces();
                      	}
                  		if(!level.chests[ i ].hidden)
                  		{
                  			level.chests[ i ].unitrigger_stub.prompt_and_visibility_func = ::boxtrigger_update_prompt;
                  		}
                  	}
                  }
                  
                  monitor_boxes()
                  {
                  	flag_wait( "initial_blackscreen_passed" );
                      wait 10;
                      for(i = 0; i < level.chests.size; i++)
                      {
                          level.chests[ i ] thread reset_box();		
                  	}
                      for(;;)
                      {
                          for(i = 0; i < level.chests.size; i++)
                          {
                              if(!level.chests[ i ].hidden)
                              {
                                  level.chests[ i ].unitrigger_stub.prompt_and_visibility_func = ::boxtrigger_update_prompt;
                                  level.chests[ i ].zbarrier waittill( "left" );
                                  //iPrintLn("left");
                              }
                          }
                          wait 15;
                          //iPrintLn("15");
                  	}
                  }
                  
                  reset_box()
                  {
                  	self notify("kill_chest_think");
                      wait .1;
                  	if(!self.hidden)
                      {
                  		self.grab_weapon_hint = 0;
                  		self thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::magicbox_unitrigger_think );
                      	self.unitrigger_stub run_visibility_function_for_all_triggers();
                  	}
                  	self thread custom_treasure_chest_think();
                  }
                  
                  get_chest_pieces()
                  {
                  	self.chest_box = getent( self.script_noteworthy + "_zbarrier", "script_noteworthy" );
                  	self.chest_rubble = [];
                  	rubble = getentarray( self.script_noteworthy + "_rubble", "script_noteworthy" );
                  	i = 0;
                  	while ( i < rubble.size )
                  	{
                  		if ( distancesquared( self.origin, rubble[ i ].origin ) < 10000 )
                  		{
                  			self.chest_rubble[ self.chest_rubble.size ] = rubble[ i ];
                  		}
                  		i++;
                  	}
                  	self.zbarrier = getent( self.script_noteworthy + "_zbarrier", "script_noteworthy" );
                  	if ( isDefined( self.zbarrier ) )
                  	{
                  		self.zbarrier zbarrierpieceuseboxriselogic( 3 );
                  		self.zbarrier zbarrierpieceuseboxriselogic( 4 );
                  	}
                  	self.unitrigger_stub = spawnstruct();
                  	self.unitrigger_stub.origin = self.origin + ( anglesToRight( self.angles ) * -22.5 );
                  	self.unitrigger_stub.angles = self.angles;
                  	self.unitrigger_stub.script_unitrigger_type = "unitrigger_box_use";
                  	self.unitrigger_stub.script_width = 104;
                  	self.unitrigger_stub.script_height = 50;
                  	self.unitrigger_stub.script_length = 45;
                  	self.unitrigger_stub.trigger_target = self;
                  	unitrigger_force_per_player_triggers( self.unitrigger_stub, 1 );
                  	self.unitrigger_stub.prompt_and_visibility_func = ::boxtrigger_update_prompt;
                  	self.zbarrier.owner = self;
                  }
                  
                  boxtrigger_update_prompt( player )
                  {
                  	can_use = self custom_boxstub_update_prompt( player );
                  	if ( isDefined( self.hint_string ) )
                  	{
                  		if ( isDefined( self.hint_parm1 ) )
                  		{
                  			self sethintstring( self.hint_string, self.hint_parm1 );
                  		}
                  		else
                  		{
                  			self sethintstring( self.hint_string );
                  		}
                  	}
                  	return can_use;
                  }
                  
                  custom_boxstub_update_prompt( player )
                  {
                      self setcursorhint( "HINT_NOICON" );
                      if(!self trigger_visible_to_player( player ))
                      {
                          if(level.shared_box)
                          {
                              self setvisibletoplayer( player );
                              self.hint_string = get_hint_string( self, "default_shared_box" );
                              return 1;
                          }
                          return 0;
                      }
                      self.hint_parm1 = undefined;
                                  if(level.shared_box)
                      {
                                  self.hint_string = "Press ^2F^7 to take weapon"; // Any player can now take it
                          return 1;
                      }
                  
                          if ( isDefined( self.stub.trigger_target.grab_weapon_hint ) && self.stub.trigger_target.grab_weapon_hint && !level.shared_box )
                      {
                          if (isDefined( level.magic_box_check_equipment ) && [[ level.magic_box_check_equipment ]]( self.stub.trigger_target.grab_weapon_name ) )
                          {
                              self.hint_string = "Press ^2F^7 for Equipment, ^3V^7 to share, or ^1Shift^7 to close";
                          }
                          else 
                          {
                              self.hint_string = "Press ^2F^7 for Weapon, ^3V^7 to share, or ^1Shift^7 to close";
                          }
                      }
                      else if(getdvar("mapname") == "zm_tomb" && isDefined(level.zone_capture.zones) && !level.zone_capture.zones[self.stub.zone] ent_flag( "player_controlled" )) 
                      {
                          self.stub.hint_string = &"ZM_TOMB_ZC";
                          return 0;
                      }
                      else
                      {
                          if ( isDefined( level.using_locked_magicbox ) && level.using_locked_magicbox && isDefined( self.stub.trigger_target.is_locked ) && self.stub.trigger_target.is_locked )
                          {
                              self.hint_string = get_hint_string( self, "locked_magic_box_cost" );
                          }
                          else
                          {
                              self.hint_parm1 = self.stub.trigger_target.zombie_cost;
                              self.hint_string = get_hint_string( self, "default_treasure_chest" );
                          }
                      }
                      return 1;
                  }
                  
                  custom_treasure_chest_think()
                  {
                  	self endon( "kill_chest_think" );
                  	user = undefined;
                  	user_cost = undefined;
                  	self.box_rerespun = undefined;
                  	self.weapon_out = undefined;
                  	self thread unregister_unitrigger_on_kill_think();
                  	while ( 1 )
                  	{
                  		if ( !isdefined( self.forced_user ) )
                  		{
                  			self waittill( "trigger", user );
                  			if ( user == level )
                  			{
                  				wait 0.1;
                  				continue;
                  			}
                  		}
                  		else
                  		{
                  			user = self.forced_user;
                  		}
                  		if ( user in_revive_trigger() )
                  		{
                  			wait 0.1;
                  			continue;
                  		}
                  		if ( user.is_drinking > 0 )
                  		{
                  			wait 0.1;
                  			continue;
                  		}
                  		if ( isdefined( self.disabled ) && self.disabled )
                  		{
                  			wait 0.1;
                  			continue;
                  		}
                  		if ( user getcurrentweapon() == "none" )
                  		{
                  			wait 0.1;
                  			continue;
                  		}
                  		reduced_cost = undefined;
                  		if ( is_player_valid( user ) && user maps/mp/zombies/_zm_pers_upgrades_functions::is_pers_double_points_active() )
                  		{
                  			reduced_cost = int( self.zombie_cost / 2 );
                  		}
                  		if ( isdefined( level.using_locked_magicbox ) && level.using_locked_magicbox && isdefined( self.is_locked ) && self.is_locked ) 
                  		{
                  			if ( user.score >= level.locked_magic_box_cost )
                  			{
                  				user maps/mp/zombies/_zm_score::minus_to_player_score( level.locked_magic_box_cost );
                  				self.zbarrier set_magic_box_zbarrier_state( "unlocking" );
                  				self.unitrigger_stub run_visibility_function_for_all_triggers();
                  			}
                  			else
                  			{
                  				user maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_box" );
                  			}
                  			wait 0.1 ;
                  			continue;
                  		}
                  		else if ( isdefined( self.auto_open ) && is_player_valid( user ) )
                  		{
                  			if ( !isdefined( self.no_charge ) )
                  			{
                  				user maps/mp/zombies/_zm_score::minus_to_player_score( self.zombie_cost );
                  				user_cost = self.zombie_cost;
                  			}
                  			else
                  			{
                  				user_cost = 0;
                  			}
                  			self.chest_user = user;
                  			break;
                  		}
                  		else if ( is_player_valid( user ) && user.score >= self.zombie_cost )
                  		{
                  			user maps/mp/zombies/_zm_score::minus_to_player_score( self.zombie_cost );
                  			user_cost = self.zombie_cost;
                  			self.chest_user = user;
                  			break;
                  		}
                  		else if ( isdefined( reduced_cost ) && user.score >= reduced_cost )
                  		{
                  			user maps/mp/zombies/_zm_score::minus_to_player_score( reduced_cost );
                  			user_cost = reduced_cost;
                  			self.chest_user = user;
                  			break;
                  		}
                  		else if ( user.score < self.zombie_cost )
                  		{
                  			play_sound_at_pos( "no_purchase", self.origin );
                  			user maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_box" );
                  			wait 0.1;
                  			continue;
                  		}
                  		wait 0.05;
                  	}
                  	flag_set( "chest_has_been_used" );
                  	maps/mp/_demo::bookmark( "zm_player_use_magicbox", getTime(), user );
                  	user maps/mp/zombies/_zm_stats::increment_client_stat( "use_magicbox" );
                  	user maps/mp/zombies/_zm_stats::increment_player_stat( "use_magicbox" );
                  	if ( isDefined( level._magic_box_used_vo ) )
                  	{
                  		user thread [[ level._magic_box_used_vo ]]();
                  	}
                  	self thread watch_for_emp_close();
                  	if ( isDefined( level.using_locked_magicbox ) && level.using_locked_magicbox )
                  	{
                  		self thread custom_watch_for_lock();
                  	}
                  	self._box_open = 1;
                  	level.box_open = 1;
                  	self._box_opened_by_fire_sale = 0;
                  	if ( isDefined( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] ) && level.zombie_vars[ "zombie_powerup_fire_sale_on" ] && !isDefined( self.auto_open ) && self [[ level._zombiemode_check_firesale_loc_valid_func ]]() )
                  	{
                  		self._box_opened_by_fire_sale = 1;
                  	}
                  	if ( isDefined( self.chest_lid ) )
                  	{
                  		self.chest_lid thread treasure_chest_lid_open();
                  	}
                  	if ( isDefined( self.zbarrier ) )
                  	{
                  		play_sound_at_pos( "open_chest", self.origin );
                  		play_sound_at_pos( "music_chest", self.origin );
                  		self.zbarrier set_magic_box_zbarrier_state( "open" );
                  	}
                  	self.timedout = 0;
                  	self.weapon_out = 1;
                  	self.zbarrier thread treasure_chest_weapon_spawn( self, user );
                  	self.zbarrier thread treasure_chest_glowfx();
                  	thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.unitrigger_stub );
                  	self.zbarrier waittill_any( "randomization_done", "box_hacked_respin" );
                  	if ( flag( "moving_chest_now" ) && !self._box_opened_by_fire_sale && isDefined( user_cost ) )
                  	{
                  		user maps/mp/zombies/_zm_score::add_to_player_score( user_cost, 0 );
                  	}
                  	if ( flag( "moving_chest_now" ) && !level.zombie_vars[ "zombie_powerup_fire_sale_on" ] && !self._box_opened_by_fire_sale )
                  	{
                  		self thread treasure_chest_move( self.chest_user );
                  	}
                  	else
                  	{
                  		self.grab_weapon_hint = 1;
                  		self.grab_weapon_name = self.zbarrier.weapon_string;
                  		self.chest_user = user;
                  		thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::magicbox_unitrigger_think );
                  		if ( isDefined( self.zbarrier ) && !is_true( self.zbarrier.closed_by_emp ) )
                  		{
                  			self thread treasure_chest_timeout();
                  		}
                  		timeout_time = 105;
                  		grabber = user;
                  		for( i=0;i<105;i++ )
                  		{
                  			// SKIPPING with SHIFT
                  			if(user sprintButtonPressed() && isplayer( user ) && distance(self.origin, user.origin) <= 100)
                  			{
                  				self.timedout = 1;
                  				if(isDefined(self.zbarrier.weapon_model))
                  				{
                  					self.zbarrier.weapon_model delete();
                  				}
                  				self.zbarrier notify( "weapon_grabbed" );
                  				break;
                  			}
                  
                  			// SHARING with V
                  			if(user meleebuttonpressed() && isplayer( user ) && distance(self.origin, user.origin) <= 100)
                  			{
                  				level.magic_box_grab_by_anyone = 1;
                  				level.shared_box = 1;
                  				self.unitrigger_stub run_visibility_function_for_all_triggers();
                  				for( a=i;a<105;a++ )
                  				{
                  					foreach(player in level.players)
                  					{
                  						if(player usebuttonpressed() && distance(self.origin, player.origin) <= 100 && isDefined( player.is_drinking ) && !player.is_drinking)
                  						{
                  							player thread treasure_chest_give_weapon( self.zbarrier.weapon_string );
                  							a = 105;
                  							break;
                  						}
                  					}
                  					wait 0.1;
                  				}
                  				break;
                  			}
                  
                  			// GRABBING with F
                  			if(grabber usebuttonpressed() && isplayer( grabber ) && user == grabber && distance(self.origin, grabber.origin) <= 100 && isDefined( grabber.is_drinking ) && !grabber.is_drinking)
                  			{
                  				grabber thread treasure_chest_give_weapon( self.zbarrier.weapon_string );
                  				break;
                  			}
                  			wait 0.1;
                  		}
                  		self.weapon_out = undefined;
                  		self notify( "user_grabbed_weapon" );
                  		user notify( "user_grabbed_weapon" );
                  		self.grab_weapon_hint = 0;
                  		self.zbarrier notify( "weapon_grabbed" );
                  		if ( isDefined( self._box_opened_by_fire_sale ) && !self._box_opened_by_fire_sale )
                  		{
                  			level.chest_accessed += 1;
                  		}
                  		if ( level.chest_moves > 0 && isDefined( level.pulls_since_last_ray_gun ) )
                  		{
                  			level.pulls_since_last_ray_gun += 1;
                  		}
                  		thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.unitrigger_stub );
                  		if ( isDefined( self.chest_lid ) )
                  		{
                  			self.chest_lid thread treasure_chest_lid_close( self.timedout );
                  		}
                  		if ( isDefined( self.zbarrier ) )
                  		{
                  			self.zbarrier set_magic_box_zbarrier_state( "close" );
                  			play_sound_at_pos( "close_chest", self.origin );
                  			self.zbarrier waittill( "closed" );
                  			wait 1;
                  		}
                  		else
                  		{
                  			wait 3;
                  		}
                  		if ( isDefined( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] ) && level.zombie_vars[ "zombie_powerup_fire_sale_on" ] || self [[ level._zombiemode_check_firesale_loc_valid_func ]]() || self == level.chests[ level.chest_index ] )
                  		{
                  			thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::magicbox_unitrigger_think );
                  		}
                  	}
                  	self._box_open = 0;
                  	level.box_open = 0;
                  	level.shared_box = 0;
                  	level.magic_box_grab_by_anyone = 0;
                  	self._box_opened_by_fire_sale = 0;
                  	self.chest_user = undefined;
                  	self notify( "chest_accessed" );
                  	self thread custom_treasure_chest_think();
                  }
                  
                  custom_watch_for_lock()
                  {
                      self endon( "user_grabbed_weapon" );
                      self endon( "chest_accessed" );
                      self waittill( "box_locked" );
                      self notify( "kill_chest_think" );
                      self.grab_weapon_hint = 0;
                      wait 0.1;
                      self thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::magicbox_unitrigger_think );
                      self.unitrigger_stub run_visibility_function_for_all_triggers();
                      self thread custom_treasure_chest_think();
                  }
                  
                  

                  [/code]

                  🚀 Play smarter, share faster, and survive longer with the Shared Mystery Box Script!

                  PunctualBoat203undefined Offline
                  PunctualBoat203undefined Offline
                  PunctualBoat203
                  wrote on last edited by
                  #8

                  mahmodhalah2 for me it crashed is it custom game only or zm server ? bc im trying for server

                  mahmodhalah2undefined 1 Reply Last reply
                  0
                  • PunctualBoat203undefined PunctualBoat203

                    mahmodhalah2 for me it crashed is it custom game only or zm server ? bc im trying for server

                    mahmodhalah2undefined Offline
                    mahmodhalah2undefined Offline
                    mahmodhalah2
                    wrote on last edited by mahmodhalah2
                    #9

                    PunctualBoat203 it work for any zm server (T6) just put it in scripts folder

                    1 Reply Last reply
                    0
                    • elicy_undefined Offline
                      elicy_undefined Offline
                      elicy_
                      wrote last edited by
                      #10

                      how do i even install it?, i have been trying for hours without being able to start a game.

                      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