Command To Work From Web Console Too, Not Only When You Are In Server.

Сообщения
213
Реакции
71
Помог
2 раз(а)
Can someone help me with little part this code, below.

I want to let it work from both server console + client side.

PHP:
register_clcmd("say /change", "CMD_ModeChange", ADMIN_VOTE, "<Смена режима Mode 2x2, Открыть/Закрыть карту>");
I have tried every possiblity but in every case it works from client side not server console.

clcmd (works for client)
concmd (works for client, not working from console unfortunately)
srvcmd (not working from console)

Can anyone help that it should work from server console + client side.

P.S: Full Plugin Code, Attach In Spoiler At Bottom.

Код:
public CMD_ModeChange(id, level, cid)
{
    if (!get_pcvar_num(pcvar_mode_allow_change))
        return PLUGIN_CONTINUE;

    if (!cmd_access(id, level, cid, 2))
        return PLUGIN_CONTINUE;

    if (!g_pServerVar[m_LoadBox])
    {
        client_print_color(id, DontChange, "%L %L", id, "MODE_PREFIX", id, "MODE_NOT_USED");
        return PLUGIN_HANDLED;
    }

    new szName[32];
    get_user_name(id, szName, charsmax(szName));

    if (g_pServerVar[m_iClosedIndex] != id && is_user_connected(g_pServerVar[m_iClosedIndex]))
    {
        client_print_color(id, DontChange, "%L %L", id, "MODE_PREFIX", id, "MODE_ADMIN_BUSY_CHANGE", szName);
        return PLUGIN_HANDLED;
    }

    switch (g_pServerVar[m_iBlocked])
    {
    case block_vote:
    {
        client_print_color(id, DontChange, "%L %L", id, "MODE_PREFIX", id, "MODE_VOTE");
        return PLUGIN_HANDLED;
    }
    case block_start_vote:
    {
        client_print_color(id, DontChange, "%L %L", id, "MODE_PREFIX", id, "MODE_START_VOTE");
        return PLUGIN_HANDLED;
    }
    case block_success_vote:
    {
        client_print_color(id, DontChange, "%L %L", id, "MODE_PREFIX", id, "MODE_WAIT_NEW_ROUND");
        return PLUGIN_HANDLED;
    }
    case block_admin_change:
    {
        client_print_color(id, DontChange, "%L %L", id, "MODE_PREFIX", id, "MODE_ADMIN_CHANGED", id, (g_pServerVar[m_iStatus] == map_close) ? "MODE_ADMIN_CLOSED" : "MODE_ADMIN_OPENED");
        return PLUGIN_HANDLED;
    }
    }

    g_pServerVar[m_iBlocked] = blocked_s:block_admin_change;
    g_pServerVar[m_fNext] = _:(get_gametime() + (VOTE_TIMEWAIT * 60.0));
    g_pServerVar[m_iStatus] ^= map_close;

    if (get_pcvar_num(pcvar_mode_admin_only) != 0)
    {
        g_pServerVar[m_iClosedIndex] = (g_pServerVar[m_iStatus] == map_open) ? id : 0;
    }

    new iPlayers[32], iNum, p;
    get_players(iPlayers, iNum, "ch");

    for (new a = 0; a < iNum; ++a)
    {
        p = iPlayers[a];

        if (get_user_flags(p) & ADMIN_VOTE)
        {
            client_print_color(p, DontChange + id, "%L %L", p, "MODE_PREFIX", p, "MODE_ADMIN_CHANGED_ADMINS", szName, p, (g_pServerVar[m_iStatus] == map_close) ? "MODE_ADMIN_CLOSED" : "MODE_ADMIN_OPENED");
            console_print(id, "%s Changed The Mode", szName);
            }
    }

    return PLUGIN_HANDLED;
}
Код:
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <engine>
#include <reapi>

#define PLUGIN_VERSION "2.5re"

#if (AMXX_VERSION_NUM < 183) || defined NO_NATIVE_COLORCHAT
    #include <colorchat>
    #include <dhudmessage>
#else
    #define DontChange print_team_default
    #define client_disconnect client_disconnected
#endif

#pragma ctrlchar            '\'
#pragma semicolon            1

#define ID_KEY_WALL            54345678

                    //x    //y
#define MESSAGE_MAP_STATUS        -1.0,    0.8                // Позиция сообщении о Закрытии/Открытии карты.


                    //r    //green        //blue
#define COLOR_MAP_CLOSE            255,    0,        0        // Цвет сообщения, когда низкий онлайн и карта закрывается. Тип цвета RGB, http://www.colorschemer.com/online.html
#define COLOR_MAP_OPEN            0,    255,        0        // Цвет сообщения, когда онлайн выше требуемого и карта открывается. Тип цвета RGB, http://www.colorschemer.com/online.html

#define MODE_TIME_START            10.0    // Через сколько начать голосование, после нужного количества голосов.
#define MODE_COUNT_START        5    // Отчет до начала голосования
#define VOTE_TIMEWAIT            3    // Через сколько минут после голосования /mode, будет снова доступно.
#define VOTE_RATIO            0.5    // Погрешность для количество голосов, Пример: (Ratio: 0.5, требуется 0.5 * 32 = 16 голосов из 32 игроков)

#define STRONG_PUSH            15.0    // Сила толчка weaponbox (оружия, C4) от стенки
#define MAX_CLIENTS            32

#define PREFIX                "\1[\4PSL Mode\1]"
#define CLASSNAME_WALL            "test_effect" // unused classname in the game
#define SPRITE_WALL            "sprites/mode/wallenglish.spr"

#define Vector(%0,%1,%2)        (Float:{%0,%1,%2})
#define VectorCompare(%0,%1)        (%0[x] == %1[x] && %0[y] == %1[y] && %0[z] == %1[z])
#define VectorDT(%0,%1,%2,%3)        (!(%0[x] > %3[x] || %1[x] < %2[x]) && !(%0[y] > %3[y] || %1[y] < %2[y]) && !(%0[z] > %3[z] || %1[z] < %2[z]))

enum (+= 256222)
{
    TASK_MODE_VOTE = 256222,
    TASK_MODE_START,
    TASK_MODE_INIT,
    TASK_MODE_NOTIFY,
    TASK_MODE_AUTO_MAPCLOSE
};

enum _:coord_s
{
    Float:x,
    Float:y,
    Float:z
};

enum status_s
{
    map_open,
    map_close,
};

enum _:blocked_s
{
    block_none = 0,
    block_vote,
    block_start_vote,
    block_success_vote,
    block_roundnew,
    block_commencing,
    block_admin_change,
    block_permament
};

enum _:vote_s
{
    vote_no,
    vote_yes
};

enum _:server_info_s
{
    status_s:m_iStatus,
    status_s:m_iStatusLast,
    blocked_s:m_iBlocked,
    m_szFile[64],
    m_iAll,
    m_iMaxpl,
    m_iCount,
    m_LoadBox,
    bool:m_bAdvanced,
    bool:m_bInitialized,
    m_iClosedIndex,
    m_iOnline_High,
    m_iOnline_Low,
    m_szMap[32],
    m_iVoting[vote_s],
    m_iVote[MAX_CLIENTS + 1],
    Float:m_fNext,
    Float:m_fWait[MAX_CLIENTS + 1],
};

new g_pServerVar[server_info_s];

enum _:box_data_s
{
    m_iBox,
    m_iCopy,
    m_iType,
    m_iEntid,
    m_iSetting,
    m_iSolid,
    m_iSprite,
    m_iBeamSprite,

    Float:m_fScale
};

new g_pBoxVar[box_data_s];

enum box_vector_s
{
    m_fOrigin,
    m_fAngles,
    m_fMins,
    m_fMaxs
};

new Float:g_pBoxVector[box_vector_s][coord_s];
new HamHook:g_pForwardThink;

// CVars
new pcvar_mode_admin_only,
    pcvar_mode_allow_vote,
    pcvar_mode_allow_change,
    pcvar_mode_force_check_online,
    pcvar_mode_block_startgame,
    pcvar_mode_push_weaponbox,
    pcvar_mode_message_on_touch,
    pcvar_mode_touch_wait,
    pcvar_mode_changemapname;

public plugin_precache()
{
    precache_model(SPRITE_WALL);
    g_pBoxVar[m_iBeamSprite] = precache_model("sprites/smoke.spr");
    get_mapname(g_pServerVar[m_szMap], charsmax(g_pServerVar[m_szMap]));
}

public plugin_init()
{
    register_plugin("Mode 2x2", PLUGIN_VERSION, "s1lent");
    register_cvar("mode2x2_version", PLUGIN_VERSION, FCVAR_SERVER | FCVAR_SPONLY);

    register_menucmd(register_menuid("Main Edit Menu"), 0x3FF, "MainEdit_Handler");
    register_menucmd(register_menuid("Settings Menu"), 0x23F, "Settings_Handler");
    register_menucmd(register_menuid("Properties Menu"), 0x3FF, "Properties_Handler");

    DisableHamForward((g_pForwardThink = RegisterHam(Ham_Think, CLASSNAME_WALL, "CTestEffect__ThinkWall")));

    pcvar_mode_admin_only = register_cvar("mode_admin_only", "0");                // Запрещает второму админу использовать команду "/change", если первый админ его уже использовал для открытия карты и если админ который активировал "/change" - активный и находится в команде.
    pcvar_mode_allow_vote = register_cvar("mode_allow_vote", "1");                // Разрешить использовать команду "/mode"
    pcvar_mode_allow_change = register_cvar("mode_allow_change", "1");            // Разрешить использовать команду "/change"
    pcvar_mode_force_check_online = register_cvar("mode_force_check_online", "1");        // Заставлять проверять онлайн даже при /change, если нет действующих админов в игре, кроме админов в спектаторе, при mode_admin_only, проверяет только одного активного админа.
    pcvar_mode_block_startgame = register_cvar("mode_block_startgame", "0");        // Никогда не ставить стенки при "GameCommencing" или "Restart"
    pcvar_mode_push_weaponbox = register_cvar("mode_push_weaponbox", "1");            // Толкать weaponbox (оружия, C4) от стенки

    pcvar_mode_message_on_touch = register_cvar("mode_messagetouch", "0");            // Сообщать игроку при касании стены о том, что проход закрыт.
    pcvar_mode_touch_wait = register_cvar("mode_messagetouch_time", "5.5");            // Задержка для повторного сообщения при касании стенки игроком.
    pcvar_mode_changemapname = register_cvar("mode_changemapname", "1");

    Load_Config();

    register_clcmd("say /mode", "CMD_Mode", 0, "<Голосование за открытие/закрытие карты>");
    register_clcmd("say /change", "CMD_ModeChange", ADMIN_VOTE, "<Смена режима Mode 2x2, Открыть/Закрыть карту>");
    register_clcmd("say /changemode", "CMD_ModeChange", ADMIN_VOTE, "<Смена режима Mode 2x2, Открыть/Закрыть карту>");
    register_srvcmd("say /change", "CMD_ModeChange");
    register_srvcmd("say /changemode", "CMD_ModeChange");
  
    register_clcmd("say /box", "CMD_MenuBox", ADMIN_LEVEL_C, "<Управление объектами, Создание/Изменение/Удаление>");
    register_dictionary("mode.txt");

    // initialized vars
    g_pServerVar[m_iMaxpl] = get_maxplayers();
    g_pServerVar[m_fNext] = _:(get_gametime() + (VOTE_TIMEWAIT * 60.0));
}

public Task_Initialized()
{
    g_pServerVar[m_bInitialized] = true;
    UTIL__ChangeNameOfMap(g_pServerVar[m_iStatus]);
}

public Task_AutoMapClose()
{
    new nActivePlayers = UTIL__GetActivePlayers();
    if (nActivePlayers <= 0)
    {
        DrawBox(g_pServerVar[m_iStatus] = map_close, false);
    }
}

// ready config file
stock Load_Config()
{
    new szCfgDir[128];
    get_configsdir(szCfgDir, charsmax(szCfgDir));
    get_localinfo("amxx_configsdir", g_pServerVar[m_szFile], charsmax(g_pServerVar[m_szFile]));

    add(g_pServerVar[m_szFile], charsmax(g_pServerVar[m_szFile]), "/mode/");
    add(szCfgDir, charsmax(szCfgDir), "/mode.cfg");
    mkdir(g_pServerVar[m_szFile]);

    server_cmd("exec %s", szCfgDir);
    server_exec();

    formatex(g_pServerVar[m_szFile], charsmax(g_pServerVar[m_szFile]), "%s%s.ini", g_pServerVar[m_szFile], g_pServerVar[m_szMap]);

    if (file_exists(g_pServerVar[m_szFile]))
    {
        if (!(g_pServerVar[m_LoadBox] = LoadBox()))
            return;

        DrawBox(g_pServerVar[m_iStatus] = map_open);

        if (get_pcvar_num(pcvar_mode_message_on_touch))
        {
            RegisterHam(Ham_Touch, "player", "CBasePlayer__Touch");
        }

        if (get_pcvar_num(pcvar_mode_push_weaponbox))
        {
            RegisterHam(Ham_Touch, "weaponbox", "CWeaponBox__Touch");
        }

        register_event("HLTV", "EventRoundNew", "a", "1=0", "2=0");
        register_menucmd(register_menuid("Mode Menu"), MENU_KEY_1 | MENU_KEY_2, "Mode_Handler");
        register_event("TextMsg", "EventStartGame", "a", "2=#Game_Commencing", "2=#Game_will_restart_in");

        // when all the configs with 3-rd party plugins already loaded
        if (get_pcvar_num(pcvar_mode_changemapname))
        {
            set_task(3.0, "Task_Initialized", TASK_MODE_INIT);
        }

        // To check if the game is in idle state, no active players.
        // So close the map over time.
        set_task(15.0, "Task_AutoMapClose", TASK_MODE_AUTO_MAPCLOSE);
    }
}

public plugin_end()
{
    // reset mapname
    UTIL__ChangeNameOfMap(map_open);

    remove_task(TASK_MODE_VOTE);
    remove_task(TASK_MODE_START);
    remove_task(TASK_MODE_INIT);
    remove_task(TASK_MODE_NOTIFY);
    remove_task(TASK_MODE_AUTO_MAPCLOSE);
}

public plugin_pause()
{
    // hide wall
    if (g_pServerVar[m_iStatus] == map_close)
        DrawBox(g_pServerVar[m_iStatus] = map_open, false);

    // reset mapname
    UTIL__ChangeNameOfMap(map_open);

    remove_task(TASK_MODE_VOTE);
    remove_task(TASK_MODE_START);
    remove_task(TASK_MODE_INIT);
    remove_task(TASK_MODE_NOTIFY);
    remove_task(TASK_MODE_AUTO_MAPCLOSE);
}

public client_disconnect(id)
{
    if (!g_pServerVar[m_LoadBox])
        return;

    if (g_pServerVar[m_iClosedIndex] == id)
        g_pServerVar[m_iClosedIndex] = 0;

    if (g_pServerVar[m_iVote][id])
    {
        --g_pServerVar[m_iAll];
        g_pServerVar[m_iVote][id] = 0;
    }
}

public EventStartGame()
{
    if (!get_pcvar_num(pcvar_mode_block_startgame))
        return;

    g_pServerVar[m_iBlocked] = blocked_s:block_commencing;
    DrawBox(g_pServerVar[m_iStatus] = map_open, false);
}

public EventRoundNew()
{
    new bool:bCvarChange = get_pcvar_num(pcvar_mode_allow_change) != 0;
    new bool:bCvarVote = get_pcvar_num(pcvar_mode_allow_vote) != 0;
    new bool:bCvarStartGame = get_pcvar_num(pcvar_mode_block_startgame) != 0;

    if (bCvarChange && get_pcvar_num(pcvar_mode_force_check_online) != 0 && g_pServerVar[m_iBlocked] > blocked_s:block_admin_change)
    {
        new bool:bBlocked = false;

        new iPlayers[32], iNum, p;
        get_players(iPlayers, iNum, "ch");

        for (new a = 0; a < iNum; ++a)
        {
            p = iPlayers[a];

            if ((get_user_flags(p) & ADMIN_VOTE) && (1 <= get_member(p, m_iTeam) <= 2))
            {
                // if exists admin initiator closed map, trying block is changed mode
                if (get_pcvar_num(pcvar_mode_admin_only) != 0 && g_pServerVar[m_iClosedIndex] != a)
                {
                    continue;
                }

                bBlocked = true;
                break;
            }
        }

        if (!bBlocked && g_pServerVar[m_iOnline_Low] >= UTIL__GetActivePlayers())
        {
            g_pServerVar[m_iBlocked] = blocked_s:block_none;
            DrawBox(g_pServerVar[m_iStatus] = map_close);
        }
    }
    else if (!bCvarChange && !bCvarVote && bCvarStartGame)
    {
        if (g_pServerVar[m_iBlocked] == blocked_s:block_commencing)
            g_pServerVar[m_iBlocked] = blocked_s:block_none;
    }
    /*else if (bCvarChange || bCvarVote)*/
    {
        switch (g_pServerVar[m_iBlocked])
        {
            case block_success_vote:
            {
                DrawBox(g_pServerVar[m_iStatus]);
                g_pServerVar[m_iBlocked] = blocked_s:block_roundnew;
            }
            case block_commencing:
            {
                g_pServerVar[m_iBlocked] = blocked_s:block_none;
            }
            case block_admin_change:
            {
                DrawBox(g_pServerVar[m_iStatus]);
                g_pServerVar[m_iBlocked] = blocked_s:block_permament;
            }
            case block_none:
            {
                new nActivePlayers = UTIL__GetActivePlayers();

                // check condition for open map
                if (nActivePlayers >= g_pServerVar[m_iOnline_High])
                {
                    if (g_pServerVar[m_iStatus] == map_close)
                        DrawBox(g_pServerVar[m_iStatus] = map_open);
                }
                // check condition for close map
                else if (nActivePlayers <= g_pServerVar[m_iOnline_Low])
                {
                    if (g_pServerVar[m_iStatus] == map_open)
                        DrawBox(g_pServerVar[m_iStatus] = map_close);
                }
            }
        }
    }
}

public CTestEffect__ThinkWall(const this)
{
    if (g_pBoxVar[m_iEntid] != this)
        return HAM_IGNORED;

    new Float:mins[coord_s], Float:maxs[coord_s], Float:pos[coord_s];

    entity_get_vector(this, EV_VEC_origin, pos);
    entity_get_vector(this, EV_VEC_mins, mins);
    entity_get_vector(this, EV_VEC_maxs, maxs);

    mins[x] += pos[x];
    mins[y] += pos[y];
    mins[z] += pos[z];

    maxs[x] += pos[x];
    maxs[y] += pos[y];
    maxs[z] += pos[z];

    new const color[] = { 255, 0, 0 }; // red
    UTIL_DrawLine(maxs[0], maxs[1], maxs[2], mins[0], mins[1], mins[2], { 0, 255, 0 });    // green

    UTIL_DrawLine(maxs[0], maxs[1], maxs[2], mins[0], maxs[1], maxs[2], color);
    UTIL_DrawLine(maxs[0], maxs[1], maxs[2], maxs[0], mins[1], maxs[2], color);
    UTIL_DrawLine(maxs[0], maxs[1], maxs[2], maxs[0], maxs[1], mins[2], color);

    UTIL_DrawLine(mins[0], mins[1], mins[2], maxs[0], mins[1], mins[2], color);
    UTIL_DrawLine(mins[0], mins[1], mins[2], mins[0], maxs[1], mins[2], color);
    UTIL_DrawLine(mins[0], mins[1], mins[2], mins[0], mins[1], maxs[2], color);

    UTIL_DrawLine(mins[0], maxs[1], maxs[2], mins[0], maxs[1], mins[2], color);
    UTIL_DrawLine(mins[0], maxs[1], mins[2], maxs[0], maxs[1], mins[2], color);
    UTIL_DrawLine(maxs[0], maxs[1], mins[2], maxs[0], mins[1], mins[2], color);
    UTIL_DrawLine(maxs[0], mins[1], mins[2], maxs[0], mins[1], maxs[2], color);
    UTIL_DrawLine(maxs[0], mins[1], maxs[2], mins[0], mins[1], maxs[2], color);
    UTIL_DrawLine(mins[0], mins[1], maxs[2], mins[0], maxs[1], maxs[2], color);

    entity_set_float(this, EV_FL_nextthink, get_gametime() + 0.155);
    return HAM_IGNORED;
}

stock UTIL_DrawLine(const Float:x1, const Float:y1, const Float:z1, const Float:x2, const Float:y2, const Float:z2, const color[3])
{
    new vecStart[3], vecEnd[3];

    vecStart[0] = floatround(x1);
    vecStart[1] = floatround(y1);
    vecStart[2] = floatround(z1);

    vecEnd[0] = floatround(x2);
    vecEnd[1] = floatround(y2);
    vecEnd[2] = floatround(z2);

    UTIL_DrawBeamPoints(vecStart, vecEnd, 2, color);
    return 0;
}

stock UTIL_DrawBeamPoints(const vecStart[3], const vecEnd[3], lifetime, const color[3])
{
    message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
    write_byte(TE_BEAMPOINTS);
    write_coord(vecStart[0]);
    write_coord(vecStart[1]);
    write_coord(vecStart[2]);
    write_coord(vecEnd[0]);
    write_coord(vecEnd[1]);
    write_coord(vecEnd[2]);
    write_short(g_pBoxVar[m_iBeamSprite]);
    write_byte(0);
    write_byte(0);
    write_byte(lifetime);
    write_byte(10);
    write_byte(0);
    write_byte(color[0]);    // red
    write_byte(color[1]);    // green
    write_byte(color[2]);    // blue
    write_byte(255);
    write_byte(0);
    message_end();
}

public CWeaponBox__Touch(const this, const other)
{
    if (!is_valid_ent(other) || entity_get_int(other, EV_INT_impulse) != ID_KEY_WALL)
        return HAM_IGNORED;

    new Float:flAngles[3], Float:flVelocity[3];

    entity_get_vector(other, EV_VEC_angles, flAngles);
    angle_vector(flAngles, ANGLEVECTOR_FORWARD, flVelocity);

    flVelocity[x] = -flVelocity[x] * STRONG_PUSH;
    flVelocity[y] = -flVelocity[y] * STRONG_PUSH;
    flVelocity[z] = -flVelocity[z] * STRONG_PUSH;

    entity_set_vector(this, EV_VEC_velocity, flVelocity);
    return HAM_IGNORED;
}

public CBasePlayer__Touch(const this, const other)
{
    if (!is_valid_ent(other) || entity_get_int(other, EV_INT_impulse) != ID_KEY_WALL)
    {
        return HAM_IGNORED;
    }

    new Float:flCurrentTime = get_gametime();

    if (flCurrentTime > g_pServerVar[m_fWait][this])
    {
        g_pServerVar[m_fWait][this] = _:(flCurrentTime + get_pcvar_float(pcvar_mode_touch_wait));
        client_print_color(this, DontChange, "%L %L", this, "MODE_PREFIX", this, "MODE_MESSAGE_TOUCH");
        return HAM_IGNORED;
    }

    return HAM_IGNORED;
}

public CMD_ModeChange(id, level, cid)
{
    if (!get_pcvar_num(pcvar_mode_allow_change))
        return PLUGIN_CONTINUE;

    if (!cmd_access(id, level, cid, 2))
        return PLUGIN_CONTINUE;

    if (!g_pServerVar[m_LoadBox])
    {
        client_print_color(id, DontChange, "%L %L", id, "MODE_PREFIX", id, "MODE_NOT_USED");
        return PLUGIN_HANDLED;
    }

    new szName[32];
    get_user_name(id, szName, charsmax(szName));

    if (g_pServerVar[m_iClosedIndex] != id && is_user_connected(g_pServerVar[m_iClosedIndex]))
    {
        client_print_color(id, DontChange, "%L %L", id, "MODE_PREFIX", id, "MODE_ADMIN_BUSY_CHANGE", szName);
        return PLUGIN_HANDLED;
    }

    switch (g_pServerVar[m_iBlocked])
    {
    case block_vote:
    {
        client_print_color(id, DontChange, "%L %L", id, "MODE_PREFIX", id, "MODE_VOTE");
        return PLUGIN_HANDLED;
    }
    case block_start_vote:
    {
        client_print_color(id, DontChange, "%L %L", id, "MODE_PREFIX", id, "MODE_START_VOTE");
        return PLUGIN_HANDLED;
    }
    case block_success_vote:
    {
        client_print_color(id, DontChange, "%L %L", id, "MODE_PREFIX", id, "MODE_WAIT_NEW_ROUND");
        return PLUGIN_HANDLED;
    }
    case block_admin_change:
    {
        client_print_color(id, DontChange, "%L %L", id, "MODE_PREFIX", id, "MODE_ADMIN_CHANGED", id, (g_pServerVar[m_iStatus] == map_close) ? "MODE_ADMIN_CLOSED" : "MODE_ADMIN_OPENED");
        return PLUGIN_HANDLED;
    }
    }

    g_pServerVar[m_iBlocked] = blocked_s:block_admin_change;
    g_pServerVar[m_fNext] = _:(get_gametime() + (VOTE_TIMEWAIT * 60.0));
    g_pServerVar[m_iStatus] ^= map_close;

    if (get_pcvar_num(pcvar_mode_admin_only) != 0)
    {
        g_pServerVar[m_iClosedIndex] = (g_pServerVar[m_iStatus] == map_open) ? id : 0;
    }

    new iPlayers[32], iNum, p;
    get_players(iPlayers, iNum, "ch");

    for (new a = 0; a < iNum; ++a)
    {
        p = iPlayers[a];

        if (get_user_flags(p) & ADMIN_VOTE)
        {
            client_print_color(p, DontChange + id, "%L %L", p, "MODE_PREFIX", p, "MODE_ADMIN_CHANGED_ADMINS", szName, p, (g_pServerVar[m_iStatus] == map_close) ? "MODE_ADMIN_CLOSED" : "MODE_ADMIN_OPENED");
            console_print(id, "%s Changed The Mode", szName);
            }
    }

    return PLUGIN_HANDLED;
}

public CMD_Mode(id)
{
    if (!get_pcvar_num(pcvar_mode_allow_vote))
        return PLUGIN_CONTINUE;

    if (!g_pServerVar[m_LoadBox])
    {
        client_print_color(id, DontChange, "%L %L", id, "MODE_PREFIX", id, "MODE_NOT_USED");
        return PLUGIN_HANDLED;
    }

    switch (g_pServerVar[m_iBlocked])
    {
    case block_vote:
    {
        client_print_color(id, DontChange, "%L %L", id, "MODE_PREFIX", id, "MODE_VOTE");
        return PLUGIN_HANDLED;
    }
    case block_start_vote:
    {
        client_print_color(id, DontChange, "%L %L", id, "MODE_PREFIX", id, "MODE_START_VOTE");
        return PLUGIN_HANDLED;
    }
    case block_admin_change:
    {
        client_print_color(id, DontChange, "%L %L", id, "MODE_PREFIX", id, "MODE_ADMIN_CHANGED", id, (g_pServerVar[m_iStatus] == map_close) ? "MODE_ADMIN_CLOSED" : "MODE_ADMIN_OPENED");
        return PLUGIN_HANDLED;
    }
    }

    new Float:flCurrent = get_gametime();
    if (g_pServerVar[m_fNext] > flCurrent)
    {
        new szBuffer[64];
        getChangeleft(id, floatround(g_pServerVar[m_fNext] - flCurrent), szBuffer, charsmax(szBuffer));
        client_print_color(id, DontChange, "%L %L", id, "MODE_PREFIX", id, "MODE_VOTE_LEFT", szBuffer);
        return PLUGIN_HANDLED;
    }
    else
    {
        new iNumRatio = floatround(VOTE_RATIO * UTIL__GetActivePlayers());
        if (g_pServerVar[m_iVote][id])
            client_print_color(id, DontChange, "%L %L", id, "MODE_PREFIX", id, "MODE_VOTE_ALREADY", g_pServerVar[m_iAll], iNumRatio);

        else
        {
            ++g_pServerVar[m_iAll];
            g_pServerVar[m_iVote][id] = 1;

            new iPlayers[32], szName[32], iNum;

            get_players(iPlayers, iNum, "ch");
            get_user_name(id, szName, charsmax(szName));

            for (new a = 0; a < iNum; ++a)
            {
                client_print_color(iPlayers[a], DontChange + id, "%L %L", id, "MODE_PREFIX", id, "MODE_VOTED", szName, id, (g_pServerVar[m_iStatus] == map_close) ? "MODE_VOTE_OPENED" : "MODE_VOTE_CLOSED", g_pServerVar[m_iAll], iNumRatio);
            }

            if (iNumRatio <= g_pServerVar[m_iAll])
            {
                g_pServerVar[m_iCount] = MODE_COUNT_START;
                g_pServerVar[m_iBlocked] = blocked_s:block_vote;

                set_task(MODE_TIME_START, "Task_ModeVote", TASK_MODE_START);
                client_print_color(0, DontChange, "%L %L", LANG_PLAYER, "MODE_PREFIX", LANG_PLAYER, "MODE_MESSAGE_VOTE_START", 10);
            }
        }
    }

    return 1;
}

public Task_ModeVote()
{
    new szBuffer[128];

    if (0 < g_pServerVar[m_iCount]--)
    {
        new szSpeak[24];
        num_to_word(g_pServerVar[m_iCount] + 1, szSpeak, charsmax(szSpeak));
        client_cmd(0, "spk \"fvox/%s\"", szSpeak);

        formatex(szBuffer, charsmax(szBuffer), "%L", LANG_PLAYER, "MODE_VOTE_PRESTART_MENU", LANG_PLAYER, (g_pServerVar[m_iStatus] == map_close) ? "MODE_TITLE_OPENED" : "MODE_TITLE_CLOSED", g_pServerVar[m_iCount] + 1);
        show_menu(0, 0x3FF, szBuffer, 2, "Mode Menu");
        set_task(1.0, "Task_ModeVote", TASK_MODE_START);
    }
    else
    {
        g_pServerVar[m_iBlocked] = blocked_s:block_start_vote;
        formatex(szBuffer, charsmax(szBuffer), "%L", LANG_PLAYER, "MODE_VOTE_POSTSTART_MENU", LANG_PLAYER, (g_pServerVar[m_iStatus] == map_close) ? "MODE_TITLE_OPENED" : "MODE_TITLE_CLOSED");
        show_menu(0, MENU_KEY_1 | MENU_KEY_2, szBuffer, 18, "Mode Menu");
        set_task(20.0, "Task_ResultVote", TASK_MODE_VOTE);
    }
}

public Mode_Handler(id, key)
{
    if (!get_pcvar_num(pcvar_mode_allow_vote))
        return PLUGIN_CONTINUE;

    if (g_pServerVar[m_iBlocked] == blocked_s:block_vote)
    {
        client_cmd(id, "slot%d", key + 1);
        return PLUGIN_HANDLED;
    }

    new szName[32];
    get_user_name(id, szName, charsmax(szName));

    client_print_color(0, DontChange + id, "%L", id, "MODE_VOTE_FORMAT", szName, id, key ? "MODE_VOTE_NO" : "MODE_VOTE_YES");
    ++g_pServerVar[m_iVoting][key];

    return PLUGIN_HANDLED;
}

public Task_ResultVote()
{
    g_pServerVar[m_iAll] = 0;
    g_pServerVar[m_fNext] = _:(get_gametime() + (VOTE_TIMEWAIT * 60.0));

    arrayset(g_pServerVar[m_iVote], 0, g_pServerVar[m_iMaxpl]);

    if (g_pServerVar[m_iVoting][vote_no] > g_pServerVar[m_iVoting][vote_yes])
    {
        g_pServerVar[m_iBlocked] = blocked_s:block_success_vote;
        g_pServerVar[m_iStatus] ^= map_close;

        client_print_color(0, DontChange, "%L %L", LANG_PLAYER, "MODE_PREFIX", LANG_PLAYER, "MODE_VOTE_RESULT",
            g_pServerVar[m_iVoting][vote_no],
            g_pServerVar[m_iVoting][vote_yes],
            g_pServerVar[m_iVoting][vote_no] + g_pServerVar[m_iVoting][vote_yes]);

        client_print_color(0,DontChange, "%L %L",
            LANG_PLAYER, "MODE_PREFIX",
            LANG_PLAYER, "MODE_VOTE_SUCCESS",
            LANG_PLAYER, (g_pServerVar[m_iStatus] == map_close) ? "MODE_RESULT_CLOSED" : "MODE_RESULT_OPENED");
    }
    else if (g_pServerVar[m_iVoting][vote_no] < g_pServerVar[m_iVoting][vote_yes])
    {
        g_pServerVar[m_iBlocked] = blocked_s:block_none;

        client_print_color(0, DontChange, "%L %L", LANG_PLAYER, "MODE_PREFIX", LANG_PLAYER, "MODE_VOTE_RESULT",
            g_pServerVar[m_iVoting][vote_no],
            g_pServerVar[m_iVoting][vote_yes],
            g_pServerVar[m_iVoting][vote_no] + g_pServerVar[m_iVoting][vote_yes]);

        client_print_color(0, DontChange, "%L %L", LANG_PLAYER, "MODE_PREFIX", LANG_PLAYER, "MODE_VOTE_FAILED");
    }
    else
    {
        g_pServerVar[m_iBlocked] = blocked_s:block_none;
        client_print_color(0, DontChange, "%L %L", LANG_PLAYER, "MODE_PREFIX", LANG_PLAYER, "MODE_VOTE_FAILED");
    }
}

public CMD_MenuBox(id, level, cid)
{
    if (!cmd_access(id, level, cid, 2))
        return PLUGIN_CONTINUE;

    if (g_pForwardThink)
        EnableHamForward(g_pForwardThink);

    return Menu_MainEdit(id);
}

stock Menu_MainEdit(id)
{
    new szBuffer[512];
    formatex(szBuffer, charsmax(szBuffer),
        "%L", id, "MODE_DEV_MENU_MAIN",
        g_pBoxVar[m_iBox],
        g_pBoxVar[m_iEntid] > 0 ? "\\d" : "\\w",
        g_pBoxVar[m_iBox] == 0 ? "\\d" : "\\w",
        g_pBoxVar[m_iBox] == 0 ? "\\d" : "\\w",
        id, (g_pBoxVar[m_iEntid] == 0) ? "MODE_DEV_CHANGE" : "MODE_DEV_SAVE",
        (g_pBoxVar[m_iEntid] == 0) ? "\\d" : "\\w",
        (g_pBoxVar[m_iBox] == 0 || g_pBoxVar[m_iEntid] > 0) ? "\\d" : "\\w",
        (g_pBoxVar[m_iCopy] == 0) ? "\\d" : "\\w",
        (g_pBoxVar[m_iBox] == 0 || g_pBoxVar[m_iEntid] > 0) ? "\\d" : "\\w"
    );

    return show_menu(id, 0x3FF, szBuffer, -1, "Main Edit Menu");
}

public MainEdit_Handler(id, key)
{
    switch (key)
    {
        case 0:
        {
            if (g_pBoxVar[m_iEntid] > 0)
            {
                client_print(id, print_center, "%L", id, "MODE_DEV_FAILED_5");
                return Menu_MainEdit(id);
            }

            new Float:p_origin[coord_s], pEnt = CreateBox();
            entity_get_vector(id, EV_VEC_origin, p_origin);

            ++g_pBoxVar[m_iBox];
            g_pBoxVar[m_iEntid] = pEnt;
            p_origin[z] += 32.0;

            EnableHamForward(g_pForwardThink);
            entity_set_vector(pEnt, EV_VEC_origin, p_origin);
            entity_set_vector(pEnt, EV_VEC_rendercolor, Vector(255.0, 100.0, 100.0));
        }
        case 1:
        {
            new pEnt, dummy;
            get_user_aiming(id, pEnt, dummy);

            if (is_valid_ent(pEnt))
            {
                new szClassname[32];
                entity_get_string(pEnt, EV_SZ_classname, szClassname, charsmax(szClassname));
                if (!strcmp(szClassname, CLASSNAME_WALL))
                {
                    if (--g_pBoxVar[m_iBox] < 0)
                        g_pBoxVar[m_iBox] = 0;

                    if (g_pBoxVar[m_iEntid] == pEnt)
                        g_pBoxVar[m_iEntid] = 0;

                    remove_entity(pEnt);
                    client_print(id, print_center, "%L", id, "MODE_DEV_SUCCESS_1", "SOLID_BBOX");
                }
                else client_print(id, print_center, "%L", id, "MODE_DEV_FAILED_1");
            }
            else if (is_valid_ent(g_pBoxVar[m_iEntid]))
            {
                pEnt = g_pBoxVar[m_iEntid];
                new Float:v_absmins[coord_s], Float:v_absmaxs[coord_s], Float:e_absmin[coord_s], Float:e_absmax[coord_s];

                entity_get_vector(id, EV_VEC_absmin, v_absmins);
                entity_get_vector(id, EV_VEC_absmax, v_absmaxs);

                v_absmins[x] += 1.0;
                v_absmins[y] += 1.0;
                v_absmins[z] += 3.0;

                v_absmaxs[x] -= 1.0;
                v_absmaxs[y] -= 1.0;
                v_absmaxs[z] -= 17.0;

                entity_get_vector(pEnt, EV_VEC_absmin, e_absmin);
                entity_get_vector(pEnt, EV_VEC_absmax, e_absmax);

                if (VectorDT(e_absmin, e_absmax, v_absmins, v_absmaxs))
                {
                    --g_pBoxVar[m_iBox];
                    g_pBoxVar[m_iEntid] = 0;
                    client_print(id, print_center, "%L", id, "MODE_DEV_SUCCESS_1", (entity_get_int(pEnt, EV_INT_solid) == SOLID_NOT) ? "SOLID_NOT" : "SOLID_BBOX");
                    remove_entity(pEnt);
                }
            }
            else client_print(id, print_center, "%L", id, "MODE_DEV_FAILED_1");

            if (!g_pBoxVar[m_iEntid])
            {
                DisableHamForward(g_pForwardThink);
            }
        }
        case 2:
        {
            if (is_valid_ent(g_pBoxVar[m_iEntid]))
            {
                entity_set_int(g_pBoxVar[m_iEntid], EV_INT_solid, SOLID_BBOX);
                entity_set_vector(g_pBoxVar[m_iEntid], EV_VEC_rendercolor, Vector(0.0, 0.0, 0.0));
                entity_set_size(g_pBoxVar[m_iEntid], g_pBoxVector[m_fMins], g_pBoxVector[m_fMaxs]);
                entity_set_float(g_pBoxVar[m_iEntid], EV_FL_nextthink, 0.0);

                g_pBoxVar[m_iEntid] = 0;
                g_pBoxVar[m_fScale] = _:0.250;

                g_pBoxVector[m_fMaxs][x] = 32.0;
                g_pBoxVector[m_fMaxs][y] = 32.0;
                g_pBoxVector[m_fMaxs][z] = 32.0;

                g_pBoxVector[m_fMins][x] = -32.0;
                g_pBoxVector[m_fMins][y] = -32.0;
                g_pBoxVector[m_fMins][z] = -32.0;

                g_pBoxVector[m_fOrigin][x] = 0.0;
                g_pBoxVector[m_fOrigin][y] = 0.0;
                g_pBoxVector[m_fOrigin][z] = 0.0;

                g_pBoxVector[m_fAngles][x] = 0.0;
                g_pBoxVector[m_fAngles][y] = 0.0;
                g_pBoxVector[m_fAngles][z] = 0.0;

                DisableHamForward(g_pForwardThink);
                client_print(id, print_center, "%L", id, "MODE_DEV_SUCCESS_4");
            }
            else
            {
                new pEnt,body;
                get_user_aiming(id, pEnt, body);

                if (is_valid_ent(pEnt))
                {
                    new szClassname[32];
                    entity_get_string(pEnt, EV_SZ_classname, szClassname, charsmax(szClassname));
                    if (!strcmp(szClassname, CLASSNAME_WALL))
                    {
                        g_pBoxVar[m_iEntid] = pEnt;

                        entity_get_vector(pEnt, EV_VEC_mins, g_pBoxVector[m_fMins]);
                        entity_get_vector(pEnt, EV_VEC_maxs, g_pBoxVector[m_fMaxs]);

                        entity_get_vector(pEnt, EV_VEC_origin, g_pBoxVector[m_fOrigin]);
                        entity_get_vector(pEnt, EV_VEC_angles, g_pBoxVector[m_fAngles]);

                        g_pBoxVar[m_fScale] = _:(entity_get_float(pEnt, EV_FL_scale));

                        EnableHamForward(g_pForwardThink);
                        entity_set_int(pEnt, EV_INT_solid, SOLID_NOT);
                        entity_set_float(pEnt, EV_FL_nextthink, get_gametime() + 0.1);
                        entity_set_vector(pEnt, EV_VEC_rendercolor, Vector(255.0, 100.0, 100.0));
                        entity_set_size(pEnt, g_pBoxVector[m_fMins], g_pBoxVector[m_fMaxs]);
                        client_print(id, print_center, "%L", id, "MODE_DEV_SUCCESS_5");
                    }
                    else client_print(id, print_center, "%L", id, "MODE_DEV_FAILED_1");
                }
                else client_print(id, print_center, "%L", id, "MODE_DEV_FAILED_1");
            }
        }
        case 3:
        {
            if (!g_pBoxVar[m_iEntid])
            {
                client_print(id, print_center, "%L", id, "MODE_DEV_FAILED_4");
                return Menu_MainEdit(id);
            }

            return showPropertiesMenu(id);
        }
        case 4:
        {
            return Menu_Settings(id);
        }
        case 5:
        {
            if (g_pBoxVar[m_iEntid] > 0)
            {
                client_print(id, print_center, "%L", id, "MODE_DEV_FAILED_5");
                return Menu_MainEdit(id);
            }

            new pEnt, dummy;
            get_user_aiming(id, pEnt, dummy);

            if (is_valid_ent(pEnt))
            {
                new szClassname[32];
                entity_get_string(pEnt, EV_SZ_classname, szClassname, charsmax(szClassname));
                if (!strcmp(szClassname, CLASSNAME_WALL))
                {
                    if (g_pBoxVar[m_iCopy] == pEnt)
                    {
                        client_print(id, print_center, "%L", id, "MODE_DEV_FAILED_2");
                        return Menu_MainEdit(id);
                    }

                    g_pBoxVar[m_iCopy] = pEnt;
                    client_print(id, print_center, "%L", id, "MODE_DEV_SUCCESS_2");
                }
                else client_print(id, print_center, "%L", id, "MODE_DEV_FAILED_1");
            }
            else client_print(id, print_center, "%L", id, "MODE_DEV_FAILED_1");
        }
        case 6:
        {
            if (g_pBoxVar[m_iEntid] > 0)
            {
                client_print(id, print_center, "%L", id, "MODE_DEV_FAILED_5");
                return Menu_MainEdit(id);
            }

            if (!is_valid_ent(g_pBoxVar[m_iCopy]))
            {
                client_print(id, print_center, "%L", id, "MODE_DEV_FAILED_3");
                return Menu_MainEdit(id);
            }

            new Float:p_origin[coord_s], pEnt = CreateBox();
            entity_get_vector(id, EV_VEC_origin, p_origin);

            ++g_pBoxVar[m_iBox];
            g_pBoxVar[m_iEntid] = pEnt;
            p_origin[z] += 32.0;

            entity_get_vector(g_pBoxVar[m_iCopy], EV_VEC_mins, g_pBoxVector[m_fMins]);
            entity_get_vector(g_pBoxVar[m_iCopy], EV_VEC_maxs, g_pBoxVector[m_fMaxs]);
            entity_get_vector(g_pBoxVar[m_iCopy], EV_VEC_angles, g_pBoxVector[m_fAngles]);

            g_pBoxVar[m_fScale] = _:(entity_get_float(g_pBoxVar[m_iCopy], EV_FL_scale));
            g_pBoxVar[m_iSprite] = floatround(entity_get_float(g_pBoxVar[m_iCopy], EV_FL_frame));

            entity_set_vector(pEnt, EV_VEC_origin, p_origin);
            entity_set_vector(pEnt, EV_VEC_rendercolor, Vector(255.0, 100.0, 100.0));

            entity_set_vector(pEnt, EV_VEC_mins, g_pBoxVector[m_fMins]);
            entity_set_vector(pEnt, EV_VEC_maxs, g_pBoxVector[m_fMaxs]);
            entity_set_vector(pEnt, EV_VEC_angles, g_pBoxVector[m_fAngles]);

            new iFlags = entity_get_int(g_pBoxVar[m_iCopy], EV_INT_effects);

            entity_set_int(pEnt, EV_INT_effects, iFlags);
            entity_set_float(pEnt, EV_FL_scale, g_pBoxVar[m_fScale]);
            entity_set_float(pEnt, EV_FL_frame, float(g_pBoxVar[m_iSprite]));
        }
        case 8:
        {
            if (!g_pBoxVar[m_iBox])
                client_print(id, print_center, "%L", id, "MODE_DEV_FAILED_4");

            else if (g_pBoxVar[m_iEntid])
                client_print(id, print_center, "%L", id, "MODE_DEV_FAILED_5");

            else boxSave(id);
        }
        case 9:
        {
            return PLUGIN_HANDLED;
        }
    }

    return Menu_MainEdit(id);
}

stock showPropertiesMenu(id)
{
    new szBuffer[512];
    new iLen = formatex(szBuffer, charsmax(szBuffer), "%L", id, "MODE_DEV_MENU_TITLE");

    switch (g_pBoxVar[m_iSetting])
    {
        case 0:
        {
            new Float:iSize = (g_pBoxVar[m_iType] == 0) ? 10.0 : (g_pBoxVar[m_iType] == 1) ? 5.0 : (g_pBoxVar[m_iType] == 2) ? 1.0 : 0.1;
            iLen += formatex(szBuffer[iLen], charsmax(szBuffer) - iLen, "%L", id,"MODE_DEV_MENU_COORD",
                g_pBoxVector[m_fOrigin][x],
                g_pBoxVector[m_fOrigin][y],
                g_pBoxVector[m_fOrigin][z], iSize);
        }
        case 1:
        {
            new Float:iSize = (g_pBoxVar[m_iType] == 0) ? 45.0 : (g_pBoxVar[m_iType] == 1) ? 15.0 : (g_pBoxVar[m_iType] == 2) ? 1.0 : 0.5;
            iLen += formatex(szBuffer[iLen], charsmax(szBuffer) - iLen, "%L", id,"MODE_DEV_MENU_ANGLES",
                g_pBoxVector[m_fAngles][x],
                g_pBoxVector[m_fAngles][y],
                g_pBoxVector[m_fAngles][z], iSize);
        }
        case 2,3:
        {
            new Float:iSize = (g_pBoxVar[m_iType] == 0) ? 10.0 : (g_pBoxVar[m_iType] == 1) ? 5.0 : (g_pBoxVar[m_iType] == 2) ? 1.0 : 0.5;
            iLen += formatex(szBuffer[iLen], charsmax(szBuffer) - iLen, "%L", id,"MODE_DEV_MENU_SIZE",
                g_pBoxVector[m_fMins][x],
                g_pBoxVector[m_fMins][y],
                g_pBoxVector[m_fMins][z],
                g_pBoxVector[m_fMaxs][x],
                g_pBoxVector[m_fMaxs][y],
                g_pBoxVector[m_fMaxs][z], iSize);
        }
        case 4:
        {
            new Float:iSize = ((g_pBoxVar[m_iType] == 0) ? 0.5 : (g_pBoxVar[m_iType] == 1) ? 0.1 : (g_pBoxVar[m_iType] == 2) ? 0.0101 : 0.0051);
            switch (g_pBoxVar[m_iType])
            {
                case 0,1:
                    iLen += formatex(szBuffer[iLen], charsmax(szBuffer) - iLen, "%L", id,"MODE_DEV_MENU_SCALE_1",
                    g_pBoxVar[m_fScale], iSize, iSize, iSize);
                case 2:
                    iLen += formatex(szBuffer[iLen], charsmax(szBuffer) - iLen, "%L", id,"MODE_DEV_MENU_SCALE_2",
                    g_pBoxVar[m_fScale], iSize, iSize, iSize);

                case 3:
                    iLen += formatex(szBuffer[iLen], charsmax(szBuffer) - iLen, "%L", id,"MODE_DEV_MENU_SCALE_3",
                    g_pBoxVar[m_fScale], iSize, iSize, iSize);
            }
        }
    }

    formatex(szBuffer[iLen], charsmax(szBuffer) - iLen, "%L", id, "MODE_DEV_MENU_ADDON", id,
    (g_pBoxVar[m_iSetting] == 0) ?
        "MODE_DEV_COORD"
            :
        (g_pBoxVar[m_iSetting] == 1) ?
            "MODE_DEV_ANGLES"
                :
            (g_pBoxVar[m_iSetting] == 2 && g_pServerVar[m_bAdvanced]) ?
                "MODE_DEV_MINS"
                    :
                (g_pBoxVar[m_iSetting] == 3 && g_pServerVar[m_bAdvanced]) ?
                    "MODE_DEV_MAXS"
                        :
                    (g_pBoxVar[m_iSetting] == 3) ?
                        "MODE_DEV_SIZE"
                            :
                        "MODE_DEV_SPRITE",
    id,(g_pBoxVar[m_iSprite] == 0) ?
        "MODE_DEV_TITLE"
            :
        (g_pBoxVar[m_iSprite] == 1) ?
            "MODE_DEV_WALL"
                :
            "MODE_DEV_NULL"
    );

    return show_menu(id, (g_pBoxVar[m_iSetting] < 4) ? 0x3FF : 0x3C3, szBuffer, -1, "Properties Menu");
}

