Raised This Month: $12 Target: $400
 3% 

Solved [CSGO] How to prevent reloading if you have too much ammo


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
impossible_cc
Senior Member
Join Date: Sep 2018
Location: Ukraine
Old 01-13-2019 , 15:20   [CSGO] How to prevent reloading if you have too much ammo
Reply With Quote #1

For example, I want to give any weapon more ammo, then it could have normally -> I do this
PHP Code:
void GiveAmmoCurrentWeapon(int clientint amount)
{
    
int weaponIndex = -1;
//First we try to find weapon in slot0 (primary), if nothing was found check slot1(pistol)
    
for(int i 0<= && weaponIndex == -i++)
    {
        
weaponIndex GetPlayerWeaponSlot(clienti);
    }
//if we have found a weapon
    
if(weaponIndex != -&& IsValidEdict(weaponIndex))
    {
//Set reserve ammo
        
SetEntProp(weaponIndexProp_Send"m_iPrimaryReserveAmmoCount"GetEntProp(weaponIndexProp_Send"m_iPrimaryReserveAmmoCount") + amount);
//Set current ammo
        
SetEntProp(weaponIndexProp_Send"m_iClip1"GetEntProp(weaponIndexProp_Send"m_iClip1") + amount);
    }

Everything works fine except player with additive ammo can press reload button and game will allow him to do it, ammo will be reseted to normal. Is there any way to prevent reloading if you have too much ammo?

Last edited by impossible_cc; 01-14-2019 at 07:12.
impossible_cc is offline
Bacardi
Veteran Member
Join Date: Jan 2010
Location: mom's basement
Old 01-13-2019 , 15:44   Re: [CSGO] How to prevent reloading if you have too much ammo
Reply With Quote #2

...what about OnPlayerRunCmd, you block reload button ?

https://sm.alliedmods.net/new-api/sd...OnPlayerRunCmd

Last edited by Bacardi; 01-13-2019 at 15:45.
Bacardi is offline
impossible_cc
Senior Member
Join Date: Sep 2018
Location: Ukraine
Old 01-13-2019 , 15:50   Re: [CSGO] How to prevent reloading if you have too much ammo
Reply With Quote #3

Quote:
Originally Posted by Bacardi View Post
...what about OnPlayerRunCmd, you block reload button ?

https://sm.alliedmods.net/new-api/sd...OnPlayerRunCmd
Didn't think that is so easy, lol.
I will try, thanks.
impossible_cc is offline
impossible_cc
Senior Member
Join Date: Sep 2018
Location: Ukraine
Old 01-13-2019 , 15:57   Re: [CSGO] How to prevent reloading if you have too much ammo
Reply With Quote #4

But what about getting max ammo of weapon? Or only manually using an array?
impossible_cc is offline
Bacardi
Veteran Member
Join Date: Jan 2010
Location: mom's basement
Old 01-13-2019 , 16:53   Re: [CSGO] How to prevent reloading if you have too much ammo
Reply With Quote #5

You could check clip size from csgo, items_game.txt file.

Or why not store weapon clip size in StringMap by weapon name with clip size, when entity is created (spawn)
Bacardi is offline
impossible_cc
Senior Member
Join Date: Sep 2018
Location: Ukraine
Old 01-13-2019 , 17:00   Re: [CSGO] How to prevent reloading if you have too much ammo
Reply With Quote #6

So this seems like working, but now when I'm holding reload button, server freezes.
I will try now to block weapon_reload event.

here s the code
PHP Code:
#include <sourcemod>
#include <sdkhooks>
#include <sdktools>

#define WEAPONS_MAX 34

char WeaponList[WEAPONS_MAX][] = 
{
    
// pistols
    
"weapon_deagle",        // 0
    
"weapon_elite",            // 1
    
"weapon_fiveseven",        // 2
    
"weapon_glock",            // 3
    
"weapon_cz75a",            // 4
    
"weapon_p250",            // 5
    
"weapon_hkp2000",        // 6
    
"weapon_revolver",        // 7
    
"weapon_tec9",            // 8
    
"weapon_usp_silencer",    // 9
    // shotguns
    
"weapon_xm1014",        // 10
    
"weapon_mag7",            // 11
    
"weapon_nova",            // 12
    
"weapon_sawedoff",        // 13
    // smg    
    
"weapon_mac10",            // 14
    
"weapon_p90",            // 15
    
"weapon_ump45",            // 16
    
"weapon_mp7",            // 17
    
"weapon_mp9",            // 18
    
"weapon_bizon",            // 19
    // nice guns
    
"weapon_ak47",            // 20
    
"weapon_aug",            // 21
    
"weapon_famas",            // 22
    
"weapon_galilar",        // 23
    
"weapon_m4a1",            // 24
    
"weapon_m4a1_silencer",    // 25
    
"weapon_sg556",            // 26
    // snipers
    
"weapon_awp",            // 27
    
"weapon_g3sg1",            // 28
    
"weapon_scar20",        // 29
    
"weapon_ssg08",            // 30
    // machineguns            
    
"weapon_m249",            // 31
    
"weapon_negev",            // 32
    //added later :)
    
"weapon_mp5sd"            // 33
};


int WeaponMaxAmmo[WEAPONS_MAX] =
{
    
7,        //0"weapon_deagle",    
    
30,        //1"weapon_elite",        
    
20,        //2"weapon_fiveseven",        
    
20,        //3"weapon_glock",            
    
12,        //4"weapon_cz75a",            
    
13,        //5"weapon_p250",            
    
13,        //6"weapon_hkp2000",        
    
8,        //7"weapon_revolver",    
    
18,        //8"weapon_tec9",            
    
12,        //9"weapon_usp_silencer",    
    
7,        //10"weapon_xm1014",        
    
5,        //11"weapon_mag7",            
    
8,        //12"weapon_nova",            
    
7,        //"weapon_sawedoff",13        
    
30,        //"weapon_mac10",        14    
    
50,        //"weapon_p90",            15
    
25,        //"weapon_ump45",        16
    
30,        //"weapon_mp7",        17
    
30,        //"weapon_mp9",            18
    
64,        //"weapon_bizon",        19
    
30,        //"weapon_ak47",        20
    
30,        //"weapon_aug",21
    
25,        //"weapon_famas",22        
    
35,        //"weapon_galilar",23    
    
30,        //"weapon_m4a1",    24        
    
20,        //"weapon_m4a1_silencer",25
    
30,        //"weapon_sg556",        26
    
10,        //"weapon_awp",        27
    
20,        //"weapon_g3sg1",        28
    
20,        //"weapon_scar20",        29
    
10,        //"weapon_ssg08",            30
    
100,    //"weapon_m249",            31
    
150,    //"weapon_negev"            32
    
30        //"weapon_mp5sd"            33
};

char classname[32];
public 
Action OnPlayerRunCmd(int clientintbuttonsintimpulsefloat vel[3], float angles[3], intweaponintsubtypeintcmdnuminttickcountintseedint mouse[2])
{
    if(
buttons IN_RELOAD)
    {
        
int WeaponIndex GetEntPropEnt(clientProp_Data"m_hActiveWeapon");
        if(
IsValidEdict(WeaponIndex))
        {
            
int CurrentAmmo GetEntProp(WeaponIndexProp_Send"m_iClip1");
            if(
CurrentAmmo 0)
            {
                
GetClientWeapon(clientclassname32);
                if(!
StrEqual(classname"weapon_knife"))
                {
                    
int WeaponArrayIndex = -1;
                    for(
int i 0WEAPONS_MAXi++)
                    {
                        if(
StrEqual(classnameWeaponList[i]))
                        {
                            
WeaponArrayIndex i;
                            break;
                        }
                    }
                    if(
WeaponArrayIndex != -1)
                    {
                        if(
WeaponMaxAmmo[WeaponArrayIndex] < CurrentAmmo)
                        {
                            return 
Plugin_Handled;
                        }
                    }
                    else
                    {
                        
LogError("Unknown weapon - %s"classname);
                    }
                }
            }
        }
    }
    return 
Plugin_Continue;


Last edited by impossible_cc; 01-13-2019 at 17:10.
impossible_cc is offline
impossible_cc
Senior Member
Join Date: Sep 2018
Location: Ukraine
Old 01-13-2019 , 17:23   Re: [CSGO] How to prevent reloading if you have too much ammo
Reply With Quote #7

Seems like I cannot block weapon_reload through event.
I will be grateful for any help!
I have message in chat, but this code doesnt prevent the reload.
PHP Code:
#include <sourcemod>
#include <sdkhooks>
#include <sdktools>

#define WEAPONS_MAX 34
char WeaponList[WEAPONS_MAX][] = 
{
    
// pistols
    
"weapon_deagle",        // 0
    
"weapon_elite",            // 1
    
"weapon_fiveseven",        // 2
    
"weapon_glock",            // 3
    
"weapon_cz75a",            // 4
    
"weapon_p250",            // 5
    
"weapon_hkp2000",        // 6
    
"weapon_revolver",        // 7
    
"weapon_tec9",            // 8
    
"weapon_usp_silencer",    // 9
    // shotguns
    
"weapon_xm1014",        // 10
    
"weapon_mag7",            // 11
    
"weapon_nova",            // 12
    
"weapon_sawedoff",        // 13
    // smg    
    
"weapon_mac10",            // 14
    
"weapon_p90",            // 15
    
"weapon_ump45",            // 16
    
"weapon_mp7",            // 17
    
"weapon_mp9",            // 18
    
"weapon_bizon",            // 19
    // nice guns
    
"weapon_ak47",            // 20
    
"weapon_aug",            // 21
    
"weapon_famas",            // 22
    
"weapon_galilar",        // 23
    
"weapon_m4a1",            // 24
    
"weapon_m4a1_silencer",    // 25
    
"weapon_sg556",            // 26
    // snipers
    
"weapon_awp",            // 27
    
"weapon_g3sg1",            // 28
    
"weapon_scar20",        // 29
    
"weapon_ssg08",            // 30
    // machineguns            
    
"weapon_m249",            // 31
    
"weapon_negev",            // 32
    //added later :)
    
"weapon_mp5sd"            // 33
};


int WeaponMaxAmmo[WEAPONS_MAX] =
{
    
7,        //0"weapon_deagle",    
    
30,        //1"weapon_elite",        
    
20,        //2"weapon_fiveseven",        
    
20,        //3"weapon_glock",            
    
12,        //4"weapon_cz75a",            
    
13,        //5"weapon_p250",            
    
13,        //6"weapon_hkp2000",        
    
8,        //7"weapon_revolver",    
    
18,        //8"weapon_tec9",            
    
12,        //9"weapon_usp_silencer",    
    
7,        //10"weapon_xm1014",        
    
5,        //11"weapon_mag7",            
    
8,        //12"weapon_nova",            
    
7,        //"weapon_sawedoff",13        
    
30,        //"weapon_mac10",        14    
    
50,        //"weapon_p90",            15
    
25,        //"weapon_ump45",        16
    
30,        //"weapon_mp7",        17
    
30,        //"weapon_mp9",            18
    
64,        //"weapon_bizon",        19
    
30,        //"weapon_ak47",        20
    
30,        //"weapon_aug",21
    
25,        //"weapon_famas",22        
    
35,        //"weapon_galilar",23    
    
30,        //"weapon_m4a1",    24        
    
20,        //"weapon_m4a1_silencer",25
    
30,        //"weapon_sg556",        26
    
10,        //"weapon_awp",        27
    
20,        //"weapon_g3sg1",        28
    
20,        //"weapon_scar20",        29
    
10,        //"weapon_ssg08",            30
    
100,    //"weapon_m249",            31
    
150,    //"weapon_negev"            32
    
30        //"weapon_mp5sd"            33
};

public 
void OnPluginStart()
{
    
HookEvent("weapon_reload"Event_ReloadEventHookMode_Pre);
}

char classname[32];
public 
Action Event_Reload(Event event, const char[] namebool dontBroadcast)
{
    
int client GetClientOfUserId(event.GetInt("userid"));
    if(
ValidPlayer(clienttrue))
    {
        
int WeaponIndex GetEntPropEnt(clientProp_Data"m_hActiveWeapon");
        if(
IsValidEdict(WeaponIndex))
        {
            
int CurrentAmmo GetEntProp(WeaponIndexProp_Send"m_iClip1");
            if(
CurrentAmmo 0)
            {
                
GetClientWeapon(clientclassname32);
                if(!
StrEqual(classname"weapon_knife"))
                {
                    
int WeaponArrayIndex = -1;
                    for(
int i 0WEAPONS_MAXi++)
                    {
                        if(
StrEqual(classnameWeaponList[i]))
                        {
                            
WeaponArrayIndex i;
                            break;
                        }
                    }
                    if(
WeaponArrayIndex != -1)
                    {
                        if(
WeaponMaxAmmo[WeaponArrayIndex] < CurrentAmmo)
                        {
                            
PrintToChat(client"Stop reloading...weapon - %s"classname);
                            return 
Plugin_Handled;
                        }
                    }
                    else
                    {
                        
LogError("Unknown weapon - %s"classname);
                    }
                }
            }
        }
    }
    return 
Plugin_Continue;
}

stock bool ValidPlayer(int client,bool check_alive false
{
    if(
client>&& client<=MaxClients && IsClientConnected(client) && IsClientInGame(client))
    {
        if(
check_alive && !IsPlayerAlive(client))
        {
            return 
false;
        }
        return 
true;
    }
    return 
false;


Last edited by impossible_cc; 01-13-2019 at 17:33.
impossible_cc is offline
Bacardi
Veteran Member
Join Date: Jan 2010
Location: mom's basement
Old 01-13-2019 , 17:37   Re: [CSGO] How to prevent reloading if you have too much ammo
Reply With Quote #8

Sry, I was making plugin what store weapons clip size... not by weapon name. weapon m_iItemDefinitionIndex
Spoiler


anyway I need to go sleep now.
Bacardi is offline
impossible_cc
Senior Member
Join Date: Sep 2018
Location: Ukraine
Old 01-13-2019 , 17:40   Re: [CSGO] How to prevent reloading if you have too much ammo
Reply With Quote #9

I have an idea how to do it.
I need to hook event <when you take something in your hand or switch weapon>.
Then every time this event fires, I store in global array weapon index, weapon index in listWeapons array .
Also I hook post weapon_fire.
Every time this event fires I store ammo in global array.
And OnPlayerRunCmd (buttons & IN_RELOAD) I check stored values, if ammo is more then okay, i prevent reloading.
The problem is - Is there any switch weapon event in cs go??

Sorry for my bad English, I will be grateful for any help!

Last edited by impossible_cc; 01-13-2019 at 17:41.
impossible_cc is offline
Bacardi
Veteran Member
Join Date: Jan 2010
Location: mom's basement
Old 01-13-2019 , 17:54   Re: [CSGO] How to prevent reloading if you have too much ammo
Reply With Quote #10

In csgo, you not get weapon name from entity classname,
you need get weapon m_iItemDefinitionIndex number, look weapon prefab from items_game.txt

Or try cstrike extension.
- Get weapon m_iItemDefinitionIndex
- convert weapon m_iItemDefinitionIndex to -> https://sm.alliedmods.net/new-api/cs...emDefIndexToID (CSWeaponID)
- CSWeaponID to alias https://sm.alliedmods.net/new-api/cs...eaponIDToAlias
__________________
Do not Private Message @me

Last edited by Bacardi; 01-13-2019 at 17:56.
Bacardi is offline
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 08:08.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode