Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 8 из 8
  1. #1
    Аватар для wAx
    ¯\_(ツ)_/¯

    Статус
    Оффлайн
    Регистрация
    13.12.2013
    Сообщений
    377
    Репутация:
    146 ±

    sscanf + OnPlayerCommandText

    В последнее время появилось множество командных процессоров, и в этой суете, все почти забыли про стандартный. В современных модах (к ним не относятся, ни RLS ни Gf), команд как таковых минимум, и получается если использовать сторонний командный процессор в таком моде, то он не дает никаких плюсов (порой даже минусы)

    Конкретнее?

    Лишний код
    Трудно разобраться с поддержкой кирилицы
    Проблемы с вызовом команды из вне

    Поэтому для удобства, хочу предложить вам может и не новый способ, но все же функциональный. Это использование sscanf плагина вместо strtok. Этот способ предложил мне XemyL, за что ему огромное спасибо

    Достаточно подключить плагин и в OnPlayerCommandText вставить:
    PHP код:
    new cmd[32], params[128];
    sscanf(cmdtext"s[32]s[128]"cmdparams); 
    Вот пример команды:
    PHP код:
    if(strcmp(cmd,"/mycommand",true) == 0)
        {
            new 
    param1,param2,param3[13];
            if(
    sscanf(params,"dds[12]",param1,param2,param3)) return SendClientMessage(playeridCOLOR_WHITE,"> Ââåäèòå /test [num1] [num2] [text1]");
            new 
    string[50];
            
    format(string,sizeof(string),"Переменная 1: %d",param1);
            
    SendClientMessage(playeridCOLOR_YELLOWstring);
            
    format(string,sizeof(string),"Переменная 2: %d",param2);
            
    SendClientMessage(playeridCOLOR_YELLOWstring);
            
    format(string,sizeof(string),"Переменная 3: %s",param3);
            
    SendClientMessage(playeridCOLOR_YELLOWstring);
            return 
    1;
        } 
    Вот и весь урок, если похожие темы созданы, прошу прощения!
    Последний раз редактировалось wAx; 07.03.2015 в 18:42. Причина: Корректировка, исправление.

  2. 2 пользователя(ей) сказали cпасибо:
    Unreal (14.12.2014) [ForD] (28.01.2015)
  3. #2
    Аватар для Pop
    Пользователь

    Статус
    Оффлайн
    Регистрация
    06.11.2013
    Сообщений
    9
    Репутация:
    3 ±
    Пользуюсь данным способ уже несколько лет))) лучше всех :D и даже если плагин sscanf нельзя будет использовать, то он есть и без плагина)))

  4. #3
    Аватар для Unreal
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.09.2014
    Сообщений
    133
    Репутация:
    4 ±
    new cmd[128]
    Команда не может быть больше, ну максимум 16 символов.

    Ну кароче говоря можно делать сразу
    PHP код:
    new cmd[16

  5. #4
    Аватар для Mr.DeViLsS
    Пользователь

    Статус
    Оффлайн
    Регистрация
    30.03.2014
    Сообщений
    132
    Репутация:
    -2 ±
    так не проще?

    Код:
    new params[128];
    sscanf(cmdtext, "s[32]s[128]", cmdtext, params);

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

    Статус
    Оффлайн
    Регистрация
    10.01.2014
    Сообщений
    110
    Репутация:
    29 ±
    Цитата Сообщение от Mr.DeViLsS Посмотреть сообщение
    так не проще?

    Код:
    new params[128];
    sscanf(cmdtext, "s[32]s[128]", cmdtext, params);
    Чем?

  7. #6
    Аватар для Maranzalla
    Заблокирован

    Статус
    Оффлайн
    Регистрация
    25.04.2014
    Адрес
    Moscow
    Сообщений
    108
    Репутация:
    -1 ±
    Цитата Сообщение от wAx Посмотреть сообщение
    В последнее время появилось множество командных процессоров, и в этой суете, все почти забыли про стандартный. В современных модах (к ним не относятся, ни RLS ни Gf), команд как таковых минимум, и получается если использовать сторонний командный процессор в таком моде, то он не дает никаких плюсов (порой даже минусы)

    Конкретнее?

    Лишний код
    Трудно разобраться с поддержкой кирилицы
    Проблемы с вызовом команды из вне

    Поэтому для удобства, хочу предложить вам может и не новый способ, но все же функциональный. Это использование sscanf плагина вместо strtok. Этот способ предложил мне XemyL, за что ему огромное спасибо

    Достаточно подключить плагин и в OnPlayerCommandText вставить:
    PHP код:
    new cmd[128], params[128];
    sscanf(cmdtext"s[128]s[128]"cmdparams); 
    Вот пример команды:
    PHP код:
    if(strcmp(cmd,"/mycommand",true) == 0)
        {
            new 
    param1,param2,param3[13];
            if(
    sscanf(params,"dds[12]",param1,param2,param3)) return SendClientMessage(playeridCOLOR_WHITE,"> Ââåäèòå /test [num1] [num2] [text1]");
            new 
    string[50];
            
    format(string,sizeof(string),"Переменная 1: %d",param1);
            
    SendClientMessage(playeridCOLOR_YELLOWstring);
            
    format(string,sizeof(string),"Переменная 2: %d",param2);
            
    SendClientMessage(playeridCOLOR_YELLOWstring);
            
    format(string,sizeof(string),"Переменная 3: %s",param3);
            
    SendClientMessage(playeridCOLOR_YELLOWstring);
            return 
    1;
        } 
    Вот и весь урок, если похожие темы созданы, прошу прощения!
    Попробуйте какой будет эффект если сделать вот так
    new cmd[128], params[128];
    sscanf(cmdtext, "s[128]s[128]", cmd, params);

  8. #7
    Аватар для wAx
    ¯\_(ツ)_/¯

    Статус
    Оффлайн
    Регистрация
    13.12.2013
    Сообщений
    377
    Репутация:
    146 ±
    Цитата Сообщение от Maranzalla Посмотреть сообщение
    Попробуйте какой будет эффект если сделать вот так
    new cmd[128], params[128];
    sscanf(cmdtext, "s[128]s[128]", cmd, params);
    А есть смысл?

  9. #8
    Аватар для Mr.DeViLsS
    Пользователь

    Статус
    Оффлайн
    Регистрация
    30.03.2014
    Сообщений
    132
    Репутация:
    -2 ±
    Цитата Сообщение от wAx Посмотреть сообщение
    А есть смысл?
    не будет лишней переменной.

 

 

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

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

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

Ваши права

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