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

Plutonium

  1. Home
  2. BO2 Modding Releases & Resources
  3. Cap the Number of Zombies in the Round to 1 Player

Cap the Number of Zombies in the Round to 1 Player

Scheduled Pinned Locked Moved BO2 Modding Releases & Resources
8 Posts 4 Posters 1.1k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • undefined Offline
    undefined Offline
    Ivobardolf
    wrote on Aug 14, 2024, 9:54 AM last edited by Ivobardolf Nov 2, 2024, 2:05 PM
    #1

    Hello,

    This is a simple script using replace function to cap the zombies numbers in a round to 1 player.
    Now instead of 389 zombies for 4 players on round 26, it's now 84

    You can also make it a X number of zombies for X number of players, all from the simple function, 8 players in game but only spawns zombies up to 6 players.

    Or change how much zombies get added per player for better
    calculating, example on round 40 for normal calculations:
    1 Player: 168 Zombies
    2 Players: 312 Zombies, 1.85 Worth of zombies
    3 Players: 600 Zombies, 3.57 Worth of zombies
    4 Players: 888 Zombies, 5.28 Worth of zombies

    It's also possible to change the formula, you can have any number of zombies you want.

    the change is simple:
    From --->

    if ( player_num == 1 )
            max = max + int( 0.5 * level.zombie_vars["zombie_ai_per_player"] * multiplier );
        else
    	max = max + int( ( player_num - 1 ) * level.zombie_vars["zombie_ai_per_player"] * multiplier );
    

    To --->

    if ( player_num == 1 )
            max = max + int( 0.5 * level.zombie_vars["zombie_ai_per_player"] * multiplier );
        else
    	max = max + int( 0.5 * level.zombie_vars["zombie_ai_per_player"] * multiplier );
    

    Here is the script:

    #include common_scripts\utility;
    #include maps\mp\_utility;
    #include maps\mp\zombies\_zm_utility;
    #include maps\mp\zombies\_zm_ffotd;
    #include maps\mp\zombies\_zm;
    #include maps\mp\_visionset_mgr;
    #include maps\mp\zombies\_zm_devgui;
    #include maps\mp\zombies\_zm_zonemgr;
    #include maps\mp\zombies\_zm_unitrigger;
    #include maps\mp\zombies\_zm_audio;
    #include maps\mp\zombies\_zm_blockers;
    #include maps\mp\zombies\_zm_bot;
    #include maps\mp\zombies\_zm_clone;
    #include maps\mp\zombies\_zm_buildables;
    #include maps\mp\zombies\_zm_equipment;
    #include maps\mp\zombies\_zm_laststand;
    #include maps\mp\zombies\_zm_magicbox;
    #include maps\mp\zombies\_zm_perks;
    #include maps\mp\zombies\_zm_playerhealth;
    #include maps\mp\zombies\_zm_power;
    #include maps\mp\zombies\_zm_powerups;
    #include maps\mp\zombies\_zm_score;
    #include maps\mp\zombies\_zm_spawner;
    #include maps\mp\zombies\_zm_gump;
    #include maps\mp\zombies\_zm_timer;
    #include maps\mp\zombies\_zm_traps;
    #include maps\mp\zombies\_zm_weapons;
    #include maps\mp\zombies\_zm_tombstone;
    #include maps\mp\zombies\_zm_stats;
    #include maps\mp\zombies\_zm_pers_upgrades;
    #include maps\mp\gametypes_zm\_zm_gametype;
    #include maps\mp\zombies\_zm_pers_upgrades_functions;
    #include maps\mp\_demo;
    #include maps\mp\gametypes_zm\_hud_util;
    #include maps\mp\zombies\_zm_melee_weapon;
    #include maps\mp\zombies\_zm_ai_dogs;
    #include maps\mp\zombies\_zm_pers_upgrades_system;
    #include maps\mp\gametypes_zm\_weapons;
    #include maps\mp\zombies\_zm_ai_basic;
    #include maps\mp\zombies\_zm_game_module;
    
    main()
    {
    	replaceFunc(maps\mp\zombies\_zm::round_spawning, ::round_spawning);	
    }
    
    round_spawning()
    {
        level endon( "intermission" );
        level endon( "end_of_round" );
        level endon( "restart_round" );
    /#
        level endon( "kill_round" );
    #/
    
        if ( level.intermission )
            return;
    
    /#
        if ( getdvarint( #"zombie_cheat" ) == 2 || getdvarint( #"zombie_cheat" ) >= 4 )
            return;
    #/
    
        if ( level.zombie_spawn_locations.size < 1 )
        {
    /#
            assertmsg( "No active spawners in the map.  Check to see if the zone is active and if it's pointing to spawners." );
    #/
            return;
        }
    
        ai_calculate_health( level.round_number );
        count = 0;
        players = get_players();
    
        for ( i = 0; i < players.size; i++ )
            players[i].zombification_time = 0;
    
        max = level.zombie_vars["zombie_max_ai"];
        multiplier = level.round_number / 5;
    
        if ( multiplier < 1 )
            multiplier = 1;
    
        if ( level.round_number >= 10 )
            multiplier = multiplier * ( level.round_number * 0.15 );
    
        player_num = get_players().size;
    
        if ( player_num == 1 )
            max = max + int( 0.5 * level.zombie_vars["zombie_ai_per_player"] * multiplier );
        else
    	{
    		//max = max + int( ( player_num - 1 ) * level.zombie_vars["zombie_ai_per_player"] * multiplier );
    		max = max + int( 0.5 * level.zombie_vars["zombie_ai_per_player"] * multiplier );
    		iPrintLn("^8Zombies count set to 1 Player :D");
    	}
             
        if ( !isdefined( level.max_zombie_func ) )
            level.max_zombie_func = ::default_max_zombie_func;
    
        if ( !( isdefined( level.kill_counter_hud ) && level.zombie_total > 0 ) )
        {
            level.zombie_total = [[ level.max_zombie_func ]]( max );
            level notify( "zombie_total_set" );
        }
    
        if ( isdefined( level.zombie_total_set_func ) )
            level thread [[ level.zombie_total_set_func ]]();
    
        if ( level.round_number < 10 || level.speed_change_max > 0 )
            level thread zombie_speed_up();
    
        mixed_spawns = 0;
        old_spawn = undefined;
    
        while ( true )
        {
            while ( get_current_zombie_count() >= level.zombie_ai_limit || level.zombie_total <= 0 )
                wait 0.1;
    
            while ( get_current_actor_count() >= level.zombie_actor_limit )
            {
                clear_all_corpses();
                wait 0.1;
            }
    
            flag_wait( "spawn_zombies" );
    
            while ( level.zombie_spawn_locations.size <= 0 )
                wait 0.1;
    
            run_custom_ai_spawn_checks();
            spawn_point = level.zombie_spawn_locations[randomint( level.zombie_spawn_locations.size )];
    
            if ( !isdefined( old_spawn ) )
                old_spawn = spawn_point;
            else if ( spawn_point == old_spawn )
                spawn_point = level.zombie_spawn_locations[randomint( level.zombie_spawn_locations.size )];
    
            old_spawn = spawn_point;
    
            if ( isdefined( level.mixed_rounds_enabled ) && level.mixed_rounds_enabled == 1 )
            {
                spawn_dog = 0;
    
                if ( level.round_number > 30 )
                {
                    if ( randomint( 100 ) < 3 )
                        spawn_dog = 1;
                }
                else if ( level.round_number > 25 && mixed_spawns < 3 )
                {
                    if ( randomint( 100 ) < 2 )
                        spawn_dog = 1;
                }
                else if ( level.round_number > 20 && mixed_spawns < 2 )
                {
                    if ( randomint( 100 ) < 2 )
                        spawn_dog = 1;
                }
                else if ( level.round_number > 15 && mixed_spawns < 1 )
                {
                    if ( randomint( 100 ) < 1 )
                        spawn_dog = 1;
                }
    
                if ( spawn_dog )
                {
                    keys = getarraykeys( level.zones );
    
                    for ( i = 0; i < keys.size; i++ )
                    {
                        if ( level.zones[keys[i]].is_occupied )
                        {
                            akeys = getarraykeys( level.zones[keys[i]].adjacent_zones );
    
                            for ( k = 0; k < akeys.size; k++ )
                            {
                                if ( level.zones[akeys[k]].is_active && !level.zones[akeys[k]].is_occupied && level.zones[akeys[k]].dog_locations.size > 0 )
                                {
                                    maps\mp\zombies\_zm_ai_dogs::special_dog_spawn( undefined, 1 );
                                    level.zombie_total--;
                                    wait_network_frame();
                                }
                            }
                        }
                    }
                }
            }
    
            if ( isdefined( level.zombie_spawners ) )
            {
                if ( isdefined( level.use_multiple_spawns ) && level.use_multiple_spawns )
                {
                    if ( isdefined( spawn_point.script_int ) )
                    {
                        if ( isdefined( level.zombie_spawn[spawn_point.script_int] ) && level.zombie_spawn[spawn_point.script_int].size )
                            spawner = random( level.zombie_spawn[spawn_point.script_int] );
                        else
                        {
    /#
                            assertmsg( "Wanting to spawn from zombie group " + spawn_point.script_int + "but it doens't exist" );
    #/
                        }
                    }
                    else if ( isdefined( level.zones[spawn_point.zone_name].script_int ) && level.zones[spawn_point.zone_name].script_int )
                        spawner = random( level.zombie_spawn[level.zones[spawn_point.zone_name].script_int] );
                    else if ( isdefined( level.spawner_int ) && ( isdefined( level.zombie_spawn[level.spawner_int].size ) && level.zombie_spawn[level.spawner_int].size ) )
                        spawner = random( level.zombie_spawn[level.spawner_int] );
                    else
                        spawner = random( level.zombie_spawners );
                }
                else
                    spawner = random( level.zombie_spawners );
    
                ai = spawn_zombie( spawner, spawner.targetname, spawn_point );
            }
    
            if ( isdefined( ai ) )
            {
                level.zombie_total--;
                ai thread round_spawn_failsafe();
                count++;
            }
    
            wait( level.zombie_vars["zombie_spawn_delay"] );
            wait_network_frame();
        }
    }
    1 Reply Last reply
    1
    • Kyber66undefined Offline
      Kyber66undefined Offline
      Kyber66
      wrote on Oct 28, 2024, 5:14 AM last edited by
      #2

      How do I add this to my game?

      Resxtundefined 1 Reply Last reply Oct 28, 2024, 11:11 AM
      1
      • Resxtundefined Offline
        Resxtundefined Offline
        Resxt Plutonium Staff
        replied to Kyber66 on Oct 28, 2024, 11:11 AM last edited by
        #3

        Kyber66 save the content of the last code block as a .gsc file using notepad then read our doc to place the file in the right directory

        Kyber66undefined 1 Reply Last reply Oct 31, 2024, 5:27 AM
        1
        • Xerxesundefined Offline
          Xerxesundefined Offline
          Xerxes Plutonium Staff
          wrote on Oct 28, 2024, 4:43 PM last edited by
          #4

          Ivobardolf why don't you remove the now useless if?
          You had if x then a else b
          Now you got if x then a else a
          You can rewrite to to just a.

          undefined 1 Reply Last reply Nov 2, 2024, 11:01 AM
          1
          • Kyber66undefined Offline
            Kyber66undefined Offline
            Kyber66
            replied to Resxt on Oct 31, 2024, 5:27 AM last edited by
            #5

            Resxt Thanks for the help

            1 Reply Last reply
            1
            • Kyber66undefined Offline
              Kyber66undefined Offline
              Kyber66
              wrote on Oct 31, 2024, 4:16 PM last edited by
              #6

              On the final line of the script you need to remove ''' else it crashes to menu every time

              undefined 1 Reply Last reply Nov 2, 2024, 12:06 PM
              1
              • undefined Offline
                undefined Offline
                Ivobardolf
                replied to Xerxes on Nov 2, 2024, 11:01 AM last edited by
                #7

                Xerxes which one 😅

                1 Reply Last reply
                0
                • undefined Offline
                  undefined Offline
                  Ivobardolf
                  replied to Kyber66 on Nov 2, 2024, 12:06 PM last edited by
                  #8

                  Kyber66 Fixed 👍

                  1 Reply Last reply
                  0

                  • Login

                  • Don't have an account? Register

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