FlacoBey

Untitled

Jun 6th, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.48 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");
  21.     SetCommandFlags("z_spawn", spawnflags & ~FCVAR_CHEAT);
  22.     iSee = true;
  23.     FakeClientCommand(client, "z_spawn spitter");
  24.     iSee = false;
  25.     SetCommandFlags("z_spawn", 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.     TeleportEntity(client, vPos, NULL_VECTOR, NULL_VECTOR);
  40. }
  41.  
  42. public Action smCoordinates(int client, int args)
  43. {
  44.     DisplaySetCoordinates(client);
  45.     return Plugin_Handled;
  46. }
  47.  
  48. void DisplaySetCoordinates(int client)
  49. {  
  50.     Handle SetPos = CreateMenu(Callback);
  51.     SetMenuTitle(SetPos, "Тип:");
  52.  
  53.     AddMenuItem(SetPos, "0", "На прицел");
  54.     AddMenuItem(SetPos, "1", "На своё местоположение");
  55.     DisplayMenu(SetPos, client, MENU_TIME_FOREVER);
  56. }
  57.  
  58. public int Callback(Handle CallbackMoney, MenuAction action, int client, int symbol)
  59. {
  60.     if (action == MenuAction_End)
  61.     {
  62.         CloseHandle(CallbackMoney);
  63.         return;
  64.     }
  65.     if (action != MenuAction_Select) return;
  66.    
  67.     switch(symbol)
  68.     {
  69.         case 0:
  70.         {
  71.             GetLookPos(client, vPos);
  72.             PrintToChat(client, "Координаты успешно поставлены(%.03f, %.03f, %.03f)", vPos[0], vPos[1], vPos[2]);
  73.         }
  74.         default:
  75.         {
  76.             GetClientAbsOrigin(client, vPos);
  77.             PrintToChat(client, "Координаты успешно поставлены(%.03f, %.03f, %.03f)", vPos[0], vPos[1], vPos[2]);
  78.         }
  79.     }
  80. }
  81.  
  82. stock void GetLookPos(int client, float v[3])
  83. {
  84.     float EyePosition[3], EyeAngles[3];
  85.     Handle h_trace;
  86.     GetClientEyePosition(client, EyePosition);
  87.     GetClientEyeAngles(client, EyeAngles);
  88.     h_trace = TR_TraceRayFilterEx(EyePosition, EyeAngles, MASK_SOLID, RayType_Infinite, GetLookPos_Filter, client);
  89.     TR_GetEndPosition(v, h_trace);
  90.     CloseHandle(h_trace);
  91. }
  92.  
  93. public bool GetLookPos_Filter(int ent, int mask, any client)
  94. {
  95.     return client != ent;
  96. }
  97.  
  98. stock bool IsValid(int client)
  99. {
  100.     return client > 0 && client <= MaxClients && IsClientInGame(client) && !IsClientInKickQueue(client) && IsPlayerAlive(client);
  101. }
Advertisement
Add Comment
Please, Sign In to add comment