Darge
Умник
Здравствуйте, уважаемые пользователи, буквально сегодня меня пригласили в беседу в ВК, где толпа ребят просили меня рассказать про создание команд на dc_cmd. Я скинул им небольшую команду и рассказал как она работает. Подумав, решил написать краткий курс для начинающих в создании команд на dc_cmd с использование sscanf2. Для начала определимся с командный процессором. По сути, они мало чем отличаются, но dc_cmd в плане функциональности и производительности обходит zcmd. Sscanf нам нужен для более быстрого "конверктирования", если можно так выразиться. С ним просто будет все быстрее 
Загрузки/ дополнительная информация:
Многие понимаю и усваивают новое на конкретном примере. Почему бы не поступить так же? Итак, давайте напишем команду, которая будет отправлять приветствие всем на сервере? С чего начать? С "шапки" команды. Я обычно использую "COMMAND", но вариант "CMD" более распространенее. Суть не в этом
Заготовка любой команды всегда одно и та же - это
[HR][/HR]playerid - тот кто вызвал команду
params[] - массив, где каждая ячейки будет служить номером каждого из параметров
cmd_name - имя команды
COMMAND можно назвать своего рода тегом, который будет определять команду.
[HR][/HR]
Назовем команду hi_all и добавим в нее sscanf-примочки
[HR][/HR]В первый параметр (params[0]) через sscanf мы мы получим string-параметр, то есть строковый параметр. Далее, если игрок ничего не ввел, то условие вернет 1 и выведет сообщение вызвавшему команду. Если игрок ввел строковый параметр, то команда продолжит работу и в конце вернет 1 как знак того, что все прошло успешно.
[HR][/HR]
Заскочим дальше, напишем команду полностью и проследим вызовы параметров и прочего.
Элементарные функции, рассматривать их не будет, а перейдем к аргументам и параметрам.
Проследим за всеми параметрами и аргументами
[HR][/HR]playerid, как я уже говорил, - номер игрока, который вызвал команду. Этот номер передается все остальным функция, которые они используют. Если игрок с id 0 вызвал команду, то функция GetPlayerName будет получать имя у этого игрока.
params[0] получает строковое сообщение, далее при форматировании с помощью индификатора %s получаем это сообщение. Далее все вам должно быть знакомо.
[HR][/HR]
Если я что-то упустил или вам что-то непонятно, то пишите. Тему будет дополняться
Загрузки/ дополнительная информация:
-
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
-
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
-
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
-
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Многие понимаю и усваивают новое на конкретном примере. Почему бы не поступить так же? Итак, давайте напишем команду, которая будет отправлять приветствие всем на сервере? С чего начать? С "шапки" команды. Я обычно использую "COMMAND", но вариант "CMD" более распространенее. Суть не в этом
Заготовка любой команды всегда одно и та же - это
PHP:
COMMAND:cmd_name(playerid, params[])
{
//
}
params[] - массив, где каждая ячейки будет служить номером каждого из параметров
cmd_name - имя команды
COMMAND можно назвать своего рода тегом, который будет определять команду.
[HR][/HR]
Назовем команду hi_all и добавим в нее sscanf-примочки
PHP:
COMMAND:hi_all(playerid, params[])
{
if(sscanf(params, "s[20]", params[0]))
return SendClientMessage(playerid, -1, "Введите /hi_all [текст]");
//
return 1;
}
[HR][/HR]
Заскочим дальше, напишем команду полностью и проследим вызовы параметров и прочего.
PHP:
COMMAND:hi_all(playerid, params[])
// hi_all hello, players ;)
{
if(sscanf(params, "s[20]", params[0]))
return SendClientMessage(playerid, -1, "Введите /hi_all [текст]");
new str[144], name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
format(str, sizeof(str), "Игрок %s поздоровался со всеми со словами \"%s\"!", p_name, params[0]);
SendClientMessageToAll(-1, str);
return 1;
}
Проследим за всеми параметрами и аргументами
Код:
COMMAND:hi_all([B][COLOR="#006400"]playerid[/COLOR][/B], params[])
{
if(sscanf(params, "s[20]", [B][COLOR="#DAA520"]params[0][/COLOR][/B]))
return SendClientMessage([B][COLOR="#006400"]playerid[/COLOR][/B], -1, "Введите /hi_all [текст]");
new [B]str[144][/B], name[MAX_PLAYER_NAME];
GetPlayerName([B][COLOR="#006400"]playerid[/COLOR][/B], name, sizeof(name));
format([B]str[/B], sizeof([B]str[/B]), "Игрок %s поздоровался со всеми со словами \"%s\"!", p_name, [B][COLOR="#DAA520"]params[0][/COLOR][/B]);
SendClientMessageToAll(-1, [B]str[/B]);
return 1;
}
params[0] получает строковое сообщение, далее при форматировании с помощью индификатора %s получаем это сообщение. Далее все вам должно быть знакомо.
[HR][/HR]
Если я что-то упустил или вам что-то непонятно, то пишите. Тему будет дополняться
