31.03.2016, 04:05
(
Последний раз редактировалось F1N4L; 01.04.2016 в 13:51.
)
Atualizado 01/04/2016
PS: Este tutorial й voltado para quem estб comeзando e desenvolvendo seus prуprios sistemas, por isso nгo o julgue!
Ainda hб quem pense que й difнcil criar um simples verificador de dinheiro e estou aqui para provar o contrбrio e mostrar que com algumas linhas podemos evitar QUALQUER Cheat de dinheiro no servidor.
Algo comum e ainda utilizado, mesmo nгo tendo necessidade, sгo stocks que substituem a funзгo nativa GivePlayerMoney(playerid, amount);
A verdade й que essa nгo й a ъnica soluзгo e nгo precisamos criar mais stocks no GM/FS para setar dinheiro a um player.
Em primeiro lugar, se vocк jб tiver uma variбvel definida para salvar o dinheiro, use-a e pule esta etapa (lembre-se de alterar as demais variбveis do tutorial):
Crie a variбvel Var_Money
Em seguida, criaremos um Timer responsбvel por verificar o dinheiro do player
MoneyCheck й a funзгo chamada para verificar o dinheiro do player.
1000 sгo os milissegundos em que a verificaзгo irб ocorrer.
true farб com que o Timer repita a verificaзгo (loop)
Hora de criar a callback que serб chamada para verificar o dinheiro
for(new i = 0; i < MAX_PLAYERS; i++)
LOOP em todos os slots do servidor.
if(IsPlayerConnected(i))
Verifica somente os players que estгo conectados.
if(GetPlayerMoney(i) != Var_Money[i])
Condicional principal, onde serб comparado o dinheiro do player (HUD) com a variбvel Var_Money
Caso o dinheiro no HUD do player for diferente do valor contido na variбvel, chamarб o restante da funзгo...
ResetPlayerMoney(i);
GivePlayerMoney(i, Var_Money[i]);
Reseta e seta o dinheiro contido na variбvel para o player respectivamente.
OBS: Caso o player gastar dinheiro com mбquinas de bebidas e talz, o dinheiro volta ao normal, mas se vocк quer que o dinheiro PERDIDO nгo seja resetado faзa o seguinte:
for(new i = 0; i < MAX_PLAYERS; i++)
LOOP em todos os slots do servidor.
if(IsPlayerConnected(i))
Verifica somente os players que estгo conectados.
if(GetPlayerMoney(i) > Var_Money[i])
Condicional principal, onde serб comparado o dinheiro do player (HUD) com a variбvel Var_Money
Caso o dinheiro no HUD do player for maior que o valor contido na variбvel, chamarб o restante da funзгo...
Caso o dinheiro no HUD do player for menor que o valor contido na variбvel, nгo irб fazer nada, porйm para nгo haver BUGs, recomendo utilizar a funзгo e salvar o dinheiro do player de 1 em 1 segundo, assim nгo terб problema com a variбvel.
ResetPlayerMoney(i);
GivePlayerMoney(i, Var_Money[i]);
Reseta e seta o dinheiro contido na variбvel para o player respectivamente.
Colocando o cуdigo em prбtica:
Utilizando stocks (o que nгo й necessбrio):
Esse й o modo mais simples com stock.
Basicamente um tutorial explicando como funciona o cуdigo e a simplicidade do mesmo!
PS: Este tutorial й voltado para quem estб comeзando e desenvolvendo seus prуprios sistemas, por isso nгo o julgue!
Ainda hб quem pense que й difнcil criar um simples verificador de dinheiro e estou aqui para provar o contrбrio e mostrar que com algumas linhas podemos evitar QUALQUER Cheat de dinheiro no servidor.
Algo comum e ainda utilizado, mesmo nгo tendo necessidade, sгo stocks que substituem a funзгo nativa GivePlayerMoney(playerid, amount);
A verdade й que essa nгo й a ъnica soluзгo e nгo precisamos criar mais stocks no GM/FS para setar dinheiro a um player.
Em primeiro lugar, se vocк jб tiver uma variбvel definida para salvar o dinheiro, use-a e pule esta etapa (lembre-se de alterar as demais variбveis do tutorial):
Crie a variбvel Var_Money
PHP код:
new Var_Money[MAX_PLAYERS];
Em seguida, criaremos um Timer responsбvel por verificar o dinheiro do player
PHP код:
public OnGameModeInit() // GM
ou
public OnFilterScriptInit() // FS
{
SetTimer("MoneyCheck", 1000, true);
return 1;
}
1000 sгo os milissegundos em que a verificaзгo irб ocorrer.
true farб com que o Timer repita a verificaзгo (loop)
Hora de criar a callback que serб chamada para verificar o dinheiro
PHP код:
forward MoneyCheck();
public MoneyCheck()
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(GetPlayerMoney(i) != Var_Money[i])
{
ResetPlayerMoney(i);
GivePlayerMoney(i, Var_Money[i]);
}
}
}
return 1;
}
LOOP em todos os slots do servidor.
if(IsPlayerConnected(i))
Verifica somente os players que estгo conectados.
if(GetPlayerMoney(i) != Var_Money[i])
Condicional principal, onde serб comparado o dinheiro do player (HUD) com a variбvel Var_Money
Caso o dinheiro no HUD do player for diferente do valor contido na variбvel, chamarб o restante da funзгo...
ResetPlayerMoney(i);
GivePlayerMoney(i, Var_Money[i]);
Reseta e seta o dinheiro contido na variбvel para o player respectivamente.
OBS: Caso o player gastar dinheiro com mбquinas de bebidas e talz, o dinheiro volta ao normal, mas se vocк quer que o dinheiro PERDIDO nгo seja resetado faзa o seguinte:
PHP код:
forward MoneyCheck();
public MoneyCheck()
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(GetPlayerMoney(i) > Var_Money[i])
{
ResetPlayerMoney(i);
GivePlayerMoney(i, Var_Money[i]);
}
}
}
return 1;
}
LOOP em todos os slots do servidor.
if(IsPlayerConnected(i))
Verifica somente os players que estгo conectados.
if(GetPlayerMoney(i) > Var_Money[i])
Condicional principal, onde serб comparado o dinheiro do player (HUD) com a variбvel Var_Money
Caso o dinheiro no HUD do player for maior que o valor contido na variбvel, chamarб o restante da funзгo...
Caso o dinheiro no HUD do player for menor que o valor contido na variбvel, nгo irб fazer nada, porйm para nгo haver BUGs, recomendo utilizar a funзгo e salvar o dinheiro do player de 1 em 1 segundo, assim nгo terб problema com a variбvel.
ResetPlayerMoney(i);
GivePlayerMoney(i, Var_Money[i]);
Reseta e seta o dinheiro contido na variбvel para o player respectivamente.
Colocando o cуdigo em prбtica:
PHP код:
CMD:getmoney(playerid)
{
// Utilizamos a variбvel juntamente com um valor dentro da funзгo.
// Este й o mйtodo correto para dar dinheiro a um player, pois vocк deu dinheiro e jб definiu um valor para a variбvel.
GivePlayerMoney(playerid, Var_Money[playerid] += 100);
SendClientMessage(playerid, -1, "SERVER: Vocк pegou R$100,00 do banco!");
return 1;
}
CMD:givemoney(playerid)
{
// Utilizamos somente um valor dentro da funзгo.
// Este mйtodo й incorreto para dar dinheiro a um player, pois a alteraзгo nгo ocorre na variбvel, e sim, no HUD do player.
GivePlayerMoney(playerid, 100);
SendClientMessage(playerid, -1, "SERVER: Vocк ganhou R$100,00 do banco!");
return 1;
}
Utilizando stocks (o que nгo й necessбrio):
PHP код:
stock GivePlayerMoneyEx(playerid, amount)
{
ResetPlayerMoney(playerid);
GivePlayerMoney(playerid, Var_Money[playerid] += amount);
return 1;
}
Basicamente um tutorial explicando como funciona o cуdigo e a simplicidade do mesmo!