FlacoBey

Untitled

Mar 5th, 2019
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.55 KB | None | 0 0
  1. #include <sourcemod>
  2. #include <sdktools>
  3. #include <sdkhooks>
  4.  
  5. #define MAXBOX 12
  6.  
  7. char sCharMap[64];
  8. char sDataFilePath[PLATFORM_MAX_PATH];
  9. KeyValues kv;
  10. int vNum;
  11.  
  12. public OnPluginStart()
  13. {
  14.     PrecacheModel("models/props_junk/wood_crate001a.mdl", true);
  15.    
  16.     RegAdminCmd("sm_boxmenu", BoxRedactor, ADMFLAG_ROOT);
  17.    
  18.     RegAdminCmd("sm_boxcount", BoxCount, ADMFLAG_ROOT);
  19.    
  20.     BuildPath(Path_SM, sDataFilePath, sizeof(sDataFilePath), "data/box_position.ini");
  21.     if (!FileExists(sDataFilePath))
  22.     {
  23.         new Handle:open_path = OpenFile(sDataFilePath, "w");
  24.         WriteFileLine(open_path, "");
  25.         CloseHandle(open_path);
  26.         PrintToServer("Error Code: WSP-EC-01A");
  27.     }
  28. }
  29.  
  30. public OnMapStart()
  31. {
  32.     kv = CreateKeyValues("PosionsFake");
  33.     GetCurrentMap(sCharMap, sizeof(sCharMap));
  34.     if (KvJumpToKey(kv, sCharMap, true))
  35.     {
  36.         LoadBox()
  37.         vNum = BoxCountCheck();
  38.     }
  39. }
  40.  
  41. LoadBox()
  42. {
  43.     char sBuffer[32];
  44.     float vPos[3];
  45.    
  46.     for(int i = 0; i < MAXBOX; i++)
  47.     {
  48.         Format(sBuffer, sizeof(sBuffer), "Crate %d", i);
  49.         KvGetVector(kv, sBuffer, vPos)
  50.         if(IsVectorEmpty(vPos))
  51.         {
  52.             new karobka = CreateEntityByName("prop_physics");
  53.             if (karobka > MaxClients)
  54.             {
  55.                 DispatchKeyValueVector(karobka, "origin", vPos);
  56.                 SetEntityModel(karobka, "models/props_junk/wood_crate001a.mdl");
  57.                 DispatchSpawn(karobka);
  58.             }
  59.         }
  60.     }
  61. }
  62.  
  63. public Action:BoxCount(client, args)
  64. {
  65.     PrintToChatAll("Boxes - %i", BoxCountCheck())
  66. }
  67.  
  68. bool:IsVectorEmpty(float pos[3])
  69. {
  70.     for(int i = 0; i < 2; i++)
  71.     {
  72.         if(pos[i] != 0.0)
  73.         {
  74.             return true;
  75.         }
  76.     }
  77.     return false;
  78. }
  79.  
  80. public Action:BoxRedactor(client, args)
  81. {
  82.     DisplayBoxMenu(client)
  83. }
  84.  
  85. public MenuBox(Handle:menu, MenuAction:action, client, symbol)
  86. {
  87.     if (action == MenuAction_Select)
  88.     {
  89.         if(symbol == 0)
  90.         {
  91.             DisplayAddBox(client);
  92.         }
  93.         else if(symbol == 1)
  94.         {
  95.             DisplayRemoveBox(client)
  96.         }
  97.     }
  98.     else if (action == MenuAction_End)
  99.     {      
  100.         CloseHandle(menu);
  101.     }
  102. }
  103.  
  104. DisplayBoxMenu(client)
  105. {  
  106.     new Handle:menu = CreateMenu(MenuBox); 
  107.     SetMenuTitle(menu, "Редактор ящиков:");
  108.     AddMenuItem(menu, "0", "Добавить ящик");
  109.     AddMenuItem(menu, "1", "Удалить");
  110.     DisplayMenu(menu, client, MENU_TIME_FOREVER);
  111. }
  112.  
  113. DisplayAddBox(client)
  114. {
  115.     new Handle:menu = CreateMenu(MenuAddBox);  
  116.     SetMenuTitle(menu, "Добавление ящика:");
  117.     AddMenuItem(menu, "0", "По вашему местоположению.");
  118.     AddMenuItem(menu, "1", "Место, куда направлен ваш прицел.");
  119.     DisplayMenu(menu, client, MENU_TIME_FOREVER);
  120. }
  121.  
  122. DisplayRemoveBox(client)
  123. {
  124.     new Handle:menu2 = CreateMenu(MenuRemoveBox);
  125.     SetMenuTitle(menu2, "Удаление ящиков:");
  126.     float vPos[3]
  127.     char sBuffer[32];
  128.     //char siEx[15];
  129.     int BoxsCount = BoxCountCheck()
  130.    
  131.     if(BoxsCount >= 0)
  132.     {
  133.         for (new i = 0; i <= MAXBOX; i++)
  134.         {
  135.             Format(sBuffer, 16, "Crate %d", i);
  136.             KvGetVector(kv, sBuffer, vPos)
  137.             if(IsVectorEmpty(vPos))
  138.             {
  139.                 AddMenuItem(menu2, sBuffer, sBuffer);
  140.             }
  141.         }
  142.     }
  143.     else
  144.     {
  145.         PrintToChat(client, "Для этой карты нету ящиков.")
  146.         CloseHandle(menu2);
  147.     }
  148.     DisplayMenu(menu2, client, MENU_TIME_FOREVER);
  149. }
  150.  
  151. public MenuAddBox(Handle:menu, MenuAction:action, client, symbol)
  152. {
  153.     if (action == MenuAction_Select)
  154.     {
  155.         int BoxsCount = BoxCountCheck()
  156.         if(BoxsCount < MAXBOX)
  157.         {
  158.             if(symbol == 0)
  159.             {
  160.                 float vPos[3]
  161.                 GetClientAbsOrigin(client, vPos);
  162.                 vPos[2] += 25.0;
  163.                 char sBuffer[32]
  164.                 if (KvJumpToKey(kv, sCharMap, false))
  165.                 {
  166.                     FormatEx(sBuffer, sizeof(sBuffer), "Crate %i", vNum);
  167.                     KvSetVector(kv, sBuffer, vPos)
  168.                     DisplayAddBox(client);
  169.                     KeyValuesToFile(kv, sDataFilePath);
  170.                     vNum++;
  171.                     PrintToChat(client, "Ящик был добавлен и сохранён.")
  172.                 }
  173.             }
  174.             else if(symbol == 1)
  175.             {
  176.                 float vPos[3]
  177.                 GetLookPos(client, vPos)
  178.                 vPos[2] += 20;
  179.                 char sBuffer[32]
  180.                 if (KvJumpToKey(kv, sCharMap, false))
  181.                 {
  182.                     FormatEx(sBuffer, sizeof(sBuffer), "Crate %i", vNum);
  183.                     KvSetVector(kv, sBuffer, vPos)
  184.                     DisplayAddBox(client);
  185.                     KeyValuesToFile(kv, sDataFilePath);
  186.                     vNum++;
  187.                     PrintToChat(client, "Ящик был добавлен и сохранён.")
  188.                 }
  189.             }
  190.         }
  191.         else
  192.         {
  193.             PrintToChat(client, "Достигнут лимит ящиков.")
  194.         }
  195.     }
  196.     else if (action == MenuAction_End)
  197.     {      
  198.         CloseHandle(menu);
  199.     }
  200. }
  201.  
  202. public MenuRemoveBox(Handle:menu2, MenuAction:action, client, symbol)
  203. {
  204.     if (action == MenuAction_End)
  205.     {
  206.         CloseHandle(menu2);
  207.         return;
  208.     }
  209.     if (action != MenuAction_Select) return;
  210.    
  211.     if (KvJumpToKey(kv, sCharMap, false))
  212.     {
  213.         char sMenuEx[16];
  214.         GetMenuItem(menu2, symbol, sMenuEx, 16)
  215.         PrintToChatAll("%s", sMenuEx)
  216.         KvDeleteKey(kv, sMenuEx)
  217.         vNum--;
  218.         KeyValuesToFile(kv, sDataFilePath);
  219.     }
  220. }
  221.  
  222.  
  223. public BoxCountCheck()
  224. {
  225.     float vPos[3];
  226.     KvRewind(kv);
  227.     int iNum = 0;
  228.     char sBuffer[32];
  229.     for(int i = 0; i < MAXBOX; i++)
  230.     {
  231.         Format(sBuffer, sizeof(sBuffer), "Crate %d", i+1);
  232.         KvGetVector(kv, sBuffer, vPos)
  233.         if(IsVectorEmpty(vPos))
  234.         {
  235.             iNum++;
  236.         }
  237.     }
  238.     return iNum;
  239. }
  240.  
  241. stock GetLookPos(client, Float:v[3])
  242. {
  243.      decl Float:EyePosition[3], Float:EyeAngles[3], Handle:h_trace;
  244.      GetClientEyePosition(client, EyePosition);
  245.      GetClientEyeAngles(client, EyeAngles);
  246.      h_trace = TR_TraceRayFilterEx(EyePosition, EyeAngles, MASK_SOLID, RayType_Infinite, GetLookPos_Filter, client);
  247.      TR_GetEndPosition(v, h_trace);
  248.      CloseHandle(h_trace);
  249. }
  250.  
  251. public bool:GetLookPos_Filter(ent, mask, any:client)
  252. {
  253.       return client != ent;
  254. }
Advertisement
Add Comment
Please, Sign In to add comment