SA-MP Forums Archive
Anti weapon hack assistance - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (https://sampforum.blast.hk/forumdisplay.php?fid=12)
+--- Thread: Anti weapon hack assistance (/showthread.php?tid=570627)



Anti weapon hack assistance - LocMax - 12.04.2015

So I basically made the stock for giving the weapons and I made a check.

Variable:
pawn Код:
new Weapons[MAX_PLAYERS][13], Ammo[MAX_PLAYERS][13];
Stock:
pawn Код:
stock GivePlayerWeaponEx(playerid, weaponid, ammo)
{
    Weapons[playerid][GetWeaponSlot(weaponid)] = weaponid;
    Ammo[playerid][GetWeaponSlot(weaponid)] = ammo;
    return GivePlayerWeapon(playerid, weaponid, ammo);
}
Check:
pawn Код:
if(GetPlayerWeapon(i) != 0 && GetPlayerAmmo(i) != 0)
            {
                new weaps[13][2];
                for(new s = 0; s <= 12; s++)
                {
                    GetPlayerWeaponData(i, s, weaps[i][0], weaps[i][1]);
                    if(Weapons[i][s] != weaps[i][0] && )
                    {
                        format(strtd,sizeof(strtd), "(SERVER): %s(%d) possible weapon hacks (%s).", PlayerInfo[i][Name], i, WeaponName(weaps[i][0]));
                        SendAdminMessage(strtd, 0xD10000AA, 1);
                    }
                    if(Ammo[i][s] < weaps[i][1])
                    {
                        format(strtd,sizeof(strtd), "(SERVER): %s(%d) possible ammo hacks (%d) of weap. (%s).", PlayerInfo[i][Name], i, weaps[i][1], WeaponName(weaps[i][0]));
                        SendAdminMessage(strtd, 0xD10000AA, 1);
                    }
                    printf("sweapon %d, weapon %d, sammo %d, ammo %d", Weapons[i][0], weaps[i][0], Ammo[i][s], weaps[i][1]);
                }
            }
However it's giving some false information in the printf message, every time the variable Weapons is 0, the ammo variable works but the Weapons doesn't.

Example, I gave myself desert eagle and this is the result:
sweapon = variable weapon, sammo = variable ammo and ignore the slot part, didn't use it for this case.

Код:
[10:17:30] sweapon 0, weapon 24, sammo 250, ammo 300, sslot , slot 
[10:17:30] sweapon 0, weapon 0, sammo 200, ammo 0, sslot , slot 
[10:17:30] sweapon 0, weapon 0, sammo 0, ammo 0, sslot , slot 
[10:17:30] sweapon 0, weapon 0, sammo 400, ammo 0, sslot , slot 
[10:17:30] sweapon 0, weapon 0, sammo 0, ammo 0, sslot , slot 
[10:17:30] sweapon 0, weapon 0, sammo 0, ammo 0, sslot , slot 
[10:17:30] sweapon 0, weapon 0, sammo 4, ammo 0, sslot , slot 
[10:17:30] sweapon 0, weapon 0, sammo 0, ammo 0, sslot , slot 
[10:17:30] sweapon 0, weapon 0, sammo 0, ammo 0, sslot , slot 
[10:17:30] sweapon 0, weapon 0, sammo 0, ammo 0, sslot , slot 
[10:17:30] sweapon 0, weapon 0, sammo 0, ammo 0, sslot , slot
So what's wrong, how should I fix it?


Re: Anti weapon hack assistance - R0 - 12.04.2015

didnt check all of the code but change this:
pawn Код:
printf("sweapon %d, weapon %d, sammo %d, ammo %d", Weapons[i][0], weaps[i][0], Ammo[i][s], weaps[i][1]);
to this:
pawn Код:
printf("sweapon %d, weapon %d, sammo %d, ammo %d", Weapons[i][s], weaps[i][0], Ammo[i][s], weaps[i][1]);
and also change this:
pawn Код:
GetPlayerWeaponData(i, s, weaps[i][0], weaps[i][1]); // i is playerid not slot id
to:
pawn Код:
GetPlayerWeaponData(i, s, weaps[s][0], weaps[s][1]);



Re: Anti weapon hack assistance - LocMax - 12.04.2015

I managed to have it working by changing some stuff.

Stock:
pawn Код:
stock GivePlayerWeaponEx(playerid, weaponid, ammo)
{
    Weapons[playerid][GetWeaponSlot(weaponid)] = weaponid;
    Ammo[playerid][GetWeaponSlot(weaponid)] += ammo;
    return GivePlayerWeapon(playerid, weaponid, ammo);
}
Check:
pawn Код:
if(GetPlayerWeapon(i) != 0 && GetPlayerAmmo(i) != 0)
            {
                new weapon = GetPlayerWeapon(i), ammo = GetPlayerAmmo(i);
                if(Weapons[i][GetWeaponSlot(weapon)] != weapon || Ammo[i][GetWeaponSlot(weapon)] < ammo)
                {
                    format(strtd,sizeof(strtd), "(SERVER): %s(%d) weap unbalance. Server-side: %s(%d), Client-side: %s(%d).", PlayerInfo[i][Name], i, WeaponName(Weapons[i][GetWeaponSlot(weapon)]), Ammo[i][GetWeaponSlot(weapon)], WeaponName(weapon), ammo);
                    SendAdminMessage(strtd, 0xD10000AA, 1);
                }
                printf("sweapon %d, weapon %d, sammo %d, ammo %d", Weapons[i][GetWeaponSlot(weapon)], weapon, Ammo[i][GetWeaponSlot(weapon)], ammo);
            }
Looks fine now. Gonna test it more to see if I'm gonna find some bugs.


Re: Anti weapon hack assistance - R0 - 12.04.2015

Check what i have edited in my post,edit what i told you then you will be able to detect all guns once,not only the gun he is holding.


Re: Anti weapon hack assistance - LocMax - 12.04.2015

Thanks for helping!