Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 2 из 5 ПерваяПервая 1 2 3 4 ... ПоследняяПоследняя
Показано с 11 по 20 из 42
  1. #11
    Аватар для SlimX
    Пользователь

    Статус
    Оффлайн
    Регистрация
    27.07.2015
    Сообщений
    9
    Репутация:
    0 ±
    А как с динамическими текстами быть, допустим, объявления в News?

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

    Статус
    Оффлайн
    Регистрация
    08.12.2015
    Адрес
    San Fierro
    Сообщений
    217
    Репутация:
    39 ±
    format не работает с упакованными строками! Читайте внимательней!

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

    Статус
    Оффлайн
    Регистрация
    15.05.2016
    Сообщений
    34
    Репутация:
    0 ±
    Так можно?
    PHP код:
    new BizzInfo[MAX_BIZZ][bInfo] = {
        {
    0,!"The State","No-one",    !"City Bank",        -828.0927,1503.2441,19.6667,    1,2147.9228,1603.7501,1006.1677,    999000000,50,0,100,100,99984,15,500,205}
    }; 
    Последний раз редактировалось #Johnson; 22.06.2016 в 16:11.

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

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    541
    Репутация:
    78 ±
    Цитата Сообщение от #Johnson Посмотреть сообщение
    Так можно?
    PHP код:
    new BizzInfo[MAX_BIZZ][bInfo] = {
        {
    0,!"The State","No-one",    !"City Bank",        -828.0927,1503.2441,19.6667,    1,2147.9228,1603.7501,1006.1677,    999000000,50,0,100,100,99984,15,500,205}
    }; 
    Нет, компилятор потребует указать тег Float к переменной

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

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    - Данный способ не оптимизирует код, он лишь сокращает потребление сегмента данных, что способствует уменьшению размера файла. Возможно существует какая-то оптимизация, которая, может быть, увеличивает скорость выполнения кода, но это, как минимум, только лишь микросекунды.
    - Кстати, в данной теме нет упоминания об обращении к элементу массива.

  6. 2 пользователя(ей) сказали cпасибо:
    Geebrox (19.08.2016) Nurick (22.06.2016)
  7. #16
    Аватар для Nash_Brigers
    Пользователь

    Статус
    Оффлайн
    Регистрация
    06.03.2016
    Адрес
    Moscow
    Сообщений
    167
    Репутация:
    44 ±
    Del
    Последний раз редактировалось Nash_Brigers; 23.06.2016 в 11:09.
    Член сообщества Green Square.

  8. #17
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от m1n1vv Посмотреть сообщение
    А можно как-то объединить упакованную строку, например с описанием чего-то, и простую строку string с полученными данными с format'а?
    Вы не читали статью до конца, так ведь?




    Цитата Сообщение от #Johnson Посмотреть сообщение
    Так можно?
    PHP код:
    new BizzInfo[MAX_BIZZ][bInfo] = {
        {
    0,!"The State","No-one",    !"City Bank",        -828.0927,1503.2441,19.6667,    1,2147.9228,1603.7501,1006.1677,    999000000,50,0,100,100,99984,15,500,205}
    }; 
    Нет, я запрещаю.
    Разве это так трудно проверить самостоятельно?




    Цитата Сообщение от VVWVV Посмотреть сообщение
    - Данный способ не оптимизирует код, он лишь сокращает потребление сегмента данных, что способствует уменьшению размера файла. Возможно существует какая-то оптимизация, которая, может быть, увеличивает скорость выполнения кода, но это, как минимум, только лишь микросекунды.
    Советую ознакомиться со значением понятия оптимизации в информатике - это не только улучшение производительности.

    Цитата Сообщение от VVWVV Посмотреть сообщение
    - Кстати, в данной теме нет упоминания об обращении к элементу массива.
    http://pro-pawn.ru/showthread.php?13706




    Цитата Сообщение от SlimX Посмотреть сообщение
    А как с динамическими текстами быть, допустим, объявления в News?
    Смотря, как устроен вывод этих объявлений. Если текст объявления выводится непосредственно в момент его подачи игроком (например, прямо в команде /ad - ну или какая у вас там команда?), то нет смысла упаковывать текст, под который сервер и без того выделяет память в секции стека/кучи.
    Другое дело, если тексты объявлений хранятся в каком-нибудь массиве строк, ожидая момента подачи в эфир (например, если сообщения перед выводом в эфир должны проходить проверку [s]цензором[/b] модератором).
    Примерно так должен будет выглядеть массив для сообщений:
    PHP код:
    const MAX_AD_MESSAGES 8;
    const 
    MAX_AD_MESSAGE_TEXT 128;
    new 
    ad_messages[MAX_AD_MESSAGES][MAX_AD_MESSAGE_TEXT 1];
    new 
    free_ad_message_slot 0// Здесь будет храниться номер слота, в который запишется очередное сообщение.
    // При записи сообщения free_ad_message_slot увеличивается на 1. Если free_ad_message_slot больше или равно MAX_AD_MESSAGES,
    // игроку выводится текст "слишком много сообщений в очереди, попробуйте позже". 
    В секции данных выделится 129*8=1032 ячеек. Здесь уже есть смысл сократить размер последнего измерения массива и записывать в него упакованные строки.
    PHP код:
    new ad_messages[MAX_AD_MESSAGES][(MAX_AD_MESSAGE_TEXT 1char]; 
    В этом случае будет выделено всего 33*8=264 ячейки. Сохранение сообщений можно сделать с помощью strpack.
    PHP код:
    CMD:ad(playeridparams[])
    {
        
    // ...
        
    strpack(ad_messages[free_ad_message_slot++], paramsMAX_AD_MESSAGE_TEXT);
        
    // ...




    Цитата Сообщение от DeimoS Посмотреть сообщение
    Тут информация проскочила, что strpack не дружит с русскими символами. Точнее, если при запаковке первый символ русский, ispacked вернёт 0 при проверке запакованного массива
    PHP код:
    new string[8 char];
    strpack(string"Привет");
    printf("%d"ispacked(string)); 
    Стоит добавить хоть один английский символ
    PHP код:
    new string[8 char];
    strpack(string"qПривет");
    printf("%d"ispacked(string)); 
    И всё отображает нормально + при распаковке так же все символы сохраняются
    С функцией strpack тут всё в порядке, строка упаковывается правильно (в чём можно убедиться, логируя содержимое каждого байта в массиве string), проблема именно в ispacked.

    Но всё же хотелось бы знать: откуда эта "информация проскочила"?
    Я проверил на последней версии Pawn (4.0), там этот баг тоже есть. Можно сообщить о нём разработчику, но желательно будет упомянуть в багрепорте, кто изначально нашел баг, чтобы это не выглядело, как присвоение чужой находки. До этого я уже сообщал подобным образом о баге в strins.
    Не то, чтобы это волшебным образом исправит баг в SA-MP (обновление до новой версии Pawn вряд ли вписывается в график стагнации мультиплеера), но... наверняка кто-нибудь другой пользуется Pawn 4.0 для проектов, не связанных с SA-MP.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  9. 2 пользователя(ей) сказали cпасибо:
    Nash_Brigers (23.06.2016) VVWVV (23.06.2016)
  10. #18
    Аватар для Nurick
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.04.2014
    Адрес
    Уфа, Россия
    Сообщений
    319
    Репутация:
    52 ±
    Доброй ночи!
    Можно задам вопрос, у меня 2 примера.

    В 1 примере я могу использовать упакованные строки:
    PHP код:
    new string[] = !"текст",
        
    string_1[] = !"текст",
        
    string_2[] = !"текст";
        
        
    string[sizeof( string ) -1] = '\n';
        
    string_1[sizeofstring_1 ) -1] = '\n';
        
    string_2[sizeofstring_2 ) -1] = '\0';
        
        
    ShowPlayerDialogplayerid0DIALOG_STYLE_MSGBOX"Текст"string"1""2" ); 
    А во 2 примере НЕТ так как используется format:
    PHP код:
    static const string[] = !"%s\nтекст";
    new 
    str[sizeof( string ) + ( -MAX_PLAYER_NAME ) +1];

    formatstrsizeofstr ), stringPlayer[playerid][Username] );
    ShowPlayerDialogplayerid0DIALOG_STYLE_INPUT"Текст"string"1""2" ); 
    Правильно понял?

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

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Nurick, да. А первый пример можно сделать проще и без магии.

    PHP код:
    static string[] =
    {
        !
    "тут такой страшный и большой текст\n\
        которого у меня, к сожалению, нет.\n\
        поэтому я пищу этот бред"
    };
    ShowPlayerDialog(playerid0DIALOG_STYLE_MSGBOX, !"текст"string, !"1", !"2"); 

  12. Пользователь сказал cпасибо:
    Nurick (29.06.2016)
  13. #20
    Аватар для Nurick
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.04.2014
    Адрес
    Уфа, Россия
    Сообщений
    319
    Репутация:
    52 ±
    В твоём случае будет ошибка error 075: input line too long (входная строка слишком длинная), за это я использовал связку строк

 

 
Страница 2 из 5 ПерваяПервая 1 2 3 4 ... ПоследняяПоследняя

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

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

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

Ваши права

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