Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 5 из 5

Тема: dcmd

  1. #1
    Аватар для Seregamil
    Проверенный

    Статус
    Оффлайн
    Регистрация
    21.11.2013
    Сообщений
    551
    Репутация:
    274 ±

    dcmd

    Внимание!
    Это не пример использования плагина от Daniel_Cortez, это пример использования макроса от DracoBlue

    Для использования DCMD достаточно в начало мода добавить данную строку:
    PHP код:
    #define dcmd(%1,%2,%3) if((strcmp((%3)[1],#%1,true,(%2))==0)&&((((%3)[(%2)+1]==0)&&(dcmd_%1(playerid,"")))||(((%3)[(%2)+1]==32)&&(dcmd_%1(playerid,(%3)[(%2)+2]))))) return 1 
    Немного информации с википедии:

    Использование strtok в OnPlayerCommandText:
    PHP код:
    public OnPlayerCommandText(playeridcmdtext[])
    {
        new 
    indexcmd[20];
        
    cmd strtok(cmdtextindex);

        if (
    strcmp(cmd"/heal"true) == 0)
        {
            new 
    tmp[20];
            
    tmp strtok(cmdtextindex);
                    if(!
    strlen(tmp)) return SendClientMessage(playerid0xFF0000AA"Usage : /heal <ID>");
            if(!
    IsPlayerConnected(strval(tmp))) return SendClientMessage(playerid0xFF0000AA"Player not found");
            
    SetPlayerHealth(strval(tmp), 100.0);
            
    SendClientMessage(strval(tmp), 0x00FF00AA"You have been healed");
                
    SendClientMessage(playerid0x00FF00AA"Player healed");
            return 
    1;
        }
        return 
    0;

    Использование dcmd:
    PHP код:
    public OnPlayerCommandText(playeridcmdtext[])
    {
        
    dcmd(heal4cmdtext);
        return 
    0;
    }

    dcmd_heal(playeridparams[])
    {
        if (!
    strlen(params)) return SendClientMessage(playerid0xFF0000AA"Usage: \"/heal <playerid>\"");
        if (!
    IsPlayerConnected(strval(params)))SendClientMessage(playerid0xFF0000AA"Player not found");
        
    SetPlayerHealth(strval(params), 100.0);
        
    SendClientMessage(strval(params), 0x00FF00AA"You have been healed");
        
    SendClientMessage(playerid0x00FF00AA"Player healed");
        return 
    1;

    Команды полностью одинаковые в плане работы, но существует уже меньше кода
    Кушает намного мешьше:
    1 вариант:
    PHP код:
    Header size:            280 bytes
    Code size
    :             1756 bytes
    Data size
    :              308 bytes
    Stack
    /heap size:      16384 bytesestimated maxusage=95 cells (380 bytes)
    Total requirements:   18728 bytes 
    2 вариант
    PHP код:
    Header size:            280 bytes
    Code size
    :              972 bytes
    Data size
    :              336 bytes
    Stack
    /heap size:      16384 bytesestimated maxusage=16 cells (64 bytes)
    Total requirements:   17972 bytes 
    Команда находится в отдельной функции, а это значит, что данную команду можно погрузить в тот же текстовый файл и оттуда брать тело.

    А теперь небольшой разбор вопросов, которые вечно возникают у новоиспеченных кодеров

    - что означает 4 в строке dcmd(heal, 4, cmdtext)
    - Ответ: длина команды без параметров.

    - когда я не использую params то возникают ошибки, что делать?
    - Ответ: в тело команды прописать #pragma unused params

    - какое кол-во параметров можно использовать?
    - Ответ: пока не надоест, однако с текстовыми параметрами возникают проблемы, если идет сначала текстовый параметр с пробелами, а потом - числовой, то вместо числового выведет следующий текстовый параметр
    Если же текстовый параметр - одно слово, а потом - различные числовые параметры - проблем не возникнет.


    Ну и как же без практики.

    Простая команда /car, использовать которую разрешено только администрации.

    PHP код:
    public OnPlayerCommandText(playeridcmdtext[]){
        
    dcmd(car3cmdtext);
        return 
    0;
    }

    dcmd_car(playeridparams[]){
        if(
    IsPlayerInAnyVehicle(playerid) || !IsPlayerAdmin(playerid)) return false;// если игрок в машине или он не в RCON'е - вернем false
        
    if( (!strlen(params[0])) || (!strlen(params[1])) || (!strlen(params[2])) ) return SendClientMessage(playerid, -1"/car [modelid] [color1] [color2]");//если мы пропустили какой-то из параметров - сообщим об этом
        
    new Float_pos[4];
        
    GetPlayerPos(playerid_pos[0], _pos[1], _pos[2]);//получаем позицию в пространстве
        
    GetPlayerFacingAngle(playerid_pos[3]);//получаем поворот
        
    return CreateVehicle(strval(params[0]), _pos[0], _pos[1], _pos[2], _pos[3], strval(params[1]), strval(params[2]), 999999);//спавним машину

    Для кото-то это покажется сложным, но это не сложнее чем те же ZCMD, YCMD etc.
    Задавайте вопросы - получите ответы.

    Автор - Seregamil

  2. 2 пользователя(ей) сказали cпасибо:
    L0ndl3m (09.12.2013) TWIX (09.12.2013)
  3. #2
    Аватар для TWIX
    Пользователь

    Статус
    Оффлайн
    Регистрация
    29.10.2013
    Сообщений
    100
    Репутация:
    41 ±
    Хех Данный автор не ты а самый древний и классный скриптер!
    Уважаю данных Людей:

    1. Osetin(Хороший Администратор)
    2.Daniel_Cortez(Классный скриптер)
    3.Londlem(Офигенный скриптер)
    4.#Carleone(Просто хороший человек)

  4. #3
    Аватар для Seregamil
    Проверенный

    Статус
    Оффлайн
    Регистрация
    21.11.2013
    Сообщений
    551
    Репутация:
    274 ±
    Цитата Сообщение от TWIX Посмотреть сообщение
    Хех Данный автор не ты а самый древний и классный скриптер!
    Автор данной статьи - я, если есть доказательства обратные - в студию.

  5. Пользователь сказал cпасибо:
    Salvacore (09.12.2013)
  6. #4
    Аватар для Salvacore
    Инжунер-погромист

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Адрес
    Аҧсуа бызшәа
    Сообщений
    2,271
    Репутация:
    418 ±
    Молодец.

  7. #5
    Аватар для TWIX
    Пользователь

    Статус
    Оффлайн
    Регистрация
    29.10.2013
    Сообщений
    100
    Репутация:
    41 ±
    Цитата Сообщение от Seregamil Посмотреть сообщение
    Автор данной статьи - я, если есть доказательства обратные - в студию.
    Извени не туда посмотрел Автор действительно ты +сик!
    Уважаю данных Людей:

    1. Osetin(Хороший Администратор)
    2.Daniel_Cortez(Классный скриптер)
    3.Londlem(Офигенный скриптер)
    4.#Carleone(Просто хороший человек)

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •