Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 9 из 9
  1. #1
    Аватар для Killer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.04.2017
    Сообщений
    133
    Репутация:
    0 ±

    Ошибка в стоке

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

    Код:
    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 ), мне идет прибавление денег. Так-как - на - дает +.
    Решил перейти на числовой формат, чтобы принимало только числа. Как исправить данную проблему?

  2. #2
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Эмм, так ты изначально в функцию передаёшь либо отрицательное число, либо положительное. При сложении положительного и отрицательного числа что случится? Правильно, вычитание отрицательного числа из положительного. А если вычесть отрицательное число из положительного, то минус на минус даст плюс. Математика же обычная

    Достаточно сделать так:
    PHP код:
    stock GiveMoney(playeridamount)
    {
        if(
    amount == 0) return true;
        new 
    string[80];
        if(
    amount 0)
        {
            
    format(stringsizeof(string), "~w~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~%i$"amount);
            
    GameTextForPlayer(playeridstring30003);
        }
        else
        {
            
    format(stringsizeof(string), "~w~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~+%i$"amount);
            
    GameTextForPlayer(playeridstring30003);
        }
        
    pInfo[playerid][pCash] += amount;
        
    MysqlUpdatePlayerInt(playerid"cash"pInfo[playerid][pCash]);
        return 
    true;

    Хотя если сюда добавишь ещё ResetPlayerMoney и GivePlayerMoney, то получится античит на деньги, который не обойти. Без всяких таймеров, как это делают многие
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  3. #3
    Аватар для Killer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.04.2017
    Сообщений
    133
    Репутация:
    0 ±
    Если в функции стоит прибавление денег.

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

  4. #4
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Эмм, что? В чём заключается текущая проблема?
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  5. #5
    Аватар для Killer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.04.2017
    Сообщений
    133
    Репутация:
    0 ±
    Проблема заключается в том, что когда я хочу прибавить деньги игроку. Но, если в диалоге я напишу -500, то деньги будут просто вычитаться, а не прибавляться (как задано функцией)

  6. #6
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Эмм, ну так потому что ты указал минус, не?
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  7. #7
    Аватар для Killer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.04.2017
    Сообщений
    133
    Репутация:
    0 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Эмм, ну так потому что ты указал минус, не?
    Нет, я исправил на +, проблема осталась. Вы меня не так понимаете.
    В диалоге все хорошо будет, если я буду писать просто число. А если я например пишу ( -500 ), а функция задана прибавление денег, то в итоге, деньги просто будут вычитаться.

  8. #8
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Так в функции не задано никакого прибавления денег. Вот тут
    PHP код:
    pInfo[playerid][pCash] += amount
    Ты просто просто складываешь значение переменной pCash с переменной ammount. Соответственно, если в amount хранится отрицательное значение, то и значение pCash уменьшится.
    Чтоб значение pCash увеличивалось, нужно значение amount сделать положительным. А чтоб сделать его таковым, нужно, например, умножить его на "-1" перед вызовом GiveMoney
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  9. #9
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Ну или совсем для извращенцев:
    1. new negative_value = -5;
    2. negative_value = ~negative_value + 1;
    3. printf("val: %d", negative_value);
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •