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

    Статус
    Оффлайн
    Регистрация
    20.01.2016
    Адрес
    GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
    Сообщений
    47
    Репутация:
    3 ±

    Оптимизация

    Друг подкинул мне красивый чат для Лидеров.
    Но, он очень страшен в плане кода, помогите оптимизировать

    PHP код:
    CMD:lc(playerid,params[])
    {
        if(
    pInfo[playerid][pLeader] >= 1)
        {
            new 
    string[144];
            new 
    name[24];
            
    GetPlayerName(playeridnamesizeof(name));
            if(
    sscanf(params,"s[128]"params[0])) return SendClientMessage(playeridCGREY"Используй: /lc [текст]");
            switch(
    pInfo[playerid][pLeader])
            {
                case 
    1:
                {
                    
    format(stringsizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [LSPD]{FFFFFF} %s[%d]: %s"name,playerid,params[0]);
                    return 
    SendLeaderMessage(CWstring);
                }
                case 
    2:
                {
                    
    format(stringsizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [FBI]{FFFFFF} %s[%d]: %s"name,playerid,params[0]);
                    return 
    SendLeaderMessage(CWstring);
                }
                case 
    3:
                {
                    
    format(stringsizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [NGSA]{FFFFFF} %s[%d]: %s"name,playerid,params[0]);
                    return 
    SendLeaderMessage(CWstring);
                }
                case 
    4:
                {
                    
    format(stringsizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [LVPD]{FFFFFF} %s[%d]: %s"name,playerid,params[0]);
                    return 
    SendLeaderMessage(CWstring);
                }
                case 
    5:
                {
                    
    format(stringsizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [МЧС]{FFFFFF} %s[%d]: %s"name,playerid,params[0]);
                    return 
    SendLeaderMessage(CWstring);
                }
                case 
    6:
                {
                    
    format(stringsizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [LCN]{FFFFFF} %s[%d]: %s"name,playerid,params[0]);
                    return 
    SendLeaderMessage(CWstring);
                }
                case 
    7:
                {
                    
    format(stringsizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [Yakuza]{FFFFFF} %s[%d]: %s"name,playerid,params[0]);
                    return 
    SendLeaderMessage(CWstring);
                }
                case 
    8:
                {
                    
    format(stringsizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [TTM]{FFFFFF} %s[%d]: %s"name,playerid,params[0]);
                    return 
    SendLeaderMessage(CWstring);
                }
                case 
    9:
                {
                    
    format(stringsizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [TGM]{FFFFFF} %s[%d]: %s"name,playerid,params[0]);
                    return 
    SendLeaderMessage(CWstring);
                }
                case 
    10:
                {
                    
    format(stringsizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [UM]{FFFFFF} %s[%d]: %s"name,playerid,params[0]);
                    return 
    SendLeaderMessage(CWstring);
                }
                case 
    11:
                {
                    
    format(stringsizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [RM]{FFFFFF} %s[%d]: %s"name,playerid,params[0]);
                    return 
    SendLeaderMessage(CWstring);
                }
                case 
    12:
                {
                    
    format(stringsizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [Grove]{FFFFFF} %s[%d]: %s"name,playerid,params[0]);
                    return 
    SendLeaderMessage(CWstring);
                }
                case 
    13:
                {
                    
    format(stringsizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [Ballas]{FFFFFF} %s[%d]: %s"name,playerid,params[0]);
                    return 
    SendLeaderMessage(CWstring);
                }
                case 
    14:
                {
                    
    format(stringsizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [Rifa]{FFFFFF} %s[%d]: %s"name,playerid,params[0]);
                    return 
    SendLeaderMessage(CWstring);
                }
                case 
    15:
                {
                    
    format(stringsizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [Coronos]{FFFFFF} %s[%d]: %s"name,playerid,params[0]);
                    return 
    SendLeaderMessage(CWstring);
                }
                case 
    16:
                {
                    
    format(stringsizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [Vagos]{FFFFFF} %s[%d]: %s"name,playerid,params[0]);
                    return 
    SendLeaderMessage(CWstring);
                }
                case 
    17:
                {
                    
    format(stringsizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [Str.LV]{FFFFFF} %s[%d]: %s"name,playerid,params[0]);
                    return 
    SendLeaderMessage(CWstring);
                }
                case 
    18:
                {
                    
    format(stringsizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [Str.LS]{FFFFFF} %s[%d]: %s"name,playerid,params[0]);
                    return 
    SendLeaderMessage(CWstring);
                }
                case 
    19:
                {
                    
    format(stringsizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [Convers]{FFFFFF} %s[%d]: %s"name,playerid,params[0]);
                    return 
    SendLeaderMessage(CWstring);
                }
                case 
    20:
                {
                    
    format(stringsizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [Bikers]{FFFFFF} %s[%d]: %s"name,playerid,params[0]);
                    return 
    SendLeaderMessage(CWstring);
                }
                case 
    21:
                {
                    
    format(stringsizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [Hitman]{FFFFFF} %s[%d]: %s"name,playerid,params[0]);
                    return 
    SendLeaderMessage(CWstring);
                }
                case 
    22:
                {
                    
    format(stringsizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [Репортёры]{FFFFFF} %s[%d]: %s"name,playerid,params[0]);
                    return 
    SendLeaderMessage(CWstring);
                }
                case 
    23:
                {
                    
    format(stringsizeof(string), "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [Taxi]{FFFFFF} %s[%d]: %s"name,playerid,params[0]);
                    return 
    SendLeaderMessage(CWstring);
                }
                default:
                {
                    return 
    SendClientMessage(playeridCLR"Community:{ffffff} Вам не доступен /lc чат.");
                }
            }
        }
        else
        {
            
    SendClientMessage(playeridCLR"Community: {FFFFFF}Вы не уполномочены использовать эту команду!");
            return 
    1;
        }
        return 
    1;


  2. #2
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Вот набросок оптимизированного кода:

      Открыть/закрыть
    PHP код:
    CMD:lc(playeridparams[])
    {

        static const
            
    faction_name[][5] =
        {
            
    "LSPD",
            
    /*...*/
        
    };


        new 
    leader pInfo[playerid][pLeader];

        if (
    leader 1)
            return 
    SendClientMessage(playerid, -1,
                !
    "Community: {FFFFFF}Вы не уполномочены использовать эту команду!");
        
        if (
    sscanf(params"s[128]"params[0]))
            return 
    SendClientMessage(playerid, -1,
                !
    "Используй: /lc [текст]");

        static const 
            
    fmt_str[] = "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [%s]{FFFFFF} %s[%d]: %s"
        const 
            
    fmt_size sizeof(fmt_str) + (-sizeof(faction_name[])) + (-MAX_PLAYER_NAME) + (-4) + 128

        
    #if fmt_size > MAX_CHATBUBBLE_LENGTH 
            #define final_size MAX_CHATBUBBLE_LENGTH 
        #else 
            #define final_size fmt_size 
        #endif 
        
    new buffer[final_size],
            
    playerName[MAX_PLAYER_NAME];
        
    #undef final_size

        
    GetPlayerName(playeridplayerNamesizeof playerName);


        
    format(buffersizeof bufferfmt_strfaction_name[leader], playerNameplayeridparams[0]);

        return 
    SendLeaderMessage(playeridbuffer);

    Последний раз редактировалось VVWVV; 23.01.2016 в 19:25. Причина: Код... Спасибо Untonyst и Londlem.

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

    Статус
    Оффлайн
    Регистрация
    20.01.2016
    Адрес
    GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
    Сообщений
    47
    Репутация:
    3 ±
    Спасибо.

  5. #4
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Цитата Сообщение от VVWVV Посмотреть сообщение
    Вот набросок оптимизированного кода:

      Открыть/закрыть
    PHP код:
    CMD:lc(playeridparams[])
    {

        static const
            
    faction_name[][5] =
        {
            
    "LSPD",
            
    /*...*/
        
    };


        new 
    leader pInfo[playerid][pLeader];

        if (
    leader 1)
            return 
    SendClientMessage(playerid, -1,
                !
    "Community: {FFFFFF}Вы не уполномочены использовать эту команду!");
        
        if (
    sscanf(params"s[128]"params[0]))
            return 
    SendClientMessage(playerid, -1,
                !
    "Используй: /lc [текст]");

        static const
            
    frmStr[] = "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [%s]{FFFFFF} %s[%d]: %s";

        new 
    buffer[
            
    sizeof frmStr +
            
    sizeof faction_name[] +
            
    MAX_PLAYER_NAME +
            
    +
            
    128
            
    ],
            
    playerName[MAX_PLAYER_NAME];
        
    GetPlayerName(playeridplayerNamesizeof playerName);


        
    format(buffersizeof bufferfrmStrfaction_name[leader], playerNameplayeridparams[0]);

        return 
    SendLeaderMessage(playeridbuffer);

    Я бы тупо поставил 144(т.к. это лимит длинны сообщения в чат) и не рассчитывал размер массива по формуле. Здесь только "MAX_PLAYER_NAME + 5 + 128" за лимит выйдет.
    Последний раз редактировалось Desulaid; 23.01.2016 в 01:56. Причина: лел0)))

  6. 3 пользователя(ей) сказали cпасибо:
    DeimoS (23.01.2016) Processing (25.01.2016) VVWVV (23.01.2016)
  7. #5
    Аватар для L0ndl3m
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±
    Цитата Сообщение от Untonyst Посмотреть сообщение
    Я бы тупо поставил 144(т.к. это лимит длинны сообщения в чат) и не рассчитывал размер массива по формуле. Здесь только "MAX_PLAYER_NAME + 5 + 128" за лимит выйдет.
    В таком случае, я бы число 144 заменил на стандартную константу MAX_CHATBUBBLE_LENGTH, т.к. Kalcor может и изменить максимальную длину сообщения в чате сервера.

    А если уж хотите, чтобы компилятор сам установил нужное количество ячеек ( осторожно: время компиляции скрипта увеличивается ), не вылезая за пределы MAX_CHATBUBBLE_LENGTH:
    PHP код:

    static const
        
    fmt_str[] = "{E3BE88}({0DFA00}Чат {0DFA00}лидеров{E3BE88}) [%s]{FFFFFF} %s[%d]: %s";

    const
        
    fmt_size sizeof(fmt_str) + (-sizeof(faction_name[])) + (-MAX_PLAYER_NAME) + (-4) + 128;

    #if fmt_size > MAX_CHATBUBBLE_LENGTH
        #define final_size MAX_CHATBUBBLE_LENGTH
    #else
        #define final_size fmt_size
    #endif

    new
        
    string[final_size];

    #undef final_size 

  8. 2 пользователя(ей) сказали cпасибо:
    Processing (24.01.2016) VVWVV (23.01.2016)
  9. #6
    Аватар для Processing
    Пользователь

    Статус
    Оффлайн
    Регистрация
    20.01.2016
    Адрес
    GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
    Сообщений
    47
    Репутация:
    3 ±
    Не жалею, что пришел узнавать нового именно на этот портал.

 

 

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

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

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

Ваши права

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