- Ошибка
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
- Исходный код плагина
- C-подобный:
#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 в сервер-браузере.
включил Debug
Сообщение автоматически объединено:
включил Debug