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

    Статус
    Оффлайн
    Регистрация
    04.08.2015
    Сообщений
    55
    Репутация:
    1 ±

    Вопрос по format

    Всем привет!

    Возник вопрос о использовании format в диалогах, а конкретней, это выделяемое количество символов для формата.

    Код (пример):
    Код:
    new text[60];
    forman(string, sizeof(string), "Никнейм персонажа: %s\n\nВведите пароль:", pNick(playerid));
    ShowPlayerDialog(playerid, dLogin, DIALOG_STYLE_INPUT, "Авторизация", string, "Готово", "Выход");
    Я не хочу всё время создавать переменную "text". Хочу создать одну глобальную переменную, допустим на 2000 символов, и потом выделять определённое количество символов для такого или иного формата (типо того, который я привёл в примере).

    Как это сделать? Если не сложно, объясните пожалуйста всё подробно:)

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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Лучше создавать каждый раз чтобы она автоматически очищалась.
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

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

    Статус
    Оффлайн
    Регистрация
    23.12.2013
    Адрес
    Омск
    Сообщений
    196
    Репутация:
    22 ±
    Это можно использовать для разных систем,где не используется вывод текста для определенного игрока.
    Я уже много где видел,да и сам использую:
    • Для игроков глобальный массив player_str[MAX_PLAYERS][1024]; - например. И тогда,уже в определенных системах ты форматируешь строку,правда, во втором параметре format размер форматируемой строки не указать(вроде бы) и придется указывать полный размер массива.В данном случае это 1024: format(player_str[playerid],1024, ""); После\перед каждым форматированием нужно очищать массив:
    player_str[playerid] = "\0"; или так - player_str[playerid][0] = EOS;.Т.е мы не полностью очищаем массив,а только изменяем его первый байт на нуль символ.Для удобности можно создать функцию\макрос для автоматического очищения.
    • Для разных систем system_str[1024]; - пример. И его нужно тоже очищать.



    Любой дурак может написать код, понятный компьютеру. Хороший программист пишет код, понятный человеку
    Мартин Фаулер


    Skype
    profan99
    VK
    click




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

    Статус
    Оффлайн
    Регистрация
    04.08.2015
    Сообщений
    55
    Репутация:
    1 ±
    Цитата Сообщение от Profyan Посмотреть сообщение
    Это можно использовать для разных систем,где не используется вывод текста для определенного игрока.
    Я уже много где видел,да и сам использую:
    • Для игроков глобальный массив player_str[MAX_PLAYERS][1024]; - например. И тогда,уже в определенных системах ты форматируешь строку,правда, во втором параметре format размер форматируемой строки не указать(вроде бы) и придется указывать полный размер массива.В данном случае это 1024: format(player_str[playerid],1024, ""); После\перед каждым форматированием нужно очищать массив:
    player_str[playerid] = "\0"; или так - player_str[playerid][0] = EOS;.Т.е мы не полностью очищаем массив,а только изменяем его первый байт на нуль символ.Для удобности можно создать функцию\макрос для автоматического очищения.
    • Для разных систем system_str[1024]; - пример. И его нужно тоже очищать.
    Спасибо огромное за информацию!

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от Profyan Посмотреть сообщение
    Для игроков глобальный массив player_str[MAX_PLAYERS][1024]; - например.
    Зачем делать для каждого игрока свой буфер, если SA:MP однопоточен и можно обойтись одним?


    Цитата Сообщение от Profyan Посмотреть сообщение
    После\перед каждым форматированием нужно очищать массив:
    player_str[playerid] = "\0"; или так - player_str[playerid][0] = EOS;.
    Для чего может понадобиться чистить буфер, если его содержимое до форматирования не повлияет на результат выполнения format?


    Цитата Сообщение от Profyan Посмотреть сообщение
    Для разных систем system_str[1024]; - пример. И его нужно тоже очищать.
    Опять же, SA:MP однопоточен и для форматирования достаточно одного глобального массива.


    Цитата Сообщение от stimorol Посмотреть сообщение
    Я не хочу всё время создавать переменную "text". Хочу создать одну глобальную переменную, допустим на 2000 символов, и потом выделять определённое количество символов для такого или иного формата (типо того, который я привёл в примере).
    Во-первых, неправильно говорить "массив на 200 ячеек", т.к. строки могут быть упакованными и в одну ячейку массива можно уместить целых 4 символа.
    Во-вторых, в Pawn нет массивов с динамическим размером. Если объявить массив на 2000 ячеек, в нём будет (сюрприз!) 2000 ячеек, не больше и не меньше.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  7. Пользователь сказал cпасибо:
    Profyan (20.02.2016)
  8. #6
    Аватар для Profyan
    Пользователь

    Статус
    Оффлайн
    Регистрация
    23.12.2013
    Адрес
    Омск
    Сообщений
    196
    Репутация:
    22 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Зачем делать для каждого игрока свой буфер, если SA:MP однопоточен и можно обойтись одним?



    Для чего может понадобиться чистить буфер, если его содержимое до форматирования не повлияет на результат выполнения format?



    Опять же, SA:MP однопоточен и для форматирования достаточно одного глобального массива.



    Во-первых, неправильно говорить "массив на 200 ячеек", т.к. строки могут быть упакованными и в одну ячейку массива можно уместить целых 4 символа.
    Во-вторых, в Pawn нет массивов с динамическим размером. Если объявить массив на 2000 ячеек, в нём будет (сюрприз!) 2000 ячеек, не больше и не меньше.
    Да, я не форматирование имел в виду.А например такие функции как strcat,strins.

    Видимо,я не совсем понимаю работу сервера.Если 100 игроков одновременно вызовут одну функцию,то она будет выполняться в определенной очереди для каждого игрока.А этих всех очередей мы не замечаем из-за быстрого выполнения операций?



    Любой дурак может написать код, понятный компьютеру. Хороший программист пишет код, понятный человеку
    Мартин Фаулер


    Skype
    profan99
    VK
    click




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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от Profyan Посмотреть сообщение
    Если 100 игроков одновременно вызовут одну функцию,то она будет выполняться в определенной очереди для каждого игрока.А этих всех очередей мы не замечаем из-за быстрого выполнения операций?
    Можно и заметить, если писать говнокод, из-за которого будет виснуть сервер.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

 

 

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

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

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

Ваши права

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