Sempre teve esse negócio de hackear dinheiro e tals, então eu fiz isso (Eu sei que tem um monte).
Demorou por volta de 45 Minutos, mas nada muito complicado.
Funçoes.
Bem, eu fui criar natives e deu maior rolo >.< então, vai as forwards mesmo.
forward MoneyUpdate(); // Ele atualiza o dinheiro do player e checa se o dinheiro esta diferente. As funções estão dentro de um loop while e tem um timer nele desde o Init do GM e é executado a cada 5 seg.
forward MoneyUpdateForPlayer(playerid); // Ele apenas atualiza o dinheiro pro player.
forward MoneyCheckForPlayer(playerid, checkedid); // Checa se o dinheiro tá diferente do server. Se maior, alerta o admin se for menor, executa O MoneyUpdateForPlayer
forward SetPlayerServerMoney(playerid, ammount); // Seta a grana server side e atualiza ele
forward GivePlayerServerMoney(playerid, ammount); // mesma coisa, só que dá a grana
forward ResetPlayerServerMoney(playerid); // e aqui ele reseta
Créditos.
Créditos: [iPs] e [iPs] Miki. tbh não sei se estou mesmo na iPs.
Download.
Créditos: [iPs] e [iPs] Miki. tbh não sei se estou mesmo na iPs.
Download.
#includenew Money[MAX_PLAYERS];
new UpdateTimer;
forward MoneyUpdate();
forward MoneyUpdateForPlayer(playerid);
forward MoneyCheckForPlayer(playerid, checkedid);
forward SetPlayerServerMoney(playerid, ammount);
forward GivePlayerServerMoney(playerid, ammount);
forward ResetPlayerServerMoney(playerid);
public MoneyUpdate()
{
new i;
while(i < MAX_PLAYERS)
{
if(GetPlayerMoney(i) > Money[i])
{
new ii;
while(ii < MAX_PLAYERS)
{
if(IsPlayerAdmin(ii))
{
new str[80], str2[50], pName[21];
GetPlayerName(i, pName, 21);
format(str, 80, " -- O Player %s pode estar usando Cheat de Grana", pName);
format(str2, 50, " -- Client Side Money: %d | Server Side Money", GetPlayerMoney(i), Money[i]);
SendClientMessage(ii, 0xFFFFAAAA, str);
SendClientMessage(ii, 0xFFFFAAAA, str2);
}
}
}
ResetPlayerMoney(i);
GivePlayerMoney(i, Money[i]);
}
}
public MoneyUpdateForPlayer(playerid)
{
ResetPlayerMoney(playerid);
GivePlayerMoney(playerid, Money[playerid]);
}
public SetPlayerServerMoney(playerid, ammount)
{
Money[playerid] = ammount;
MoneyUpdateForPlayer(playerid);
}
public GivePlayerServerMoney(playerid, ammount)
{
Money[playerid] += ammount;
MoneyUpdateForPlayer(playerid);
}
public ResetPlayerServerMoney(playerid)
{
Money[playerid] = 0;
MoneyUpdateForPlayer(playerid);
}
public MoneyCheckForPlayer(playerid, checkedid)
{
new CMoney, SMoney, pName[21];
GetPlayerName(checkedid, pName, 21);
CMoney = GetPlayerMoney(checkedid);
SMoney = Money[checkedid];
// Aqui, eu criei variaveis locais pra não fazer consultas Get repetidamente
if(CMoney > SMoney)
{
new str[80];
format(str, 80, "[!] - %s. [Client-Side: %d | Server-Side: %d]", pName, CMoney, SMoney);
SendClientMessage(playerid, 0xFFFFAAAA, str);
}
else MoneyUpdateForPlayer(checkedid);
}
public OnGameModeInit()
{
print("========================================");
print("| ServerSide Money Carregado |");
print("========================================");
print("= por: [iPs] Miki ======================");
UpdateTimer = SetTimer("MoneyUpdate", 5000, true);
return 1;
}
public OnGameModeExit()
{
KillTimer(UpdateTimer);
return 1;
}
Por favor, não retire os creditos, =)
Faça bom proveito.
Faça bom proveito.
Nenhum comentário:
Postar um comentário