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

    Статус
    Оффлайн
    Регистрация
    01.06.2014
    Адрес
    Москва
    Сообщений
    92
    Репутация:
    16 ±

    По ssccanf и DC_CMD

    Можете максимально оптимизировать эту команду.
    Или дать советы по оптимизации.
    И главный вопрос, как подстроить sscanf под динамичный параметр 1 (причина.)
    То есть, если параметра 1 нет, то не выводить слово причина:

    PHP код:
    CMD:unjail(playeridparams[])
    {
        if(
    sscanf(params"us[24]",params[0],params[1])) return SendClientMessage(playerid0xAFAFAFAA"Используйте: /unjail [id игрока] ([Причина])");//Вот тут
        
    if(strlen(params[1]) < 2)
        {
            static const 
    fmt_string[] = "Администратор: %s выпустил из тюрьмы %s";
            new 
    string[sizeof(fmt_string)-2+MAX_PLAYER_NAME-2+MAX_PLAYER_NAME];
            
    format(stringsizeof(string), fmt_stringPlayerInfo[playerid][pName], PlayerInfo[params[0]][pName]);
            
    SendClientMessageToAll(0xFF6347AAstring);
        }
         else
         {
             static const 
    fmt_string[] = "Администратор: %s выпустил из тюрьмы %s. Причина: %s";
            const 
    size0 sizeof(fmt_string)-2+MAX_PLAYER_NAME-2+MAX_PLAYER_NAME-2+24;
            
    #if size0 > 144
                #define size 144
            #else
                #define size size0
            #endif
            
    new string[size];
            
    #undef size
            
    format(stringsizeof(string), fmt_stringPlayerInfo[playerid][pName], PlayerInfo[params[0]][pName], params[1]);
            
    SendClientMessageToAll(0xFF6347AAstring);
        }
        
    PlayerInfo[params[0]][pPrison] = 0;
        
    SpawnPlayer(params[0]);
        return 
    1;

    Последний раз редактировалось Flime; 04.01.2015 в 21:35.

  2. #2
    Аватар для L0ndl3m
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±
    Ну для начала можно было не создавать константу, а прямо в квадратные скобки занести расчёты, которые будет производить компилятор.
    Ещё можно было создать единственный массив. Для таких случаев можно было посчитать размер строки самому.
    Далее можно вместо двух форматов, сделать один, использовав в аргументе функции тернарный оператор.

  3. Пользователь сказал cпасибо:
    Flime (04.01.2015)
  4. #3
    Аватар для Flime
    Пользователь

    Статус
    Оффлайн
    Регистрация
    01.06.2014
    Адрес
    Москва
    Сообщений
    92
    Репутация:
    16 ±
    Хорошо, а как проблему с sscanf решить?

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

    Статус
    Оффлайн
    Регистрация
    27.11.2013
    Адрес
    Нижневартовск
    Сообщений
    256
    Репутация:
    63 ±
    PHP код:
    CMD:unjail(playeridparams[])
    {
        if(
    sscanf(params"us[24]"params[0], params[1])) return SendClientMessage(playerid0xAFAFAFAA"Используйте: /unjail [id игрока] ([Причина])");
        new 
    string[119];
        if(!
    strlen(params[1]))
            
    format(stringsizeof string"Администратор: %s выпустил из тюрьмы %s"PlayerInfo[playerid][pName], PlayerInfo[params[0]][pName]);
        else
            
    format(stringsizeof string"Администратор: %s выпустил из тюрьмы %s. Причина: %s"PlayerInfo[playerid][pName], PlayerInfo[params[0]][pName], params[1]);
        
    SendClientMessageToAll(0xFF6347AAstring);
        
    PlayerInfo[params[0]][pPrison] = 0;
        
    SpawnPlayer(params[0]);
        return 
    1;

    Возможно, так будет работать)
    Последний раз редактировалось Mazzilla; 04.01.2015 в 23:27.

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

    Статус
    Оффлайн
    Регистрация
    01.06.2014
    Адрес
    Москва
    Сообщений
    92
    Репутация:
    16 ±
    Нет, т.к. sscanf будет постоянно требовать ввести параметр причины!

 

 

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

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

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

Ваши права

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