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

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

    Оптимизация

    Как можно оптимизировать такой код
    PHP код:
    stock GetPlayerRank(playerid)
    {
        new 
    rangz[40];
        switch(
    PlayerInfo[playerid][pMember])
        {
            case 
    0rangz "Нет";
            case 
    1,10,21:
            {
                switch(
    PlayerInfo[playerid][pRank])
                {
                    case 
    15rangz "Шериф";
                    case 
    14rangz "Полковник";
                    case 
    13rangz "Подполковник";
                    case 
    12rangz "Майор";
                    case 
    11rangz "Капитан";
                    case 
    10rangz "Детектив";
                    case 
    9rangz "Лейтенант";
                    case 
    8rangz "Мл. Лейтенант";
                    case 
    7rangz "Ст. Прапорщик";
                    case 
    6rangz "Прапорщик";
                    case 
    5rangz "Ст. Сержант";
                    case 
    4rangz "Сержант";
                    case 
    3rangz "Мл. Сержант";
                    case 
    2rangz "Офицер";
                    case 
    1rangz "Кадет";
                }
            }
            case 
    5:
            {
                switch(
    PlayerInfo[playerid][pRank])
                {
                    case 
    10rangz "Дон";
                    case 
    9rangz "Консильери";
                    case 
    8rangz "Младший Босс";
                    case 
    7rangz "Капо";
                    case 
    6rangz "Сотто-Капо";
                    case 
    5rangz "Боец";
                    case 
    4rangz "Солдато";
                    case 
    3rangz "Сомбаттенте";
                    case 
    2rangz "Ассосиато";
                    case 
    1rangz "Новицио";
                }
            }
            case 
    22:
            {
                switch(
    PlayerInfo[playerid][pRank])
                {
                    case 
    7rangz "Президент";
                    case 
    6rangz "Sergeant-at-arms";
                    case 
    5rangz "Road captain";
                    case 
    4rangz "Member";
                    case 
    3rangz "Prospect";
                    case 
    2rangz "Hang around";
                    case 
    1rangz "Support";
                }
            }
            case 
    12:
            {
                switch(
    PlayerInfo[playerid][pRank])
                {
                    case 
    10rangz "Биг Вилли";
                    case 
    9rangz "Райч Нига";
                    case 
    8rangz "Фолкс";
                    case 
    7rangz "Федерал Блок";
                    case 
    6rangz "Гангстер";
                    case 
    5rangz "Ап Бро";
                    case 
    4rangz "Гун брo";
                    case 
    3rangz "Крэкер";
                    case 
    2rangz "Младший Нига";
                    case 
    1rangz "Блайд";
                }
            }
            case 
    17:
            {
                switch(
    PlayerInfo[playerid][pRank])
                {
                    case 
    10rangz "Падре";
                    case 
    9rangz "Нестро";
                    case 
    8rangz "Тесосеро";
                    case 
    7rangz "Инвасор";
                    case 
    6rangz "Сабио";
                    case 
    5rangz "Мирандо";
                    case 
    4rangz "Лас Геррас";
                    case 
    3rangz "Геттор";
                    case 
    2rangz "Тирадор";
                    case 
    1rangz "Перро";
                }
            }
            case 
    18:
            {
                switch(
    PlayerInfo[playerid][pRank])
                {
                    case 
    10rangz "Падре";
                    case 
    9rangz "Аджунто";
                    case 
    8rangz "Ауторидад";
                    case 
    7rangz "Бандидо";
                    case 
    6rangz "Эрмано";
                    case 
    5rangz "Джуниор";
                    case 
    4rangz "Мачo";
                    case 
    3rangz "Амиго";
                    case 
    2rangz "Ладрон";
                    case 
    1rangz "Новато";
                }
            }
            case 
    13:
            {
                switch(
    PlayerInfo[playerid][pRank])
                {
                    case 
    11rangz "Падре";
                    case 
    10rangz "Падрино";
                    case 
    9rangz "Лидер V.E.G.";
                    case 
    8rangz "Асесор";
                    case 
    7rangz "Авторитарио";
                    case 
    6rangz "Асесино";
                    case 
    5rangz "Амиго";
                    case 
    4rangz "Эстимадо";
                    case 
    3rangz "Сольдадо";
                    case 
    2rangz "Криминаль";
                    case 
    1rangz "Новато";
                }
            }
            case 
    15:
            {
                switch(
    PlayerInfo[playerid][pRank])
                {
                    case 
    10rangz "Мэд Дог";
                    case 
    9rangz "Легенд";
                    case 
    8rangz "Де Кинг";
                    case 
    7rangz "Мобста";
                    case 
    6rangz "О.Г.";
                    case 
    5rangz "Гангста";
                    case 
    4rangz "Юонг";
                    case 
    3rangz "Килла";
                    case 
    2rangz "Хастла";
                    case 
    1rangz "Плэйя";
                }
            }
            case 
    14:
            {
                switch(
    PlayerInfo[playerid][pRank])
                {
                    case 
    8rangz "Вор в законе";
                    case 
    7rangz "Авторитет";
                    case 
    6rangz "Смотрящи";
                    case 
    5rangz "Вор";
                    case 
    4rangz "Жиган";
                    case 
    3rangz "Вышибала";
                    case 
    2rangz "Фраер";
                    case 
    1rangz "Шнырь";
                }
            }
            case 
    6:
            {
                switch(
    PlayerInfo[playerid][pRank])
                {
                    case 
    10rangz "Кумитё";
                    case 
    9rangz "Оябун-кобун";
                    case 
    8rangz "Cайко комон";
                    case 
    7rangz "Оядзи";
                    case 
    6rangz "Камбу";
                    case 
    5rangz "Со-хобунтё";
                    case 
    4rangz "Вакагасира";
                    case 
    3rangz "Сятейгасира";
                    case 
    2rangz "Кёдай";
                    case 
    1rangz "Вакасю";
                }
            }
            case 
    9:
            {
                switch(
    PlayerInfo[playerid][pRank])
                {
                    case 
    6rangz "Главный редактор";
                    case 
    5rangz "Редактор";
                    case 
    4rangz "Журналист";
                    case 
    3rangz "Папарацци";
                    case 
    2rangz "Фотограф";
                    case 
    1rangz "Стажер";
                }
            }
            case 
    8:
            {
                switch(
    PlayerInfo[playerid][pRank])
                {
                    case 
    5rangz "Директор";
                    case 
    4rangz "Зам. директора";
                    case 
    3rangz "Крупье";
                    case 
    2rangz "Охранник";
                    case 
    1rangz "Чипер";
                }
            }
            case 
    3,19:
            {
                switch(
    PlayerInfo[playerid][pRank])
                {
                    case 
    16rangz "Генерал";
                    case 
    15rangz "Полковник";
                    case 
    14rangz "Подполковник";
                    case 
    13rangz "Ма";
                    case 
    12rangz "Капитан";
                    case 
    11rangz "Старший лейтенант";
                    case 
    10rangz "Лейтенант";
                    case 
    9rangz "Младший лейтенант";
                    case 
    8rangz "Старший прапорщик";
                    case 
    7rangz "Прапорщик";
                    case 
    6rangz "Старшина";
                    case 
    5rangz "Ст. Сержант";
                    case 
    4rangz "Сержант";
                    case 
    3rangz "Мл. Сержант";
                    case 
    2rangz "Ефрейтор";
                    case 
    1rangz "Рядовой";
                }
            }
            case 
    2:
            {
                switch(
    PlayerInfo[playerid][pRank])
                {
                    case 
    9rangz "Директор";
                    case 
    8rangz "Зам. директора";
                    case 
    7rangz "Инспектор";
                    case 
    6rangz "Начальник секции";
                    case 
    5rangz "Специальный агент";
                    case 
    4rangz "Старший агент";
                    case 
    3rangz "Агент";
                    case 
    2rangz "Мл.Агент";
                    case 
    1rangz "Стажёр";
                }
            }
            case 
    7:
            {
                switch(
    PlayerInfo[playerid][pRank])
                {
                    case 
    17rangz "Губернатор";
                    case 
    16rangz "Советник Губернатора";
                    case 
    15rangz "Министр Культуры";
                    case 
    14rangz "Зам. Министра Культуры";
                    case 
    13rangz "Министр Транспорта";
                    case 
    12rangz "Зам.Министра Транспорта";
                    case 
    11rangz "Министр Финансов";
                    case 
    10rangz "Зам.Министр Финансов";
                    case 
    9rangz "Министр Юстиции";
                    case 
    8rangz "Зам. Министра Юстиции";
                    case 
    7rangz "Сотрудник Министерства";
                    case 
    6rangz "Прокурор";
                    case 
    5rangz "Адвокат";
                    case 
    4rangz "Начальник СБ";
                    case 
    3rangz "Зам.Начальника СБ";
                    case 
    2rangz "Водитель";
                    case 
    1rangz "Охраник";
                }
            }
            case 
    23:
            {
                switch(
    PlayerInfo[playerid][pRank])
                {
                    case 
    5rangz "Директор ";
                    case 
    4rangz "Зам.Директор";
                    case 
    3rangz "Начальник Охраны";
                    case 
    2rangz "Старщий Охранник";
                    case 
    1rangz "Охранник";
                }
            }
            case 
    4:
            {
                switch(
    PlayerInfo[playerid][pRank])
                {
                    case 
    8rangz "Глав. врач";
                    case 
    7rangz "Терапевт";
                    case 
    6rangz "Хирург";
                    case 
    5rangz "Педиатр";
                    case 
    4rangz "Санитар";
                    case 
    3rangz "Интерн";
                    case 
    2rangz "Стажёр";
                    case 
    1rangz "Практикант";
                }
            }
        }
        return 
    rangz;


  2. #2
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Вынести название рангов в массив, тем самым избавится от лишнего копирования информации в стэк (в массив rangz).
    Как-то так:
    PHP код:
    new const fracRankList_PD[][] = 
    {
        
    "Кадет",
        
    "Офицер",
        
    "Мл. Сержант",
        
    "Сержант",
        
    "Ст. Сержант",
        
    "Прапорщик",
        
    "Ст. Прапорщик",
        
    "Мл. Лейтенант",
        
    "Лейтенант",
        
    "Детектив",
        
    "Капитан",
        
    "Майор",
        
    "Подполковник",
        
    "Полковник",
        
    "Шериф"
    };

    new const 
    fracRankList_LCN[][] = 
    {
        
    "Новицио",
        
    "Ассосиато",
        
    "Сомбаттенте",
        
    "Солдато",
        
    "Боец",
        
    "Сотто-Капо",
        
    "Капо",
        
    "Младший Бос",
        
    "Консильери",
        
    "Дон"
    };


    stock GetPlayerRank(playerid

        new 
    rank PlayerInfo[playerid][pRank];

        switch(
    PlayerInfo[playerid][pMember]) 
        { 
            case 
    11021
            { 
                if(
    <= rank <= sizeof(fracRankList_PD))
                {
                    return 
    fracRankList_PD[rank-1];
                }
                
            } 
            case 
    5
            { 
                if(
    <= rank <= sizeof(fracRankList_LCN))
                {
                    return 
    fracRankList_LCN[rank-1];
                }
            } 
        }
        
        static const
            
    fract_none[] = "Нет";
        return 
    fract_none;

    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    24.05.2014
    Сообщений
    346
    Репутация:
    2 ±
    return fract_none;
    PHP код:
    error 047: array sizes do not match, or destination array is too small 

  4. #4
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Ну ожидаемо.
    Лучше всего будет переписать всю систему получения номера ранга, сразу получая его прямо из переменной, без всяких функций. Все остальные попытки сделать универсальную функцию либо увеличат потребление памяти, либо придется терять в производительности и читаемости
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

 

 

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

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

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

Ваши права

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