Plugin Cvars Manager, Менеджер Кваров |
Здравствуйте, гость Вход | Регистрация
Наши новости:
|
|
Plugin Cvars Manager, Менеджер Кваров |
SISA |
25.5.2018, 16:17
Сообщение
|
Выкладываю свой вариант плагина, который позволяет легко получать данные с .ini файла (в данном случае, некий аналог работы с кварами).
1. Для кого он нужен ? В первую очередь, он пригодится всем держателям толстых модов с кучей плагинов, в которых гора всяких кваров, макросов и прочей каши. Короче, как это обычно бывает в CS 1.6: "Кто на что горазд". 2. В чем особенности и отличия от тех же кваров "register_cvar" ? а. Легкость подключения. Не нужно регистрировать квары, создавать переменные для получения указателей, выполнять всякие костыли в виде server_cmd и server_exec, чтобы получить значения с кваров где-нибудь в прекеше например. б. Легкость извлечения данных. Поддерживаются данные в виде целых чисел, дробных, строк и многомерных массивов (или аргументов) в. Получение и кеширование данных происходит централизованно из одного файла, с возможность извлечения в любом плагине до OnAutoConfigsBuffered г. Плагин не оставляет в памяти сервера никаких данных, только кеширование в ассоциативные массивы - отдача - удаление ассоциативных массивов. д. Поддержка загрузки данных для определенной карты. Минимальные требования: Amx 1.8.3 Плагин должен быть установлен первым в списке (чтобы все последующие плагины могли получать данные уже на уровне "plugin_precache" Как работать с плагином ? По умолчанию, плагин читает данные из файла: addons\amxmodx\configs\config_plugins.ini Какие символы в начале строки можно использовать для добавления комментариев ? "[" - лучше всего обозначать название плагина, которому принадлежат квары. ";" - комментарий к квару. Как добавлять данные ? Все данные добавляются по простому шаблону: название квара = значение квара Если в значении квара указано дробное число, значит в конце названия квара добавляем префикс _f Если в значении квара указана строка, значит в конце названия квара добавляем префикс _s Если значение квара состоит из нескольких аргументов, значит мы используем те же префиксы + перечисляем аргументы через запятую: Примеры: ; Целое число vipmenu_acces_non_steam = 1 ; Строка vipmenu_vip_model_name_s = vip_gign9 ; Дробное число vipmenu_delay_chat_time_f = 2.0 ; Аргмуенты (дробные) vipmenu_color_f = 255.0, 150.0, 200.0 Принцип получения данных ? Нужно понимать, что мы получаем данные только для кеширования внутри плагина. Т.е. на уровне plugin_precache, plugin_init или plugin_cfg, мы должны записать их в какой-то массив или переменную или отправить в какую-то функцию. Для получения данных у нас есть 3 нативы: Cкрытый текст * Получаем Целое значение Квара * @param cvarname[] Название Запрашиваемого квара * @param argnum Номер аргумента для многомерного массива * @return Возвращаем целое значение или -1 при отсутствии квара native plugins_get_cvar_int(const cvarname[], const argnum = 0); * Получаем Строковое значение Квара * @param cvarname[] Название Запрашиваемого квара * @param value[] Значение квара * @param argnum Номер аргумента для многомерного массива * @return Возвращаем -1 при отсутствии квара native plugins_get_cvar_str(const cvarname[], value[], const argnum = 0); * Получаем Дробное значение Квара * @param cvarname[] Название Запрашиваемого квара * @param argnum Номер аргумента для многомерного массива * @return Возвращаем дробное значение -1.0 при отсутствии квара native Float:plugins_get_cvar_float(const cvarname[], const argnum = 0); Каждая натива поддерживает указание аргумента (начиная с 1), если у нас используется несколько ячеек в значении квара. При необходимости, аргументы можно извлечь в цикле, дойдя до возврата значения -1 или -1.0 Как получить данные ? Чтобы структурировать полученные данные внутри плагина и не превратить их в очередную кашу (как многие любят...), мы создадим enum, в котором сразу обозначим значения и размеры. Предположим, у нас есть квары всех доступных значений (целый, дробные и строки): Указываем инклуд Код #include <cvars_manager> Создаем enum Код enum _:e_CvarsData { CVARS_ACCES_NON_STEAM, CVARS_VIP_MODEL_NAME[32], Float:CVARS_DELAY_CHAT_TIME }; Создаем глобальный массив для хранения данных Код new g_CvarsData[e_CvarsData]; Кешируем данные на уровне "plugin_cfg" Код public plugin_cfg() { g_CvarsData[CVARS_ACCES_NON_STEAM] = plugins_get_cvar_int("vipmenu_acces_non_steam"); plugins_get_cvar_str("vipmenu_vip_model_name_s", g_CvarsData[CVARS_VIP_MODEL_NAME]); g_CvarsData[CVARS_DELAY_CHAT_TIME] = plugins_get_cvar_float("vipmenu_delay_chat_time_f"); } Как получить данные для определенной карты ? Процесс идентичный, только нам нужно указать необходимые квары и их значения в файле: addons\amxmodx\configs\maps\config_название_карты.ini Пример: addons\amxmodx\configs\maps\config_de_dust.ini По сути всё. Теперь мы можем работать с полученными данные внутри плагина. P.S. Плагин можно легко адаптировать под разные задачи. Допустим, под работу с базой данных MySQL. plugin_cvars_manager.zip ( 3,1 килобайт ) Кол-во скачиваний: 98 |
|
Поблагодарили 6 раз
|
|
wopox3 |
25.5.2018, 18:57
Сообщение
|
|
Если я всё правильно понял, основная суть значения понятия CVar (Console Variable) - потеряна?
Если использовать наработку - где тут альтернатива get_pcvar ? (или хотя бы bind_pcvar_*) Он достаточно удобен в 1.8.3 Возможность указывать массивы - радует. |
|
|
SISA |
25.5.2018, 19:06
Сообщение
|
Если я всё правильно понял, основная суть значения понятия CVar (Console Variable) - потеряна? Если использовать наработку - где тут альтернатива get_pcvar ? (или хотя бы bind_pcvar_*) Он достаточно удобен в 1.8.3 Возможность указывать массивы - радует. Само понятие кваров можно убрать. Назвать load_data_file. Цитата Если использовать наработку - где тут альтернатива get_pcvar ? Если вы закешировали данные в массив, то по сути оно и будет get_pcvar, только с нулевой нагрузкой, ну и без возможности менять значения "на ходу". Тут основная суть: 1. Один файл конфигурации и возможное масштабирование под базу данных например. 2. Простота добавления данных в конфиг и простота их извлечения/кеширования на уровне любого плагина. 3. Отсутствие нагрузки при работе с данными. 4. Поддержка аргументов в значениях данных. 5. Поддержка индивидуальных значений для любой карты (из коробки)
Отредактировал: SISA, - 25.5.2018, 19:27
|
|
|
|
GetA |
25.5.2018, 20:44
Сообщение
|
Cкрытый текст Код:
/*=============================================================================== Код: new Trie:g_TrieCvarsInt, Trie:g_TrieCvarsFloat, Trie:g_TrieCvarsString; Вот у тебя прокомментирована каждая строка. А если комментировать каждую переменную? :) Код:
Отредактировал: GetA, - 25.5.2018, 20:47
|
|
|
|