public Properties_Handler(id, key)
{
    if (key == 9)
    {
        return Menu_MainEdit(id);
    }

    entity_get_vector(g_pBoxVar[m_iEntid], EV_VEC_origin, g_pBoxVector[m_fOrigin]);
    entity_get_vector(g_pBoxVar[m_iEntid], EV_VEC_angles, g_pBoxVector[m_fAngles]);
    entity_get_vector(g_pBoxVar[m_iEntid], EV_VEC_maxs, g_pBoxVector[m_fMaxs]);
    g_pBoxVar[m_fScale] = _:(entity_get_float(g_pBoxVar[m_iEntid], EV_FL_scale));

    switch (g_pBoxVar[m_iSetting])
    {
        case 0:
        {
            new Float:iSize = (g_pBoxVar[m_iType] == 0) ? 10.0 : (g_pBoxVar[m_iType] == 1) ? 5.0 : (g_pBoxVar[m_iType] == 2) ? 1.0 : 0.1;

            switch (key)
            {
                case 0:    g_pBoxVector[m_fOrigin][x] += iSize;
                case 1:    g_pBoxVector[m_fOrigin][y] += iSize;
                case 2:    g_pBoxVector[m_fOrigin][z] += iSize;
                case 3:    g_pBoxVector[m_fOrigin][x] -= iSize;
                case 4:    g_pBoxVector[m_fOrigin][y] -= iSize;
                case 5:    g_pBoxVector[m_fOrigin][z] -= iSize;
                case 6:
                {
                    if (++g_pBoxVar[m_iType] > 3)
                        g_pBoxVar[m_iType] = 0;
                }
                case 7:
                {
                    if (++g_pBoxVar[m_iSetting] > 4)
                        g_pBoxVar[m_iSetting] = 0;

                    g_pBoxVar[m_iSetting] = (g_pBoxVar[m_iSprite] > 1 && g_pBoxVar[m_iSetting] == 1) ? 2 + ((g_pServerVar[m_bAdvanced] == false) ? 1 : 0) : g_pBoxVar[m_iSetting];
                }
            }
        }
        case 1:
        {
            new Float:iSize = (g_pBoxVar[m_iType] == 0) ? 45.0 : (g_pBoxVar[m_iType] == 1) ? 15.0 : (g_pBoxVar[m_iType] == 2) ? 1.0 : 0.5;

            switch (key)
            {
                case 0: g_pBoxVector[m_fAngles][x] += iSize;
                case 1: g_pBoxVector[m_fAngles][y] += iSize;
                case 2: g_pBoxVector[m_fAngles][z] += iSize;
                case 3: g_pBoxVector[m_fAngles][x] -= iSize;
                case 4: g_pBoxVector[m_fAngles][y] -= iSize;
                case 5: g_pBoxVector[m_fAngles][z] -= iSize;
                case 6:
                {
                    if (++g_pBoxVar[m_iType] > 3)
                        g_pBoxVar[m_iType] = 0;
                }
                case 7:
                {
                    if (++g_pBoxVar[m_iSetting] > 4)
                        g_pBoxVar[m_iSetting] = 0;

                    g_pBoxVar[m_iSetting] = (g_pBoxVar[m_iSetting] == 2 && g_pServerVar[m_bAdvanced] == false) ? 3 : g_pBoxVar[m_iSetting];
                }
            }
        }
        case 2:
        {
            new Float:iSize = (g_pBoxVar[m_iType] == 0) ? 10.0 : (g_pBoxVar[m_iType] == 1) ? 5.0 : (g_pBoxVar[m_iType] == 2) ? 1.0 : 0.5;

            switch (key)
            {
                case 0: g_pBoxVector[m_fMins][x] -= iSize;
                case 1: g_pBoxVector[m_fMins][y] -= iSize;
                case 2: g_pBoxVector[m_fMins][z] -= iSize;
                case 3: g_pBoxVector[m_fMins][x] += iSize;
                case 4: g_pBoxVector[m_fMins][y] += iSize;
                case 5: g_pBoxVector[m_fMins][z] += iSize;
                case 6:
                {
                    if (++g_pBoxVar[m_iType] > 3)
                        g_pBoxVar[m_iType] = 0;
                }
                case 7:
                {
                    if (++g_pBoxVar[m_iSetting] > 4)
                        g_pBoxVar[m_iSetting] = 0;
                }
            }
        }
        case 3:
        {
            new Float:iSize = (g_pBoxVar[m_iType] == 0) ? 10.0 : (g_pBoxVar[m_iType] == 1) ? 5.0 : (g_pBoxVar[m_iType] == 2) ? 1.0 : 0.5;

            switch (key)
            {
                case 0: g_pBoxVector[m_fMaxs][x] += iSize;
                case 1: g_pBoxVector[m_fMaxs][y] += iSize;
                case 2: g_pBoxVector[m_fMaxs][z] += iSize;
                case 3: g_pBoxVector[m_fMaxs][x] -= iSize;
                case 4: g_pBoxVector[m_fMaxs][y] -= iSize;
                case 5: g_pBoxVector[m_fMaxs][z] -= iSize;
                case 6:
                {
                    if (++g_pBoxVar[m_iType] > 3)
                        g_pBoxVar[m_iType] = 0;
                }
                case 7:
                {
                    if (++g_pBoxVar[m_iSetting] > 4)
                        g_pBoxVar[m_iSetting] = 0;

                    g_pBoxVar[m_iSetting] = (g_pBoxVar[m_iSprite] > 1 && g_pBoxVar[m_iSetting] == 4) ? 0 : g_pBoxVar[m_iSetting];
                }
            }
        }
        case 4:
        {
            new Float:iSize = (g_pBoxVar[m_iType] == 0) ? 0.5 : (g_pBoxVar[m_iType] == 1) ? 0.1 : (g_pBoxVar[m_iType] == 2) ? 0.0101 : 0.0051;

            if (iSize > g_pBoxVar[m_fScale])
            {
                if (++g_pBoxVar[m_iType] > 3)
                    g_pBoxVar[m_iType] = 0;

                iSize = (g_pBoxVar[m_iType] == 0) ? 0.5 : (g_pBoxVar[m_iType] == 1) ? 0.1 : (g_pBoxVar[m_iType] == 2) ? 0.0101 : 0.0051;
            }
            switch (key)
            {
                case 0:    g_pBoxVar[m_fScale] += iSize;
                case 1: g_pBoxVar[m_fScale] -= iSize;
                case 6:
                {
                    if (++g_pBoxVar[m_iType] > 3)
                        g_pBoxVar[m_iType] = 0;
                }
                case 7:
                {
                    if (++g_pBoxVar[m_iSetting] > 4)
                        g_pBoxVar[m_iSetting] = 0;
                }
            }
        }
    }
    switch (key)
    {
        case 8:
        {
            if (is_valid_ent(g_pBoxVar[m_iEntid]))
            {
                if (++g_pBoxVar[m_iSprite] > 2)
                    g_pBoxVar[m_iSprite] = 0;

                new iFlags = entity_get_int(g_pBoxVar[m_iEntid], EV_INT_effects);

                if (g_pBoxVar[m_iSprite] > 1)
                    entity_set_int(g_pBoxVar[m_iEntid], EV_INT_effects, iFlags | EF_NODRAW);

                else if (iFlags & EF_NODRAW)
                    entity_set_int(g_pBoxVar[m_iEntid], EV_INT_effects, iFlags &~ EF_NODRAW);

                entity_set_float(g_pBoxVar[m_iEntid], EV_FL_frame, float(g_pBoxVar[m_iSprite]));
            }
        }
    }
    if (g_pBoxVar[m_fScale] < 0.0051)
        g_pBoxVar[m_fScale] = _:0.0051;

    if (g_pServerVar[m_bAdvanced])
    {
        if (g_pBoxVector[m_fMins][x] > 0.0)
            g_pBoxVector[m_fMins][x] = 0.0;

        else if (g_pBoxVector[m_fMins][y] > 0.0)
            g_pBoxVector[m_fMins][y] = 0.0;

        else if (g_pBoxVector[m_fMins][z] > 0.0)
            g_pBoxVector[m_fMins][z] = 0.0;

        if (g_pBoxVector[m_fMaxs][x] < 0.0)
            g_pBoxVector[m_fMaxs][x] = 0.0;

        else if (g_pBoxVector[m_fMaxs][y] < 0.0)
            g_pBoxVector[m_fMaxs][y] = 0.0;

        else if (g_pBoxVector[m_fMaxs][z] < 0.0)
            g_pBoxVector[m_fMaxs][z] = 0.0;

    }
    else
    {
        if (g_pBoxVector[m_fMaxs][x] < 1.0)
            g_pBoxVector[m_fMaxs][x] = 1.0;

        else if (g_pBoxVector[m_fMaxs][y] < 1.0)
            g_pBoxVector[m_fMaxs][y] = 1.0;

        else if (g_pBoxVector[m_fMaxs][z] < 1.0)
            g_pBoxVector[m_fMaxs][z] = 1.0;
    }

    if (g_pBoxVector[m_fAngles][x] >= 360.0 || g_pBoxVector[m_fAngles][x] <= -360.0)
        g_pBoxVector[m_fAngles][x] = 0.0;

    if (g_pBoxVector[m_fAngles][y] >= 360.0 || g_pBoxVector[m_fAngles][y] <= -360.0)
        g_pBoxVector[m_fAngles][y] = 0.0;

    if (g_pBoxVector[m_fAngles][z] >= 360.0 || g_pBoxVector[m_fAngles][z] <= -360.0)
        g_pBoxVector[m_fAngles][z] = 0.0;

    if (!g_pServerVar[m_bAdvanced])
    {
        g_pBoxVector[m_fMins][x] = -g_pBoxVector[m_fMaxs][x];
        g_pBoxVector[m_fMins][y] = -g_pBoxVector[m_fMaxs][y];
        g_pBoxVector[m_fMins][z] = -g_pBoxVector[m_fMaxs][z];
    }

    entity_set_float(g_pBoxVar[m_iEntid], EV_FL_scale, g_pBoxVar[m_fScale]);
    entity_set_vector(g_pBoxVar[m_iEntid], EV_VEC_angles, g_pBoxVector[m_fAngles]);
    entity_set_float(g_pBoxVar[m_iEntid], EV_FL_nextthink, get_gametime() + 0.1);
    entity_set_int(g_pBoxVar[m_iEntid], EV_INT_solid, g_pBoxVar[m_iSolid] ? SOLID_BBOX : SOLID_NOT);

    entity_set_size(g_pBoxVar[m_iEntid], g_pBoxVector[m_fMins], g_pBoxVector[m_fMaxs]);
    entity_set_vector(g_pBoxVar[m_iEntid], EV_VEC_origin, g_pBoxVector[m_fOrigin]);

    return showPropertiesMenu(id);
}

stock Menu_Settings(id)
{
    new szMenu[512];
    formatex(szMenu, charsmax(szMenu), "%L", id, "MODE_DEV_MENU_CONFIG",
        id, (g_pBoxVar[m_iEntid] == 0) ? "MODE_DEV_SOLID_D" : "MODE_DEV_SOLID",
        g_pBoxVar[m_iSolid] ? "SOLID_BBOX" : "SOLID_NOT",
        (g_pBoxVar[m_iBox] == 0) ? "\\d" : "\\w",
        id, (g_pServerVar[m_iStatus] == map_close) ? "MODE_DEV_HIDE" : "MODE_DEV_SHOW",
        g_pServerVar[m_iOnline_Low], g_pServerVar[m_iOnline_High],
        id, entity_get_int(id, EV_INT_movetype) == MOVETYPE_NOCLIP ? "MODE_DEV_YES" : "MODE_DEV_NO",
        id, g_pServerVar[m_bAdvanced] ? "MODE_DEV_YES" : "MODE_DEV_NO");

    return show_menu(id, 0x23F, szMenu, -1, "Settings Menu");
}

public Settings_Handler(id, key)
{
    switch (key)
    {
        case 0:
        {
            if (!g_pBoxVar[m_iEntid])
            {
                client_print(id, print_center, "%L", id, "MODE_DEV_FAILED_4");
                return Menu_Settings(id);
            }

            entity_set_float(g_pBoxVar[m_iEntid], EV_FL_nextthink, get_gametime() + 0.1);
            entity_set_int(g_pBoxVar[m_iEntid], EV_INT_solid, (g_pBoxVar[m_iSolid] ^= 1) ? SOLID_BBOX : SOLID_NOT);
            entity_set_size(g_pBoxVar[m_iEntid], g_pBoxVector[m_fMins], g_pBoxVector[m_fMaxs]);

            client_print(id,print_center, "%L", id, "MODE_DEV_SUCCESS_6", g_pBoxVar[m_iSolid] ? "SOLID_BBOX" : "SOLID_NOT");
        }
        case 1:
        {
            if (g_pBoxVar[m_iBox])
                DrawBoxDev((g_pServerVar[m_iStatus] ^= map_close));
        }
        case 2:
        {
            if (++g_pServerVar[m_iOnline_Low] > g_pServerVar[m_iOnline_High])
                g_pServerVar[m_iOnline_Low] = 0;
        }
        case 3:
        {
            if (++g_pServerVar[m_iOnline_High] > g_pServerVar[m_iMaxpl])
                g_pServerVar[m_iOnline_High] = g_pServerVar[m_iOnline_Low];
        }
        case 4:
        {
            if (is_user_alive(id))
            {
                entity_set_int(id, EV_INT_movetype, (entity_get_int(id, EV_INT_movetype) == MOVETYPE_NOCLIP) ? MOVETYPE_WALK : MOVETYPE_NOCLIP);
            }
        }
         case 5: g_pServerVar[m_bAdvanced] ^= true;
        case 9:    return Menu_MainEdit(id);
    }

    return Menu_Settings(id);
}

stock getChangeleft(id, time, output[], lenght)
{
    if (time > 0)
    {
        new minute = 0, second = 0;

        second = time;

        minute = second / 60;
        second -= (minute * 60);

        new szBuffer[2][33], ending[22], num = -1;

        if (minute > 0)
        {
            getEnding(minute, "MODE_MINUT", "MODE_MINUTE", "MODE_MINUTES", 21, ending);
            formatex(szBuffer[++num], charsmax(szBuffer[]), "%i %L", minute, id, ending);
        }
        if (second > 0)
        {
            getEnding(second, "MODE_SECOND", "MODE_SECUNDE", "MODE_SECONDS", 21, ending);
            formatex(szBuffer[++num], charsmax(szBuffer[]), "%i %L", second, id, ending);
        }
        switch (num)
        {
        case 0: formatex(output, lenght, "%s", szBuffer[0]);
        case 1: formatex(output, lenght, "%L", id, "MODE_AND", szBuffer[0], szBuffer[1]);
        }
    }
    else formatex(output, lenght, "0 %L", id, "MODE_SECOND");
}

stock getEnding(num, const a[], const b[], const c[], lenght, output[])
{
    new num100 = num % 100, num10 = num % 10, szBuffer[22];
    if (num100 >= 5 && num100 <= 20 || num10 == 0 || num10 >= 5 && num10 <= 9)
        copy(szBuffer, 21, a);

    else if (num10 == 1)
        copy(szBuffer, 21, b);

    else if (num10 >= 2 && num10 <= 4)
        copy(szBuffer, 21, c);

    return formatex(output, lenght, "%s", szBuffer);
}

stock boxSave(id)
{
    delete_file(g_pServerVar[m_szFile]);

    new szBuffer[1024], Float:frame, Float:p_origin[coord_s], Float:p_angles[coord_s], Float:p_mins[coord_s], Float:p_maxs[coord_s], Float:p_scale, p_sprite, count, pEnt = -1;
    if (g_pServerVar[m_iOnline_High] != 0)
        formatex(szBuffer, charsmax(szBuffer),"ONLINE=%d,%d", g_pServerVar[m_iOnline_Low], g_pServerVar[m_iOnline_High]);
    else
        formatex(szBuffer, charsmax(szBuffer),"ONLINE=%d", g_pServerVar[m_iOnline_Low]);

    write_file(g_pServerVar[m_szFile], szBuffer, 0);

    while ((pEnt = find_ent_by_class(pEnt, CLASSNAME_WALL)))
    {
        if (g_pBoxVar[m_iEntid] == pEnt)
            continue;

        entity_get_vector(pEnt, EV_VEC_origin, p_origin);
        entity_get_vector(pEnt, EV_VEC_angles, p_angles);
        entity_get_vector(pEnt, EV_VEC_mins, p_mins);
        entity_get_vector(pEnt, EV_VEC_maxs, p_maxs);

        p_scale = entity_get_float(pEnt, EV_FL_scale);
        frame = entity_get_float(pEnt, EV_FL_frame);

        p_sprite = floatround(frame);

        formatex(szBuffer, charsmax(szBuffer),
            "\"%f\" \"%f\" \"%f\" \"%f\" \"%f\" \"%f\" \"%f\" \"%f\" \"%f\" \"%f\" \"%f\" \"%f\" \"%f\" \"%d\"",
            p_origin[x], p_origin[y], p_origin[z],
            p_angles[x], p_angles[y], p_angles[z],
            p_mins[x], p_mins[y], p_mins[z],
            p_maxs[x], p_maxs[y], p_maxs[z],
            p_scale,
            p_sprite
        );

        write_file(g_pServerVar[m_szFile], szBuffer, -1);
        ++count;
    }

    if (id && count > 0)
    {
        client_print(id,print_center, "%L", id, "MODE_DEV_SUCCESS_3");
    }
}

stock bool:LoadBox()
{
    new szBuffer[2048], szKey[32], szValue[32], p_origin[coord_s][6], p_angles[coord_s][6], p_mins[coord_s][6], p_maxs[coord_s][6], p_scale[6], p_sprite[6];
    new file = fopen(g_pServerVar[m_szFile], "r");
    if (!file)
    {
        return false;
    }

    while (!feof(file))
    {
        fgets(file, szBuffer, charsmax(szBuffer));

        if (szBuffer[0] == EOS || szBuffer[0] == ';')
            continue;

        trim(szBuffer);
        strtok(szBuffer, szKey, charsmax(szKey), szValue, charsmax(szValue), '=');

        if (!strcmp(szKey, "ONLINE"))
        {
            new szOnlineLow[5], szOnlineHigh[5];
            strtok(szValue, szOnlineLow, charsmax(szOnlineLow), szOnlineHigh, charsmax(szOnlineHigh), ',');

            g_pServerVar[m_iOnline_Low] = str_to_num(szOnlineLow);
            g_pServerVar[m_iOnline_High] = str_to_num(szOnlineHigh);

            if (g_pServerVar[m_iOnline_High] == 0)
                g_pServerVar[m_iOnline_High] = g_pServerVar[m_iOnline_Low];

            if (g_pServerVar[m_iOnline_Low] > g_pServerVar[m_iOnline_High])
                g_pServerVar[m_iOnline_Low] = g_pServerVar[m_iOnline_High];

            continue;
        }

        // parse data on line
        parse(szBuffer,
            p_origin[x],    5, p_origin[y],    5, p_origin[z],    5,    // origin
            p_angles[x],    5, p_angles[y],    5, p_angles[z],    5,    // angles
            p_mins[x],    5, p_mins[y],    5, p_mins[z],    5,    // mins
            p_maxs[x],    5, p_maxs[y],    5, p_maxs[z],    5,    // maxs
            p_scale,    5,                    // scale
            p_sprite,    5);                    // sprite

        g_pBoxVector[m_fOrigin][x] = str_to_float(p_origin[x]);
        g_pBoxVector[m_fOrigin][y] = str_to_float(p_origin[y]);
        g_pBoxVector[m_fOrigin][z] = str_to_float(p_origin[z]);

        g_pBoxVector[m_fAngles][x] = str_to_float(p_angles[x]);
        g_pBoxVector[m_fAngles][y] = str_to_float(p_angles[y]);
        g_pBoxVector[m_fAngles][z] = str_to_float(p_angles[z]);

        g_pBoxVector[m_fMins][x] = str_to_float(p_mins[x]);
        g_pBoxVector[m_fMins][y] = str_to_float(p_mins[y]);
        g_pBoxVector[m_fMins][z] = str_to_float(p_mins[z]);

        g_pBoxVector[m_fMaxs][x] = str_to_float(p_maxs[x]);
        g_pBoxVector[m_fMaxs][y] = str_to_float(p_maxs[y]);
        g_pBoxVector[m_fMaxs][z] = str_to_float(p_maxs[z]);

        g_pBoxVar[m_fScale] = _:(str_to_float(p_scale));
        g_pBoxVar[m_iSprite] = str_to_num(p_sprite);

        CreateBox(true);
        ++g_pBoxVar[m_iBox];
    }

    fclose(file);
    return g_pBoxVar[m_iBox] > 0 ? true : false;
}

stock UTIL__GetActivePlayers()
{
    new iNum = 0;
    for (new nIndex = 1; nIndex <= g_pServerVar[m_iMaxpl]; ++nIndex)
    {
        if (!is_user_connected(nIndex) || !(1 <= get_member(nIndex, m_iTeam) <= 2))
            continue;

        ++iNum;
    }

    return iNum;
}

stock DrawBoxDev(status_s:st)
{
    new pEnt = -1;
    while ((pEnt = find_ent_by_class(pEnt, CLASSNAME_WALL)))
    {
        entity_set_int(pEnt, EV_INT_solid, st == map_close ? SOLID_BBOX : SOLID_NOT);

        if (g_pBoxVar[m_iEntid] == pEnt || entity_get_float(pEnt, EV_FL_frame) > 1.0)
            continue;

        new iFlags = entity_get_int(pEnt, EV_INT_effects);
        entity_set_int(pEnt, EV_INT_effects, st == map_close ? (iFlags &~ EF_NODRAW) : (iFlags | EF_NODRAW));
    }
}

stock DrawBox(status_s:st, bool:bShow = true)
{
    new pEnt = -1;
    while ((pEnt = find_ent_by_class(pEnt, CLASSNAME_WALL)))
    {
        entity_set_int(pEnt, EV_INT_solid, (st == map_close) ? SOLID_BBOX : SOLID_NOT);

        if (entity_get_float(pEnt, EV_FL_frame) > 1)
            continue;

        new iFlags = entity_get_int(pEnt, EV_INT_effects);
        entity_set_int(pEnt, EV_INT_effects, (st == map_close) ? iFlags &~ EF_NODRAW : iFlags | EF_NODRAW);
    }

    if (g_pServerVar[m_bInitialized])
    {
        UTIL__ChangeNameOfMap(st);
    }

    new arg[2];
    arg[0] = _:st;

    switch (st)
    {
        case map_open:
        {
            g_pServerVar[m_iAll] = 0;
            arrayset(g_pServerVar[m_iVote], 0, g_pServerVar[m_iMaxpl]);

            if (bShow)
            {
                g_pServerVar[m_iAll] = 0;
                set_task(0.7, "Task_NotifyStatusMap", TASK_MODE_NOTIFY, arg, sizeof(arg));
            }
        }
        case map_close:
        {
            if (bShow)
            {
                g_pServerVar[m_iAll] = 0;
                set_task(0.7, "Task_NotifyStatusMap", TASK_MODE_NOTIFY, arg, sizeof(arg));
            }
        }
    }

    UTIL__MoveSpawnSpot(st);
    g_pServerVar[m_iStatusLast] = st;
}

public Task_NotifyStatusMap(arg[])
{
    if (arg[0] == any:map_open)
    {
        set_dhudmessage(COLOR_MAP_OPEN, MESSAGE_MAP_STATUS, 2, 0.1, 2.0, 0.05, 0.2);
        show_dhudmessage(0, "%L", LANG_PLAYER, "MODE_MESSAGE_MAP_OPENED");
    }
    else
    {
        set_dhudmessage(COLOR_MAP_CLOSE, MESSAGE_MAP_STATUS, 2, 0.1, 2.0, 0.05, 0.2);
        show_dhudmessage(0, "%L", LANG_PLAYER, "MODE_MESSAGE_MAP_CLOSED");
    }
}

stock CreateBox(bool:bParse = false)
{
    new pEnt = create_entity(CLASSNAME_WALL);

    if (!pEnt)
    {
        return 0;
    }

    entity_set_int(pEnt, EV_INT_movetype, MOVETYPE_FLY);
    entity_set_int(pEnt, EV_INT_impulse, ID_KEY_WALL);

    if (bParse)
    {
        entity_set_model(pEnt, SPRITE_WALL);
        entity_set_size(pEnt, g_pBoxVector[m_fMins], g_pBoxVector[m_fMaxs]);

        entity_set_float(pEnt, EV_FL_scale, g_pBoxVar[m_fScale]);
        entity_set_vector(pEnt, EV_VEC_angles, g_pBoxVector[m_fAngles]);
        entity_set_int(pEnt, EV_INT_solid, SOLID_BBOX);

        if (g_pBoxVar[m_iSprite] > 1)
            entity_set_int(pEnt, EV_INT_effects, entity_get_int(pEnt, EV_INT_effects) | EF_NODRAW);

        entity_set_float(pEnt, EV_FL_frame, float(g_pBoxVar[m_iSprite]));
        entity_set_int(pEnt, EV_INT_rendermode, kRenderTransAdd);
        entity_set_float(pEnt, EV_FL_renderamt, 175.0);
        entity_set_vector(pEnt, EV_VEC_origin, g_pBoxVector[m_fOrigin]);
    }
    else
    {
        g_pBoxVector[m_fAngles][x] = 0.0;
        g_pBoxVector[m_fAngles][y] = 0.0;
        g_pBoxVector[m_fAngles][z] = 0.0;

        g_pBoxVector[m_fMaxs][x] = 32.0;
        g_pBoxVector[m_fMaxs][y] = 32.0;
        g_pBoxVector[m_fMaxs][z] = 32.0;

        g_pBoxVector[m_fMins][x] = -32.0;
        g_pBoxVector[m_fMins][y] = -32.0;
        g_pBoxVector[m_fMins][z] = -32.0;

        g_pBoxVar[m_fScale] = _:0.250;

        entity_set_model(pEnt, SPRITE_WALL);
        entity_set_size(pEnt, g_pBoxVector[m_fMins], g_pBoxVector[m_fMaxs]);

        entity_set_float(pEnt, EV_FL_scale, g_pBoxVar[m_fScale]);
        entity_set_vector(pEnt, EV_VEC_angles, g_pBoxVector[m_fAngles]);
        entity_set_int(pEnt, EV_INT_solid, SOLID_NOT);

        entity_set_float(pEnt, EV_FL_frame, float(g_pBoxVar[m_iSprite]));

        entity_set_int(pEnt, EV_INT_rendermode, kRenderTransAdd);
        entity_set_float(pEnt, EV_FL_renderamt, 175.0);

        entity_set_float(pEnt, EV_FL_nextthink, get_gametime() + 0.1);

        return pEnt;
    }

    return 0;
}

stock UTIL__ChangeNameOfMap(status_s:st)
{
    if (!get_pcvar_num(pcvar_mode_changemapname))
        return;

    switch (st)
    {
    // reset mapname
    case map_open:
        rh_reset_mapname();
    case map_close:
    {
        new szPrefix2x2[32];
        formatex(szPrefix2x2, charsmax(szPrefix2x2), "%s_2x2", g_pServerVar[m_szMap]);
        rh_set_mapname(szPrefix2x2);
    }
    }
}

new const Float:g_vecSpawnSpot[][coord_s] =
{
    // original spot spawn
    {-1024.0, -800.0, 176.0},
    {-1024.0, -704.0, 176.0},
    {-1024.0, -896.0, 192.0},

    {-826.0, -970.0, 200.0},
    {-726.0, -970.0, 200.0},
    {-626.0, -970.0, 200.0}
};

stock UTIL__MoveSpawnSpot(status_s:st)
{
    // If the status has not changed
    if (g_pServerVar[m_iStatusLast] == st)
        return;

    // To move the origin of the T spawn on de_dust2, which are beyond the arch.
    if (!strcmp(g_pServerVar[m_szMap], "de_dust2"))
    {
        new ent = -1;
        new direction = (st == map_open) ? -1 : 1;
        new index = (st == map_open) ? 3 : 0;

        while ((ent = find_ent_by_class(ent, "info_player_deathmatch")))
        {
            new Float:vecSpot[3];
            entity_get_vector(ent, EV_VEC_origin, vecSpot);

            for (new i = 0 + index; i < 3 + index; ++i)
            {
                if (VectorCompare(vecSpot, g_vecSpawnSpot[i]))
                {
                    entity_set_vector(ent, EV_VEC_origin, g_vecSpawnSpot[i + 3 * direction]);
                    break;
                }
            }
        }
    }
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/
 
Сообщения
59
Реакции
28
Помог
1 раз(а)
Try it like this
Код:
register_concmd("change", "CMD_ModeChange", ADMIN_VOTE, "<Смена режима Mode 2x2, Открыть/Закрыть карту>");
R [/ CODE]
 
Сообщения
59
Реакции
28
Помог
1 раз(а)
[USER = 2254] DrStrange [/ USER], вы пробовали эту опцию?
Код:
register_srvcmd("change", "CMD_ModeChange", ADMIN_VOTE, "<Смена режима Mode 2x2, Открыть/Закрыть карту>");
register_clcmd("change", "CMD_ModeChange", ADMIN_VOTE, "<Смена режима Mode 2x2, Открыть/Закрыть карту>");
 
Сообщения
213
Реакции
71
Помог
2 раз(а)
[USER = 2254] DrStrange [/ USER], вы пробовали эту опцию?
Код:
register_srvcmd("change", "CMD_ModeChange", ADMIN_VOTE, "<Смена режима Mode 2x2, Открыть/Закрыть карту>");
register_clcmd("change", "CMD_ModeChange", ADMIN_VOTE, "<Смена режима Mode 2x2, Открыть/Закрыть карту>");
Yes & that's the code, I have posted in first post.
 
Сообщения
59
Реакции
28
Помог
1 раз(а)
DrStrange, I do not like to use cmd_access, I suppose that because of it everything works badly. I was test this, if use this code, all works
Код:
if(~get_user_flags(id) & ADMIN_VOTE)
    return PLUGIN_CONTINUE;
 
Сообщения
213
Реакции
71
Помог
2 раз(а)
DrStrange, I do not like to use cmd_access, I suppose that because of it everything works badly. I was test this, if use this code, all works
Код:
if(~get_user_flags(id) & ADMIN_VOTE)
    return PLUGIN_CONTINUE;
I will try it.

By the way?
Код:
if(~get_user_flags(id) & ADMIN_VOTE)
    return PLUGIN_CONTINUE;
OR this?
Код:
if(!get_user_flags(id) & ADMIN_VOTE)
    return PLUGIN_CONTINUE;
Sorry, I'm noob in scripting.

Like this:

Код:
public CMD_ModeChange(id, level, cid)
{
    if (!get_pcvar_num(pcvar_mode_allow_change))
        return PLUGIN_CONTINUE;

    if(~get_user_flags(id) & ADMIN_VOTE)
    return PLUGIN_CONTINUE;

    if (!g_pServerVar[m_LoadBox])
    {
        client_print_color(id, DontChange, "%L %L", id, "MODE_PREFIX", id, "MODE_NOT_USED");
        return PLUGIN_HANDLED;
    }

    new szName[32];
    get_user_name(id, szName, charsmax(szName));

    if (g_pServerVar[m_iClosedIndex] != id && is_user_connected(g_pServerVar[m_iClosedIndex]))
    {
        client_print_color(id, DontChange, "%L %L", id, "MODE_PREFIX", id, "MODE_ADMIN_BUSY_CHANGE", szName);
        return PLUGIN_HANDLED;
    }

    switch (g_pServerVar[m_iBlocked])
    {
    case block_vote:
    {
        client_print_color(id, DontChange, "%L %L", id, "MODE_PREFIX", id, "MODE_VOTE");
        return PLUGIN_HANDLED;
    }
    case block_start_vote:
    {
        client_print_color(id, DontChange, "%L %L", id, "MODE_PREFIX", id, "MODE_START_VOTE");
        return PLUGIN_HANDLED;
    }
    case block_success_vote:
    {
        client_print_color(id, DontChange, "%L %L", id, "MODE_PREFIX", id, "MODE_WAIT_NEW_ROUND");
        return PLUGIN_HANDLED;
    }
    case block_admin_change:
    {
        client_print_color(id, DontChange, "%L %L", id, "MODE_PREFIX", id, "MODE_ADMIN_CHANGED", id, (g_pServerVar[m_iStatus] == map_close) ? "MODE_ADMIN_CLOSED" : "MODE_ADMIN_OPENED");
        return PLUGIN_HANDLED;
    }
    }

    g_pServerVar[m_iBlocked] = blocked_s:block_admin_change;
    g_pServerVar[m_fNext] = _:(get_gametime() + (VOTE_TIMEWAIT * 60.0));
    g_pServerVar[m_iStatus] ^= map_close;

    if (get_pcvar_num(pcvar_mode_admin_only) != 0)
    {
        g_pServerVar[m_iClosedIndex] = (g_pServerVar[m_iStatus] == map_open) ? id : 0;
    }

    new iPlayers[32], iNum, p;
    get_players(iPlayers, iNum, "ch");

    for (new a = 0; a < iNum; ++a)
    {
        p = iPlayers[a];

        if (get_user_flags(p) & ADMIN_VOTE)
        {
            client_print_color(p, DontChange + id, "%L %L", p, "MODE_PREFIX", p, "MODE_ADMIN_CHANGED_ADMINS", szName, p, (g_pServerVar[m_iStatus] == map_close) ? "MODE_ADMIN_CLOSED" : "MODE_ADMIN_OPENED");
            console_print(id, "%s Changed The Mode", szName);
            }
    }

    return PLUGIN_HANDLED;
}
 
Сообщения
59
Реакции
28
Помог
1 раз(а)
May be so
Код:
 if(~get_user_flags (id) & ADMIN_VOTE)
    return PLUGIN_CONTINUE;
Or
Код:
if(!(get_user_flags(id) & ADMIN_VOTE))
    return PLUGIN_CONTINUE;
 
Сообщения
1,293
Реакции
2,294
Помог
57 раз(а)
DrStrange, to allow command to work from client+server, you need to register it as console command.
register_clcmd() - register command for client only
register_concmd() - register command for both client and server console
register_srvcmd() - register command for server console only

clcmd (works for client)
concmd (works for client, not working from console unfortunately)
srvcmd (not working from console)
Wrong. It doesn't work because wrong logic.

Код:
CMD_ModeChange(id, level, cid)
If command runs from server console, then id will be 0
so client_print_color() will show messages to all players, but doesn't print anything to server console

1) Command needs to be registered as concmd
2) If nothing happens when you use it, you need to debug what is wrong in handler logic.
 
Сообщения
1,293
Реакции
2,294
Помог
57 раз(а)
And one more. If you don't understand how something is working, it is better to experiment with simple code (like i post). Don't confuse yourself and others with expensive code, that you can't debug by yourself :)
 
Сообщения
213
Реакции
71
Помог
2 раз(а)
And one more. If you don't understand how something is working, it is better to experiment with simple code (like i post). Don't confuse yourself and others with expensive code, that you can't debug by yourself :)
Sure, I will take care.

your test plugin works !!
Код:
rcon 123456789 "......" contest



* It's alive!
 
Сообщения
213
Реакции
71
Помог
2 раз(а)
unreal fart Sorry for being late, It took long for me to test.

This works perfect !! Thanks alot.

Код:
    register_clcmd("say /change", "CMD_ModeChange", ADMIN_VOTE, "<Смена режима Mode 2x2, Открыть/Закрыть карту>");
    register_clcmd("say /changemode", "CMD_ModeChange", ADMIN_VOTE, "<Смена режима Mode 2x2, Открыть/Закрыть карту>");
    register_srvcmd("change", "CMD_ModeChange");
    register_srvcmd("changemode", "CMD_ModeChange");
say /change from server
&
change from console

Код:
if(!(get_user_flags(id) & ADMIN_VOTE))
    return PLUGIN_CONTINUE;
 
Сообщения
213
Реакции
71
Помог
2 раз(а)
DrStrange, server cmds works fine, you test it?
Yes, tested, it works fine !!
But that too also after this change,

Код:
if (!cmd_access(id, level, cid, 2))
        return PLUGIN_CONTINUE;
->
Код:
if(!(get_user_flags(id) & ADMIN_VOTE))
    return PLUGIN_CONTINUE;
Now with these changes I tried 2 things:

First, I tried, it worked from server (client side) but not from panel (console).

Command used from client side: say /change
Command used from console: say /change

Код:
    register_conmd("say /change", "CMD_ModeChange", ADMIN_VOTE, "<Смена режима Mode 2x2, Открыть/Закрыть карту>");
    register_conmd("say /changemode", "CMD_ModeChange", ADMIN_VOTE, "<Смена режима Mode 2x2, Открыть/Закрыть карту>");
Then I tried this & it worked.

Command used from client side: Say /change
Command used from console: change (compare with above scnerio)

Код:
    register_clcmd("say /change", "CMD_ModeChange", ADMIN_VOTE, "<Смена режима Mode 2x2, Открыть/Закрыть карту>");
    register_clcmd("say /changemode", "CMD_ModeChange", ADMIN_VOTE, "<Смена режима Mode 2x2, Открыть/Закрыть карту>");
    register_srvcmd("change", "CMD_ModeChange");
    register_srvcmd("changemode", "CMD_ModeChange");
 
Последнее редактирование:

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

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу