Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Урок Создание команд на DC_CMD с sscanf2

Статус
В этой теме нельзя размещать новые ответы.

Darge

Умник
Здравствуйте, уважаемые пользователи, буквально сегодня меня пригласили в беседу в ВК, где толпа ребят просили меня рассказать про создание команд на dc_cmd. Я скинул им небольшую команду и рассказал как она работает. Подумав, решил написать краткий курс для начинающих в создании команд на dc_cmd с использование sscanf2. Для начала определимся с командный процессором. По сути, они мало чем отличаются, но dc_cmd в плане функциональности и производительности обходит zcmd. Sscanf нам нужен для более быстрого "конверктирования", если можно так выразиться. С ним просто будет все быстрее :D

Загрузки/ дополнительная информация:

Многие понимаю и усваивают новое на конкретном примере. Почему бы не поступить так же? Итак, давайте напишем команду, которая будет отправлять приветствие всем на сервере? С чего начать? С "шапки" команды. Я обычно использую "COMMAND", но вариант "CMD" более распространенее. Суть не в этом :)

Заготовка любой команды всегда одно и та же - это
PHP:
COMMAND:cmd_name(playerid, params[])
{
	// 
}
[HR][/HR]playerid - тот кто вызвал команду
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]В первый параметр (params[0]) через sscanf мы мы получим string-параметр, то есть строковый параметр. Далее, если игрок ничего не ввел, то условие вернет 1 и выведет сообщение вызвавшему команду. Если игрок ввел строковый параметр, то команда продолжит работу и в конце вернет 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;
}
[HR][/HR]playerid, как я уже говорил, - номер игрока, который вызвал команду. Этот номер передается все остальным функция, которые они используют. Если игрок с id 0 вызвал команду, то функция GetPlayerName будет получать имя у этого игрока.
params[0] получает строковое сообщение, далее при форматировании с помощью индификатора %s получаем это сообщение. Далее все вам должно быть знакомо.
[HR][/HR]

Если я что-то упустил или вам что-то непонятно, то пишите. Тему будет дополняться ;)
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу