Как связать несколько плагинов одним меню?

gameuser425

Участник
Сообщения
30
Реакции
3
Здравствуйте.
Я делаю настройки для игроков.
Допустим в меню есть две настройки.

1. Round End Sound
2. Quake Sounds

При входе игрока на сервер читается файл с настройками игроков и присваиваются значения к глобальным массивам.

К примеру возьму:
bool Quake[MAXPLAYERS +1] = {false,...}; bool RES[MAXPLAYERS +1] = {false,...};

При использовании меню мне нужны параметры настроек игрока, для того что-бы отобразить в меню "функция включена или отключена".

Примерно так:
Format(buffer, sizeof(buffer), "%t [%s]", "quake", !Quake[client] ? "+" : "-"); AddMenuItem(MenuHandle, "menu item", buffer);

Так же мне нужно использовать эти глобальные массивы в системе Quake звуков.
Я могу писать эту систему прямо в этом плагине, но если настроек будет много и систем будет много. Плагин будет громадный...

Читал о нативных функциях. Пробовал, получается! Но или я что-то не понимаю или жизнь - боль;

Получается... Если я буду связывать через нативы плагины с плагином "меню", то мне и в плагине "меню" нужно создавать массивы всех игроков "bool Quake[MAXPLAYERS +1];" и в самом плагине с системой? Так же и чтение из файла...

Я только сегодня начал погружаться в нативные функции. Не хочется так грузить память одним и тем же.
Может я чего то не до понял. Если я правильно понял и памяти правда уходит в два раза больше чем если бы я всё писал в одном плагине, вы так и скажите. А если я невъехал, объясните пожалуйста как люди пишут "ядро" плагина с системами.

Вот я создал тестовый скрипт с меню.

Регистрирую в нём натив.
native void UpdateQuakeSettings(int client); //Возможно даже аргументы будут такими (int client, bool params)
Когда буду менять значения с true на false в меню с настройками буду использовать этот натив что-бы в плагине с системой обновились параметры игрока.
Как то вот так вот, обрывок кода.
C++:
public SettingsMenuHandler(Handle menu, MenuAction:action, param1, param2)
{
    if(action == MenuAction_Select)
    {
        switch(param2)
        {
            case 0:
            {
                Quake[param1] = !Quake[param1]  ? true : false;
                UpdateQuakeSettings(param1); //Возможно даже аргументы будут такими (param1, Quake[param1])
            }

Но это позже, мне ещё нужно получить параметры на пред идущей стадии когда меню только открывается...
В этом же плагине, там где мне открывается меню... Как я узнаю у игрока данная функция включена?
Format(buffer, sizeof(buffer), "%t [%s]", "quake", !Quake[client] ? "+" : "-"); AddMenuItem(MenuHandle, "menu item", buffer);
Читать файл с настройками игроков?
Читать файл с настройками при входе игрока на сервер и присваивать значение к массиву?
Отправлять запрос через нативную функцию в плагин с системой для того что-бы так же через нативную функцию пришёл ответ с параметрами?

Пока что я придумал только что бы читать настройки игрока в плагине с меню, присваивать значения к глобальным массивам.
А в плагине с системой, не читать настройки из файла, а отправлять их из плагина с меню в плагин с системой уже прочитанные.
И всё равно создавать в плагине с системой глобальный массив всех игроков и присваивать значения которые послал плагин с меню...

Но мне всё равно кажется что я делаю не правильно, думаю не правильно и можно наверняка сделать менее затратный процесс.
 
Последнее редактирование:

Der Helfer

[WCS] Пытается оживить Страйкера
Сообщения
60
Реакции
20
Здравствуйте.
Я делаю настройки для игроков.
Допустим в меню есть две настройки.

1. Round End Sound
2. Quake Sounds

При входе игрока на сервер читается файл с настройками игроков и присваиваются значения к глобальным массивам.

К примеру возьму:
bool Quake[MAXPLAYERS +1] = {false,...}; bool RES[MAXPLAYERS +1] = {false,...};

При использовании меню мне нужны параметры настроек игрока, для того что-бы отобразить в меню "функция включена или отключена".

Примерно так:
Format(buffer, sizeof(buffer), "%t [%s]", "quake", !Quake[client] ? "+" : "-"); AddMenuItem(MenuHandle, "menu item", buffer);

Так же мне нужно использовать эти глобальные массивы в системе Quake звуков.
Я могу писать эту систему прямо в этом плагине, но если настроек будет много и систем будет много. Плагин будет громадный...

Читал о нативных функциях. Пробовал, получается! Но или я что-то не понимаю или жизнь - боль;

Получается... Если я буду связывать через нативы плагины с плагином "меню", то мне и в плагине "меню" нужно создавать массивы всех игроков "bool Quake[MAXPLAYERS +1];" и в самом плагине с системой? Так же и чтение из файла...

Я только сегодня начал погружаться в нативные функции. Не хочется так грузить память одним и тем же.
Может я чего то не до понял. Если я правильно понял и памяти правда уходит в два раза больше чем если бы я всё писал в одном плагине, вы так и скажите. А если я невъехал, объясните пожалуйста как люди пишут "ядро" плагина с системами.

Вот я создал тестовый скрипт с меню.

Регистрирую в нём натив.
native void UpdateQuakeSettings(int client); //Возможно даже аргументы будут такими (int client, bool params)
Когда буду менять значения с true на false в меню с настройками буду использовать этот натив что-бы в плагине с системой обновились параметры игрока.
Как то вот так вот, обрывок кода.
C++:
public SettingsMenuHandler(Handle menu, MenuAction:action, param1, param2)
{
    if(action == MenuAction_Select)
    {
        switch(param2)
        {
            case 0:
            {
                Quake[param1] = !Quake[param1]  ? true : false;
                UpdateQuakeSettings(param1); //Возможно даже аргументы будут такими (param1, Quake[param1])
            }

Но это позже, мне ещё нужно получить параметры на пред идущей стадии когда меню только открывается...
В этом же плагине, там где мне открывается меню... Как я узнаю у игрока данная функция включена?
Format(buffer, sizeof(buffer), "%t [%s]", "quake", !Quake[client] ? "+" : "-"); AddMenuItem(MenuHandle, "menu item", buffer);
Читать файл с настройками игроков?
Читать файл с настройками при входе игрока на сервер и присваивать значение к массиву?
Отправлять запрос через нативную функцию в плагин с системой для того что-бы так же через нативную функцию пришёл ответ с параметрами?

Пока что я придумал только что бы читать настройки игрока в плагине с меню, присваивать значения к глобальным массивам.
А в плагине с системой, не читать настройки из файла, а отправлять их из плагина с меню в плагин с системой уже прочитанные.
И всё равно создавать в плагине с системой глобальный массив всех игроков и присваивать значения которые послал плагин с меню...

Но мне всё равно кажется что я делаю не правильно, думаю не правильно и можно наверняка сделать менее затратный процесс.
Делаю плагин с поддержкой модулей, тоже задался вопросом, если поможет, вот тема - Модульность плагина
 

DarkerZ

Участник
Сообщения
394
Реакции
175
А почему бы не использовать для этого куки?
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
!settings в чат и там будет менюшки с этими настройками.
емнип, у обоих плагинов есть пользовательские настройки с меню
 
Сверху Снизу