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

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

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

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

[Урок] Написание команд на ZCMD + Sscanf

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

Kazon

Компетентный
Введение:
Многие пользователи Pawno-Info затрудняются в написании обычных команд. Но ZCMD использовать намного легче и удобнее + это оптимизация для мода.
И в этом уроке я вам покажу как правильно пользоваться ZCMD + Sscanf

И так меленькие основы для начала
%s - Это Строка(String), %i, %d - Это числа(Integer), %f - Это число с точкой(Float)
%u - в Sscanf это игрок

Пример обычной команды:

PHP:
if(strcmp(cmd, "/skin", true) == 0) 
{
    if(IsPlayerConnected(playerid))
    {
        tmp = strtok(cmdtext, idx);
        if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /skin [id игрока] [cкин]"); 
        giveplayerid = ReturnUser(tmp); 
        tmp = strtok(cmdtext, idx);
        if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /skin [id игрока] [cкин]"); 
        tmp = strtok(cmdtext, idx);
        new skin = strval(tmp);
        SetPlayerSkin(giveplayerid,skin); 
    }
    return true; 
}

Пример на ZCMD+Sscanf
PHP:
CMD:skin(playerid, params[]) 
{ 
    if(!IsPlayerConnected(playerid)) return true;
    if(sscanf(params,"ui", params[0],params[1])) return SendClientMessage(playerid, 0xFF0000AA, "Введите: /skin [id игрока] [cкин]"); 
    SetPlayerSkin(params[0],params[1]); 
    return true; 
}
Как видите команда стала намного меньше и больше не надо использовать тупые tmp = strtok(cmdtext, idx); и giveplayerid = ReturnUser(tmp); теперь можно обойтись без них
и ещё как вы видите здесь вместо переменных new уже используются параметры params[0] если же вам надо несколько переменных то используйте params[1], params[2] и так далее..

разберём подробнее функцию if(sscanf(params,"ui", params[0],params[1]))
u - в Sscanf это игрок %i, %d - Это числа(Integer)
Так что без разницы хоть мы будем делать так if(sscanf(params,"ui", params[0],params[1])) или так if(sscanf(params,"ud", params[0],params[1])) результат будет один и тот же
params[0], params[1] это параметры куда будут записываться значения u и i

Внимание: Никогда Никогда и ещё раз Никогда не создавайте переменные в ZCMD кроме переменных типа Float и Массивов. Это способствует не малой нагрузки на Стэк после чего приходится использовать #pragma dynamic

а теперь ещё пример с использованием %f

PHP:
CMD:tpcor(playerid, params[]) 
{ 
    if(!IsPlayerConnected(playerid)) return true;
    if(sscanf(params,"fff", params[0],params[1],params[2])) return SendClientMessage(playerid, 0xFF0000AA, "Введите: /tpcor [x] [y] [z]"); 
    SetPlayerPos(playerid,params[0],params[1],params[2])
    return true; 
}
Почему мы здесь указали именно %f а не другие потому что на сколько мы знает координаты это числа с плавающей точкой и по этому мы указываем %f
И все что мы введем все 3 координаты запишутся в параметры params[0] - сюда запишется координата X, params[1] - Сюда Y, params[2] - Сюда Z ну и как вы поняли с помощью этой команды вы сможете телепортироваться на любые указанные вами координаты

Если появятся вопросы задавайте их не стесняйтесь
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу