PDA

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



DmitriyVasilev
03.02.2019, 13:08
Здравствуйте. я новичок в pawn и хотелось бы узнать, как лучше создавать переменные, например, для команд.
Пример.
new command[500]; //подскажите как подсчитывать ячейки в глобальных переменных не пойму если у тебя около 90команд
CMD:satiety(playerid)
{
format(command,sizeof(command),"Ваш голод: %i процентов", PI[playerid][p_satiety]);
SendClientMessage(playerid,command);
return 1;
}
CMD:keys(playerid,params[])
{
format(command,sizeof(command), "%i щтук", PI[playerid][p_keys]
SendClientMessage(playerid,command);
}
//ИЛИ ТАК?
CMD:satiety(playerid)
{
new command[128];
format(command,sizeof(command),"Ваш голод: %i процентов", PI[playerid][p_satiety]);
SendClientMessage(playerid,command);
return 1;
}
CMD:keys(playerid,params[])
{
new command[128];
format(command,sizeof(command), "%i штук", PI[playerid][p_keys]
SendClientMessage(playerid,comman/PAWN]d);
}

m1n1vv
03.02.2019, 13:20
Лучше всего так:

CMD:satiety(playerid)
{
static const
str[] = "Ваш голод: %i процентов";

static
string[sizeof str + 3 - 2]; //sizeof str - длина строки, 3 - значение PI[playerid][p_satiety], 2 - удаление спецификатора %i

format(string, sizeof string, str, PI[playerid][p_satiety]);
SendClientMessage(playerid, string);
return 1;
}
CMD:keys(playerid,params[])
{
static const
str[] = "%i штук";

static
string[sizeof str + 11 - 2];

format(string, sizeof string, str, PI[playerid][p_keys]);
SendClientMessage(playerid, string);
return 1;
}

DmitriyVasilev
03.02.2019, 14:20
а если хочешь глобальный использовать, то как подсчитать сколько ячеек надо? например у меня 90 команд и во многих стоит формат с диалогами и sendclientmessage, во многих модах стоит переменная глобальная на 1к ячеек, но я не знаю почему

m1n1vv
03.02.2019, 14:26
а если хочешь глобальный использовать, то как подсчитать сколько ячеек надо? например у меня 90 команд и во многих стоит формат с диалогами и sendclientmessage, во многих модах стоит переменная глобальная на 1к ячеек, но я не знаю почему

Если хочешь один массив на все команды, что крайне не рекомендую, то используй массив:

new command[145]; //144 - лимит SendClientMessage

DmitriyVasilev
03.02.2019, 14:27
а если используешь этот массив и в диалогах команд и сообщениях то как подсчитать.

m1n1vv
03.02.2019, 14:31
а если используешь этот массив и в диалогах команд и сообщениях то как подсчитать.

Никак. Должен быть максимальный размер строки указан. Если там и диалоги, то массив выходит на пару тысяч. Это из-за вывода списка кого-то/чего-то.

DmitriyVasilev
03.02.2019, 14:33
получается у меня в моде стоит new string[1000]; глобальный, то его надо убрать и везде по отдельности создавать?

m1n1vv
03.02.2019, 14:34
получается у меня в моде стоит new string[1000]; глобальный, то его надо убрать и везде по отдельности создавать?

Да. Так будет лучше.

DmitriyVasilev
04.02.2019, 17:51
и еще можно вопрос?
когда можно просто считать ячейки типа new string[50]; а когда таким способом как написал ты.