• Для того, чтобы добавить "ресурс" на форум, требуется перейти по ссылке и создать ресурс в нужной категории форума.
Иконка ресурса

Light Style 0.1.2 (10.08.2026)

Нет прав для скачивания
I reworked the plugin with ChatGPT so it supports multi-language

PHP:
/**
    История изменений:
        0.0.1b (23.12.2023) by b0t.
            - Релиз;
        
        0.0.2b (29.12.2023) by b0t.
            - Небольшая оптимизация кода;
            - Добавлены пункты:
                * Сбросить настройки;
                * Отключить;
        
        0.1.2 (10.08.2026) by b0t.
            - Оптимизация/Рефакторинг кода;
            - Исправлена ошибка в функции "отключения" изменений в освещении;
            - Исправлена критическая ошибка в сохранении выбранных параметров;
                Благодарность: Czech за идеи по оптимизации;
*/
new const VERSION[] = "0.1.2";

#include <amxmodx>
#include <nvault>

#pragma semicolon 1

#define SECONDS_IN_DAY      86400
#define INVALID_ACCESS      (1<<31)
#define OFF_LIGHT           -1

enum _:CvarsStruct {
    ClCmd_OpenMenu[128],
    StartLightKey[5],
    StorageTime_In_Day
};

new const g_szNvault_DataBase_Name[] = "LightKey";

new
    pCvar[CvarsStruct],
    g_iNvault_DataBase = INVALID_HANDLE;

new const g_szLightKey[] = "abcdefghijklmnopqrstuvwxyz";

new
    g_iStartKey;

new
    p_iLightKey[33],
    p_szAuthId[33][64];

public plugin_init() {
    register_plugin("Light Style",VERSION,"b0t.");

    CreateMultiLang();

    register_dictionary("LightStyle.txt");
}

public plugin_cfg() {
    CreateCvars();

    AutoExecConfig(.autoCreate = true, .name = "LightStyle");

    register_clcmd(pCvar[ClCmd_OpenMenu],"Show__LightMenu");
    register_clcmd(fmt("say /%s",pCvar[ClCmd_OpenMenu]),"Show__LightMenu");
    register_clcmd(fmt("say_team /%s",pCvar[ClCmd_OpenMenu]),"Show__LightMenu");

    if(strcmp(pCvar[StartLightKey],"OFF") == 0)
        g_iStartKey = OFF_LIGHT;
    else {
        for(new i;i<=charsmax(g_szLightKey);i++) {
            if(g_szLightKey[i] == pCvar[StartLightKey][0]) {
                g_iStartKey = i;
                break;
            }
        }
    }

    g_iNvault_DataBase = nvault_open(g_szNvault_DataBase_Name);

    if(g_iNvault_DataBase == INVALID_HANDLE) {
        set_fail_state("Error open nVault base: %s",g_szNvault_DataBase_Name);
    }
    
    nvault_prune(g_iNvault_DataBase,0,get_systime() - (SECONDS_IN_DAY*pCvar[StorageTime_In_Day]));
}

public Show__LightMenu(const id) {
    if(!is_user_connected(id))
        return PLUGIN_HANDLED;
    
    new szMenuName[256];
    switch(p_iLightKey[id]) {
        case OFF_LIGHT: formatex(szMenuName,charsmax(szMenuName),"%l","LS_MENU_NAME_OFF_LIGHT");
        default: {
            new szKey[2];
            szKey[0] = g_szLightKey[p_iLightKey[id]];
            szKey[1] = EOS;

            formatex(szMenuName,charsmax(szMenuName),"%l","LS_MENU_NAME",szKey);
        }
    }

    new iMenu = menu_create(szMenuName,"LightMenu__Handler");

    menu_additem(iMenu,fmt("%l","LS_LIGHT_DOWN"));
    menu_additem(iMenu,fmt("%l","LS_LIGHT_UP"));

    menu_additem(iMenu,fmt("%l","LS_LIGHT_REMOVE"), .paccess = p_iLightKey[id] == g_iStartKey ? INVALID_ACCESS : ADMIN_ALL);
    menu_additem(iMenu,fmt("%l","LS_LIGHT_OFF"), .paccess = p_iLightKey[id] == OFF_LIGHT ? INVALID_ACCESS : ADMIN_ALL);

    menu_setprop(iMenu,MPROP_EXITNAME,fmt("%l","LS_MENU_EXIT_NAME"));
    menu_setprop(iMenu,MPROP_NUMBER_COLOR,fmt("%l","LS_MENU_NUMBER_COLOR"));

    menu_display(id,iMenu);

    return PLUGIN_HANDLED;
}

public LightMenu__Handler(const id,const iMenu,const iItem) {
    menu_destroy(iMenu);

    if(iItem == MENU_EXIT)
        return PLUGIN_HANDLED;
    
    switch(iItem) {
        case 0: {
            p_iLightKey[id] = (--p_iLightKey[id]) % charsmax(g_szLightKey);
        }
        case 1: {
            p_iLightKey[id] = (++p_iLightKey[id]) % charsmax(g_szLightKey);
        }
        case 2: p_iLightKey[id] = g_iStartKey;
        case 3: p_iLightKey[id] = OFF_LIGHT;
    }

    nvault_set(g_iNvault_DataBase,p_szAuthId[id],fmt("%i",p_iLightKey[id]));

    UTIL__SetLightStyle(id);

    Show__LightMenu(id);

    return PLUGIN_HANDLED;
}

public client_putinserver(id) {
    get_user_authid(id,p_szAuthId[id],charsmax(p_szAuthId[]));

    new szValue[10];
    if(nvault_get(g_iNvault_DataBase,p_szAuthId[id],szValue,charsmax(szValue))) {
        p_iLightKey[id] = str_to_num(szValue);
    }
    else {
        p_iLightKey[id] = g_iStartKey;
    }

    UTIL__SetLightStyle(id);
}

public CreateCvars() {
    bind_pcvar_string(
        create_cvar(
            .name = "lm_cl_cmd_open_menu",
            .string = "light",
            .description = "Команда для открытия меню"
        ),
        pCvar[ClCmd_OpenMenu],charsmax(pCvar[ClCmd_OpenMenu])
    );

    bind_pcvar_string(
        create_cvar(
            .name = "lm_start_light_key",
            .string = "m",
            .description = "Стартовое значение^nOFF - Не задавать стандартное значение"
        ),
        pCvar[StartLightKey],charsmax(pCvar[StartLightKey])
    );

    bind_pcvar_num(
        create_cvar(
            .name = "lm_storage_time_in_day",
            .string = "30",
            .description = "Время хранения записей в днях"
        ),
        pCvar[StorageTime_In_Day]
    );
}

public CreateMultiLang() {
    new szData[512];
    formatex(szData,charsmax(szData),"addons/amxmodx/data/lang/LightStyle.txt");

    if(file_exists(szData))
        return;
    
    write_file(szData,"[ru]");
    write_file(szData,"");
    write_file(szData,"LS_MENU_NAME = \wНастройка освещения^^nКлюч: \r%s");
    write_file(szData,"LS_MENU_NAME_OFF_LIGHT = \wНастройка освещения^^nКлюч: \r#");
    write_file(szData,"");
    write_file(szData,"LS_LIGHT_UP = Ярче^^n");
    write_file(szData,"LS_LIGHT_DOWN = Темнее");
    write_file(szData,"LS_LIGHT_REMOVE = Сбросить настройки");
    write_file(szData,"LS_LIGHT_OFF = Отключить");
    write_file(szData,"");
    write_file(szData,"LS_MENU_EXIT_NAME = Выход");
    write_file(szData,"");
    write_file(szData,"LS_MENU_NUMBER_COLOR = \y");
    write_file(szData,"");
    write_file(szData,"");
    write_file(szData,"[en]");
    write_file(szData,"");
    write_file(szData,"LS_MENU_NAME = \wНастройка освещения^^nКлюч: \r%s");
    write_file(szData,"LS_MENU_NAME_OFF_LIGHT = \wНастройка освещения^^nКлюч: \r#");
    write_file(szData,"");
    write_file(szData,"LS_LIGHT_UP = Ярче^^n");
    write_file(szData,"LS_LIGHT_DOWN = Темнее");
    write_file(szData,"LS_LIGHT_REMOVE = Сбросить настройки");
    write_file(szData,"LS_LIGHT_OFF = Отключить");
    write_file(szData,"");
    write_file(szData,"LS_MENU_EXIT_NAME = Выход");
    write_file(szData,"");
    write_file(szData,"LS_MENU_NUMBER_COLOR = \y");
}

public plugin_end() {
    if(g_iNvault_DataBase != INVALID_HANDLE) {
        nvault_close(g_iNvault_DataBase);
    }
}

stock UTIL__SetLightStyle(const id) {
    new szKey[2];

    if(p_iLightKey[id] != OFF_LIGHT) {
        szKey[0] = g_szLightKey[p_iLightKey[id]];
        szKey[1] = EOS;
    }

    message_begin(MSG_ONE_UNRELIABLE,SVC_LIGHTSTYLE, .player = id); {
        write_byte(0);
        if(p_iLightKey[id] != OFF_LIGHT)
            write_string(szKey);
        else
            write_string("");
    }
    message_end();
}


PHP:
[en]

LS_MENU_NAME = \wLight Settings^nKey: \r%s
LS_MENU_NAME_OFF_LIGHT = \wLight Settings^nKey: \r#
LS_LIGHT_UP = Brighter^n
LS_LIGHT_DOWN = Darker
LS_LIGHT_REMOVE = Reset settings
LS_LIGHT_OFF = Disable
LS_MENU_EXIT_NAME = Exit
LS_MENU_NUMBER_COLOR = \y

LS_CVAR_OPEN_MENU = Command for opening the menu
LS_CVAR_START_LIGHT_KEY = Starting light value^nOFF - Do not set a default value
LS_CVAR_STORAGE_TIME = Time to store records in days


[sr]

LS_MENU_NAME = \wPodesavanje osvetljenja^nKljuc: \r%s
LS_MENU_NAME_OFF_LIGHT = \wPodesavanje osvetljenja^nKljuc: \r#
LS_LIGHT_UP = Svetlije^n
LS_LIGHT_DOWN = Tamnije
LS_LIGHT_REMOVE = Resetuj podesavanja
LS_LIGHT_OFF = Iskljuci
LS_MENU_EXIT_NAME = Izlaz
LS_MENU_NUMBER_COLOR = \y

LS_CVAR_OPEN_MENU = Komanda za otvaranje menija
LS_CVAR_START_LIGHT_KEY = Pocetna vrednost osvetljenja^nOFF - Ne postavljaj pocetnu vrednost
LS_CVAR_STORAGE_TIME = Vreme cuvanja zapisa u danima


[ru]

LS_MENU_NAME = \wНастройка освещения^nКлюч: \r%s
LS_MENU_NAME_OFF_LIGHT = \wНастройка освещения^nКлюч: \r#
LS_LIGHT_UP = Ярче^n
LS_LIGHT_DOWN = Темнее
LS_LIGHT_REMOVE = Сбросить настройки
LS_LIGHT_OFF = Отключить
LS_MENU_EXIT_NAME = Выход
LS_MENU_NUMBER_COLOR = \y

LS_CVAR_OPEN_MENU = Команда для открытия меню
LS_CVAR_START_LIGHT_KEY = Стартовое значение^nOFF - Не задавать стандартное значение
LS_CVAR_STORAGE_TIME = Время хранения записей в днях


[bg]

LS_MENU_NAME = \wНастройки на осветлението^nКлюч: \r%s
LS_MENU_NAME_OFF_LIGHT = \wНастройки на осветлението^nКлюч: \r#
LS_LIGHT_UP = По-светло^n
LS_LIGHT_DOWN = По-тъмно
LS_LIGHT_REMOVE = Нулиране на настройките
LS_LIGHT_OFF = Изключване
LS_MENU_EXIT_NAME = Изход
LS_MENU_NUMBER_COLOR = \y

LS_CVAR_OPEN_MENU = Команда за отваряне на менюто
LS_CVAR_START_LIGHT_KEY = Начална стойност на осветлението^nOFF - Без задаване на начална стойност
LS_CVAR_STORAGE_TIME = Време за съхранение на записите в дни
 
ChatGPT Version:

PHP:
/**
    History:
        0.0.1b (23.12.2023) by b0t.
            - Release;

        0.0.2b (29.12.2023) by b0t.
            - Code optimization;
            - Added:
                * Reset settings;
                * Disable;

        0.1.2 (10.08.2026) by b0t.
            - Code optimization/refactoring;
            - Fixed error in disabling light changes;
            - Fixed critical error in saving selected parameters;
            - Thanks to Czech for optimization ideas;

        0.1.3
            - All displayed text moved to LightStyle.txt;
            - Added EN/RU localization;

        0.1.4
            - Light settings are now saved per player and per map;
            - Each map has its own saved light setting for every player;
*/

new const VERSION[] = "0.1.4";

#include <amxmodx>
#include <nvault>

#pragma semicolon 1

#define SECONDS_IN_DAY      86400
#define INVALID_ACCESS      (1<<31)
#define OFF_LIGHT           -1

enum _:CvarsStruct
{
    ClCmd_OpenMenu[128],
    StartLightKey[5],
    StorageTime_In_Day
};

new const g_szNvault_DataBase_Name[] = "LightKey";

new
    pCvar[CvarsStruct],
    g_iNvault_DataBase = INVALID_HANDLE;

new const g_szLightKey[] = "abcdefghijklmnopqrstuvwxyz";

new
    g_iStartKey;

new
    p_iLightKey[33],
    p_szAuthId[33][64],
    g_szMapName[32];

public plugin_init()
{
    register_plugin("Light Style", VERSION, "b0t.");

    register_dictionary("LightStyle.txt");

    get_mapname(g_szMapName, charsmax(g_szMapName));
}

public plugin_cfg()
{
    CreateCvars();

    AutoExecConfig(.autoCreate = true, .name = "LightStyle");

    register_clcmd(pCvar[ClCmd_OpenMenu], "Show__LightMenu");
    register_clcmd(fmt("say /%s", pCvar[ClCmd_OpenMenu]), "Show__LightMenu");
    register_clcmd(fmt("say_team /%s", pCvar[ClCmd_OpenMenu]), "Show__LightMenu");

    if (strcmp(pCvar[StartLightKey], "OFF") == 0)
    {
        g_iStartKey = OFF_LIGHT;
    }
    else
    {
        g_iStartKey = -1;

        for (new i; i < charsmax(g_szLightKey); i++)
        {
            if (g_szLightKey[i] == pCvar[StartLightKey][0])
            {
                g_iStartKey = i;
                break;
            }
        }

        if (g_iStartKey == -1)
        {
            g_iStartKey = 12; // m
        }
    }

    g_iNvault_DataBase = nvault_open(g_szNvault_DataBase_Name);

    if (g_iNvault_DataBase == INVALID_HANDLE)
    {
        set_fail_state(
            "Error opening nVault database: %s",
            g_szNvault_DataBase_Name
        );
    }

    nvault_prune(
        g_iNvault_DataBase,
        0,
        get_systime() - (SECONDS_IN_DAY * pCvar[StorageTime_In_Day])
    );
}

public Show__LightMenu(const id)
{
    if (!is_user_connected(id))
        return PLUGIN_HANDLED;

    new szMenuName[256];
    new szItem[128];

    switch (p_iLightKey[id])
    {
        case OFF_LIGHT:
        {
            formatex(
                szMenuName,
                charsmax(szMenuName),
                "%L",
                id,
                "LS_MENU_NAME_OFF_LIGHT"
            );
        }

        default:
        {
            new szKey[2];

            szKey[0] = g_szLightKey[p_iLightKey[id]];
            szKey[1] = EOS;

            formatex(
                szMenuName,
                charsmax(szMenuName),
                "%L",
                id,
                "LS_MENU_NAME",
                szKey
            );
        }
    }

    new iMenu = menu_create(
        szMenuName,
        "LightMenu__Handler"
    );

    formatex(
        szItem,
        charsmax(szItem),
        "%L",
        id,
        "LS_LIGHT_DOWN"
    );
    menu_additem(iMenu, szItem);

    formatex(
        szItem,
        charsmax(szItem),
        "%L",
        id,
        "LS_LIGHT_UP"
    );
    menu_additem(iMenu, szItem);

    formatex(
        szItem,
        charsmax(szItem),
        "%L",
        id,
        "LS_LIGHT_REMOVE"
    );
    menu_additem(
        iMenu,
        szItem,
        .paccess = p_iLightKey[id] == g_iStartKey ? INVALID_ACCESS : ADMIN_ALL
    );

    formatex(
        szItem,
        charsmax(szItem),
        "%L",
        id,
        "LS_LIGHT_OFF"
    );
    menu_additem(
        iMenu,
        szItem,
        .paccess = p_iLightKey[id] == OFF_LIGHT ? INVALID_ACCESS : ADMIN_ALL
    );

    formatex(
        szItem,
        charsmax(szItem),
        "%L",
        id,
        "LS_MENU_EXIT_NAME"
    );
    menu_setprop(iMenu, MPROP_EXITNAME, szItem);

    formatex(
        szItem,
        charsmax(szItem),
        "%L",
        id,
        "LS_MENU_NUMBER_COLOR"
    );
    menu_setprop(iMenu, MPROP_NUMBER_COLOR, szItem);

    menu_display(id, iMenu);

    return PLUGIN_HANDLED;
}
public LightMenu__Handler(
    const id,
    const iMenu,
    const iItem
)
{
    menu_destroy(iMenu);

    if (iItem == MENU_EXIT)
        return PLUGIN_HANDLED;

    switch (iItem)
    {
        case 0:
        {
            p_iLightKey[id]--;

            if (p_iLightKey[id] < 0)
                p_iLightKey[id] = charsmax(g_szLightKey) - 1;
        }

        case 1:
        {
            p_iLightKey[id]++;

            if (p_iLightKey[id] >= charsmax(g_szLightKey))
                p_iLightKey[id] = 0;
        }

        case 2:
        {
            p_iLightKey[id] = g_iStartKey;
        }

        case 3:
        {
            p_iLightKey[id] = OFF_LIGHT;
        }
    }

    SavePlayerMapLight(id);

    UTIL__SetLightStyle(id);

    Show__LightMenu(id);

    return PLUGIN_HANDLED;
}

public client_putinserver(id)
{
    get_user_authid(
        id,
        p_szAuthId[id],
        charsmax(p_szAuthId[])
    );

    LoadPlayerMapLight(id);

    UTIL__SetLightStyle(id);
}

public client_disconnected(id)
{
    p_iLightKey[id] = g_iStartKey;
    p_szAuthId[id][0] = EOS;
}

public CreateCvars()
{
    bind_pcvar_string(
        create_cvar(
            .name = "lm_cl_cmd_open_menu",
            .string = "light",
            .description = "LS_CVAR_OPEN_MENU"
        ),
        pCvar[ClCmd_OpenMenu],
        charsmax(pCvar[ClCmd_OpenMenu])
    );

    bind_pcvar_string(
        create_cvar(
            .name = "lm_start_light_key",
            .string = "m",
            .description = "LS_CVAR_START_LIGHT_KEY"
        ),
        pCvar[StartLightKey],
        charsmax(pCvar[StartLightKey])
    );

    bind_pcvar_num(
        create_cvar(
            .name = "lm_storage_time_in_day",
            .string = "30",
            .description = "LS_CVAR_STORAGE_TIME"
        ),
        pCvar[StorageTime_In_Day]
    );
}

public plugin_end()
{
    if (g_iNvault_DataBase != INVALID_HANDLE)
    {
        nvault_close(g_iNvault_DataBase);
    }
}

stock LoadPlayerMapLight(const id)
{
    if (!p_szAuthId[id][0])
    {
        p_iLightKey[id] = g_iStartKey;
        return;
    }

    new szVaultKey[128];
    new szValue[10];

    formatex(
        szVaultKey,
        charsmax(szVaultKey),
        "%s_%s",
        p_szAuthId[id],
        g_szMapName
    );

    if (nvault_get(
        g_iNvault_DataBase,
        szVaultKey,
        szValue,
        charsmax(szValue)
    ))
    {
        p_iLightKey[id] = str_to_num(szValue);

        if (
            p_iLightKey[id] < OFF_LIGHT ||
            p_iLightKey[id] >= charsmax(g_szLightKey)
        )
        {
            p_iLightKey[id] = g_iStartKey;
        }
    }
    else
    {
        p_iLightKey[id] = g_iStartKey;
    }
}

stock SavePlayerMapLight(const id)
{
    if (!p_szAuthId[id][0])
        return;

    new szVaultKey[128];

    formatex(
        szVaultKey,
        charsmax(szVaultKey),
        "%s_%s",
        p_szAuthId[id],
        g_szMapName
    );

    nvault_set(
        g_iNvault_DataBase,
        szVaultKey,
        fmt("%i", p_iLightKey[id])
    );
}

stock UTIL__SetLightStyle(const id)
{
    new szKey[2];

    if (p_iLightKey[id] != OFF_LIGHT)
    {
        szKey[0] = g_szLightKey[p_iLightKey[id]];
        szKey[1] = EOS;
    }

    message_begin(
        MSG_ONE_UNRELIABLE,
        SVC_LIGHTSTYLE,
        .player = id
    );

    write_byte(0);

    if (p_iLightKey[id] != OFF_LIGHT)
    {
        write_string(szKey);
    }
    else
    {
        write_string("");
    }

    message_end();
}
 
ChatGPT Version:

PHP:
/**
    History:
        0.0.1b (23.12.2023) by b0t.
            - Release;

        0.0.2b (29.12.2023) by b0t.
            - Code optimization;
            - Added:
                * Reset settings;
                * Disable;

        0.1.2 (10.08.2026) by b0t.
            - Code optimization/refactoring;
            - Fixed error in disabling light changes;
            - Fixed critical error in saving selected parameters;
            - Thanks to Czech for optimization ideas;

        0.1.3
            - All displayed text moved to LightStyle.txt;
            - Added EN/RU localization;

        0.1.4
            - Light settings are now saved per player and per map;
            - Each map has its own saved light setting for every player;
*/

new const VERSION[] = "0.1.4";

#include <amxmodx>
#include <nvault>

#pragma semicolon 1

#define SECONDS_IN_DAY      86400
#define INVALID_ACCESS      (1<<31)
#define OFF_LIGHT           -1

enum _:CvarsStruct
{
    ClCmd_OpenMenu[128],
    StartLightKey[5],
    StorageTime_In_Day
};

new const g_szNvault_DataBase_Name[] = "LightKey";

new
    pCvar[CvarsStruct],
    g_iNvault_DataBase = INVALID_HANDLE;

new const g_szLightKey[] = "abcdefghijklmnopqrstuvwxyz";

new
    g_iStartKey;

new
    p_iLightKey[33],
    p_szAuthId[33][64],
    g_szMapName[32];

public plugin_init()
{
    register_plugin("Light Style", VERSION, "b0t.");

    register_dictionary("LightStyle.txt");

    get_mapname(g_szMapName, charsmax(g_szMapName));
}

public plugin_cfg()
{
    CreateCvars();

    AutoExecConfig(.autoCreate = true, .name = "LightStyle");

    register_clcmd(pCvar[ClCmd_OpenMenu], "Show__LightMenu");
    register_clcmd(fmt("say /%s", pCvar[ClCmd_OpenMenu]), "Show__LightMenu");
    register_clcmd(fmt("say_team /%s", pCvar[ClCmd_OpenMenu]), "Show__LightMenu");

    if (strcmp(pCvar[StartLightKey], "OFF") == 0)
    {
        g_iStartKey = OFF_LIGHT;
    }
    else
    {
        g_iStartKey = -1;

        for (new i; i < charsmax(g_szLightKey); i++)
        {
            if (g_szLightKey[i] == pCvar[StartLightKey][0])
            {
                g_iStartKey = i;
                break;
            }
        }

        if (g_iStartKey == -1)
        {
            g_iStartKey = 12; // m
        }
    }

    g_iNvault_DataBase = nvault_open(g_szNvault_DataBase_Name);

    if (g_iNvault_DataBase == INVALID_HANDLE)
    {
        set_fail_state(
            "Error opening nVault database: %s",
            g_szNvault_DataBase_Name
        );
    }

    nvault_prune(
        g_iNvault_DataBase,
        0,
        get_systime() - (SECONDS_IN_DAY * pCvar[StorageTime_In_Day])
    );
}

public Show__LightMenu(const id)
{
    if (!is_user_connected(id))
        return PLUGIN_HANDLED;

    new szMenuName[256];
    new szItem[128];

    switch (p_iLightKey[id])
    {
        case OFF_LIGHT:
        {
            formatex(
                szMenuName,
                charsmax(szMenuName),
                "%L",
                id,
                "LS_MENU_NAME_OFF_LIGHT"
            );
        }

        default:
        {
            new szKey[2];

            szKey[0] = g_szLightKey[p_iLightKey[id]];
            szKey[1] = EOS;

            formatex(
                szMenuName,
                charsmax(szMenuName),
                "%L",
                id,
                "LS_MENU_NAME",
                szKey
            );
        }
    }

    new iMenu = menu_create(
        szMenuName,
        "LightMenu__Handler"
    );

    formatex(
        szItem,
        charsmax(szItem),
        "%L",
        id,
        "LS_LIGHT_DOWN"
    );
    menu_additem(iMenu, szItem);

    formatex(
        szItem,
        charsmax(szItem),
        "%L",
        id,
        "LS_LIGHT_UP"
    );
    menu_additem(iMenu, szItem);

    formatex(
        szItem,
        charsmax(szItem),
        "%L",
        id,
        "LS_LIGHT_REMOVE"
    );
    menu_additem(
        iMenu,
        szItem,
        .paccess = p_iLightKey[id] == g_iStartKey ? INVALID_ACCESS : ADMIN_ALL
    );

    formatex(
        szItem,
        charsmax(szItem),
        "%L",
        id,
        "LS_LIGHT_OFF"
    );
    menu_additem(
        iMenu,
        szItem,
        .paccess = p_iLightKey[id] == OFF_LIGHT ? INVALID_ACCESS : ADMIN_ALL
    );

    formatex(
        szItem,
        charsmax(szItem),
        "%L",
        id,
        "LS_MENU_EXIT_NAME"
    );
    menu_setprop(iMenu, MPROP_EXITNAME, szItem);

    formatex(
        szItem,
        charsmax(szItem),
        "%L",
        id,
        "LS_MENU_NUMBER_COLOR"
    );
    menu_setprop(iMenu, MPROP_NUMBER_COLOR, szItem);

    menu_display(id, iMenu);

    return PLUGIN_HANDLED;
}
public LightMenu__Handler(
    const id,
    const iMenu,
    const iItem
)
{
    menu_destroy(iMenu);

    if (iItem == MENU_EXIT)
        return PLUGIN_HANDLED;

    switch (iItem)
    {
        case 0:
        {
            p_iLightKey[id]--;

            if (p_iLightKey[id] < 0)
                p_iLightKey[id] = charsmax(g_szLightKey) - 1;
        }

        case 1:
        {
            p_iLightKey[id]++;

            if (p_iLightKey[id] >= charsmax(g_szLightKey))
                p_iLightKey[id] = 0;
        }

        case 2:
        {
            p_iLightKey[id] = g_iStartKey;
        }

        case 3:
        {
            p_iLightKey[id] = OFF_LIGHT;
        }
    }

    SavePlayerMapLight(id);

    UTIL__SetLightStyle(id);

    Show__LightMenu(id);

    return PLUGIN_HANDLED;
}

public client_putinserver(id)
{
    get_user_authid(
        id,
        p_szAuthId[id],
        charsmax(p_szAuthId[])
    );

    LoadPlayerMapLight(id);

    UTIL__SetLightStyle(id);
}

public client_disconnected(id)
{
    p_iLightKey[id] = g_iStartKey;
    p_szAuthId[id][0] = EOS;
}

public CreateCvars()
{
    bind_pcvar_string(
        create_cvar(
            .name = "lm_cl_cmd_open_menu",
            .string = "light",
            .description = "LS_CVAR_OPEN_MENU"
        ),
        pCvar[ClCmd_OpenMenu],
        charsmax(pCvar[ClCmd_OpenMenu])
    );

    bind_pcvar_string(
        create_cvar(
            .name = "lm_start_light_key",
            .string = "m",
            .description = "LS_CVAR_START_LIGHT_KEY"
        ),
        pCvar[StartLightKey],
        charsmax(pCvar[StartLightKey])
    );

    bind_pcvar_num(
        create_cvar(
            .name = "lm_storage_time_in_day",
            .string = "30",
            .description = "LS_CVAR_STORAGE_TIME"
        ),
        pCvar[StorageTime_In_Day]
    );
}

public plugin_end()
{
    if (g_iNvault_DataBase != INVALID_HANDLE)
    {
        nvault_close(g_iNvault_DataBase);
    }
}

stock LoadPlayerMapLight(const id)
{
    if (!p_szAuthId[id][0])
    {
        p_iLightKey[id] = g_iStartKey;
        return;
    }

    new szVaultKey[128];
    new szValue[10];

    formatex(
        szVaultKey,
        charsmax(szVaultKey),
        "%s_%s",
        p_szAuthId[id],
        g_szMapName
    );

    if (nvault_get(
        g_iNvault_DataBase,
        szVaultKey,
        szValue,
        charsmax(szValue)
    ))
    {
        p_iLightKey[id] = str_to_num(szValue);

        if (
            p_iLightKey[id] < OFF_LIGHT ||
            p_iLightKey[id] >= charsmax(g_szLightKey)
        )
        {
            p_iLightKey[id] = g_iStartKey;
        }
    }
    else
    {
        p_iLightKey[id] = g_iStartKey;
    }
}

stock SavePlayerMapLight(const id)
{
    if (!p_szAuthId[id][0])
        return;

    new szVaultKey[128];

    formatex(
        szVaultKey,
        charsmax(szVaultKey),
        "%s_%s",
        p_szAuthId[id],
        g_szMapName
    );

    nvault_set(
        g_iNvault_DataBase,
        szVaultKey,
        fmt("%i", p_iLightKey[id])
    );
}

stock UTIL__SetLightStyle(const id)
{
    new szKey[2];

    if (p_iLightKey[id] != OFF_LIGHT)
    {
        szKey[0] = g_szLightKey[p_iLightKey[id]];
        szKey[1] = EOS;
    }

    message_begin(
        MSG_ONE_UNRELIABLE,
        SVC_LIGHTSTYLE,
        .player = id
    );

    write_byte(0);

    if (p_iLightKey[id] != OFF_LIGHT)
    {
        write_string(szKey);
    }
    else
    {
        write_string("");
    }

    message_end();
}
You don't have to rewrite the plugin to support multiple languages. Was derived for this purpose Language file
 

Кто просматривает тему

Назад
Верх