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

Реклама


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

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    467
    Репутация:
    13 ±

    Помогите с оптимизацией "развозчиков", а именно большой стринг.

    Всем привет. Делаю развозчиков, многим я уже надоел с этими вопросами, но сейчас куда более серьёзней у меня вопрос/проблемка.
    Дело в том, что string очень большой. Можно как то ли оптимизировать, что бы он был меньше? Вот сток после вызова команда /orderlist:
    P.s. прошу заметить, что максимальное кол-во заказов (строк) - 10! На 1 строку приходится где то 92+24 str = ~116 ячеек
    PHP код:
    stock ProductList(playerid)
    {
        new 
    str[92+24], str2[1024];
        for(new 
    1Total_OrdersProducti++)
        {
            
    format(strsizeof(str), "{33AA33}%i. {FFFFAD}%s. {FFFFFF}Продуктов: {269BD8}%d шт. {FFFFFF}Развозчиков: {269BD8}0\n"iOrdersProduct[i][productName], OrdersProduct[i][productAmount]);
            
    strcat(str2str);
        }
        
    ShowPlayerDialog(playerid512"Заказы"str2"Отметить""Закрыть");
        return 
    true;


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

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    467
    Репутация:
    13 ±
    Up(5sim)

  3. #3
    Аватар для VVWVV
    Проверенный

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    607
    Репутация:
    289 ±
    На примере данной команды вы можете сделать оптимизацию вашего кода.
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
      Открыть/закрыть
    PHP код:
    CMD:members(playeridparams[])
    {
        new 
    family PlayerInfo[playerid][pMember];
        if (
    family == 0)
            
    family PlayerInfo[playerid][pLeader];
        if (
    family == 0)
            return 
    SendClientMessage(playeridCOLOR_GREY, !"Вы не состоите ни в одной из банд/мафий/фракций.");
        static const 
    fmt_str[] = "\n{FFFFFF}%s | ID: %d | %s[%d]";
        
    // Расчёт размера буфера для форматирования.
        
    const buffer_size sizeof(fmt_str)
            +  (-
    MAX_PLAYER_NAME)
            +  (-
    5// ID игрока, в будущих версиях SA:MP значение MAX_PLAYERS
                        // может увеличиться вплоть до 65535 (5 символов).
            
    +  (-20)// Максимальная длина названия ранга - 20 символов (?)
                        // (если больше или меньше, ставьте своё значение).
            
    +  (-2);// Номер ранга - не больше 10 (2 символа).
        // Расчёт макс. количества строк в диалоге.
        
    const MAX_ENTRIES 2048 buffer_size;
        
    // Первая часть строки string будет упакованной, поэтому strcat
        // будет автоматически упаковывать новые строки при добавлении их к string.
        // Благодаря этому в string можно будет вместить в 4 раза больше текста.
        
    static const first_str[] = !"Сотрудники Online:";
        new 
    string[buffer_size MAX_ENTRIES];
        
    string first_str;
        new 
    string_len sizeof(first_str) - 1;
        new 
    buffer[buffer_size];
        
    // Проходим по всем игрокам и "запоминаем" нужных.
        
    new players[MAX_ENTRIES], players_count 0;
        foreach(new 
    iPlayer)
        {
            
    //if (!IsAValidPlayer(i))
            
    if (== gPlayerLogged[i])
                continue;
            if (
    PlayerInfo[i][pMember] != family)
                continue;
            
    players[players_count++] = i;
        }
        
    // Теперь в цикле проверяем ранги от 10 до 1.
        
    if (players_count == 0)
            goto 
    show_dialog;
        for (new 
    rank 11xi; --rank != 0;)
        {
            
    // Проходим по всем кэшированным игрокам.
            
    for (= -1; ++players_count;)
            {
                
    // Если у игрока искомый ранг - добавляем новую строку в диалог.
                
    if ((players[x]) != rank)
                    continue;
                
    format(
                    
    buffersizeof(string), fmt_str,
                    
    //PlayerInfo[i][pName], i,
                    //PlayerInfo[i][pRankName], PlayerInfo[i][pRank]
                    
    bufferiRankName(playerid), PlayerInfo[i][pRank]
                );
                
    // Добавить сформатированный результат к строке string
                // и подсчитать её длину после добавления.
                
    string_len += strcat(stringbuffer);
                
    // Если в организации много игроков и в string не хватает
                // свободного места для новой строки - переходим к показу диалога.
                
    if (string_len sizeof(buffer) < sizeof(string))
                    continue;
                goto 
    show_dialog;
            }
        }
    show_dialog:
        
    //return SPD(playerid, 0, DSM, !"{00BFFF}Работники", string, !"Закрыть", !"");
        
    return ShowPlayerDialog(
            
    playerid0DIALOG_STYLE_MSGBOX,
            !
    "{00BFFF}Работники"string, !"Закрыть", !""
        
    );


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

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    467
    Репутация:
    13 ±
    Цитата Сообщение от VVWVV Посмотреть сообщение
    На примере данной команды вы можете сделать оптимизацию вашего кода.
    Спасибо, темку не закрывают, как буду дома - проверю

 

 

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

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

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

Ваши права

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