Просмотр полной версии : [Вопрос] Интересная функция (для опытных)
Jake_Bat
18.11.2018, 21:04
Здравствуйте господа
К у меня есть функция
PLEVEL(playerid,operator value)
{
if(operator == +) PInfo[playerid][Level] += value;
}
Суть думаю проста
Можно реализовать к примеру строками, что по сути очевидный пример, но это слишком костыльно, а что если как-то иначе?
Не знаком с такими аргументами функций, до ужаса буду рад, если научите меня чему-то новому
Elrmrnt-Kritik
18.11.2018, 21:17
Так в GivePlayerMoney вы передаете число, которое будет либо положительным (со знаком плюс "+" или без знака), либо отрицательным (со знаком минус "-").
Аналогично можно поступить и в вашем примере:
new var1 = 4,
var2 = -4;
new sum1, sum2;
sum1 += var1; // это будет 0+4 = 4
sum2 += var2; // это будет 0+(-4) = 0-4 = -4
Но если изменяемое число константное и его знак зависит исключительно от того, передаете в функцию вы плюс ("+") или минус ("-"), то можно сделать как-то так:
stock SomeFunc(&value, symbol = '+')
{
const YOUR_NUMBER = 4;
if(symbol == '+') value += CONST_NUMBER; // = value + 4
else if(symbol == '-') value -= CONST_NUMBER; // = value - 4 = -4
}
Jake_Bat
18.11.2018, 21:39
Да я тупанул сам, с деньгами, просто задумался и моя логика мне говорила это, но Система 1 (Канеман) оказалась сильнее)) Сори :3
Но можно ли как-то без строк это все решить?
SetValue(playerid, +1)
{
Player[playerid][Int] += 1;
}
SetValue(playerid, -1)
{
Player[playerid][Int] -= 1;
}
SetValue(playerid, 1)
{
Player[playerid][Int] = 1;
}
Elrmrnt-Kritik
18.11.2018, 21:57
Быть может варианты есть и получше, но могу предложить такой:
stock SetValue(playerid, value, symbol = '+')
{
if(symbol == '=') Player[playerid][Int] = value;
else Player[playerid][Int] += value;
}
Соответственно, если value < 0, тогда будет вычитаться, если больше нуля, будет складываться.
- - - Добавлено - - -
А использовать тогда так:
SetValue(playerid, 2); // прибавит 2
SetValue(playerid, -2); // вычтет 2
SetValue(playerid, 2, '='); // приравняет к двум
Jake_Bat
18.11.2018, 22:02
Возможно я слишком много программировал, и это выбило меня из колеи((
По-моему то, что я хочу - анриал
Лучше использовать отдельные функции для этих целей, чтобы не менять их смысл, понятный по названию.
stock SetValue(playerid, amount)
{
Player[playerid][Int] = amount;
}
stock GiveValue(playerid, amount)
{
Player[playerid][Int] += amount;
}
Jake_Bat
18.11.2018, 23:08
Спасибо
можно ли как-то enum передавать в функцию и дальше его изменять в теле функции?
Спасибо
можно ли как-то enum передавать в функцию и дальше его изменять в теле функции?
Не понятно, поясни.
Jake_Bat
19.11.2018, 02:22
Ну к примеру, я хочу поместить в функцию какое-то перечисление и его менять там же, как это возможно?
SetPlay(playerid,Player[playerid][Level])
{
}
Будет просто значение создаваться в функции например 0 , 1, а я хочу если помещаешь что-то из enum'ов в аргумент , можно как-то изменять?
(что-то типа указателей, которые в плюсах)
Не, я не могу понять. Примеры из плюсов можно?
Jake_Bat
19.11.2018, 08:41
int play = 0;
void Tam_4toto(int *play)
{
*play = 1;
}
play == 1
---
И что-то сделать с енумом вообще реально по аналогичному способу на pawn?
- - - Добавлено - - -
Может так можно сделать?
Func(&val)
{
val++
return val;
}
---
player[playerid][plevel] == 0
Func(player[playerid][plevel]);
player[playerid][plevel] == 1
int play = 0;
void Tam_4toto(int *play)
{
*play = 1;
}
play == 1
---
И что-то сделать с енумом вообще реально по аналогичному способу на pawn?
stock Tam_4toto(&play)
{
play = 1;
}
Про енумы до сих пор не понимаю.
Можно так, например:
enum E_EXAMPLE {
E_EXAMPLE_X,
E_EXAMPLE_Y,
}
stock example(arr[E_EXAMPLE])
{
arr[E_EXAMPLE_X] += 1;
arr[E_EXAMPLE_Y] += 2;
}
main() {
new array[E_EXAMPLE];
array[E_EXAMPLE_X] = 100;
array[E_EXAMPLE_Y] = 200;
example(array);
printf("array[E_EXAMPLE_X] = %d, array[E_EXAMPLE_Y] = %d", array[E_EXAMPLE_X], array[E_EXAMPLE_Y]);
// "array[E_EXAMPLE_X] = 101, array[E_EXAMPLE_Y] = 202"
}
Jake_Bat
19.11.2018, 09:12
Спасибо, как буду у компа - напишу работает ли так, как хочу или нет, проверю несколькими способами и перешлю сюда, мне интересно, качественно ли они сделаны
Jake_Bat
20.11.2018, 22:58
Зигги, спасибо, все окей
- - - Добавлено - - -
Закройте тему пожалуйста, не могу найти способ , как закрыть
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot