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

Реклама


**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 200руб/мес, Текстовая 100руб/мес.
Показано с 1 по 8 из 8
  1. #1
    Аватар для Avenger
    Пользователь

    Статус
    Оффлайн
    Регистрация
    21.05.2016
    Сообщений
    2
    Репутация:
    0 ±

    Оптимизация небольшого кода

    Всем привет.
    Каким образом возможно оптимизировать следующий код:
    Код:
        if(strcmp(cmd, "/leaders3", true) == 0)
        {
            string[0] = 0;
            for(new i=0;i<MAX_PLAYERS;i++)
            {
                new fname[1024];
                if(!IsPlayerConnected(i) || IsPlayerNPC(i)) continue;
                if(PlayerInfo[i][pLeader] <= 0) continue;
                {
                if(PlayerInfo[i][pLeader] == 1) { fname = "FBI"; }
                else if(PlayerInfo[i][pLeader] == 2) { fname = "ФБР"; }
                else if(PlayerInfo[i][pLeader] == 3) { fname = "Национальная Гвардия"; }
                else if(PlayerInfo[i][pLeader] == 4) { fname = "Министерство Здравоохранение"; }
                else if(PlayerInfo[i][pLeader] == 5) { fname = "La Cosa Nostra"; }
                else if(PlayerInfo[i][pLeader] == 6) { fname = "Yakuza"; }
                else if(PlayerInfo[i][pLeader] == 7) { fname = "Правительство Штата"; }
                else if(PlayerInfo[i][pLeader] == 8) { fname = "Хитманы"; }
                else if(PlayerInfo[i][pLeader] == 9) { fname = "Репортеры"; }
                else if(PlayerInfo[i][pLeader] == 10) { fname = "Такси"; }
                else if(PlayerInfo[i][pLeader] == 11) { fname = "Инструкторы"; }
                else if(PlayerInfo[i][pLeader] == 13) { fname = "Grove"; }
                else if(PlayerInfo[i][pLeader] == 14) { fname = "El Coronos"; }
                else if(PlayerInfo[i][pLeader] == 15) { fname = "LS Vagos"; }
                else if(PlayerInfo[i][pLeader] == 16) { fname = "The Ballas"; }
                else if(PlayerInfo[i][pLeader] == 17) { fname = "Flaming Cobra"; }
                else if(PlayerInfo[i][pLeader] == 18) { fname = "Street Dogs"; }
                else if(PlayerInfo[i][pLeader] == 19) { fname = "SF Rifa"; }
                else if(PlayerInfo[i][pLeader] == 20) { fname = "Русская Мафия"; }
                }
                new num = PlayerInfo[i][pPnumber];
                GetPlayerName(i, sendername, sizeof(sendername));
                if(i == 0) format(string,sizeof(string),"Организация\tНикнейм\tНомер\n%s%s\t%s\t[%d]\n",string,fname,sendername,num);
                else format(string,sizeof(string),"%s%s\t%s\t[%d]\n",string,fname,sendername,num);
            }
            ShowPlayerDialog(playerid,13, DIALOG_STYLE_TABLIST_HEADERS, "{999999}Лидеры онлайн:", string, "OK", "");
            return 1;
        }
    Что это вообще:
    Код HTML:
    [IMG]http://f3.s.qip.ru/WMlLzbn8.png[/IMG]
    Если обнаружите ошибки - прошу указать на них.
    Заранее благодарю за ответ!

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

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    347
    Репутация:
    106 ±
    Из самого значимого - перевести условия if/else if на switch, а также исправить ошибку:
    PHP код:
    if(PlayerInfo[i][pLeader] <= 0) continue;


  3. Пользователь сказал cпасибо:
    Avenger (22.05.2016)
  4. #3
    Аватар для untonyst
    Младший сержант

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    663
    Репутация:
    234 ±
    - можно создать массив и туда по порядочку записать названия фракций
    - наверняка у вас есть глобальный массив с именами игроков, например,
    PHP код:
    PlayerInfo[playerid][pName
    используйте его, тогда вам не надо будет в цикле получать имена игроков

    - используйте foreach.inc
    - так же посчитывайте размеры массивов. В массиве fname точно не 1024 символа
    Младший сержант Стяжкин | ЧСВ группа в ВКонтакте NEW

  5. Пользователь сказал cпасибо:
    Avenger (22.05.2016)
  6. #4
    Аватар для gangzone.ini
    Модератор

    Статус
    Оффлайн
    Регистрация
    15.06.2014
    Сообщений
    650
    Репутация:
    105 ±
    Не лучше название фракций взять в массив ?

    PHP код:
    #define MAX_ORGANIZATION (5)

    static const organization_name[MAX_ORGANIZATION][] =
        {
    "Fraction_One""Fraction_Two""Fraction_Three""Fraction_Four""Fraction_Five"}; 
    PHP код:
    format(stringsizeof(string), "Вы лидер фракции \"%s\""organization_name[playerid-1]);
    SendClientMessage(playerid, -1string); 
    Модератор с 19.03.2015

  7. #5
    Аватар для Londlem
    Модератор

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Сообщений
    1,360
    Репутация:
    767 ±
    Цитата Сообщение от gangzone.ini Посмотреть сообщение
    Не лучше название фракций взять в массив ?

    PHP код:
    #define MAX_ORGANIZATION (5)

    static const organization_name[MAX_ORGANIZATION][] =
        {
    "Fraction_One""Fraction_Two""Fraction_Three""Fraction_Four""Fraction_Five"}; 
    PHP код:
    format(stringsizeof(string), "Вы лидер фракции \"%s\""organization_name[playerid-1]);
    SendClientMessage(playerid, -1string); 
    Неверный пример использования. Зачем от playerid отнимать единицу?

  8. 2 пользователя(ей) сказали cпасибо:
    Avenger (22.05.2016)gangzone.ini (23.05.2016)
  9. #6
    Аватар для untonyst
    Младший сержант

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    663
    Репутация:
    234 ±
    Как-то так :)

    PHP код:
    if(strcmp(cmd"/leaders3"true) == 0)
    {
        static const 
    fraction_name_array[19][29] = 
        {
            
    "FBI",
            
    "ФБР",
            
    "Национальная Гвардия",
            
    "Министерство Здравоохранение",
            
    "La Cosa Nostra",
            
    "Yakuza",
            
    "Правительство Штата",
            
    "Хитманы",
            
    "Репортеры",
            
    "Такси",
            
    "Инструкторы",
            
    "Grove",
            
    "El Coronos",
            
    "LS Vagos",
            
    "The Ballas",
            
    "Flaming Cobra",
            
    "Street Dogs",
            
    "SF Rifa",
            
    "Русская Мафия"
        
    };
        
    // new string[размер];
        
    foreach(new i:Player)
        {
            
    format(
                
    stringsizeof(string),
                ((
    == 0)?("Организация\tНикнейм\tНомер\n%s%s\t%s\t[%d]\n"):("%s%s\t%s\t[%d]\n")),
                
    stringfraction_name_array[PlayerInfo[i][pLeader]-1], PlayerInfo[i][pName], PlayerInfo[i][pPnumber]
            );

        }
        
    ShowPlayerDialog(playerid13DIALOG_STYLE_TABLIST_HEADERS"{999999}Лидеры онлайн:"string"OK""");
        return 
    1;

    Последний раз редактировалось untonyst; 22.05.2016 в 18:51.
    Младший сержант Стяжкин | ЧСВ группа в ВКонтакте NEW

  10. Пользователь сказал cпасибо:
    Avenger (22.05.2016)
  11. #7
    Аватар для Avenger
    Пользователь

    Статус
    Оффлайн
    Регистрация
    21.05.2016
    Сообщений
    2
    Репутация:
    0 ±
      Открыть/закрыть
    Цитата Сообщение от Anton Styazhkin Посмотреть сообщение
    Как-то так :)

    PHP код:
    if(strcmp(cmd"/leaders3"true) == 0)
    {
        static const 
    fraction_name_array[19][29] = 
        {
            
    "FBI",
            
    "ФБР",
            
    "Национальная Гвардия",
            
    "Министерство Здравоохранение",
            
    "La Cosa Nostra",
            
    "Yakuza",
            
    "Правительство Штата",
            
    "Хитманы",
            
    "Репортеры",
            
    "Такси",
            
    "Инструкторы",
            
    "Grove",
            
    "El Coronos",
            
    "LS Vagos",
            
    "The Ballas",
            
    "Flaming Cobra",
            
    "Street Dogs",
            
    "SF Rifa",
            
    "Русская Мафия"
        
    };
        
    // new string[размер];
        
    foreach(new i:Player)
        {
            
    format(
                
    stringsizeof(string),
                ((
    == 0)?("Организация\tНикнейм\tНомер\n%s%s\t%s\t[%d]\n"):("%s%s\t%s\t[%d]\n")),
                
    stringfraction_name_array[PlayerInfo[i][pLeader]-1], PlayerInfo[i][pName], PlayerInfo[i][pPnumber]
            );

        }
        
    ShowPlayerDialog(playerid13DIALOG_STYLE_TABLIST_HEADERS"{999999}Лидеры онлайн:"string"OK""");



    Огромное спасибо!
    Всем удачи.
    Последний раз редактировалось Avenger; 22.05.2016 в 18:36. Причина: Close, please.

  12. #8
    Аватар для Daniel_Cortez
    new fuck_logic[0] = EOS;

    Статус
    Онлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    1,666
    Репутация:
    2145 ±
    Цитата Сообщение от Anton Styazhkin Посмотреть сообщение
    Как-то так :)

    PHP код:
    if(strcmp(cmd"/leaders3"true) == 0)
    {
        static const 
    fraction_name_array[19][29] = 
        {
            
    "FBI",
            
    "ФБР",
            
    "Национальная Гвардия",
            
    "Министерство Здравоохранение",
            
    "La Cosa Nostra",
            
    "Yakuza",
            
    "Правительство Штата",
            
    "Хитманы",
            
    "Репортеры",
            
    "Такси",
            
    "Инструкторы",
            
    "Grove",
            
    "El Coronos",
            
    "LS Vagos",
            
    "The Ballas",
            
    "Flaming Cobra",
            
    "Street Dogs",
            
    "SF Rifa",
            
    "Русская Мафия"
        
    };
        
    // new string[размер];
        
    foreach(new i:Player)
        {
            
    format(
                
    stringsizeof(string),
                ((
    == 0)?("Организация\tНикнейм\tНомер\n%s%s\t%s\t[%d]\n"):("%s%s\t%s\t[%d]\n")),
                
    stringfraction_name_array[PlayerInfo[i][pLeader]-1], PlayerInfo[i][pName], PlayerInfo[i][pPnumber]
            );

        }
        
    ShowPlayerDialog(playerid13DIALOG_STYLE_TABLIST_HEADERS"{999999}Лидеры онлайн:"string"OK""");

    return забыл.
    Индивидуально в PM и Skype по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
    SA-MP 0.4 is a lie

 

 

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

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

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

Ваши права

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