PDA

Просмотр полной версии : [Вопрос] Ошибка в стоке



Killer
29.03.2018, 04:31
Ошибка в стоке, не правильный аргумент.


error 035: argument type mismatch (argument 1)


stock GiveMoney(playerid, amount)
{
if(strval(amount) == 0) return true;
new string[80];
if(amount < 0)
{
format(string, sizeof(string), "~w~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~%i$", amount);
GameTextForPlayer(playerid, string, 3000, 3);
pInfo[playerid][pCash] -= strval(amount);
}
else
{
format(string, sizeof(string), "~w~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~+%i$", amount);
GameTextForPlayer(playerid, string, 3000, 3);
pInfo[playerid][pCash] += strval(amount);
}
MysqlUpdatePlayerInt(playerid, "cash", pInfo[playerid][pCash]);
return true;
}

Ошибка здесь,


pInfo[playerid][pCash] -= strval(amount);

Не понимаю, как задать правильно функцию. Проблема моя заключается в том, что когда я ввожу в диалог ( - 3 ), мне идет прибавление денег. Так-как - на - дает +.
Решил перейти на числовой формат, чтобы принимало только числа. Как исправить данную проблему?

DeimoS
29.03.2018, 08:34
Эмм, так ты изначально в функцию передаёшь либо отрицательное число, либо положительное. При сложении положительного и отрицательного числа что случится? Правильно, вычитание отрицательного числа из положительного. А если вычесть отрицательное число из положительного, то минус на минус даст плюс. Математика же обычная

Достаточно сделать так:

stock GiveMoney(playerid, amount)
{
if(amount == 0) return true;
new string[80];
if(amount < 0)
{
format(string, sizeof(string), "~w~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~%i$", amount);
GameTextForPlayer(playerid, string, 3000, 3);
}
else
{
format(string, sizeof(string), "~w~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~+%i$", amount);
GameTextForPlayer(playerid, string, 3000, 3);
}
pInfo[playerid][pCash] += amount;
MysqlUpdatePlayerInt(playerid, "cash", pInfo[playerid][pCash]);
return true;
}
Хотя если сюда добавишь ещё ResetPlayerMoney и GivePlayerMoney, то получится античит на деньги, который не обойти. Без всяких таймеров, как это делают многие

Killer
29.03.2018, 11:42
Если в функции стоит прибавление денег.


GiveMoney(playerid, 500)

И если я в диалоге напишу -500, то эти деньги будут просто вычитаться, а не прибавляться. Поэтому я и хочу склониться к strval. Но strval выдает ошибки.

DeimoS
29.03.2018, 11:44
Эмм, что? В чём заключается текущая проблема?

Killer
29.03.2018, 11:46
Проблема заключается в том, что когда я хочу прибавить деньги игроку. Но, если в диалоге я напишу -500, то деньги будут просто вычитаться, а не прибавляться (как задано функцией)

DeimoS
29.03.2018, 11:50
Эмм, ну так потому что ты указал минус, не?

Killer
29.03.2018, 11:52
Эмм, ну так потому что ты указал минус, не?

Нет, я исправил на +, проблема осталась. Вы меня не так понимаете.
В диалоге все хорошо будет, если я буду писать просто число. А если я например пишу ( -500 ), а функция задана прибавление денег, то в итоге, деньги просто будут вычитаться.

DeimoS
29.03.2018, 12:14
Так в функции не задано никакого прибавления денег. Вот тут

pInfo[playerid][pCash] += amount;
Ты просто просто складываешь значение переменной pCash с переменной ammount. Соответственно, если в amount хранится отрицательное значение, то и значение pCash уменьшится.
Чтоб значение pCash увеличивалось, нужно значение amount сделать положительным. А чтоб сделать его таковым, нужно, например, умножить его на "-1" перед вызовом GiveMoney

$continue$
29.03.2018, 13:18
Ну или совсем для извращенцев:

new negative_value = -5;
negative_value = ~negative_value + 1;
printf("val: %d", negative_value);