Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 14
  1. #1
    Аватар для Jake_Bat
    Пользователь

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

    Интересная функция (для опытных)

    Здравствуйте господа
    К у меня есть функция
    PLEVEL(playerid,operator value)
    {
    if(operator == +) PInfo[playerid][Level] += value;
    }
    Суть думаю проста
    Можно реализовать к примеру строками, что по сути очевидный пример, но это слишком костыльно, а что если как-то иначе?
    Не знаком с такими аргументами функций, до ужаса буду рад, если научите меня чему-то новому
    Последний раз редактировалось Jake_Bat; 18.11.2018 в 21:23.

  2. #2
    Аватар для Elrmrnt-Kritik
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.11.2017
    Сообщений
    136
    Репутация:
    10 ±
    Так в GivePlayerMoney вы передаете число, которое будет либо положительным (со знаком плюс "+" или без знака), либо отрицательным (со знаком минус "-").

    Аналогично можно поступить и в вашем примере:
    1. new var1 = 4,
    2. var2 = -4;
    3.  
    4. new sum1, sum2;
    5.  
    6.  
    7. sum1 += var1; // это будет 0+4 = 4
    8. sum2 += var2; // это будет 0+(-4) = 0-4 = -4


    Но если изменяемое число константное и его знак зависит исключительно от того, передаете в функцию вы плюс ("+") или минус ("-"), то можно сделать как-то так:
    1. stock SomeFunc(&value, symbol = '+')
    2. {
    3. const YOUR_NUMBER = 4;
    4.  
    5. if(symbol == '+') value += CONST_NUMBER; // = value + 4
    6. else if(symbol == '-') value -= CONST_NUMBER; // = value - 4 = -4
    7. }

  3. Пользователь сказал cпасибо:
    Jake_Bat (18.11.2018)
  4. #3
    Аватар для Jake_Bat
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.03.2017
    Сообщений
    17
    Репутация:
    0 ±
    Да я тупанул сам, с деньгами, просто задумался и моя логика мне говорила это, но Система 1 (Канеман) оказалась сильнее)) Сори :3
    Но можно ли как-то без строк это все решить?
    SetValue(playerid, +1)
    {
    Player[playerid][Int] += 1;
    }
    SetValue(playerid, -1)
    {
    Player[playerid][Int] -= 1;
    }
    SetValue(playerid, 1)
    {
    Player[playerid][Int] = 1;
    }

  5. #4
    Аватар для Elrmrnt-Kritik
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.11.2017
    Сообщений
    136
    Репутация:
    10 ±
    Быть может варианты есть и получше, но могу предложить такой:
    1. stock SetValue(playerid, value, symbol = '+')
    2. {
    3. if(symbol == '=') Player[playerid][Int] = value;
    4. else Player[playerid][Int] += value;
    5. }


    Соответственно, если value < 0, тогда будет вычитаться, если больше нуля, будет складываться.

    - - - Добавлено - - -

    А использовать тогда так:
    1. SetValue(playerid, 2); // прибавит 2
    2. SetValue(playerid, -2); // вычтет 2
    3. SetValue(playerid, 2, '='); // приравняет к двум

  6. Пользователь сказал cпасибо:
    Jake_Bat (18.11.2018)
  7. #5
    Аватар для Jake_Bat
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.03.2017
    Сообщений
    17
    Репутация:
    0 ±
    Возможно я слишком много программировал, и это выбило меня из колеи((
    По-моему то, что я хочу - анриал

  8. #6
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Лучше использовать отдельные функции для этих целей, чтобы не менять их смысл, понятный по названию.
    1. stock SetValue(playerid, amount)
    2. {
    3. Player[playerid][Int] = amount;
    4. }
    5. stock GiveValue(playerid, amount)
    6. {
    7. Player[playerid][Int] += amount;
    8. }

  9. Пользователь сказал cпасибо:
    Jake_Bat (18.11.2018)
  10. #7
    Аватар для Jake_Bat
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.03.2017
    Сообщений
    17
    Репутация:
    0 ±
    Спасибо
    можно ли как-то enum передавать в функцию и дальше его изменять в теле функции?

  11. #8
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от Jake_Bat Посмотреть сообщение
    Спасибо
    можно ли как-то enum передавать в функцию и дальше его изменять в теле функции?
    Не понятно, поясни.

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

    Статус
    Оффлайн
    Регистрация
    10.03.2017
    Сообщений
    17
    Репутация:
    0 ±
    Ну к примеру, я хочу поместить в функцию какое-то перечисление и его менять там же, как это возможно?
    SetPlay(playerid,Player[playerid][Level])
    {
    }
    Будет просто значение создаваться в функции например 0 , 1, а я хочу если помещаешь что-то из enum'ов в аргумент , можно как-то изменять?
    (что-то типа указателей, которые в плюсах)

  13. #10
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Не, я не могу понять. Примеры из плюсов можно?

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

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

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

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

Ваши права

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