Проблемы с Mode 2x2-Re

  • Автор темы Автор темы Medved
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
Сообщения
9
Реакции
2
Помог
1 раз(а)
Баллы
3
Ошибка
L 09/03/2025 - 18:19:05: [AMXX] Run time error 10 (plugin "mode.amxx") (native "rh_set_mapname") - debug not enabled!
AMX Mod X
AMX Mod X 1.9.0.5294 (http://www.amxmodx.org)
Билд сервера
ReHLDS version: 3.13.0.788-dev
ReGameDLL
ReGameDLL version: 5.28.0.756-dev
Metamod версия
Metamod-r v1.3.0.131, API (5:13)
Metamod плагины
[ 1] Reunion        RUN   -    reunion.so                  v0.1.0.137       ini  Start Never
[ 2] AMX Mod X RUN - amxmodx.so v1.9.0.5294 ini Start ANY
[ 3] ReAuthCheck RUN - reauthcheck.so v0.1.6 ini Start Never
[ 4] Rechecker RUN - rechecker.so v2.7 ini ANY
[ 5] ReSemiclip RUN - resemiclip.so v2.3.9 ini ANY
[ 6] ReSRDetector RUN - resrdetector.so v0.1.0 ini ANY
[ 7] WHBlocker RUN - whblocker.so v1.5.697 ini ANY
[ 8] HitBox Fix RUN - hitbox_fix.so v1.1.2 ini Start ANY
[ 9] Revoice RUN - revoice.so v0.1.0.34 ini Start Never
[10] CStrike RUN - cstrike_amxx_i386.so v1.9.0.5294 pl2 ANY ANY
[11] CSX RUN - csx_amxx_i386.so v1.9.0.5294 pl2 ANY ANY
[12] ReAPI RUN - reapi_amxx_i386.so v5.26.0.338-dev pl2 ANY Never
[13] FakeMeta RUN - fakemeta_amxx_i386.so v1.9.0.5294 pl2 ANY ANY
[14] MySQL RUN - mysql_amxx_i386.so v1.9.0.5294 pl2 ANY ANY
[15] Ham Sandwich RUN - hamsandwich_amxx_i386.so v1.9.0.5294 pl2 ANY ANY
[16] Engine RUN - engine_amxx_i386.so v1.9.0.5294 pl2 ANY ANY
[17] Fun RUN - fun_amxx_i386.so v1.9.0.5294 pl2 ANY ANY
[18] ReAimDetector RUN - reaimdetector_amxx_i386.so v0.2.2 pl2 ANY Never
Список плагинов
[  1] Admin Loader            3.5         neygomon          admin_loader.am  running  
[ 2] WebHS 0.1 kanagava fb_web_online.a running
[ 3] FreshBans 1.4.8b kanagava fresh_bans.amxx running
[ 4] Unreal Cheater Cry 1.0.12 Karaulov cheater_cry.amx running
[ 5] CSStatsX SQL 0.7.4+2 serfreeman1337 csstatsx_sql.am running
[ 6] [190] Ultimate Weapons 22.11.15 SKAJIbnEJIb ultimate_weapon running
[ 7] [183] Ultimate Gag 17.12.22BE SKAJIbnEJIb ultimate_gag.am running
[ 8] Admin Chat 1.9.0.5294 AMXX Dev Team adminchat.amxx running
[ 9] Admin Commands 1.8.1.3746 AMXX Dev Team admincmd.amxx running
[ 10] Commands Menu 20.06.06 SKAJIbnEJIb & AM cmdmenu_rbs.amx running
[ 11] AmxModMenu 1.2 Sn1kO{Dmitriy.T) menufront.amxx running
[ 12] Maps Menu 1.4.1 neugomon mapsmenu.amxx running
[ 13] Players Menu 1.8.1.3746 AMXX Dev Team plmenu.amxx running
[ 14] Plugin Menu 1.9.0.5294 AMXX Dev Team pluginmenu.amxx running
[ 15] Restrict Weapons 1.9.0.5294 AMXX Dev Team restmenu.amxx running
[ 16] Admin Votes 1.8.1.3746 Wildness Team adminvote.amxx running
[ 17] CS Stats Logging 1.9.0.5294 AMXX Dev Team stats_logging.a running
[ 18] Stats Configuration 1.9.0.5294 AMXX Dev Team statscfg.amxx running
[ 19] [190] VIP RBS 20.07.20 SKAJIbnEJIb vip_rbs.amxx running
[ 20] [190] Replace Weapons 20.06.06 SKAJIbnEJIb replace_weapons running
[ 21] Night VIPs 1.1.1 szawesome night_vips.amxx running
[ 22] [190] AC Spectator ESP 20.06.06 SKAJIbnEJIb & Ko ac_esp.amxx running
[ 23] Autoresponder/Advertis 0.5 MaximusBrood ad_manager.amxx running
[ 24] [190] Block Reconnect 20.06.06 ShaTalKiN Block_Reconnect running
[ 25] [ReAPI] Best player of 1.1.2 F@nt0M best_player_of_ running
[ 26] [190] Chat RBS 20.06.06 SKAJIbnEJIb chat_rbs.amxx running
[ 27] [ReAPI] Custom Models 1.6.1 neugomon custom_models.a running
[ 28] Custom Smoke 1.07 bionext custom_smoke.am running
[ 29] [190] DemoRecorder RBS 20.06.06 SKAJIbnEJIb demorecorder_rb running
[ 30] [ReAPI] Healthnade 0.0.7f F@nt0M + mx?! + reapi_healthnad running
[ 31] [190] High Ping Kicker 20.06.06 SKAJIbnEJIb hpk_rbs.amxx running
[ 32] [190] No Team Flash 20.06.06 SKAJIbnEJIb NoTeamFlash.amx running
[ 33] [190] Parachute RBS 22.11.15 SKAJIbnEJIb & KR parachute_rbs.a running
[ 34] Reset Score 0.2 Silenttt / CepeH RESET_SCORE_V0. running
[ 35] [190] SlayLosers RBS 20.06.06 SKAJIbnEJIb & d3 slaylosers_rbs. running
[ 36] [190] Snipers RBS 20.06.06 SKAJIbnEJIb snipers_rbs.amx running
[ 37] Yet Another Voteban 1.8 AndrewZ/voed yet_another_vot running
[ 38] AES: StatsX 0.5+1 serfreeman1337 aes_statsx_cstr running
[ 39] [ReAPI] Block 'Fire in 0.0.1 sergrib reapi_block_FIT running
[ 40] [190] AfkKicker RBS 22.11.15 SKAJIbnEJIb afkkicker_rbs.a running
[ 41] Auto Team Balance Adva 1.5.1 Radius auto_team_balan running
[ 42] Say me and Say hp 1.4 neygomon say_me_and_say_ running
[ 43] Damager 1.0 Prayer damager.amxx running
[ 44] Mode 2x2 2.5re s1lent mode.amxx running
[ 45] aes_exp_on_win 1.0 w0w aes_exp_on_win. running
[ 46] Steаm Bonus 1.0 Will_be steam_bonus.amx running
[ 47] [ReAPI] Random Weapons 2.4.9+1 neugomon/h1k3 warmup.amxx running
[ 48] C4 Timer 0.1 Lightman bombtimer.amxx running
[ 49] GameName Changer 1.0 mx?! re_gamename.amx running
[ 50] fb_forwards 0.1.4 Kanagava & Realu fb_forwards.amx running
[ 51] ReAimDetector API 0.2.2 ReHLDS Team reaimdetector.a running
[ 52] SF Bets 0.1.5 serfreeman1337 sf_bets.amxx running
[ 53] Accuracy Fix 1.3 mx?! accuracy_fix.am running
[ 54] recoil_manager 1.0.0 fl0wer recoil_manager. running
[ 55] IrkMenu 1.0 Medved irkmenu.amxx running
[ 56] Advanced Kill Assists 1.6 Xelson next21_kill_ass running
[ 57] Fake Ping 1.1 MeRcyLeZZ/gyxoBk fake_ping.amxx running
[ 58] Time for info 1.2 Devil Judge time_for_info.a running
[ 59] Kills Counter 1.0 Safety1st killscounter.am running
[ 60] Injector X 1.0 Remastered: Medv dd_injectorX.am running
[ 61] [UW] ANew Func 1.0.0 ArKaNeMaN UW-ANewFunc.amx running
[ 62] Announcer Killstreak 2.1 Jumper & mx?! Announcer_Kills running
[ 63] BOMB REAL TIMER 6.1 Vaqtincha | Flym bomb_real_timer running
[ 64] Killer ScreenFade 0.0.5 Vaqtincha reapi_killer_sc running
[ 65] SpecList 1.3 FatalisDK & pUzz spectlist.amxx running
[ 66] InfoConnects 1.0 PAffAEJIkA :3 statistic.amxx running
[ 67] Map Spawns Editor 1.0.16 iG_os map_spawns_edit running
[ 68] Safe Userinfo 1.0.4 the_hunter safe_userinfo.a running
[ 69] Clutch Player 25.08.2025 @emmajule clutch.amxx running
[ 70] Advanced MapChooser 1.4 neygomon advanced_mapcho running
[ 71] Advanced Experience Sy 0.5.9 [REA serfreeman1337/s aes_main.amxx running
[ 72] AES: CStrike Addon 0.5.9 [REA serfreeman1337/s aes_exp_cstrike running
[ 73] AES: Informer 0.5.9 [REA serfreeman1337/s aes_informer.am running
[ 74] AES: Admin Tools 0.5.9 [REA serfreeman1337/s aes_exp_editor. running
[ 75] AES: Bonus System 0.5.9 Vega serfreeman1337/s aes_bonus_syste running
[ 76] AES: Bonus CSTRIKE 0.5.9.1 [R serfreeman1337/s aes_bonus_cstri running
Исходный код плагина
#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[\4Mode\1]"
#define CLASSNAME_WALL "test_effect" // unused classname in the game
#define SPRITE_WALL "sprites/mode/wall.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 /box", "CMD_MenuBox", ADMIN_RCON, "<Управление объектами, Создание/Изменение/Удаление>");
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");
}
}

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;
}
}
}
}
}
Приветствую, подскажите пожалуйста что не так, плагин компилил на новой версии ReAPI на сервере тоже все свежее стоит. Бьет ошибку в консоль и не создает суффикс 2x2 в сервер-браузере.
Сообщение автоматически объединено:

1756899004366.png

включил Debug
 
Try to place amxmodx.so in bottom inside plugins.ini. Then restart the server, seems like function is being called very early before reapi being initialized.
 
Буквально самая первая строчка: ReHLDS: Isn't available.
Обновите ReHLDS до последней версии.
 
Решение
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх