-
Проблема с деньгами
Странная конечно проблема.
Вычитаешь у игрока деньги, а они наоборот прибавляются.
Вот убираем деньги - User[playerid][Cash] -= 250. Но в итоге они в + идут.
В секундном таймере есть Античит на деньги.
Код:
foreach (new i : Player)
{
AntiMoney();
А вот и сам паблик,
Код:
public AntiMoney()
{
foreach (new i : Player)
{
if(User[i][Cash] != GetPlayerMoney(i)) ResetPlayerMoney(i), GivePlayerMoney(i, User[i][Cash]);
}
return;
}
В чем может быть проблема?
-
PHP код:
new i = 350;//цена за коробку конфет к примеру
GivePlayerMoney(playerid, -i);
pInfo[playerid][pCash] = EOS;//очищаем массив
pInfo[playerid][pCash] = GetPlayerMoney(playerid);//загружаем деньги в массив
Как-то так.
-
Убери вызов AntiMoney(); из таймера.
Цитата:
Сообщение от
BadPawn
PHP код:
new i = 350;//цена за коробку конфет к примеру
GivePlayerMoney(playerid, -i);
pInfo[playerid][pCash] = EOS;//очищаем массив
pInfo[playerid][pCash] = GetPlayerMoney(playerid);//загружаем деньги в массив
Как-то так.
Нет. Использование GivePlayerMoney с отрицательным значением нормально не работает. "Очищать массив" здесь не нужно. Записывать деньги напрямую от игрока - это приглашение читерам.
-
Пуух)
PHP код:
//Засунь меня в таймер^^
new pMoney = GetPlayerMoney(playerid);
if(pInfo[playerid][pCash] < pMoney)
{
GivePlayerMoney(playerid, pInfo[playerid][pCash]);
}
else pInfo[playerid][pCash] = pMoney;
PHP код:
//Теперь выдавай деньги так
stock GiveMoney(playerid, amount)
{
pInfo[playerid][pCash] += amount;
GivePlayerMoney(playerid, amount);
}
-
Для чего эти бессмысленные проверки и обновления в таймере? Разве от вас убудет, если читер сможет на своей стороне увеличить число денег? Да пусть хоть бесконечными их сделает, вообще плевать должно быть. Весь "античит" пишется в 3 строки, не считая перехвата функции.
PHP код:
stock ac_GivePlayerMoney(playerid, money)
{
pInfo[playerid][pCash] += money;
ResetPlayerMoney(playerid);
return GivePlayerMoney(playerid, pInfo[playerid][pCash]);
}
#if defined _ALS_GivePlayerMoney
#undef GivePlayerMoney
#else
#define _ALS_GivePlayerMoney
#endif
#define GivePlayerMoney ac_GivePlayerMoney
И не надо никаких таймеров или что-то ещё. Совершил игрок операцию с деньгами - обновили ему юзербар с деньгами, установив настоящее значение. А до этого момента пусть хоть что со своими деньгами делает