FlacoBey

Untitled

Jun 6th, 2019
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.53 KB | None | 0 0
  1. #pragma semicolon 1
  2. #pragma newdecls required
  3.  
  4. #include <sourcemod>
  5. #include <sdktools>
  6.  
  7. static float vPos[3];
  8. bool iSee = false;
  9.  
  10. public void OnPluginStart()
  11. {
  12.     RegConsoleCmd("sm_spawn_spit", sm_test);
  13.     RegConsoleCmd("sm_setcoordinates", smCoordinates);
  14. }
  15.  
  16. public Action sm_test(int client, int args)
  17. {
  18.     if(!IsValid(client)) return Plugin_Handled;
  19.    
  20.     int spawnflags = GetCommandFlags("z_spawn_old");
  21.     SetCommandFlags("z_spawn_old", spawnflags & ~FCVAR_CHEAT);
  22.     iSee = true;
  23.     FakeClientCommand(client, "z_spawn_old spitter auto");
  24.     iSee = false;
  25.     SetCommandFlags("z_spawn_old", spawnflags);
  26.     return Plugin_Handled;
  27. }
  28.  
  29. public void OnClientPutInServer(int client)
  30. {
  31.     if(iSee)
  32.     {
  33.         CreateTimer(0.1, CreateSpitter, client);
  34.     }
  35. }
  36.  
  37. public Action CreateSpitter(Handle timer, int client)
  38. {
  39.     if(IsValid(client))
  40.     {
  41.         TeleportEntity(client, vPos, NULL_VECTOR, NULL_VECTOR);
  42.     }
  43. }
  44.  
  45. public Action smCoordinates(int client, int args)
  46. {
  47.     DisplaySetCoordinates(client);
  48.     return Plugin_Handled;
  49. }
  50.  
  51. void DisplaySetCoordinates(int client)
  52. {  
  53.     Handle SetPos = CreateMenu(Callback);
  54.     SetMenuTitle(SetPos, "Тип:");
  55.  
  56.     AddMenuItem(SetPos, "0", "На прицел");
  57.     AddMenuItem(SetPos, "1", "На своё местоположение");
  58.     DisplayMenu(SetPos, client, MENU_TIME_FOREVER);
  59. }
  60.  
  61. public int Callback(Handle CallbackMoney, MenuAction action, int client, int symbol)
  62. {
  63.     if (action == MenuAction_End)
  64.     {
  65.         CloseHandle(CallbackMoney);
  66.         return;
  67.     }
  68.     if (action != MenuAction_Select) return;
  69.    
  70.     switch(symbol)
  71.     {
  72.         case 0:
  73.         {
  74.             GetLookPos(client, vPos);
  75.             PrintToChat(client, "Координаты успешно поставлены(%.03f, %.03f, %.03f)", vPos[0], vPos[1], vPos[2]);
  76.         }
  77.         default:
  78.         {
  79.             GetClientAbsOrigin(client, vPos);
  80.             PrintToChat(client, "Координаты успешно поставлены(%.03f, %.03f, %.03f)", vPos[0], vPos[1], vPos[2]);
  81.         }
  82.     }
  83. }
  84.  
  85. stock void GetLookPos(int client, float v[3])
  86. {
  87.     float EyePosition[3], EyeAngles[3];
  88.     Handle h_trace;
  89.     GetClientEyePosition(client, EyePosition);
  90.     GetClientEyeAngles(client, EyeAngles);
  91.     h_trace = TR_TraceRayFilterEx(EyePosition, EyeAngles, MASK_SOLID, RayType_Infinite, GetLookPos_Filter, client);
  92.     TR_GetEndPosition(v, h_trace);
  93.     CloseHandle(h_trace);
  94. }
  95.  
  96. public bool GetLookPos_Filter(int ent, int mask, any client)
  97. {
  98.     return client != ent;
  99. }
  100.  
  101. stock bool IsValid(int client)
  102. {
  103.     return client > 0 && client <= MaxClients && IsClientInGame(client) && !IsClientInKickQueue(client) && IsPlayerAlive(client);
  104. }
Advertisement
Add Comment
Please, Sign In to add comment