Max Ammo changed to work like BO3/BO4/Cold War (Clip Refills)

Topic created ยท 11 Posts ยท 1825 Views
  • Sorry if it already exists, but I couldn't find it. Just a buncha old scripts that wouldn't work., so I made my own with help from the discord

    #include common_scripts\utility;
    #include maps\mp\_utility;
    #include maps\mp\zombies\_zm_utility;
    #include maps\mp\zombies\_zm_powerups;
    
    init()
    {
        level thread onPlayerConnect();
    }
    
    onPlayerConnect()
    {
        level endon("game_ended");
        for(;;)
        {
            level waittill("connected", player);
            player thread onPlayerSpawned();
        }
    }
    
    onPlayerSpawned()
    {
        self endon("disconnect");
        level endon("game_ended");
        for(;;)
        {
            self waittill("spawned_player");
            if(!isDefined(level.maC1))
            {
                wait 5;
                level.maC1 = "DONE";
        		replaceFunc(maps\mp\zombies\_zm_powerups::full_ammo_powerup,::new_full_ammo_powerup);
            }    
        }
    }
    
    new_full_ammo_powerup( drop_item, player )
    {
        players = get_players( player.team );
    
        if ( isdefined( level._get_game_module_players ) ){
            players = [[ level._get_game_module_players ]]( player );
        }
    
        for ( i = 0; i < players.size; i++ )
        {
            if ( players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() )
                continue;
    
            primary_weapons = players[i] getweaponslist( 1 );
            players[i] notify( "zmb_max_ammo" );
            players[i] notify( "zmb_lost_knife" );
            players[i] notify( "zmb_disable_claymore_prompt" );
            players[i] notify( "zmb_disable_spikemore_prompt" );
    
            for ( x = 0; x < primary_weapons.size; x++ )
            {
            	curWeapon = primary_weapons[x];
                if ( level.headshots_only && is_lethal_grenade(curWeapon) ){
                    continue;
                }
    
                if ( isDefined( level.zombie_include_equipment ) && isDefined( level.zombie_include_equipment[curWeapon] ) ){
                    continue;
                }
    
                if ( isDefined( level.zombie_weapons_no_max_ammo ) && isDefined( level.zombie_weapons_no_max_ammo[curWeapon] ) ){
                    continue;
                }
    
                if ( players[i] hasweapon( curWeapon ) ){
                    players[i] givemaxammo( curWeapon );
                    players[i] setweaponammoclip( curWeapon, 300);
                }
    
            }
        }
    
        level thread full_ammo_on_hud( drop_item, player.team );
    }
    

    Please report any bugs or errors.

    For the record, there is one I know of already, if you have a dual wield (eg. dual wield five sevens) and you have another weapon out when you get the max ammo, the dual wield weapon will only have one clip refilled.
    One of them won't
    If you're holding the dual wield, it refills as expected.
    If anyone knows how to fix, be my guest

  • nice one lad!

  • I believe the Cold War Mod might have this, not sure though, but nice release as a standalone ๐Ÿ™‚

  • Nice release.
    I'm so used to this since I only play BO3 custom maps

  • @MisterX2003 I believe you can omit this segment:

    init()
    {
        level thread onPlayerConnect();
    }
    
    onPlayerConnect()
    {
        level endon("game_ended");
        for(;;)
        {
            level waittill("connected", player);
            player thread onPlayerSpawned();
        }
    }
    
    onPlayerSpawned()
    {
        self endon("disconnect");
        level endon("game_ended");
        for(;;)
        {
            self waittill("spawned_player");
            if(!isDefined(level.maC1))
            {
                wait 5;
                level.maC1 = "DONE";
        		replaceFunc(maps\mp\zombies\_zm_powerups::full_ammo_powerup,::new_full_ammo_powerup);
            }    
        }
    }
    

    and write it as

    main()
    {
    	replaceFunc(maps\mp\zombies\_zm_powerups::full_ammo_powerup,::new_full_ammo_powerup);
    }
    

    afaik replaceFunc only needs to be run once per game, your code runs it once for each player.

  • This post is deleted!
  • @The_Spectre115 As the plutonium docs say, you cannot "inject" things in any way, this word usually means that we are gonna use an external program that will patch the game memory wile its running, and thats exatcly what triggers the ban system.

    We instead "load" the scripts letting the Compiled GSC in a predefined folder plutonium setted up for it. the tutorial for it is on the point 6 in here:

    https://plutonium.pw/docs/modding/loading-mods/#t6

  • @znchi just tested this one, it also works thanks to both of u ๐Ÿ‘ ๐Ÿ‘

  • This causes an infinite loop crash seemingly randomly on picking up a max ammo.

  • @FantasticLoki copied the actual max ammo code and added the extra line to fill the clip. works all the time for me without issues.

    new_full_ammo_powerup(drop_item, player) {
            players = get_players( player.team );
    
    	if ( isDefined( level._get_game_module_players ) ) {
    		players = [[ level._get_game_module_players ]]( player );
    	}
    
    	i = 0;
    	while ( i < players.size ) {
    		if ( players[ i ] maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) {
    			i++;
    			continue;
    		}    
    		else {
    			primary_weapons = players[ i ] getweaponslist( 1 );
    			players[ i ] notify( "zmb_max_ammo" );
    			players[ i ] notify( "zmb_lost_knife" );
    			players[ i ] notify( "zmb_disable_claymore_prompt" );
    			players[ i ] notify( "zmb_disable_spikemore_prompt" );
    
    			x = 0;
    			while ( x < primary_weapons.size ) {
    				if ( level.headshots_only && is_lethal_grenade( primary_weapons[ x ] ) ) {
    					x++;
    					continue;
    				}
    				else {
    					if ( isDefined( level.zombie_include_equipment ) && isDefined( level.zombie_include_equipment[ primary_weapons[ x ] ] ) )	{
    						x++;
    						continue;
    					}
    					else {
    						if ( players[ i ] hasweapon( primary_weapons[ x ] ) ) {
    							players[ i ] givemaxammo( primary_weapons[ x ] );
                  players[ i ] setweaponammoclip( primary_weapons[ x ], weaponclipsize( primary_weapons[ x ] ) );
    						}
    					}
    				}
    				x++;
    			}
    		}
    		i++;
    	}
    	level thread full_ammo_on_hud( drop_item, player.team );
    }
    
  • How can I add this to my server?

Log in to reply