Просмотр полной версии : [Прочее] GivePlayerMoneyPlus
Решил сделать функцию GivePlayerMoney, которая сразу обрабатывает данные с переменной.
stock GivePlayerMoneyPlus(playerid, amount)
{
pInfo[playerid][pMoney] += amount;
GivePlayerMoney(playerid, amount);
if (GetPlayerMoney(playerid) != pInfo[playerid][pMoney])
{
ResetPlayerMoney(playerid);
GivePlayerMoney(playerid, pInfo[playerid][pMoney]);
}
return 1;
}
#if defined _ALS_GivePlayerMoney
#undef GivePlayerMoney
#else
#define _ALS_GivePlayerMoney
#endif
#define GivePlayerMoney GivePlayerMoneyPlus
GivePlayerMoneyPlus получает указанную сумму, присваивает ее к переменной и выводит количество денег в hud. А дальше проверка, если количество денег с переменной и функции не совпадает, игрок получает число с переменной.
Код желательно ставить после объявления переменной с главным энуменатором, или после всех new. Также, чтобы выше этого stock'а не было задач с GivePlayerMoney!
В паблик завершения регистрации/авторизации добавляем:
GivePlayerMoney(playerid, 0); //оставляем 0. Можно использовать для бонуса при регистрации: GivePlayerMoney(playerid, 25000);
Все просто.
К чему переменная AmountPlus?
Судя по коду, при каждой передаче money, переменная увеличивается на +1, вопрос зачем? И если игрок получит больше 255 раз money, будет кое что не очень хорошее). Т.к. char, только 0..255
К чему переменная AmountPlus?
Судя по коду, при каждой передаче money, переменная увеличивается на +1, вопрос зачем? И если игрок получит больше 255 раз money, будет кое что не очень хорошее). Т.к. char, только 0..255
if (!AmountPlus{playerid})
- - - Добавлено - - -
А хотя можно и без переменной с проверкой, а выдавать игроку 0 при загрузке данных.
GivePlayerMoney(playerid, 0);
А общее дублирование кода к чему?
То бишь это
pInfo[playerid][pMoney] += amount;
GivePlayerMoney(playerid, amount);
+ условие
if (GetPlayerMoney(playerid) != pInfo[playerid][pMoney])
и ещё 2 действия
ResetPlayerMoney(playerid);
GivePlayerMoney(playerid, pInfo[playerid][pMoney]);
Как я понимаю, это попытка избавиться от постоянного вызова ResetPlayerMoney, так?
Только на деле выходит, что ты добавляешь вызов GetPlayerMoney и, собственно, обращение к массиву.
А если условие срабатывает, то ещё и GivePlayerMoney вызываешь повторно.
Шило на мыло, уроненное в тюремной душевой, меняешь :grin:
Проще сделать так, как по мне:
stock GivePlayerMoneyPlus(playerid, money)
{
pInfo[playerid][pMoney] += money;
ResetPlayerMoney(playerid);
return GivePlayerMoney(playerid, pInfo[playerid][pMoney]);
}
Тут ты и логику функции не меняешь (GivePlayerMoney возвращает 0 в случаях, когда игрок не подключён. Ну и во всех других случаях, когда функция не смогла выполнится), и лишних действий никаких.
Можно ещё код сделать компактнее, перенеся "+= money" в GivePlayerMoney, но просто у меня в этой функции сразу отправляется запрос в БД с обновлением денег:
stock ac_money_GivePlayerMoney(playerid, money)
{
pInfo[playerid][pMoney] += money;
if(money) UpdatePlayerMoneyInAccount(playerid);// Если в GivePlayerMoney не выдаётся 0 долларов, вызываем функцию, в которой хранится запрос на обновление денег
ResetPlayerMoney(playerid);
return GivePlayerMoney(playerid, pInfo[playerid][pMoney]);
}
#if defined _ALS_GivePlayerMoney
#undef GivePlayerMoney
#else
#define _ALS_GivePlayerMoney
#endif
#define GivePlayerMoney ac_money_GivePlayerMoney
поэтому код именно такой (а компактность подобному коду, имхо, не повредит)
Проще сделать так, как по мне:
stock GivePlayerMoneyPlus(playerid, money)
{
pInfo[playerid][pMoney] += money;
ResetPlayerMoney(playerid);
return GivePlayerMoney(playerid, pInfo[playerid][pMoney]);
}
ResetPlayerMoney() долго срабатывает, если у человека большая сумма на руках и ему надо дать допустим 20$, то на худе цифры будут крутиться много времени, что выглядит некрасиво
ResetPlayerMoney() долго срабатывает, если у человека большая сумма на руках и ему надо дать допустим 20$, то на худе цифры будут крутиться много времени, что выглядит некрасиво
Эмм, нет. Какая сумма бы не была, ты сразу её обновляешь. Попробуй использовать этот код и увидишь, что момент, когда деньги отнимает, практически незаметен
ResetPlayerMoney() долго срабатывает, если у человека большая сумма на руках и ему надо дать допустим 20$, то на худе цифры будут крутиться много времени, что выглядит некрасиво
Это просто так в игре отображается
vovandolg
30.09.2016, 23:13
Ндаа и будут всякие гопники хакать эти цифры потом писать почему я не могу купить то и другое,
объяснять им что они используют читы и сумма их в другом месте будет точная))
Я бы с нуля поверх стандартного тд сунул свой который не мигал бы, не крутился, не хакался и обновлялся бы 1 функцией всего...
Nexius_Tailer
30.09.2016, 23:28
Я бы с нуля поверх стандартного тд сунул свой который не мигал бы, не крутился, не хакался и обновлялся бы 1 функцией всего...
Тогда ныли бы те, кто ставит моды на худы.
А уделять внимание тому, что какой-то читер внезапно станет возмущаться, почему его визуальное бабло не работает, как по мне, не сильно весомая проблема.
Ндаа и будут всякие гопники хакать эти цифры потом писать почему я не могу купить то и другое,
объяснять им что они используют читы и сумма их в другом месте будет точная))
Я бы с нуля поверх стандартного тд сунул свой который не мигал бы, не крутился, не хакался и обновлялся бы 1 функцией всего...
Сейчас бы о читерах заботиться... :crazy::crazy:
vovandolg
30.09.2016, 23:41
Оффтоп
Я вообще нытьё на сервере не люблю, поэтому всё сразу такое закрываю чтобы не было подёргиваний на нервных окончаниях:sarcastic:
KrutoyKrosch
01.10.2016, 00:36
а я бы еще такую проверку впихнул
if(pInfo[playerid][pMoney] + money < 0) return SendClientMessage(playerid, -1, !"{C4C4C4}[Оповещение]Недостаточно средств!");
что бы в моде по сто раз проверок не делать
а я бы еще такую проверку впихнул
if(pInfo[playerid][pMoney] + money < 0) return SendClientMessage(playerid, -1, !"{C4C4C4}[Оповещение]Недостаточно средств!");
что бы в моде по сто раз проверок не делать
Эмм, а если тебе нужно установить отрицательное значение для денег?
Всё же это функция работы с худом, не стоит туда пихать лишнее, имхо
KrutoyKrosch
01.10.2016, 13:16
да как вроде должно же отбавиться
да как вроде должно же отбавиться
У тебя проверка выглядит так:
если текущее число денег + выданное значение меньше нуля - показываем сообщение
то бишь
if(100 + -150) return SendClientMessage...
Или я тебя неправильно понял?
KrutoyKrosch
01.10.2016, 21:09
и опять все решают скобки)0)0
и опять все решают скобки)0)0
Да там что со скобками, что без - смысла не особо много в таком условии
А если так?
stock GivePlayerMoneyPlus(playerid, &money, gmoney) //Не традиционно
{
money += gmoney;
ResetPlayerMoney(playerid);
return GivePlayerMoney(playerid, money);
}
#if defined _ALS_GivePlayerMoney
#undef GivePlayerMoney
#else
#define _ALS_GivePlayerMoney
#endif
#define GivePlayerMoney GivePlayerMoneyPlus
stock GivePlayerMoneyPlus(playerid, money)
{
money = pInfo[playerid][pMoney] += money;
ResetPlayerMoney(playerid);
return GivePlayerMoney(playerid, money);
}
#if defined _ALS_GivePlayerMoney
#undef GivePlayerMoney
#else
#define _ALS_GivePlayerMoney
#endif
#define GivePlayerMoney GivePlayerMoneyPlus
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot