PDA

Просмотр полной версии : [Вопрос] Можно ли подробнее про format



Mike_World
24.12.2016, 11:59
Привет ребят! Я вот читал про format, но так и не понял что к чему format(string, sizeof(string), "И тут текст", а вот тут что пишется и для чего? 1 аргумент это имя строки format( string(1), sizeof(типо за длинну строки отвечает, тут пишем название строки т.е string), "Далее сам текст", а после текста что должно быть?)Вообще объясните пожалуйста что тут на чем в этом format, ибо функция тоже важная.
Допустим у нас есть код
format(string, sizeof(string), "%s валяется от смеха", GN(playerid));
для чего после текста стоит GN(playerid)? Для того что бы показать кто в чате от смеха валяется? Почему тогда без него не покажет? И еще вопрос по поводу params[], как его использовать и где указывать? Допустим
cmd:ban(playerid, params[]))
И раз я уже задел params[], то sscanf тоже задену, это самые важные вопросы которые меня мучают: format, params[], sscanf, как и что и для чего их используют? Желательно объяснять подробнее, ибо может не дойти сразу, и с примерами показывайте, заранее спасибо.

[ForD]
24.12.2016, 12:24
Далее идут имена переменных по очередности как теги в тексте.

Для примера берем ваш код

format(string, sizeof(string), "%s валяется от смеха", GN(playerid));
%s -это подобие ссылки на переменную GN(playerid)

При форматировании данного текста и вывода его в чат
нам покажет "Mike_World валяется от смеха"

Mike_World - это ник игрока который был записан в данную переменную

Таким образом можно форматировать любую информацию
Например

format(string, sizeof(string), "Ваш ник: %s, Ваш ID:%i, Ваш Скин:%i", GN(playerid), id(playerid), GetPlayerSkin(playerid));
Важно: Переменные должны соблюдать очередность как и теги в тексте.

Форматы тегов:
%s - Строка
%i - Целое число
%d - Целое число
%f - исло с плавающей точкой

Wiki: http://wiki.sa-mp.com/wiki/Format

Mike_World
24.12.2016, 12:27
;80333']Далее идут имена переменных по очередности как теги в тексте.

Для примера берем ваш код

format(string, sizeof(string), "%s валяется от смеха", GN(playerid));
%s -это подобие ссылки на переменную GN(playerid)

При форматировании данного текста и вывода его в чат
нам покажет "Mike_World валяется от смеха"

Mike_World - это ник игрока которое было записанно в данную переменную

Таким образом можно форматировать любую информацию
Например

format(string, sizeof(string), "Ваш ник: %s, Ваш ID:%i,Ваш Скин:%i", GN(playerid), id(playerid), GetPlayerSkin(playerid));
Важно: Переменные должны соблюдать очередность как и теги в тексте.

Форматы тегов:
%s - Строка
%i - Целое число
%d - Целое число
%f - исло с плавающей точкой

Wiki: http://wiki.sa-mp.com/wiki/Format

Спасибо, а про
params[] и
sscanf можете так же разъяснить ?

Nexius_Tailer
24.12.2016, 13:00
Спасибо, а про
params[]
Обычный строковый аргумент, куда zcmd и все ему подобные обрезают то, что идёт после /команды.
Т.е. вот пример что будет в params в зависимости от того, что вводит игрок:

Ввод:
/ban 55 3 Отдохните

Содержимое params при вызове CMD:ban:
55 3 Отдохните


Ввод:
/ban jkhfdgdkjfhgkjdfhgjf

Содержимое params при вызове CMD:ban:
jkhfdgdkjfhgkjdfhgjf


Ввод:
/ban 4 8 15 16 23 42

Содержимое params при вызове CMD:ban:
4 8 15 16 23 42


Ввод:
/ban

Содержимое params при вызове CMD:ban:
\1
Как видно, в параметры идёт текст после самой команды и пробела, если же команда введена без параметров - params содержит символ '\1' (лучше также проверять и на пустоту вообще).


и
sscanf можете так же разъяснить ?
sscanf же тесно связан с предыдущим вопросом: он нужен уже для разделения параметров из строки params в отдельные переменные, альтернатива strtok по сути.
Имеет свой синтаксис, так что за описанием лучше пойти в официальную тему (http://forum.sa-mp.com/showthread.php?t=570927), либо почитать её перевод (http://pawn-wiki.ru/index.php?/topic/36503-sscanf/).

Mike_World
24.12.2016, 13:23
Обычный строковый аргумент, куда zcmd и все ему подобные обрезают то, что идёт после /команды.
Т.е. вот пример что будет в params в зависимости от того, что вводит игрок:

Ввод:
/ban 55 3 Отдохните

Содержимое params при вызове CMD:ban:
55 3 Отдохните


Ввод:
/ban jkhfdgdkjfhgkjdfhgjf

Содержимое params при вызове CMD:ban:
jkhfdgdkjfhgkjdfhgjf


Ввод:
/ban 4 8 15 16 23 42

Содержимое params при вызове CMD:ban:
4 8 15 16 23 42


Ввод:
/ban

Содержимое params при вызове CMD:ban:
\1
Как видно, в параметры идёт текст после самой команды и пробела, если же команда введена без параметров - params содержит символ '\1' (лучше также проверять и на пустоту вообще).


sscanf же тесно связан с предыдущим вопросом: он нужен уже для разделения параметров из строки params в отдельные переменные, альтернатива strtok по сути.
Имеет свой синтаксис, так что за описанием лучше пойти в официальную тему (http://forum.sa-mp.com/showthread.php?t=570927), либо почитать её перевод (http://pawn-wiki.ru/index.php?/topic/36503-sscanf/).

А можно пример с использование sscanf и params, а потом и то и другое вместе, только пожалуйста подробно объясните.

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


Обычный строковый аргумент, куда zcmd и все ему подобные обрезают то, что идёт после /команды.
Т.е. вот пример что будет в params в зависимости от того, что вводит игрок:

Ввод:
/ban 55 3 Отдохните

Содержимое params при вызове CMD:ban:
55 3 Отдохните


Ввод:
/ban jkhfdgdkjfhgkjdfhgjf

Содержимое params при вызове CMD:ban:
jkhfdgdkjfhgkjdfhgjf


Ввод:
/ban 4 8 15 16 23 42

Содержимое params при вызове CMD:ban:
4 8 15 16 23 42


Ввод:
/ban

Содержимое params при вызове CMD:ban:
\1
Как видно, в параметры идёт текст после самой команды и пробела, если же команда введена без параметров - params содержит символ '\1' (лучше также проверять и на пустоту вообще).


sscanf же тесно связан с предыдущим вопросом: он нужен уже для разделения параметров из строки params в отдельные переменные, альтернатива strtok по сути.
Имеет свой синтаксис, так что за описанием лучше пойти в официальную тему (http://forum.sa-mp.com/showthread.php?t=570927), либо почитать её перевод (http://pawn-wiki.ru/index.php?/topic/36503-sscanf/).


CMD:podarok(playerid)
{
if(PI[playerid][pLogged] == 0 || PI[playerid][pRegister] == 0) return SCM(playerid, -1, "{ff0000}[X] Вы не авторизованы на сервере");
if(PI[playerid][pBonus] == 0)
{
GivePlayerMoney(playerid, 100000);
new podarok[41];
format(podarok, sizeof(podarok), "%s вам выдали подарок в размере 100.000$", GN(playerid));
}
else
{
SCM(playerid, -1, "Вы уже получали подарок!");
}
return 1;
}

Правильно использовал format? Только в игре не выводит что то сообщения, только деньги дает и забирает сразу.

Пельмень
24.12.2016, 14:39
new podarok[128];
format(podarok, sizeof(podarok), "%s вам выдали подарок в размере 100.000$", GN(playerid));
SendClientMessage (playerid, -1, podarok);

middlematt
24.12.2016, 14:42
А можно пример с использование sscanf и params, а потом и то и другое вместе, только пожалуйста подробно объясните.

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


CMD:podarok(playerid)
{
if(PI[playerid][pLogged] == 0 || PI[playerid][pRegister] == 0) return SCM(playerid, -1, "{ff0000}[X] Вы не авторизованы на сервере");
if(PI[playerid][pBonus] == 0)
{
GivePlayerMoney(playerid, 100000);
new podarok[41];
format(podarok, sizeof(podarok), "%s вам выдали подарок в размере 100.000$", GN(playerid));
}
else
{
SCM(playerid, -1, "Вы уже получали подарок!");
}
return 1;
}

Правильно использовал format? Только в игре не выводит что то сообщения, только деньги дает и забирает сразу.


static const str_format_text[] =
"%s Вам выдали продарок в размере $100.000";
new
string[sizeof str_format_text + (-2 + MAX_PLAYER_NAME)];
format(string, sizeof string, str_format_text, GN(playerid));

return SendClientMessage(playerid, -1, string);
Советую почитать урок (http://pro-pawn.ru/showthread.php?13388-Подсчёт-размера-форматируемой-строки&highlight=static+const+fmt_str%5B%5D) по "правильному" подсчету размера строки.

Пельмень
24.12.2016, 15:09
static const str_format_text[] =
"%s Вам выдали продарок в размере $100.000";
new
string[sizeof str_format_text + (-2 + MAX_PLAYER_NAME)];
format(string, sizeof string, str_format_text, GN(playerid));

return SendClientMessage(playerid, -1, string);
Советую почитать урок (http://pro-pawn.ru/showthread.php?13388-Подсчёт-размера-форматируемой-строки&highlight=static+const+fmt_str%5B%5D) по "правильному" подсчету размера строки.

2017 год, подсчитываем размер строки. Можно огнетушитель, пожалуйста?

DeimoS
24.12.2016, 17:42
В 2017 году, по версии Пельменя, принято делать так, если вы не в теме

new string[1024];
format(string, sizeof(string), "%s Вам выдали подарок в размере $100.000", GN(playerid));
return SendClientMessage(playerid, -1, string);
Своеобразный возврат в 2007 год :3

Пельмень
31.12.2016, 10:25
В 2017 году, по версии Пельменя, принято делать так, если вы не в теме

new string[1024];
format(string, sizeof(string), "%s Вам выдали подарок в размере $100.000", GN(playerid));
return SendClientMessage(playerid, -1, string);
Своеобразный возврат в 2007 год :3

В 2017 году по версии Пельменя, принято делать так, если вы не в теме

va_SendClientMessage(palyerid, -1, "%s Вам выдали подарок в размере $100.000", (GetPlayerName((playerid), Q@, 24), Q@));

DeimoS
31.12.2016, 13:24
В 2017 году по версии Пельменя, принято делать так, если вы не в теме

va_SendClientMessage(palyerid, -1, "%s Вам выдали подарок в размере $100.000", (GetPlayerName((playerid), Q@, 24), Q@));

Разницы особо не видно.

Судя по неактивности автора, ответ получен. Если нет - отпишись в личку и открою.
Закрыто.