Server-sided Money
#1

How to block server-sided money hackers without using this https://sampforum.blast.hk/showthread.php?tid=96418 ?
Reply
#2

pawn Код:
new pMoney[MAX_PLAYERS];
stock GivePlayerMoneyEx(playerid, amount)
{
    pMoney[playerid] += amount;
    ResetPlayerMoney(playerid);
    GivePlayerMoney(playerid, amount);
}
stock GetPlayerMoneyEx(playerid) return pMoney[playerid];

stock ResetPlayerMoneyEx(playerid)
{
    pMoney[playerid]=0;
    ResetPlayerMoney(playerid);
}

public OnPlayerUpdqte(playerid)
{
    if(GetPlayerMoney(playerid) > GetPlayerMoneyEx(playerid)) Ban(playerid);
    return 1;
}
Use GivePlayerMoneyEx, GetPlayerMoneyEx and ResetPlayerMoneyEx instead of GivePlayerMoney, GetPlayerMoney and ResetPlayerMoney.
Reply
#3

Quote:
Originally Posted by ATGOggy
Посмотреть сообщение
pawn Код:
new pMoney[MAX_PLAYERS];
stock GivePlayerMoneyEx(playerid, amount)
{
    pMoney[playerid] += amount;
    ResetPlayerMoney(playerid);
    GivePlayerMoney(playerid, amount);
}
stock GetPlayerMoneyEx(playerid) return pMoney[playerid];

stock ResetPlayerMoneyEx(playerid)
{
    pMoney[playerid]=0;
    ResetPlayerMoney(playerid);
}

public OnPlayerUpdqte(playerid)
{
    if(GetPlayerMoney(playerid) > GetPlayerMoneyEx(playerid)) Ban(playerid);
    return 1;
}
Use GivePlayerMoneyEx, GetPlayerMoneyEx and ResetPlayerMoneyEx instead of GivePlayerMoney, GetPlayerMoney and ResetPlayerMoney.
Alright, thanks. I will try!
Reply
#4

Is there any other ideas for protection?
Reply
#5

PHP код:
new money[MAX_PLAYERS];
public 
OnPlayerUpdate(playerid)
{
    if(
/*IsSpawnedCheck &&*/GetPlayerMoney(playerid)!=money[playerid]) {//player money doesnt match player variable money
        //its point is just to change hud money
        
ResetPlayerMoney(playerid);
        
GivePlayerMoney(playerid,money[playerid]);
    }
    return 
1;
}
GiveCash(playerid,amount){
    
money[playerid] += amount;
    
//its point is just to change hud money
    
ResetPlayerMoney(playerid);
    
GivePlayerMoney(playerid,money[playerid]);
    return 
1;
}
GetCash(playerid)return money[playerid];
//example
CMD:pay(playerid,par[]){
    new 
user,amount;
    if(
sscanf(par,"ud",user,amount))return SendClientMessage(playerid,-1,"/pay [userid] [amount]");
    if(!
IsPlayerConnected(user))return SendClientMessage(playerid,-1,"Other user is not connected!");
    if(
amount || amount money[playerid])return SendClientMessage(playerid,-1,"You dont have enough money!");
    
GiveCash(playerid,-amount);
    
GiveCash(user,amount);
    return 
1;

Reply
#6

No, no, no. There is absolutely no need to ban anyone nor to use a timer. Prevention is the best protection.

pawn Код:
// DEVELOPMENT SCRIPT

// ** INCLUDES

#include <a_samp>

// ** VARIABLES

// *** PER-PLAYER VARIABLES

new pMoney[MAX_PLAYERS];

// ** HOOKS

// *** GivePlayerMoney

stock Hook_GivePlayerMoney(playerid, amount)
{
    pMoney[playerid] += amount;
    return GivePlayerMoney(playerid, amount);
}

#if defined _ALS_GivePlayerMoney
    #undef GivePlayerMoney
#else
    #define _ALS_GivePlayerMoney
#endif
#define GivePlayerMoney Hook_GivePlayerMoney

// *** GetPlayerMoney

stock Hook_GetPlayerMoney(playerid)
{
    return pMoney[playerid];
}

#if defined _ALS_GetPlayerMoney
    #undef GetPlayerMoney
#else
    #define _ALS_GetPlayerMoney
#endif
#define GetPlayerMoney Hook_GetPlayerMoney

// *** ResetPlayerMoney

stock Hook_ResetPlayerMoney(playerid)
{
    pMoney[playerid] = 0;
    return ResetPlayerMoney(playerid);
}

#if defined _ALS_ResetPlayerMoney
    #undef ResetPlayerMoney
#else
    #define _ALS_ResetPlayerMoney
#endif
#define ResetPlayerMoney Hook_ResetPlayerMoney

// ** MAIN

main()
{
    print("Loaded \"anti_money_hacks.amx\".");
}

// ** CALLBACKS

public OnGameModeInit()
{
    return 1;
}

public OnGameModeExit()
{
    return 1;
}

public OnPlayerConnect(playerid)
{
    pMoney[playerid] = 0;
    return 1;
}
The only thing that you would need to do is make default in-game purchases alter the player's variable so that those purchases made in-game have an actual effect on their cash.

Note: Cheaters will see that their money on their hud changes, but their actual server-sided cash will remain un-altered.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)