Доступ к архиву

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

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

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

Dark0711

Дебютант
Этот урок расказывает об использовании библиотек zcmd и sscanf2, как по отдельности,так и вместе.
zcmd - Используется как альтернатива OnPlayerCommandText.
sscanf2 - для операции со строками.

Итак для начала нам надо:



Установка:

1. zcmd.inc в папку pawno/include

2. Архив sscanf.zip распакуйте в папку с вашим сервером или установите самостоятельно:
2.1 sscanf2.inc в папку pawno/include
2.2 sscanf.dll в папку plugins

3. В файле server.cfg добавляем строку "plugins sscanf" если уже есть подключенные плагины то дописываем через пробел "sscanf".

Использование в коде:
1. Для начала нужно подключить sscanf2 и zcmd к нашему проекту.
При подключении zcmd стандартный обработчик OnPlayerCommandText перестает работать.
PHP:
#include <sscanf2>
#include <zcmd>
2. Все новые команды объявляются вне public. Можно объявить в любом месте...
Команды начинаются со слова "CMD","COMMAND","command","cmd" далее идет название нашей комманды без символа "/", zcmd не терпит верхнего регистра не в каких его проявлениях,циферки терпит, так что всё с маленькой буквы.

Пример:
PHP:
//Использование "CMD","COMMAND" 
CMD:s(playerid, params[])  // или COMMAND:s(playerid, params[])
{
 SendClientMessage(playerid, 0xF81414FF,"Введена команда /s");
 return 1;
}
//Использование "command","cmd"
cmd(s,playerid, params[]) //или command(s,playerid, params[])
{
 SendClientMessage(playerid, 0xF81414FF,"Введена команда /s");
 return 1;
}
//Все эти примеры заменяю стандартный код
public OnPlayerCommandText(playerid, cmdtext[])
{
 if (strcmp("/s", cmdtext, true, 2) == 0)
 { 
  SendClientMessage(playerid, 0xF81414FF,"Введена команда /s");	
  return 1;
 }
 return 0;
}
3.Итак простые команды мы создавать научились. Теперь будем работать с библиотекой sscanf2. Она содержит нужную нам функцию sscanf(const data[], const format[], {Float,_}:...);.
Здесь:
const data[] - где берем наши значения в нашем случаи это будет params[].
const format[] - что именно берем, здесь указываются в каком виде попадет наше значения после поиска.
Код:
	i, d			Integer	
	c			Character	
	l			Logical
	b			Binary
	h, x			Hex	
	o			Octal	
	n			Number
	f			Float	
	g			IEEE Float	
	u			User name/id (bots and players)	
	q			Bot name/id			
	r			Player name/id
        e                       Start of the "enum" type
	s	                String
{Float,_}: - куда мы записываем найденные значения

С помощью нее мы будем выделать нужные нам значения после нашей команды.Пример:
PHP:
new String[128],Integer
sscanf("Число 50", "si", String, Integer);
//результат будет String =  Число , Integer = 50
Более подробную информацию по sscanf2 ищите в интернете или по просьбам опишу тут.
4.Ну и наконец то совместное использование этих функций
Пример: Использование команды с одним параметром формата "/givemoney [Количество]"

PHP:
CMD:givemoney(playerid, params[]) 
{
 new Money;
 if(sscanf(params,"i",Money)) return SendClientMessage(playerid, 0xF81414FF,"Введите /givemoney [Количество]");
 GivePlayerMoney(playerid,Money);
 SendClientMessage(playerid, 0xF81414FF,"Деньги добавлены");
 return 1;
}
Пример: Использование команды с тремя параметрами формата "/set_m_h_m [Money][Healt][Message]"
PHP:
CMD:set_m_h_m(playerid, params[]) //Использование sscanf2 с 3 параметрами
{
 new Money;//Деньги
 new Float:Healt;//Здоровье
 new Message[128];//Сообшение
 if(sscanf(params,"ifs",Money,Healt,Message)) return SendClientMessage(playerid, 0xF81414FF,"Введите /set_m_h_m [Money][Healt][Message] ");
 GivePlayerMoney(playerid,Money);//Даём денег
 SetPlayerHealth(playerid, Healt);//Ставим здоровье
 SendClientMessage(playerid, 0x6EF83CFF,Message);//Посылаем сообшение
 return 1;
}
И в заключение, можно и обойтись без использования zcmd и использовать только sscanf2 в OnPlayerCommandText.
Но на мой взгляд sscanf2 и zcmd хорошая связка, также как альтернативу zcmd можно рассматривать

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