Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <sourcemod>
- #include <sdktools>
- #include <sdkhooks>
- #define MAXBOX 12
- char sCharMap[64];
- char sDataFilePath[PLATFORM_MAX_PATH];
- KeyValues kv;
- int vNum;
- public OnPluginStart()
- {
- PrecacheModel("models/props_junk/wood_crate001a.mdl", true);
- RegAdminCmd("sm_boxmenu", BoxRedactor, ADMFLAG_ROOT);
- RegAdminCmd("sm_boxcount", BoxCount, ADMFLAG_ROOT);
- BuildPath(Path_SM, sDataFilePath, sizeof(sDataFilePath), "data/box_position.ini");
- if (!FileExists(sDataFilePath))
- {
- new Handle:open_path = OpenFile(sDataFilePath, "w");
- WriteFileLine(open_path, "");
- CloseHandle(open_path);
- PrintToServer("Error Code: WSP-EC-01A");
- }
- kv = CreateKeyValues("PosionsFake");
- }
- public OnMapStart()
- {
- GetCurrentMap(sCharMap, sizeof(sCharMap));
- LoadBox()
- vNum = BoxCountCheck();
- }
- LoadBox()
- {
- char sBuffer[32];
- float vPos[3];
- for(int i = 0; i < MAXBOX; i++)
- {
- Format(sBuffer, sizeof(sBuffer), "Crate %d", i);
- KvGetVector(kv, sBuffer, vPos)
- if(IsVectorEmpty(vPos))
- {
- new karobka = CreateEntityByName("prop_physics");
- if (karobka > MaxClients)
- {
- DispatchKeyValueVector(karobka, "origin", vPos);
- SetEntityModel(karobka, "models/props_junk/wood_crate001a.mdl");
- DispatchSpawn(karobka);
- }
- }
- }
- }
- public Action:BoxCount(client, args)
- {
- PrintToChatAll("Boxes - %i", BoxCountCheck())
- }
- bool:IsVectorEmpty(float pos[3])
- {
- for(int i = 0; i < 2; i++)
- {
- if(pos[i] != 0.0)
- {
- return true;
- }
- }
- return false;
- }
- public Action:BoxRedactor(client, args)
- {
- DisplayBoxMenu(client)
- }
- public MenuBox(Handle:menu, MenuAction:action, client, symbol)
- {
- if (action == MenuAction_Select)
- {
- if(symbol == 0)
- {
- DisplayAddBox(client);
- }
- else if(symbol == 1)
- {
- DisplayRemoveBox(client)
- }
- }
- else if (action == MenuAction_End)
- {
- CloseHandle(menu);
- }
- }
- DisplayBoxMenu(client)
- {
- new Handle:menu = CreateMenu(MenuBox);
- SetMenuTitle(menu, "Редактор ящиков:");
- AddMenuItem(menu, "0", "Добавить ящик");
- AddMenuItem(menu, "1", "Удалить");
- DisplayMenu(menu, client, MENU_TIME_FOREVER);
- }
- DisplayAddBox(client)
- {
- new Handle:menu = CreateMenu(MenuAddBox);
- SetMenuTitle(menu, "Добавление ящика:");
- AddMenuItem(menu, "0", "По вашему местоположению.");
- AddMenuItem(menu, "1", "Место, куда направлен ваш прицел.");
- DisplayMenu(menu, client, MENU_TIME_FOREVER);
- }
- DisplayRemoveBox(client)
- {
- new Handle:menu2 = CreateMenu(MenuRemoveBox);
- SetMenuTitle(menu2, "Удаление ящиков:");
- float vPos[3]
- char sBuffer[32];
- //char siEx[15];
- int BoxsCount = BoxCountCheck()
- if(BoxsCount >= 0)
- {
- for (new i = 0; i <= MAXBOX; i++)
- {
- Format(sBuffer, 16, "Crate %d", i);
- KvGetVector(kv, sBuffer, vPos)
- if(IsVectorEmpty(vPos))
- {
- AddMenuItem(menu2, sBuffer, sBuffer);
- }
- }
- }
- else
- {
- PrintToChat(client, "Для этой карты нету ящиков.")
- CloseHandle(menu2);
- }
- DisplayMenu(menu2, client, MENU_TIME_FOREVER);
- }
- public MenuAddBox(Handle:menu, MenuAction:action, client, symbol)
- {
- if (action == MenuAction_Select)
- {
- int BoxsCount = BoxCountCheck()
- if(BoxsCount < MAXBOX && BoxsCount >= 0)
- {
- if(symbol == 0)
- {
- float vPos[3]
- GetClientAbsOrigin(client, vPos);
- vPos[2] += 25.0;
- char sBuffer[32]
- if(KvJumpToKey(kv, sCharMap, true))
- {
- FormatEx(sBuffer, sizeof(sBuffer), "Crate %i", vNum);
- KvSetVector(kv, sBuffer, vPos)
- DisplayAddBox(client);
- KeyValuesToFile(kv, sDataFilePath);
- vNum++;
- PrintToChat(client, "Ящик был добавлен и сохранён.")
- }
- }
- else if(symbol == 1)
- {
- float vPos[3]
- GetLookPos(client, vPos)
- vPos[2] += 20;
- char sBuffer[32]
- FormatEx(sBuffer, sizeof(sBuffer), "Crate %i", vNum);
- KvSetVector(kv, sBuffer, vPos)
- DisplayAddBox(client);
- KeyValuesToFile(kv, sDataFilePath);
- vNum++;
- PrintToChat(client, "Ящик был добавлен и сохранён.")
- }
- }
- else
- {
- PrintToChat(client, "Достигнут лимит ящиков.")
- }
- }
- else if (action == MenuAction_End)
- {
- CloseHandle(menu);
- }
- }
- public MenuRemoveBox(Handle:menu2, MenuAction:action, client, symbol)
- {
- if (action == MenuAction_End)
- {
- CloseHandle(menu2);
- return;
- }
- if (action != MenuAction_Select) return;
- char sMenuEx[16];
- GetMenuItem(menu2, symbol, sMenuEx, 16)
- PrintToChatAll("%s", sMenuEx)
- KvDeleteKey(kv, sMenuEx)
- vNum--;
- KeyValuesToFile(kv, sDataFilePath);
- }
- public BoxCountCheck()
- {
- float vPos[3];
- int iNum = 0;
- char sBuffer[32];
- if (KvJumpToKey(kv, sCharMap))
- {
- for(int i = 0; i < MAXBOX; i++)
- {
- Format(sBuffer, sizeof(sBuffer), "Crate %d", i+1);
- KvGetVector(kv, sBuffer, vPos)
- if(IsVectorEmpty(vPos))
- {
- iNum++;
- }
- }
- }
- return iNum;
- }
- stock GetLookPos(client, Float:v[3])
- {
- decl Float:EyePosition[3], Float:EyeAngles[3], Handle:h_trace;
- GetClientEyePosition(client, EyePosition);
- GetClientEyeAngles(client, EyeAngles);
- h_trace = TR_TraceRayFilterEx(EyePosition, EyeAngles, MASK_SOLID, RayType_Infinite, GetLookPos_Filter, client);
- TR_GetEndPosition(v, h_trace);
- CloseHandle(h_trace);
- }
- public bool:GetLookPos_Filter(ent, mask, any:client)
- {
- return client != ent;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement