Ne compilina
Posted: 2014 Jul 18 17:56
Nezinau kur beda. Pagelbekit.

Code: Select all
#include <amxmodx>#include <engine>#include <fakemeta> #if AMXX_VERSION_NUM < 183 #include <dhudmessage> #include <colorchat>#else #define DontChange print_team_default#endif #pragma ctrlchar '\'#pragma semicolon 1 /***** SETTING DEFINE START *****/#define CHECK_FORCE_ONLINE // Заставлять проверять онлайн даже при /change, если нет действующих админов в игре, кроме админов в спектаторе, при ADMIN_ONE_ONLY, проверяет только одного активного админа.#define STATE_USE // Использовать динамические статы//#define ADD_MORE_CHECK // Дополнительные проверки (имхо лишние)//#define ADMIN_ONE_ONLY // Запрещает второму админу использовать команду "/change", если первый админ его уже использовал для открытия карты и если админ который активировал "/change" - активный и находится в команде. (Не проверено)#define MODE_DESCRIPTON // Отображать при режиме 2x2 в GameDescripton, что включен режим "Mode:карта_2x2"#define MOVE_COORD_DUST2 // Сместить координаты спавнов T на карте de_dust2, которые находятся за аркой.#define WEAPONBOX_PUSH // Толкать weaponbox (оружия, C4) от стенки#define GAME_COMMENCING // Никогда не ставить стенки при "GameCommencing" или "Restart"#define MODE_TOUCHMESSAGE // Сообщать игроку при касании стены о том, что проход закрыт. #if defined MODE_TOUCHMESSAGE #define MESSAGE_TIMEWAIT 5.5 // Задержка для повторного сообщения при касании стенки игроком.#endif //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 VOTE_TIMEWAIT 3 // Через сколько минут после голосования /mode, будет снова доступно.#define VOTE_RATIO 0.5 // Погрешность для количество голосов, Пример: (Ratio: 0.5, требуется 0.5 * 32 = 16 голосов из 32 игроков)#define STRONG_PUSH 15.0 // Сила толчка weaponbox (оружия, C4) от стенки/***** SETTING DEFINE END *****/ #define MAX_PLAYERS 32#define PREFIX "\1[\4Mode\1]"#define CLASSNAME_WALL "info_mode"#define SPRITE_WALL "sprites/mode/wall.spr" #define IsRatio (floatround(VOTE_RATIO * checkNumPlayers()))#define IsUserTeam(%0) (1 <= get_pdata_int(%0,114) <= 2)#define IsUserFlags(%0,%1) (get_user_flags(%0) & %1)#define IsUserAValid(%0) (1 <= %0 <= g_pServerVar[m_iMaxpl] && is_user_alive(%0)) #define CheckPlayers (g_pServerVar[m_iOnline] > checkNumPlayers()) #define Vector(%0,%1,%2) (Float:{%0,%1,%2})#define VectorEqual(%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])) #if defined STATE_USE#define STATEMENT_FALLBACK(%0,%1,%2) public %0()<>{return %1;} public %0()<%2>{return %1;}#endif enum (+= 256222){ TASK_MODE_VOTE = 256222, TASK_MODE_START}; enum _:coord_s{ Float:x, Float:y, Float:z}; enum _:status_s{ box_open = 0, box_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_box_s{ m_fOrigin, m_fAngles, m_fMins, m_fMaxs}; enum _:server_info_s{ m_iNone, m_iAll, m_iBox, m_iType, m_iEntid, m_iSetting, m_iSolid, m_iMaxpl, blocked_s:m_iBlocked, m_szFile[64], m_iCount, m_iThink,#if defined ADMIN_ONE_ONLY m_iClose,#endif#if defined MODE_DESCRIPTON m_szDescr[64],#endif m_iOnline, m_iSprite, status_s:m_iStatus, m_szMap[32], m_iVoting[vote_s], m_iVote[MAX_PLAYERS + 1], Float:m_fNext, Float:m_fWait[MAX_PLAYERS + 1], Float:m_fScale}; new g_pServerVar[server_info_s];new Float:g_pServerBox[server_box_s][coord_s]; public plugin_precache(){ get_mapname(g_pServerVar[m_szMap],31); #if defined STATE_USE #if defined MOVE_COORD_DUST2 if(equal(g_pServerVar[m_szMap],"de_dust2")) { state stpfnSpawn:Enabled; } #endif#endif precache_model(SPRITE_WALL);}public plugin_init(){ register_plugin("Mode 2x2","1.8","s1lent"); register_clcmd("say /mode","cmdMode"); register_clcmd("say /box","cmdMenuBox",ADMIN_RCON,"<Управление объектами, Создание/Изменение/Удаление>"); register_clcmd("say /change","cmdModeChange",ADMIN_VOTE,"<Смена режима Mode 2x2, Открыть/Закрыть карту>"); register_menucmd(register_menuid("Main Edit Menu"),0x3FF,"mainEditHandler"); register_menucmd(register_menuid("Setting Menu"),0x3FF,"settingHandler"); g_pServerVar[m_iMaxpl] = get_maxplayers(); g_pServerVar[m_fNext] = _:-1.0;//(get_gametime() + (VOTE_TIMEWAIT * 60.0)); loadConfig();}loadConfig(){#if defined STATE_USE #if defined MOVE_COORD_DUST2 state stpfnSpawn:Disabled; #endif#endif get_localinfo("amxx_configsdir",g_pServerVar[m_szFile],63); add(g_pServerVar[m_szFile],63,"/mode/"); if(!dir_exists(g_pServerVar[m_szFile])) { mkdir(g_pServerVar[m_szFile]); } formatex(g_pServerVar[m_szFile],63,"%s%s.ini",g_pServerVar[m_szFile],g_pServerVar[m_szMap]); if(file_exists(g_pServerVar[m_szFile])) { g_pServerVar[m_iNone] = boxLoad(); showBox(g_pServerVar[m_iStatus] = box_open,.bShow = false); #if defined MODE_DESCRIPTON formatex(g_pServerVar[m_szDescr],63,"Mode: %s_2x2",g_pServerVar[m_szMap]); register_forward(FM_GetGameDescription,"pfnGetGameDescription"); #endif #if defined MODE_TOUCHMESSAGE register_touch(CLASSNAME_WALL,"player","pfnTouch"); #endif #if defined WEAPONBOX_PUSH register_touch("weaponbox",CLASSNAME_WALL,"pfnTouchWeaponBox"); #endif register_menucmd(register_menuid("Mode Menu"),0x03,"modemenu"); register_event("HLTV","RoundNew","a","1=0","2=0"); #if defined GAME_COMMENCING register_event("TextMsg","GameCommencing","a","2=#Game_Commencing","2=#Game_will_restart_in"); #endif }}public plugin_end(){ if(task_exists(TASK_MODE_VOTE)) { remove_task(TASK_MODE_VOTE); } if(task_exists(TASK_MODE_START)) { remove_task(TASK_MODE_START); } if(g_pServerVar[m_iThink] && !g_pServerVar[m_iNone]) { boxSave(0); // Force save box }}public client_disconnect(id){ if(!g_pServerVar[m_iNone]) { return; }#if defined ADMIN_ONE_ONLY if(g_pServerVar[m_iClose] == id) { g_pServerVar[m_iClose] = 0; }#endif if(g_pServerVar[m_iVote][id]) { g_pServerVar[m_iAll]--; g_pServerVar[m_iVote][id] = 0; }}#if defined GAME_COMMENCINGpublic GameCommencing(){ g_pServerVar[m_iBlocked] = blocked_s:block_commencing; showBox((g_pServerVar[m_iStatus] = status_s:box_open),.bShow = false);}#endifpublic RoundNew(){#if defined CHECK_FORCE_ONLINE if(g_pServerVar[m_iBlocked] > blocked_s:block_admin_change) { new iNum; for(new a = 1; a <= g_pServerVar[m_iMaxpl]; a++) { if(!is_user_connected(a) || !IsUserFlags(a,ADMIN_VOTE) || !IsUserTeam(a)) { continue; }#if defined ADMIN_ONE_ONLY if(g_pServerVar[m_iClose] != a) { continue; }#endif iNum++; } if(!iNum) { if(CheckPlayers) { g_pServerVar[m_iBlocked] = blocked_s:block_none; showBox((g_pServerVar[m_iStatus] = status_s:box_close),true); } } } else#endif if(g_pServerVar[m_iBlocked]) { switch(g_pServerVar[m_iBlocked]) { case block_success_vote: { showBox(g_pServerVar[m_iStatus],true); g_pServerVar[m_iBlocked] = blocked_s:block_roundnew; } case block_commencing: { g_pServerVar[m_iBlocked] = blocked_s:block_none; } case block_admin_change: { showBox(g_pServerVar[m_iStatus],true); g_pServerVar[m_iBlocked] = blocked_s:block_permament; } } } else if(CheckPlayers) { if(g_pServerVar[m_iStatus] == status_s:box_open) { showBox((g_pServerVar[m_iStatus] = status_s:box_close),true); } } else { if(g_pServerVar[m_iStatus] == status_s:box_close) { showBox((g_pServerVar[m_iStatus] = status_s:box_open),true); } }} #if defined MOVE_COORD_DUST2public pfn_spawn(ent)#if defined STATE_USE <stpfnSpawn:Enabled>#endif{ #if !defined STATE_USE if(!equal(g_pServerVar[m_szMap],"de_dust2")) { return 0; } #endif static classname[32]; entity_get_string(ent,EV_SZ_classname,classname,31); if(equali(classname,"info_player_deathmatch")) { static Float:vec[coord_s]; entity_get_vector(ent,EV_VEC_origin,vec); static Float:looking[][coord_s] = { {-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} }; for(new b = 0; b < sizeof(looking) / 2; b++) { if(VectorEqual(vec,looking[b])) { entity_set_vector(ent,EV_VEC_origin,looking[b + 3]); break; } } } return 0;}#if defined STATE_USESTATEMENT_FALLBACK(pfn_spawn,0,stpfnSpawn:Disabled)#endif#endif public pfnThink(ent)#if defined STATE_USE <stpfnThink:Enabled>#endif{ #if defined ADD_MORE_CHECK if(!is_valid_ent(g_pServerVar[m_iEntid]) || !is_valid_ent(ent) || g_pServerVar[m_iEntid] != ent) { return 0; } #else if(g_pServerVar[m_iEntid] != ent) { return 0; } #endif static Float:b_mins[coord_s],Float:b_maxs[coord_s],Float:b_origin[coord_s]; entity_get_vector(ent,EV_VEC_origin,b_origin); entity_get_vector(ent,EV_VEC_mins,b_mins); entity_get_vector(ent,EV_VEC_maxs,b_maxs); engfunc(EngFunc_MessageBegin,MSG_ALL/*MSG_PVS*/,SVC_TEMPENTITY,b_origin); write_byte(TE_BOX); engfunc(EngFunc_WriteCoord,(b_mins[x] += b_origin[x])); engfunc(EngFunc_WriteCoord,(b_mins[y] += b_origin[y])); engfunc(EngFunc_WriteCoord,(b_mins[z] += b_origin[z])); engfunc(EngFunc_WriteCoord,(b_maxs[x] += b_origin[x])); engfunc(EngFunc_WriteCoord,(b_maxs[y] += b_origin[y])); engfunc(EngFunc_WriteCoord,(b_maxs[z] += b_origin[z])); write_short(2); write_byte(255); write_byte(0); write_byte(0); message_end(); return entity_set_float(ent,EV_FL_nextthink,get_gametime() + 0.1);}#if defined STATE_USESTATEMENT_FALLBACK(pfnThink,0,stpfnThink:Disabled)#endif #if defined WEAPONBOX_PUSHpublic pfnTouchWeaponBox(ent,id)#if defined STATE_USE <stMode:Enabled>#endif{ #if defined ADD_MORE_CHECK if(!is_valid_ent(ent) || !is_valid_ent(id)) // why do it?! { return 0; } #endif new Float:velocity[3]; get_global_vector(GL_v_forward,velocity); velocity[x] = -velocity[x] * STRONG_PUSH; velocity[y] = -velocity[y] * STRONG_PUSH; velocity[z] = -velocity[z] * STRONG_PUSH; entity_set_vector(ent,EV_VEC_velocity,velocity); return 0;}#if defined STATE_USESTATEMENT_FALLBACK(pfnTouchWeaponBox,0,stMode:Disabled)#endif#endif #if defined MODE_DESCRIPTONpublic pfnGetGameDescription()#if defined STATE_USE <stMode:Enabled>#endif{ #if !defined STATE_USE if(g_pServerVar[m_iStatus] != status_s:box_close) { return FMRES_IGNORED; } #endif forward_return(FMV_STRING,g_pServerVar[m_szDescr]); return FMRES_SUPERCEDE;}#if defined STATE_USESTATEMENT_FALLBACK(pfnGetGameDescription,0,stMode:Disabled)#endif#endif #if defined MODE_TOUCHMESSAGEpublic pfnTouch(ent,id)#if defined STATE_USE <stMode:Enabled>#endif{ #if defined ADD_MORE_CHECK if(!is_valid_ent(ent) || !IsUserAValid(id)) // why do it?! { return 0; } #else if(!is_user_alive(id)) { return 0; } #endif static Float:currentTime; currentTime = get_gametime(); if(currentTime > g_pServerVar[m_fWait][id]) { g_pServerVar[m_fWait][id] = _:(currentTime + MESSAGE_TIMEWAIT); return client_print_color(id,DontChange,"%s К сожалению\3 Проход закрыт\4,\1 по причине мало игроков\4.",PREFIX); } return 0;}#if defined STATE_USESTATEMENT_FALLBACK(pfnTouch,0,stMode:Disabled)#endif#endif public cmdModeChange(id,level,cid){ if(!IsUserFlags(id,level)) { return 0; } if(!g_pServerVar[m_iNone]) { return client_print_color(id,DontChange,"%s На этой карте отсутствует\3 /mode\1 режим\4.",PREFIX); } #if defined ADMIN_ONE_ONLY if(g_pServerVar[m_iClose] != id) { if(is_user_connected(g_pServerVar[m_iClose])) { new name[32]; get_user_name(id,name,31); return client_print_color(id,DontChange,"%s К сожалению\4,\1 админ\3 %s\1 использует эту команду.",PREFIX,name); } }#endif switch(g_pServerVar[m_iBlocked]) { case block_vote: return client_print_color(id,DontChange,"%s Сейчас начнется Голосование\4.",PREFIX); case block_start_vote: return client_print_color(id,DontChange,"%s Идет голосование\4.",PREFIX); case block_success_vote: return client_print_color(id,DontChange,"%s Дождитесь нового раунда\4.",PREFIX); case block_admin_change: return client_print_color(id,DontChange,"%s Админ\3 %s\1 карту в следующем раунде\4.",PREFIX,(g_pServerVar[m_iStatus] == status_s:box_close) ? "закроет" : "откроет"); } g_pServerVar[m_iBlocked] = blocked_s:block_admin_change; g_pServerVar[m_fNext] = _:(get_gametime() + (VOTE_TIMEWAIT * 60.0)); g_pServerVar[m_iStatus] ^= status_s:box_close;#if defined ADMIN_ONE_ONLY g_pServerVar[m_iClose] = (g_pServerVar[m_iStatus] == status_s:box_open) ? id : 0;#endif new name[32]; get_user_name(id,name,31); for(new a = 1; a <= g_pServerVar[m_iMaxpl]; a++) { if(!is_user_connected(a) || !IsUserFlags(a,ADMIN_VOTE)) { continue; } client_print_color(a,DontChange + id,"%s\3 %s\1 %s карту в следующем раунде\3 /change\4.",PREFIX,name,(g_pServerVar[m_iStatus] == status_s:box_close) ? "закроет" : "откроет"); } return 1;}public cmdMode(id){ if(!g_pServerVar[m_iNone]) { return client_print_color(id,DontChange,"%s На этой карте отсутствует\3 /mode\1 режим\4.",PREFIX); } switch(g_pServerVar[m_iBlocked]) { case block_vote: return client_print_color(id,DontChange,"%s Сейчас начнется Голосование\4.",PREFIX); case block_start_vote: return client_print_color(id,DontChange,"%s Идет голосование\4.",PREFIX); case block_admin_change: return client_print_color(id,DontChange,"%s Админ\3 %s\1 карту в следующем раунде\4.",PREFIX,(g_pServerVar[m_iStatus] == status_s:box_close) ? "закроет" : "откроет"); } new Float:flCurrent = get_gametime(); if(g_pServerVar[m_fNext] > flCurrent) { new ibuf[64]; getChangeleft(floatround(g_pServerVar[m_fNext] - flCurrent),ibuf,63); return client_print_color(id,DontChange,"%s Будет доступно через\3 %s\4.",PREFIX,ibuf); } else { new num = IsRatio; if(g_pServerVar[m_iVote][id]) { client_print_color(id,DontChange,"%s Вы уже голосовали\4.\1 Всего голосов [\3%d\1/\3%d\1]",PREFIX,g_pServerVar[m_iAll],num); } else { g_pServerVar[m_iAll]++; g_pServerVar[m_iVote][id] = 1; new name[32]; get_user_name(id,name,31); client_print_color(0,DontChange + id,"%s\3 %s \1написал \3/mode\4.\1 Проголосовали за %s карты [\3%d\1/\3%d\1]",PREFIX,name,(g_pServerVar[m_iStatus] == status_s:box_close) ? "открытие" : "закрытие",g_pServerVar[m_iAll],num); if(num <= g_pServerVar[m_iAll]) { g_pServerVar[m_iCount] = 5; g_pServerVar[m_iBlocked] = blocked_s:block_vote; client_print_color(0,DontChange,"%s Голосование начнется через\3 10 \1секунд\4.",PREFIX); set_task(10.0,"taskidMenu",TASK_MODE_START); } } } return 0;}public taskidMenu(){ if(0 < g_pServerVar[m_iCount]--) { new menu[128],speak[24]; num_to_word(g_pServerVar[m_iCount] + 1,speak,23); client_cmd(0,"spk \"fvox/%s\"",speak); formatex(menu,127,"\\dОпрос: %s карту?\nначнется через %d секунд\n\n1. Да\n2. Нет",(g_pServerVar[m_iStatus] == status_s:box_close) ? "Открыть" : "Закрыть",g_pServerVar[m_iCount] + 1); show_menu(0,0x3,menu,2,"Mode Menu"); set_task(1.0,"taskidMenu",TASK_MODE_START); } else { new menu[128]; g_pServerVar[m_iBlocked] = 2; formatex(menu,127,"\\wОпрос:\\y %s карту?\n\n\\r1.\\w Да\n\\r2.\\w Нет",(g_pServerVar[m_iStatus] == status_s:box_close) ? "Открыть" : "Закрыть"); set_task(20.0,"taskidResult",TASK_MODE_VOTE); show_menu(0,0x3,menu,18,"Mode Menu"); }}public modemenu(id,key){ if(g_pServerVar[m_iBlocked] == blocked_s:block_vote) { return client_cmd(id,"slot%d",key + 1); } new name[32]; get_user_name(id,name,31); client_print_color(0,DontChange + id,"\3%s \1: [\4 %s \1]",name,key ? "Против" : "Согласен"); g_pServerVar[m_iVoting][key]++; return 0;}public taskidResult(){ g_pServerVar[m_iAll] = 0; g_pServerVar[m_fNext] = _:(get_gametime() + (VOTE_TIMEWAIT * 60.0)); for(new id = 1; id <= g_pServerVar[m_iMaxpl]; id++) { g_pServerVar[m_iVote][id] = 0; } 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] ^= status_s:box_close; client_print_color(0,DontChange,"%s Согласны \4-\1 [\3%d\1] \4|\1 Против \4-\1 [\3%d\1] \4|\1 Всего \4-\1 [\3%d\1]",PREFIX,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,"%s Карта будет\3 %s\1 в следующем раунде\4.",PREFIX,(g_pServerVar[m_iStatus] == status_s:box_close) ? "закрыта" : "открыта"); } 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,"%s Согласны \4-\1 [\3%d\1] \4|\1 Против \4-\1 [\3%d\1] \4|\1 Всего \4-\1 [\3%d\1]",PREFIX,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,"%s Не удачное голосование\4.",PREFIX); } else { g_pServerVar[m_iBlocked] = blocked_s:block_none; client_print_color(0,DontChange,"%s Не удачное голосование\4.",PREFIX); }}public cmdMenuBox(id,level,cid){ if(!IsUserFlags(id,level)) { return 0; } if(!g_pServerVar[m_iThink]) { g_pServerVar[m_iThink] = register_think(CLASSNAME_WALL,"pfnThink"); } return showMainEditMenu(id);}showMainEditMenu(id){ new menu[512]; formatex(menu,511, "\\yСоздание блока\n\\dБлоки: %d\n\n\\r1.%s Создать блок\n\\r2.%s Удалить блок\n\\r3.%s %s блок\n\n\n\\r4.%s %s\n\\r5.%s Настройки\n\\r6.%s Стенки: %s\n\\r7.\\w Онлайн: \\y%d\n\\r8.\\w Noclip: \\d%s\n\n\\r9.%s Сохранить всё\n\\r0.\\w Выход", g_pServerVar[m_iBox], g_pServerVar[m_iEntid] > 0 ? "\\d" : "\\w", g_pServerVar[m_iBox] == 0 ? "\\d" : "\\w", g_pServerVar[m_iBox] == 0 ? "\\d" : "\\w", g_pServerVar[m_iEntid] == 0 ? "Изменить" : "Сохранить", g_pServerVar[m_iEntid] == 0 ? "\\d Плотность:" : "\\w Плотность:\\y", g_pServerVar[m_iSolid] ? "SOLID_BBOX" : "SOLID_NOT", g_pServerVar[m_iEntid] == 0 ? "\\d" : "\\w", g_pServerVar[m_iBox] == 0 ? "\\d" : "\\w", (g_pServerVar[m_iStatus] == status_s:box_close) ? "\\dСкрыть" : "\\yПоказать", g_pServerVar[m_iOnline], entity_get_int(id,EV_INT_movetype) == MOVETYPE_NOCLIP ? "Да" : "Нет", (g_pServerVar[m_iBox] == 0 || g_pServerVar[m_iEntid] > 0) ? "\\d" : "\\w" ); return show_menu(id,0x3FF,menu,-1,"Main Edit Menu");}public mainEditHandler(id,key){ switch(key) { case 0: { if(g_pServerVar[m_iEntid] > 0) { client_print(id,print_center,"* Вы не закончили изменения прыдыдущего блока *"); goto ret0; } new Float:p_origin[coord_s],ent = CreateWall(.bParse = false); entity_get_vector(id,EV_VEC_origin,p_origin); g_pServerVar[m_iBox]++; g_pServerVar[m_iEntid] = ent; p_origin[z] += 32.0; #if defined STATE_USE state stpfnThink:Enabled; #endif entity_set_vector(ent,EV_VEC_origin,p_origin); entity_set_vector(ent,EV_VEC_rendercolor,Vector(255.0,100.0,100.0)); } case 1: { new ent,dummy; get_user_aiming(id,ent,dummy); if(is_valid_ent(ent)) { new classname[32]; entity_get_string(ent,EV_SZ_classname,classname,31); if(equali(classname,CLASSNAME_WALL)) { if(--g_pServerVar[m_iBox] < 0) { g_pServerVar[m_iBox] = 0; } if(g_pServerVar[m_iEntid] == ent) { g_pServerVar[m_iEntid] = 0; } remove_entity(ent); client_print(id,print_center,"* Блок \"SOLID_BBOX\" удален *"); } else client_print(id,print_center,"* Блок не найден *"); } else if(is_valid_ent(g_pServerVar[m_iEntid])) { new ent = g_pServerVar[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(ent,EV_VEC_absmin,e_absmin); entity_get_vector(ent,EV_VEC_absmax,e_absmax); if(VectorDT(e_absmin,e_absmax,v_absmins,v_absmaxs)) { g_pServerVar[m_iBox]--; g_pServerVar[m_iEntid] = 0; client_print(id,print_center,"* Блок \"%s\" удален *",(entity_get_int(ent,EV_INT_solid) == SOLID_NOT) ? "SOLID_NOT" : "SOLID_BBOX"); remove_entity(ent); } } else client_print(id,print_center,"* Блок не найден *"); #if defined STATE_USE if(g_pServerVar[m_iEntid] == 0) { state stpfnThink:Disabled; } #endif } case 2: { if(is_valid_ent(g_pServerVar[m_iEntid])) { #if defined STATE_USE state stpfnThink:Disabled; #endif entity_set_int(g_pServerVar[m_iEntid],EV_INT_solid,SOLID_BBOX); entity_set_vector(g_pServerVar[m_iEntid],EV_VEC_rendercolor,Vector(0.0,0.0,0.0)); entity_set_size(g_pServerVar[m_iEntid],g_pServerBox[m_fMins],g_pServerBox[m_fMaxs]); g_pServerVar[m_iEntid] = 0; g_pServerVar[m_fScale] = _:0.250; g_pServerBox[m_fMaxs][x] = 32.0; g_pServerBox[m_fMaxs][y] = 32.0; g_pServerBox[m_fMaxs][z] = 32.0; g_pServerBox[m_fMins][x] = -32.0; g_pServerBox[m_fMins][y] = -32.0; g_pServerBox[m_fMins][z] = -32.0; g_pServerBox[m_fOrigin][x] = 0.0; g_pServerBox[m_fOrigin][y] = 0.0; g_pServerBox[m_fOrigin][z] = 0.0; g_pServerBox[m_fAngles][x] = 0.0; g_pServerBox[m_fAngles][y] = 0.0; g_pServerBox[m_fAngles][z] = 0.0; client_print(id,print_center,"* Свойства блока сохранены *"); } else { new ent,body; get_user_aiming(id,ent,body); if(is_valid_ent(ent)) { new classname[32]; entity_get_string(ent,EV_SZ_classname,classname,31); if(equali(classname,CLASSNAME_WALL)) { #if defined STATE_USE state stpfnThink:Enabled; #endif g_pServerVar[m_iEntid] = ent; entity_get_vector(ent,EV_VEC_mins,g_pServerBox[m_fMins]); entity_get_vector(ent,EV_VEC_maxs,g_pServerBox[m_fMaxs]); entity_get_vector(ent,EV_VEC_origin,g_pServerBox[m_fOrigin]); entity_get_vector(ent,EV_VEC_angles,g_pServerBox[m_fAngles]); g_pServerVar[m_fScale] = _:(entity_get_float(ent,EV_FL_scale)); entity_set_int(ent,EV_INT_solid,SOLID_NOT); entity_set_float(ent,EV_FL_nextthink,get_gametime() + 0.1); entity_set_vector(ent,EV_VEC_rendercolor,Vector(255.0,100.0,100.0)); entity_set_size(ent,g_pServerBox[m_fMins],g_pServerBox[m_fMaxs]); client_print(id,print_center,"* Блок готов для изменения #%d *",ent); } else client_print(id,print_center,"* Блок не найден *"); } else client_print(id,print_center,"* Блок не найден *"); } } case 3: { if(!g_pServerVar[m_iEntid]) { client_print(id,print_center,"* Вы должны для начала создать блок *"); goto ret0; } entity_set_float(g_pServerVar[m_iEntid],EV_FL_nextthink,get_gametime() + 0.1); entity_set_int(g_pServerVar[m_iEntid],EV_INT_solid,(g_pServerVar[m_iSolid] ^= 1) ? SOLID_BBOX : SOLID_NOT); entity_set_size(g_pServerVar[m_iEntid],g_pServerBox[m_fMins],g_pServerBox[m_fMaxs]); client_print(id,print_center,"* Установлено свойство: \"%s\" *",g_pServerVar[m_iSolid] ? "SOLID_BBOX" : "SOLID_NOT"); } case 4: { if(!g_pServerVar[m_iEntid]) { client_print(id,print_center,"* Для начала создайте блок *"); goto ret0; } return showSettingsMenu(id); } case 5: { if(g_pServerVar[m_iBox]) { showBoxDeveloper((g_pServerVar[m_iStatus] ^= status_s:box_close)); } } case 6: { if(++g_pServerVar[m_iOnline] > g_pServerVar[m_iMaxpl]) { g_pServerVar[m_iOnline] = 0; } } case 7: { 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 8: { if(!g_pServerVar[m_iBox]) { client_print(id,print_center,"* Для начала создайте блок *"); } else if(g_pServerVar[m_iEntid]) { client_print(id,print_center,"* Закончьте Создание/Изменения текущего блока *"); } else boxSave(id); } case 9: { return 0; } } ret0: return showMainEditMenu(id);}showSettingsMenu(id){ new menu[512],len; len = formatex(menu,511,"\\yСоздание блока \\d>>\\w Настройки\n"); switch(g_pServerVar[m_iSetting]) { case 0: { new Float:iSize = (g_pServerVar[m_iType] == 0) ? 10.0 : (g_pServerVar[m_iType] == 1) ? 5.0 : (g_pServerVar[m_iType] == 2) ? 1.0 : 0.1; len += formatex(menu[len],511 - len,"\nЛокация:\\y %0.1f %0.1f %0.1f\n\n\\r1.\\w X\\y++\n\\r2.\\w Y\\y++\n\\r3.\\w Z\\y++\n\n\\r4.\\w X\\r--\n\\r5.\\w Y\\r--\n\\r6.\\w Z\\r--\n\n\\r7.\\w Интервал:\\y x%0.1f", g_pServerBox[m_fOrigin][x], g_pServerBox[m_fOrigin][y], g_pServerBox[m_fOrigin][z],iSize); } case 1: { new Float:iSize = (g_pServerVar[m_iType] == 0) ? 45.0 : (g_pServerVar[m_iType] == 1) ? 15.0 : (g_pServerVar[m_iType] == 2) ? 1.0 : 0.5; len += formatex(menu[len],511 - len,"\nУглы:\\y %0.1f %0.1f %0.1f\n\n\\r1.\\w X\\y++\n\\r2.\\w Y\\y++\n\\r3.\\w Z\\y++\n\n\\r4.\\w X\\r--\n\\r5.\\w Y\\r--\n\\r6.\\w Z\\r--\n\n\\r7.\\w Интервал:\\y x%0.1f", g_pServerBox[m_fAngles][x], g_pServerBox[m_fAngles][y], g_pServerBox[m_fAngles][z],iSize); } case 2: { new Float:iSize = (g_pServerVar[m_iType] == 0) ? 10.0 : (g_pServerVar[m_iType] == 1) ? 5.0 : (g_pServerVar[m_iType] == 2) ? 1.0 : 0.5; len += formatex(menu[len],511 - len,"\nРазмеры: \\w[\\r Mins \\y %0.1f %0.1f %0.1f \\w]\t[\\r Maxs\\y %0.1f %0.1f %0.1f \\w]\n\n\\r1.\\w X\\y++\n\\r2.\\w Y\\y++\n\\r3.\\w Z\\y++\n\n\\r4.\\w X\\r--\n\\r5.\\w Y\\r--\n\\r6.\\w Z\\r--\n\n\\r7.\\w Интервал:\\y x%0.1f", g_pServerBox[m_fMins][x], g_pServerBox[m_fMins][y], g_pServerBox[m_fMins][z], g_pServerBox[m_fMaxs][x], g_pServerBox[m_fMaxs][y], g_pServerBox[m_fMaxs][z],iSize); } case 3: { new Float:iSize = ((g_pServerVar[m_iType] == 0) ? 0.5 : (g_pServerVar[m_iType] == 1) ? 0.1 : (g_pServerVar[m_iType] == 2) ? 0.01 : 0.005) + 0.000001; switch(g_pServerVar[m_iType]) { case 0,1: len += formatex(menu[len],511 - len,"\nСкайл:\\y %0.1f\n\n\\r1.\\w %0.1f\\y++\n\\r2.\\w %0.1f\\r--\n\n\n\n\n\n\n\\r7.\\w Интервал:\\y x%0.1f", g_pServerVar[m_fScale],iSize,iSize,iSize); case 2: len += formatex(menu[len],511 - len,"\nСкайл:\\y %0.2f\n\n\\r1.\\w %0.2f\\y++\n\\r2.\\w %0.2f\\r--\n\n\n\n\n\n\n\\r7.\\w Интервал:\\y x%0.2f", g_pServerVar[m_fScale],iSize,iSize,iSize); case 3: len += formatex(menu[len],511 - len,"\nСкайл:\\y %0.3f\n\n\\r1.\\w %0.3f\\y++\n\\r2.\\w %0.3f\\r--\n\n\n\n\n\n\n\\r7.\\w Интервал:\\y x%0.3f", g_pServerVar[m_fScale],iSize,iSize,iSize); } } } formatex(menu[len],511 - len,"\n\\r8.\\w Действие:\\y %s\n\\r9.\\w Спрайт:\\y %s\n\n\\r0.\\w Выход",(g_pServerVar[m_iSetting] == 0) ? "Координаты" : (g_pServerVar[m_iSetting] == 1) ? "Угол" : (g_pServerVar[m_iSetting] == 2) ? "Размер плотности" : "Размер спрайта",(g_pServerVar[m_iSprite] == 0) ? "Надпись" : (g_pServerVar[m_iSprite] == 1) ? "Стенка" : "Пусто"); return show_menu(id,(g_pServerVar[m_iSetting] < 3) ? 0x3FF : 0x3C3,menu,-1,"Setting Menu");}public settingHandler(id,key){ if(key == 9) { return; } entity_get_vector(g_pServerVar[m_iEntid],EV_VEC_origin,g_pServerBox[m_fOrigin]); entity_get_vector(g_pServerVar[m_iEntid],EV_VEC_angles,g_pServerBox[m_fAngles]); entity_get_vector(g_pServerVar[m_iEntid],EV_VEC_maxs,g_pServerBox[m_fMaxs]); g_pServerVar[m_fScale] = _:(entity_get_float(g_pServerVar[m_iEntid],EV_FL_scale)); switch(g_pServerVar[m_iSetting]) { case 0: { new Float:iSize = (g_pServerVar[m_iType] == 0) ? 10.0 : (g_pServerVar[m_iType] == 1) ? 5.0 : (g_pServerVar[m_iType] == 2) ? 1.0 : 0.1; switch(key) { case 0: g_pServerBox[m_fOrigin][x] += iSize; case 1: g_pServerBox[m_fOrigin][y] += iSize; case 2: g_pServerBox[m_fOrigin][z] += iSize; case 3: g_pServerBox[m_fOrigin][x] -= iSize; case 4: g_pServerBox[m_fOrigin][y] -= iSize; case 5: g_pServerBox[m_fOrigin][z] -= iSize; case 6: { if(++g_pServerVar[m_iType] > 3) g_pServerVar[m_iType] = 0; } case 7: { if(++g_pServerVar[m_iSetting] > 3) g_pServerVar[m_iSetting] = 0; if(g_pServerVar[m_iSprite] > 1) { switch(g_pServerVar[m_iSetting]) { case 1: g_pServerVar[m_iSetting] = 2; case 3: g_pServerVar[m_iSetting] = 0; } } } } } case 1: { new Float:iSize = (g_pServerVar[m_iType] == 0) ? 45.0 : (g_pServerVar[m_iType] == 1) ? 15.0 : (g_pServerVar[m_iType] == 2) ? 1.0 : 0.5; switch(key) { case 0: g_pServerBox[m_fAngles][x] += iSize; case 1: g_pServerBox[m_fAngles][y] += iSize; case 2: g_pServerBox[m_fAngles][z] += iSize; case 3: g_pServerBox[m_fAngles][x] -= iSize; case 4: g_pServerBox[m_fAngles][y] -= iSize; case 5: g_pServerBox[m_fAngles][z] -= iSize; case 6: { if(++g_pServerVar[m_iType] > 3) g_pServerVar[m_iType] = 0; } case 7: { if(++g_pServerVar[m_iSetting] > 3) g_pServerVar[m_iSetting] = 0; if(g_pServerVar[m_iSprite] > 1) { switch(g_pServerVar[m_iSetting]) { case 1: g_pServerVar[m_iSetting] = 2; case 3: g_pServerVar[m_iSetting] = 0; } } } } } case 2: { new Float:iSize = (g_pServerVar[m_iType] == 0) ? 10.0 : (g_pServerVar[m_iType] == 1) ? 5.0 : (g_pServerVar[m_iType] == 2) ? 1.0 : 0.5; switch(key) { case 0: g_pServerBox[m_fMaxs][x] += iSize; case 1: g_pServerBox[m_fMaxs][y] += iSize; case 2: g_pServerBox[m_fMaxs][z] += iSize; case 3: g_pServerBox[m_fMaxs][x] -= iSize; case 4: g_pServerBox[m_fMaxs][y] -= iSize; case 5: g_pServerBox[m_fMaxs][z] -= iSize; case 6: { if(++g_pServerVar[m_iType] > 3) g_pServerVar[m_iType] = 0; } case 7: { if(++g_pServerVar[m_iSetting] > 3) g_pServerVar[m_iSetting] = 0; if(g_pServerVar[m_iSprite] > 1) { switch(g_pServerVar[m_iSetting]) { case 1: g_pServerVar[m_iSetting] = 2; case 3: g_pServerVar[m_iSetting] = 0; } } } } } case 3: { new Float:iSize = (g_pServerVar[m_iType] == 0) ? 0.5 : (g_pServerVar[m_iType] == 1) ? 0.1 : (g_pServerVar[m_iType] == 2) ? 0.01 : 0.005; switch(key) { case 0: g_pServerVar[m_fScale] += iSize; case 1: g_pServerVar[m_fScale] -= iSize; case 6: { if(++g_pServerVar[m_iType] > 3) g_pServerVar[m_iType] = 0; } case 7: { if(++g_pServerVar[m_iSetting] > 3) g_pServerVar[m_iSetting] = 0; } } } } switch(key) { case 8: { if(is_valid_ent(g_pServerVar[m_iEntid])) { if(++g_pServerVar[m_iSprite] > 2) { g_pServerVar[m_iSprite] = 0; } new iFlags = entity_get_int(g_pServerVar[m_iEntid],EV_INT_effects); if(g_pServerVar[m_iSprite] > 1) { entity_set_int(g_pServerVar[m_iEntid],EV_INT_effects,iFlags|EF_NODRAW); } else { if(iFlags & EF_NODRAW) { entity_set_int(g_pServerVar[m_iEntid],EV_INT_effects,iFlags&~EF_NODRAW); } } entity_set_float(g_pServerVar[m_iEntid],EV_FL_frame,float(g_pServerVar[m_iSprite])); } } } if(g_pServerVar[m_fScale] < 0.000001) { g_pServerVar[m_fScale] = _:0.000001; } if(g_pServerBox[m_fMaxs][x] < 1.0) { g_pServerBox[m_fMaxs][x] = 1.0; } else if(g_pServerBox[m_fMaxs][y] < 1.0) { g_pServerBox[m_fMaxs][y] = 1.0; } else if(g_pServerBox[m_fMaxs][z] < 1.0) { g_pServerBox[m_fMaxs][z] = 1.0; } if(g_pServerBox[m_fAngles][x] >= 360.0 || g_pServerBox[m_fAngles][x] <= -360.0) { g_pServerBox[m_fAngles][x] = 0.0; } if(g_pServerBox[m_fAngles][y] >= 360.0 || g_pServerBox[m_fAngles][y] <= -360.0) { g_pServerBox[m_fAngles][y] = 0.0; } if(g_pServerBox[m_fAngles][z] >= 360.0 || g_pServerBox[m_fAngles][z] <= -360.0) { g_pServerBox[m_fAngles][z] = 0.0; } g_pServerBox[m_fMins][x] = -g_pServerBox[m_fMaxs][x]; g_pServerBox[m_fMins][y] = -g_pServerBox[m_fMaxs][y]; g_pServerBox[m_fMins][z] = -g_pServerBox[m_fMaxs][z]; entity_set_float(g_pServerVar[m_iEntid],EV_FL_scale,g_pServerVar[m_fScale]); entity_set_vector(g_pServerVar[m_iEntid],EV_VEC_angles,g_pServerBox[m_fAngles]); entity_set_float(g_pServerVar[m_iEntid],EV_FL_nextthink,get_gametime() + 0.1); entity_set_int(g_pServerVar[m_iEntid],EV_INT_solid,g_pServerVar[m_iSolid] ? SOLID_BBOX : SOLID_NOT); entity_set_size(g_pServerVar[m_iEntid],g_pServerBox[m_fMins],g_pServerBox[m_fMaxs]); entity_set_vector(g_pServerVar[m_iEntid],EV_VEC_origin,g_pServerBox[m_fOrigin]); showSettingsMenu(id);}getChangeleft(time,output[],len){ if(time > 0) { new minute = 0,second = 0; second = time; minute = second / 60; second -= (minute * 60); new ibuf[2][33],ending[22],num = -1; if(minute > 0) { getEnding(minute,"минут","минута","минуты",21,ending); formatex(ibuf[++num],32,"%i \1%s",minute,ending); } if(second > 0) { getEnding(second,"секунд","секунда","секунды",21,ending); formatex(ibuf[++num],32,"%i \1%s",second,ending); } switch(num) { case 0: formatex(output,len,"%s",ibuf[0]); case 1: formatex(output,len,"%s и\3 %s",ibuf[0],ibuf[1]); } } else formatex(output,len,"0 \1секунд");}getEnding(num,const a[],const b[],const c[],lenght,output[]){ new num100 = num % 100,num10 = num % 10,ibuf[22]; if(num100 >= 5 && num100 <= 20 || num10 == 0 || num10 >= 5 && num10 <= 9) { copy(ibuf,21,a); } else if(num10 == 1) { copy(ibuf,21,b); } else if(num10 >= 2 && num10 <= 4) { copy(ibuf,21,c); } return formatex(output,lenght,"%s",ibuf);}boxSave(id){ if(file_exists(g_pServerVar[m_szFile])) { delete_file(g_pServerVar[m_szFile]); } new ibuf[1024],Float:frame,Float:p_origin[coord_s],Float:p_angles[coord_s],Float:p_maxs[coord_s],Float:p_scale,p_sprite,count,ent = -1; formatex(ibuf,1023,"ONLINE=%d",g_pServerVar[m_iOnline]); write_file(g_pServerVar[m_szFile],ibuf,0); while((ent = find_ent_by_class(ent,CLASSNAME_WALL))) { if(g_pServerVar[m_iEntid] == ent) { continue; } entity_get_vector(ent,EV_VEC_origin,p_origin); entity_get_vector(ent,EV_VEC_angles,p_angles); entity_get_vector(ent,EV_VEC_maxs,p_maxs); p_scale = entity_get_float(ent,EV_FL_scale); frame = entity_get_float(ent,EV_FL_frame); p_sprite = floatround(frame); formatex(ibuf,1023,"\"%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_maxs[x],p_maxs[y],p_maxs[z],p_scale,p_sprite); write_file(g_pServerVar[m_szFile],ibuf,-1); count++; } if(id && count > 0) { client_print(id,print_center,"* Успешно сохранено *"); }}boxLoad(){ new ibuf[2048],key[32],value[32],p_origin[coord_s][6],p_angles[coord_s][6],p_maxs[coord_s][6],p_scale[6],p_sprite[6]; new file = fopen(g_pServerVar[m_szFile],"r"); while(!feof(file)) { fgets(file,ibuf,2047); if(!ibuf[0] || ibuf[0] == ';') { continue; } trim(ibuf); strtok(ibuf,key,31,value,31,'='); if(equal(key,"ONLINE")) { g_pServerVar[m_iOnline] = str_to_num(value); continue; } parse(ibuf, p_origin[x],5, p_origin[y],5, p_origin[z],5, p_angles[x],5, p_angles[y],5, p_angles[z],5, p_maxs[x],5, p_maxs[y],5, p_maxs[z],5, p_scale,5, p_sprite,5); g_pServerBox[m_fOrigin][x] = str_to_float(p_origin[x]); g_pServerBox[m_fOrigin][y] = str_to_float(p_origin[y]); g_pServerBox[m_fOrigin][z] = str_to_float(p_origin[z]); g_pServerBox[m_fAngles][x] = str_to_float(p_angles[x]); g_pServerBox[m_fAngles][y] = str_to_float(p_angles[y]); g_pServerBox[m_fAngles][z] = str_to_float(p_angles[z]); g_pServerBox[m_fMaxs][x] = str_to_float(p_maxs[x]); g_pServerBox[m_fMaxs][y] = str_to_float(p_maxs[y]); g_pServerBox[m_fMaxs][z] = str_to_float(p_maxs[z]); g_pServerBox[m_fMins][x] = -g_pServerBox[m_fMaxs][x]; g_pServerBox[m_fMins][y] = -g_pServerBox[m_fMaxs][y]; g_pServerBox[m_fMins][z] = -g_pServerBox[m_fMaxs][z]; g_pServerVar[m_fScale] = _:(str_to_float(p_scale)); g_pServerVar[m_iSprite] = str_to_num(p_sprite); CreateWall(.bParse = true); g_pServerVar[m_iBox]++; } return fclose(file);}checkNumPlayers(){ static iNum; iNum = 0; for(new index = 1; index <= g_pServerVar[m_iMaxpl]; index++) { if(!is_user_connected(index) || !IsUserTeam(index)) { continue; } iNum++; } return iNum;}showBoxDeveloper(status_s:st){ new iEnt = -1; while((iEnt = find_ent_by_class(iEnt,CLASSNAME_WALL))) { entity_set_int(iEnt,EV_INT_solid,st == status_s:box_close ? SOLID_BBOX : SOLID_NOT); if(g_pServerVar[m_iEntid] == iEnt || entity_get_float(iEnt,EV_FL_frame) > 1.0) { continue; } static iFlags; iFlags = entity_get_int(iEnt,EV_INT_effects); entity_set_int(iEnt,EV_INT_effects,st == status_s:box_close ? iFlags &~ EF_NODRAW : iFlags|EF_NODRAW); }}showBox(status_s:st,bool:bShow){ new iEnt = -1; while((iEnt = find_ent_by_class(iEnt,CLASSNAME_WALL))) { entity_set_int(iEnt,EV_INT_solid,st == status_s:box_close ? SOLID_BBOX : SOLID_NOT); if(entity_get_float(iEnt,EV_FL_frame) > 1) { continue; } static iFlags; iFlags = entity_get_int(iEnt,EV_INT_effects); entity_set_int(iEnt,EV_INT_effects,st == status_s:box_close ? iFlags &~ EF_NODRAW : iFlags|EF_NODRAW); } switch(st) { case box_open: { #if defined STATE_USE state stMode:Disabled; #endif if(bShow) { set_dhudmessage(COLOR_MAP_OPEN,MESSAGE_MAP_STATUS,2,0.1,2.0,0.05,0.2); show_dhudmessage(0,"Карта открыта"); } } case box_close: { #if defined STATE_USE state stMode:Enabled; #endif if(bShow) { set_dhudmessage(COLOR_MAP_CLOSE,MESSAGE_MAP_STATUS,2,0.1,2.0,0.05,0.2); show_dhudmessage(0,"Карта закрыта"); } } }}CreateWall(bool:bParse){ new ent = create_entity("func_wall"); if(!is_valid_ent(ent)) { return 0; } entity_set_string(ent,EV_SZ_classname,CLASSNAME_WALL); entity_set_int(ent,EV_INT_movetype,MOVETYPE_FLY); if(bParse) { entity_set_model(ent,SPRITE_WALL); entity_set_size(ent,g_pServerBox[m_fMins],g_pServerBox[m_fMaxs]); entity_set_float(ent,EV_FL_scale,g_pServerVar[m_fScale]); entity_set_vector(ent,EV_VEC_angles,g_pServerBox[m_fAngles]); entity_set_int(ent,EV_INT_solid,SOLID_BBOX); if(g_pServerVar[m_iSprite] > 1) { entity_set_int(ent,EV_INT_effects,entity_get_int(ent,EV_INT_effects)|EF_NODRAW); } entity_set_float(ent,EV_FL_frame,float(g_pServerVar[m_iSprite])); entity_set_int(ent,EV_INT_rendermode,kRenderTransAdd); entity_set_float(ent,EV_FL_renderamt,175.0); entity_set_vector(ent,EV_VEC_origin,g_pServerBox[m_fOrigin]); } else { g_pServerBox[m_fAngles][x] = 0.0; g_pServerBox[m_fAngles][y] = 0.0; g_pServerBox[m_fAngles][z] = 0.0; g_pServerBox[m_fMaxs][x] = 32.0; g_pServerBox[m_fMaxs][y] = 32.0; g_pServerBox[m_fMaxs][z] = 32.0; g_pServerBox[m_fMins][x] = -32.0; g_pServerBox[m_fMins][y] = -32.0; g_pServerBox[m_fMins][z] = -32.0; g_pServerVar[m_fScale] = _:0.250; entity_set_model(ent,SPRITE_WALL); entity_set_size(ent,g_pServerBox[m_fMins],g_pServerBox[m_fMaxs]); entity_set_float(ent,EV_FL_scale,g_pServerVar[m_fScale]); entity_set_vector(ent,EV_VEC_angles,g_pServerBox[m_fAngles]); entity_set_int(ent,EV_INT_solid,SOLID_NOT); entity_set_float(ent,EV_FL_frame,float(g_pServerVar[m_iSprite])); entity_set_int(ent,EV_INT_rendermode,kRenderTransAdd); entity_set_float(ent,EV_FL_renderamt,175.0); entity_set_float(ent,EV_FL_nextthink,get_gametime() + 0.1); return ent; } return 0;}
