RU
RU
UA
EN
PL
ГЛАВНАЯ
УСЛУГИ
ПЛАГИНЫ
КАРТЫ
REBUY
SCANMON
SALE
ФОРУМ
МОНИТОР
HELP
КОНТАКТ
Главная
/
Plugins
/
[CS 1.6] Demolition Manager
[CS 1.6] Demolition Manager
Теги:
Скачать плагины cs
Остальные
Плагин позволяет создавать / изменять / удалять точки закладки бомбы на каждой карте через удобное меню.
Компилятор: 1.8.3
REapi
+ZIP
952
Команды:
amx_demolition - открыть редактор
.sma / .sp
#pragma semicolon 1 #include
#include
#include
#include
#include
#include
#define SHOW_SPRITE #define m_iObject var_chain #define m_sZoneName var_noise #define m_vecOldAngles var_v_angle #if defined SHOW_SPRITE #define m_iSprite var_impulse #endif #define FormatEx(%0) iLen += formatex(sText[iLen], charsmax(sText) - iLen, %0) #define IsComment(%0) (%0[0] == EOS || %0[0] == ';' || %0[0] == '#' || (%0[0] == '/' && %0[1] == '/')) enum _: eExplosions { expRandom = 0, expDirected }; enum _: eMaterials { matGlass = 0, matWood, matMetal, matFlesh, matCinderBlock, matCeilingTile, matComputer, matRocks = 8, matNone }; enum _: eObjects { objNone = 0, objTarget, objZone, #if defined SHOW_SPRITE objSprite #endif }; #if defined SHOW_SPRITE enum _: eShowStates { showAll = 0, showDead, showAlive }; #endif new g_iCurEditOrigin; new g_iCurEditAngles; new g_iCurEditSolid; new g_iCurEditSize; new g_iCurEditSteps; new g_iCurZonePage; new g_iCurZoneName; new g_iModelIndexLine; new g_iModelIndexGibs; new g_iEditedTarget = NULLENT; new g_iEditedZone = NULLENT; new g_sTargetFile[PLATFORM_MAX_PATH]; new g_sZoneFile[PLATFORM_MAX_PATH]; new g_sZoneName[][] = { "A", "B", "C", "D" }; new g_sEditOrigin[3][] = { "\r[X]\w-Y-Z", "X-\r[Y]\w-Z", "X-Y-\r[Z]" }; new g_sEditAngles[2][] = { "\r[P]\w-Y", "P-\r[Y]" }; new g_sEditSolid[2][] = { "\r[BBOX]\w-NOT", "BBOX-\r[NOT]\w" }; new g_sEditSize[3][] = { "\r[W]\w-L-H", "W-\r[L]\w-H", "W-L-\r[H]" }; new g_sEditSteps[3][] = { "\r[%.0f]\w-%.0f-%.0f", "%.0f-\r[%.0f]\w-%.0f", "%.0f-%.0f-\r[%.0f]" }; new Float: g_flStepOrigin[3] = { 1.0, 4.0, 16.0 }; new Float: g_flStepAngles[3] = { 15.0, 30.0, 90.0 }; new Float: g_flStepSize[3] = { 2.0, 10.0, 40.0 }; new Array: g_aTargetSpots; new Array: g_aZoneSpots; const DEMOLITION_ACCESS_LEVEL = ADMIN_RCON; new const DEMOLITION_SPOTS_PATH[] = "demolition"; const TARGET_MATERIAL = matWood; const TARGET_EXPLOSION = expRandom; const TARGET_EXPMAGNITUDE = 100; new const TARGET_NAME[] = "obj_target"; new const TARGET_CLASSNAME[] = "func_breakable"; new const TARGET_MODEL[] = "models/demolition/box.mdl"; new const TARGET_GIBS[] = "models/metalplategibs.mdl"; new const Float: TARGET_MINS[3] = { -21.0, -21.0, 0.0 }; new const Float: TARGET_MAXS[3] = { 21.0, 21.0, 42.0 }; const Float: ZONE_MIN_SIZE = 60.0; const Float: ZONE_THINK_DELAY = 0.2; new const ZONE_CLASSNAME[] = "func_bomb_target"; #if defined SHOW_SPRITE const SPRITE_SHOW_STATE = showAll; new const SPRITE_CLASSNAME[] = "env_sprite"; new const SPRITE_MODEL[] = "sprites/demolition/bomb.spr"; new const SPRITE_COLOR[3] = { 255, 255, 0 }; const Float: SPRITE_WALL_OFFSET = 15.0; const Float: SPRITE_SCALE = 0.3; const Float: SPRITE_SCALE_UNIT = 0.0005; const Float: UNITS_TO_METER = 40.0; #endif const MAX_PAGE_ITEMS = 8; const MENU_KEYS_ALL = (MENU_KEY_1 | MENU_KEY_2 | MENU_KEY_3 | MENU_KEY_4 | MENU_KEY_5 | MENU_KEY_6 | MENU_KEY_7 | MENU_KEY_8 | MENU_KEY_9 | MENU_KEY_0); public plugin_init() { register_plugin("Demolition Manager", "1.0.2", "unknown"); register_dictionary("demolition_manager.txt"); register_clcmd("amx_demolition", "@Command_Demolition", DEMOLITION_ACCESS_LEVEL, "Demolition Manager"); register_menu("Demolition Menu", MENU_KEYS_ALL, "@HandleMenu_DemolitionMenu", true); register_menu("Target Editor Menu", MENU_KEYS_ALL, "@HandleMenu_TargetEditorMenu", true); register_menu("Zone List Menu", MENU_KEYS_ALL, "@HandleMenu_ZoneListMenu", true); register_menu("Zone Editor Menu", MENU_KEYS_ALL, "@HandleMenu_ZoneEditorMenu", true); RegisterHam(Ham_CS_Restart, TARGET_CLASSNAME, "@CBreakable_Restart_Post", true); #if defined SHOW_SPRITE register_forward(FM_AddToFullPack, "@AddToFullPack_Post", true); #endif } public plugin_precache() { new sMapName[32]; new sFilePath[MAX_RESOURCE_PATH_LENGTH]; get_mapname(sMapName, charsmax(sMapName)); get_localinfo("amxx_configsdir", sFilePath, charsmax(sFilePath)); format(sFilePath, charsmax(sFilePath), "%s/%s", sFilePath, DEMOLITION_SPOTS_PATH); if(!dir_exists(sFilePath)) mkdir(sFilePath); formatex(g_sTargetFile, charsmax(g_sTargetFile), "%s/%s.target.cfg", sFilePath, sMapName); formatex(g_sZoneFile, charsmax(g_sZoneFile), "%s/%s.zone.cfg", sFilePath, sMapName); precache_model(TARGET_GIBS); precache_model(TARGET_MODEL); #if defined SHOW_SPRITE precache_model(SPRITE_MODEL); #endif switch(TARGET_MATERIAL) { case matWood: { precache_sound("debris/bustcrate1.wav"); precache_sound("debris/bustcrate2.wav"); } case matFlesh: { precache_sound("debris/bustflesh1.wav"); precache_sound("debris/bustflesh2.wav"); } case matComputer: { precache_sound("buttons/spark5.wav"); precache_sound("buttons/spark6.wav"); precache_sound("debris/bustmetal1.wav"); precache_sound("debris/bustmetal2.wav"); } case matGlass: { precache_sound("debris/bustglass1.wav"); precache_sound("debris/bustglass2.wav"); } case matMetal: { precache_sound("debris/bustmetal1.wav"); precache_sound("debris/bustmetal2.wav"); } case matCinderBlock: { precache_sound("debris/bustconcrete1.wav"); precache_sound("debris/bustconcrete2.wav"); } case matRocks: { precache_sound("debris/bustconcrete1.wav"); precache_sound("debris/bustconcrete2.wav"); } case matCeilingTile: precache_sound("debris/bustceiling.wav"); } g_iModelIndexLine = precache_model("sprites/laserbeam.spr"); g_iModelIndexGibs = engfunc(EngFunc_AllocString, TARGET_GIBS); } public plugin_cfg() { g_aTargetSpots = ArrayCreate(1, 1); g_aZoneSpots = ArrayCreate(1, 1); LoadDefaultZone(); LoadFileZone(); LoadTarget(); } public plugin_end() { ArrayDestroy(g_aTargetSpots); ArrayDestroy(g_aZoneSpots); } @Command_Demolition(iPlayer) { ShowMenu_DemolitionMenu(iPlayer); return PLUGIN_HANDLED; } @CBreakable_Restart_Post(iEntity) { if(get_entvar(iEntity, m_iObject) != objTarget) return; new Float: vecAngles[3]; get_entvar(iEntity, m_vecOldAngles, vecAngles); set_entvar(iEntity, var_angles, vecAngles); set_entvar(iEntity, var_solid, SOLID_BBOX); set_entvar(iEntity, var_movetype, MOVETYPE_PUSHSTEP); engfunc(EngFunc_SetSize, iEntity, TARGET_MINS, TARGET_MAXS); } #if defined SHOW_SPRITE @AddToFullPack_Post(iState, iE, iEntity, iHost, iHostFlags, iPlayer, pSet) { if(get_entvar(iEntity, m_iObject) != objSprite) return; switch(SPRITE_SHOW_STATE) { case showAlive: { if(!is_user_alive(iHost)) { set_es(iState, ES_Effects, get_es(iState, ES_Effects) | EF_NODRAW); return; } } case showDead: { if(is_user_alive(iHost)) { set_es(iState, ES_Effects, get_es(iState, ES_Effects) | EF_NODRAW); return; } } } static iTrace; static Float: flFraction; static Float: flDistance; static Float: flScale; static Float: flFov; static Float: flFrame; static Float: vecStart[3]; static Float: vecEnd[3]; static Float: vecViewOfs[3]; static Float: vecViewAngle[3]; static Float: vecEndPos[3]; iTrace = create_tr2(); get_entvar(iHost, var_origin, vecStart); get_entvar(iEntity, var_origin, vecEnd); get_entvar(iHost, var_view_ofs, vecViewOfs); get_entvar(iHost, var_v_angle, vecViewAngle); get_entvar(iHost, var_fov, flFov); engfunc(EngFunc_TraceLine, vecStart, vecEnd, IGNORE_MONSTERS, iEntity, iTrace); xs_vec_sub(vecStart, vecEnd, vecStart); flFrame = xs_vec_len(vecStart) / UNITS_TO_METER; get_entvar(iHost, var_origin, vecStart); get_entvar(iEntity, var_origin, vecEnd); vecStart[2] += vecViewOfs[2]; engfunc(EngFunc_TraceLine, vecStart, vecEnd, IGNORE_MONSTERS, iHost, iTrace); get_tr2(0, TR_flFraction, flFraction); if(flFraction != 1.0) { get_tr2(iTrace, TR_vecEndPos, vecEndPos); get_tr2(iTrace, TR_vecPlaneNormal, vecEnd); xs_vec_mul_scalar(vecEnd, SPRITE_WALL_OFFSET, vecEnd); xs_vec_add(vecEnd, vecEndPos, vecEnd); flDistance = get_distance_f(vecStart, vecEnd); } free_tr2(iTrace); flScale = SPRITE_SCALE + (SPRITE_SCALE_UNIT * flDistance); set_es(iState, ES_Origin, vecEnd); set_es(iState, ES_Frame, flFrame); set_es(iState, ES_Scale, flScale); set_es(iState, ES_RenderColor, SPRITE_COLOR); set_es(iState, ES_MoveType, MOVETYPE_TOSS); } #endif ShowMenu_DemolitionMenu(iPlayer) { new sText[MAX_MENU_LENGTH]; new iLen; new iSize = ArraySize(g_aZoneSpots); new iBitsKeys = MENU_KEY_0 | MENU_KEY_1 | MENU_KEY_5; iLen = formatex(sText[iLen], charsmax(sText) - iLen, "%l", "ML_TITLE_DEMOLITION"); FormatEx("\r1.\w %l^n", "ML_MENU_DEMOLITION_ITEM_1"); if(ArraySize(g_aTargetSpots)) { iBitsKeys |= MENU_KEY_2; FormatEx("\r2.\w %l^n^n", "ML_MENU_DEMOLITION_ITEM_2"); } else FormatEx("\r2.\d %l^n^n", "ML_MENU_DEMOLITION_ITEM_2"); if(iSize != sizeof(g_sZoneName)) { iBitsKeys |= MENU_KEY_3; FormatEx("\r3.\w %l^n", "ML_MENU_DEMOLITION_ITEM_3"); } else FormatEx("\r3.\d %l^n", "ML_MENU_DEMOLITION_ITEM_3"); if(iSize) { iBitsKeys |= MENU_KEY_4; FormatEx("\r4.\w %l^n^n", "ML_MENU_DEMOLITION_ITEM_4"); } else FormatEx("\r4.\d %l^n^n", "ML_MENU_DEMOLITION_ITEM_4"); FormatEx("\r5.\w %l^n", "ML_MENU_DEMOLITION_ITEM_5"); FormatEx("^n\r0.\w %l", "ML_MENU_ITEM_EXIT"); show_menu(iPlayer, iBitsKeys, sText, -1, "Demolition Menu"); } @HandleMenu_DemolitionMenu(iPlayer, iKey) { new bool: bEdit; switch(iKey) { case 0: { if(AddTarget(iPlayer)) bEdit = true; } case 1: { if(g_iEditedTarget == NULLENT) { if(SetTargetIndex(iPlayer)) bEdit = true; else client_print(iPlayer, print_center, "%l", "ML_PRINT_TARGET_NOT_FOUND"); } else g_iEditedTarget = NULLENT; } case 2: { if(AddZone(iPlayer)) { g_iCurZoneName = -1; @HandleMenu_ZoneEditorMenu(iPlayer, 7); return; } } case 3: { ShowMenu_ZoneListMenu(iPlayer, g_iCurZonePage = 0); return; } case 4: client_print(iPlayer, print_center, "%l", "ML_PRINT_SAVED_OBJECTS", SaveTarget(), SaveZone()); default: { for(new iIndex = 0, iEntity, iSize = ArraySize(g_aTargetSpots); iIndex < iSize; iIndex++) { iEntity = ArrayGetCell(g_aTargetSpots, iIndex); set_entvar(iEntity, var_solid, SOLID_BBOX); set_entvar(iEntity, var_movetype, MOVETYPE_PUSHSTEP); engfunc(EngFunc_SetSize, iEntity, TARGET_MINS, TARGET_MAXS); } return; } } if(bEdit) { g_iCurEditOrigin = 0; g_iCurEditSolid = g_iCurEditAngles = 1; SetEntityRender(g_iEditedTarget, kRenderFxGlowShell, Float: { 0.0, 255.0, 0.0 }, kRenderNormal, 25.0); set_entvar(g_iEditedTarget, var_solid, SOLID_NOT); ShowMenu_TargetEdit(iPlayer); } else ShowMenu_DemolitionMenu(iPlayer); } ShowMenu_TargetEdit(iPlayer) { new sText[MAX_MENU_LENGTH]; new sStepOrigin[32]; new sStepAngles[32]; new iLen; new Float: vecOrigin[3]; new Float: vecAngles[3]; GetTargetPosition(g_iEditedTarget, vecOrigin, vecAngles); iLen = formatex(sText[iLen], charsmax(sText) - iLen, "%l", "ML_TITLE_TARGET", vecOrigin[0], vecOrigin[1], vecOrigin[2], vecAngles[0], vecAngles[1]); FormatEx("\r1.\w %l^n", "ML_MENU_TARGET_ITEM_1", g_sEditOrigin[g_iCurEditOrigin]); FormatEx("\r2.\y %l^n", "ML_MENU_TARGET_ITEM_2"); FormatEx("\r3.\y %l^n^n", "ML_MENU_TARGET_ITEM_3"); FormatEx("\r4.\w %l^n", "ML_MENU_TARGET_ITEM_4", g_sEditAngles[g_iCurEditAngles]); FormatEx("\r5.\y %l^n", "ML_MENU_TARGET_ITEM_5"); FormatEx("\r6.\y %l^n^n", "ML_MENU_TARGET_ITEM_6"); formatex(sStepOrigin, charsmax(sStepOrigin), g_sEditSteps[g_iCurEditSteps], g_flStepOrigin[0], g_flStepOrigin[1], g_flStepOrigin[2]); formatex(sStepAngles, charsmax(sStepAngles), g_sEditSteps[g_iCurEditSteps], g_flStepAngles[0], g_flStepAngles[1], g_flStepAngles[2]); FormatEx("\r7.\w %l^n^n", "ML_MENU_TARGET_ITEM_7", sStepOrigin, sStepAngles); FormatEx("\r8.\w %l^n", "ML_MENU_TARGET_ITEM_8", g_sEditSolid[g_iCurEditSolid]); FormatEx("\r9.\w %l^n", "ML_MENU_TARGET_ITEM_9"); FormatEx("^n\r0.\w %l", "ML_MENU_ITEM_BACK"); show_menu(iPlayer, MENU_KEYS_ALL, sText, -1, "Target Editor Menu"); } @HandleMenu_TargetEditorMenu(iPlayer, iKey) { new Float: vecOrigin[3]; new Float: vecAngles[3]; GetTargetPosition(g_iEditedTarget, vecOrigin, vecAngles); switch(iKey) { case 0: { if(!(++g_iCurEditOrigin % 3)) g_iCurEditOrigin = 0; } case 1: vecOrigin[g_iCurEditOrigin] += g_flStepOrigin[g_iCurEditSteps]; case 2: vecOrigin[g_iCurEditOrigin] -= g_flStepOrigin[g_iCurEditSteps]; case 3: { if(!(++g_iCurEditAngles % 2)) g_iCurEditAngles = 0; } case 4: vecAngles[g_iCurEditAngles] += g_flStepAngles[g_iCurEditSteps]; case 5: vecAngles[g_iCurEditAngles] -= g_flStepAngles[g_iCurEditSteps]; case 6: { if(!(++g_iCurEditSteps % 3)) g_iCurEditSteps = 0; } case 7: { if(!(++g_iCurEditSolid % 2)) g_iCurEditSolid = 0; set_entvar(g_iEditedTarget, var_solid, (get_entvar(g_iEditedTarget, var_solid) == SOLID_NOT) ? SOLID_BBOX : SOLID_NOT); set_entvar(g_iEditedTarget, var_movetype, MOVETYPE_PUSHSTEP); } case 8: { DeleteTarget(g_iEditedTarget); ShowMenu_DemolitionMenu(iPlayer); return; } default: { SetEntityRender(g_iEditedTarget); g_iEditedTarget = NULLENT; ShowMenu_DemolitionMenu(iPlayer); return; } } engfunc(EngFunc_SetOrigin, g_iEditedTarget, vecOrigin); engfunc(EngFunc_SetSize, g_iEditedTarget, TARGET_MINS, TARGET_MAXS); set_entvar(g_iEditedTarget, var_angles, vecAngles); set_entvar(g_iEditedTarget, m_vecOldAngles, vecAngles); ShowMenu_TargetEdit(iPlayer); } ShowMenu_ZoneEdit(iPlayer) { new sText[MAX_MENU_LENGTH]; new sZoneName[32]; new sStepOrigin[32]; new sStepSize[32]; new iLen; new iBitsKeys = MENU_KEY_0 | MENU_KEY_1 | MENU_KEY_2 | MENU_KEY_3 | MENU_KEY_4 | MENU_KEY_5 | MENU_KEY_6 | MENU_KEY_7 | MENU_KEY_9; new Float: vecSize[3]; new Float: vecOrigin[3]; get_entvar(g_iEditedZone, var_size, vecSize); get_entvar(g_iEditedZone, var_origin, vecOrigin); get_entvar(g_iEditedZone, m_sZoneName, sZoneName, charsmax(sZoneName)); iLen = formatex(sText[iLen], charsmax(sText) - iLen, "%l", "ML_TITLE_ZONE", vecOrigin[0], vecOrigin[1], vecOrigin[2], vecSize[0], vecSize[1], vecSize[2]); FormatEx("\r1.\w %l^n", "ML_MENU_ZONE_ITEM_1", g_sEditOrigin[g_iCurEditOrigin]); FormatEx("\r2.\y %l^n", "ML_MENU_ZONE_ITEM_2"); FormatEx("\r3.\y %l^n^n", "ML_MENU_ZONE_ITEM_3"); FormatEx("\r4.\w %l^n", "ML_MENU_ZONE_ITEM_4", g_sEditSize[g_iCurEditSize]); FormatEx("\r5.\y %l^n", "ML_MENU_ZONE_ITEM_5"); FormatEx("\r6.\y %l^n^n", "ML_MENU_ZONE_ITEM_6"); formatex(sStepOrigin, charsmax(sStepOrigin), g_sEditSteps[g_iCurEditSteps], g_flStepOrigin[0], g_flStepOrigin[1], g_flStepOrigin[2]); formatex(sStepSize, charsmax(sStepSize), g_sEditSteps[g_iCurEditSteps], g_flStepSize[0], g_flStepSize[1], g_flStepSize[2]); FormatEx("\r7.\w %l^n^n", "ML_MENU_ZONE_ITEM_7", sStepOrigin, sStepSize); if(ArraySize(g_aZoneSpots) != sizeof(g_sZoneName)) { iBitsKeys |= MENU_KEY_8; FormatEx("\r8.\w %l^n", "ML_MENU_ZONE_ITEM_8", sZoneName); } else FormatEx("\r8.\d %l^n", "ML_MENU_ZONE_ITEM_8", sZoneName); FormatEx("\r9.\w %l^n", "ML_MENU_ZONE_ITEM_9"); FormatEx("^n\r0.\w %l", "ML_MENU_ITEM_BACK"); show_menu(iPlayer, iBitsKeys, sText, -1, "Zone Editor Menu"); } @HandleMenu_ZoneEditorMenu(iPlayer, iKey) { new Float: vecOrigin[3]; new Float: vecMins[3]; new Float: vecMaxs[3]; GetZonePosition(g_iEditedZone, vecOrigin, vecMins, vecMaxs); switch(iKey) { case 0: { if(!(++g_iCurEditOrigin % 3)) g_iCurEditOrigin = 0; } case 1: vecOrigin[g_iCurEditOrigin] += g_flStepOrigin[g_iCurEditSteps]; case 2: vecOrigin[g_iCurEditOrigin] -= g_flStepOrigin[g_iCurEditSteps]; case 3: { if(!(++g_iCurEditSize % 3)) g_iCurEditSize = 0; } case 4: { if(g_iCurEditSize == 2) { vecMaxs[2] += g_flStepSize[g_iCurEditSteps]; vecMins[2] -= g_flStepSize[g_iCurEditSteps]; vecMaxs[1] += g_flStepSize[g_iCurEditSteps]; } else { vecMins[g_iCurEditSize] -= g_flStepSize[g_iCurEditSteps]; vecMaxs[g_iCurEditSize] += g_flStepSize[g_iCurEditSteps]; } } case 5: { if(g_iCurEditSize == 2) { vecMaxs[2] -= g_flStepSize[g_iCurEditSteps]; vecMins[2] += g_flStepSize[g_iCurEditSteps]; vecMaxs[1] -= g_flStepSize[g_iCurEditSteps]; } else { vecMins[g_iCurEditSize] += g_flStepSize[g_iCurEditSteps]; vecMaxs[g_iCurEditSize] -= g_flStepSize[g_iCurEditSteps]; } } case 6: { if(!(++g_iCurEditSteps % 3)) g_iCurEditSteps = 0; } case 7: { if(++g_iCurZoneName >= sizeof(g_sZoneName)) g_iCurZoneName = 0; if(CheckZoneName(g_sZoneName[g_iCurZoneName])) set_entvar(g_iEditedZone, m_sZoneName, g_sZoneName[g_iCurZoneName]); else @HandleMenu_ZoneEditorMenu(iPlayer, 7); ShowMenu_ZoneEdit(iPlayer); return; } case 8: { #if defined SHOW_SPRITE DeleteSprite(get_entvar(g_iEditedZone, m_iSprite)); #endif DeleteZone(g_iEditedZone); ShowMenu_DemolitionMenu(iPlayer); return; } default: { set_entvar(g_iEditedZone, var_nextthink, get_gametime() + ZONE_THINK_DELAY); SetThink(g_iEditedZone, NULL_STRING); g_iEditedZone = NULLENT; ShowMenu_DemolitionMenu(iPlayer); return; } } if(!CheckZoneSize(vecMins, vecMaxs)) { engfunc(EngFunc_SetOrigin, g_iEditedZone, vecOrigin); engfunc(EngFunc_SetSize, g_iEditedZone, vecMins, vecMaxs); } #if defined SHOW_SPRITE new iSprite = get_entvar(g_iEditedZone, m_iSprite); engfunc(EngFunc_SetOrigin, iSprite, vecOrigin); #endif ShowMenu_ZoneEdit(iPlayer); } ShowMenu_ZoneListMenu(iPlayer, iPage = 0) { if(iPage < 0) { ShowMenu_DemolitionMenu(iPlayer); return; } new sText[MAX_MENU_LENGTH]; new sZoneName[32]; new iLen; new iBitsKeys; new iStart = iPage * MAX_PAGE_ITEMS; new iEnd = iStart + MAX_PAGE_ITEMS; new iSize = ArraySize(g_aZoneSpots); if(iEnd > iSize) iEnd = iSize; iLen = formatex(sText[iLen], charsmax(sText) - iLen, "%l", "ML_TITLE_LIST"); for(new iIndex = iStart, iEntity, iItem; iIndex < iEnd; iIndex++) { iEntity = ArrayGetCell(g_aZoneSpots, iIndex); get_entvar(iEntity, m_sZoneName, sZoneName, charsmax(sZoneName)); iBitsKeys |= (1<
vecObjectAbsMax[i]) vecDistance[i] = vecAbsMin[i] - vecObjectAbsMax[i]; else if(vecObjectAbsMin[i] > vecAbsMax[i]) vecDistance[i] = vecObjectAbsMin[i] - vecAbsMax[i]; } return xs_vec_len(vecDistance); } FindTargetByAim(iPlayer) { new iIndex; new iEntity; new iDummy; new iHit = NULLENT; new iSize = ArraySize(g_aTargetSpots); for(iIndex = 0; iIndex < iSize; iIndex++) { iEntity = ArrayGetCell(g_aTargetSpots, iIndex); set_entvar(iEntity, var_solid, SOLID_SLIDEBOX); engfunc(EngFunc_SetSize, iEntity, TARGET_MINS, TARGET_MAXS); } get_user_aiming(iPlayer, iHit, iDummy, 2048); for(iIndex = 0; iIndex < iSize; iIndex++) { iEntity = ArrayGetCell(g_aTargetSpots, iIndex); set_entvar(iEntity, var_solid, SOLID_NOT); engfunc(EngFunc_SetSize, iEntity, TARGET_MINS, TARGET_MAXS); } return (get_entvar(iHit, m_iObject) == objTarget) ? iHit : NULLENT; } GetTargetPosition(iEntity, Float: vecOrigin[3], Float: vecAngles[3]) { get_entvar(iEntity, var_origin, vecOrigin); get_entvar(iEntity, var_angles, vecAngles); } GetZonePosition(iEntity, Float: vecOrigin[3], Float: vecMins[3], Float: vecMaxs[3]) { get_entvar(iEntity, var_origin, vecOrigin); get_entvar(iEntity, var_mins, vecMins); get_entvar(iEntity, var_maxs, vecMaxs); } SetEntityRender(iEntity, iFx = kRenderFxNone, Float: flColor[3] = { 255.0, 255.0, 255.0 }, iRender = kRenderNormal, Float: flAmount = 16.0) { set_entvar(iEntity, var_renderfx, iFx); set_entvar(iEntity, var_rendercolor, flColor); set_entvar(iEntity, var_rendermode, iRender); set_entvar(iEntity, var_renderamt, flAmount); } DrawLine(Float: flStartX, Float: flStartY, Float: flStartZ, Float: flEndX, Float: flEndY, Float: flEndZ) { message_begin_f(MSG_BROADCAST, SVC_TEMPENTITY, Float: { 0.0, 0.0, 0.0 }, 0); write_byte(TE_BEAMPOINTS); write_coord_f(flStartX); write_coord_f(flStartY); write_coord_f(flStartZ); write_coord_f(flEndX); write_coord_f(flEndY); write_coord_f(flEndZ); write_short(g_iModelIndexLine); write_byte(0); write_byte(0); write_byte(3); write_byte(5); write_byte(0); write_byte(255); write_byte(0); write_byte(0); write_byte(200); write_byte(0); message_end(); }
Отправить
Загрузил
FliNe
2020-01-28 19:12:49
0
26
Установить на сервер
Скачать
Нет оплаченых серверов
Купить сервер CS 1.6
Купить сервер CS:GO
Купить сервер CSS v34
Подключить свой VDS к панели
Данная иконка означает, что плагин был проверен администрацией хостинга на тестовом сервере, и проблем с ним не было выявлено. Рекомендуем ставить исключительно проверенные плагины.
Плагин загружен на сервер, но проверка еще не была проведена.
CSHOST.COM.UA 2012-2024 Хостинг игровых серверов