Advertisement
FlacoBey

Untitled

Jun 7th, 2019
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 11.70 KB | None | 0 0
  1. #include <sourcemod>
  2. #include <sdktools>
  3. #include <sdkhooks>
  4.  
  5. #pragma newdecls required
  6. #pragma semicolon 1
  7.  
  8. bool IsPoint[MAXPLAYERS+1] = false;
  9. int iCount[MAXPLAYERS+1] = 0;
  10.  
  11. bool IsHeal[MAXPLAYERS+1] = false;
  12. int iCountHeal[MAXPLAYERS+1] = 0;
  13.  
  14. public void OnPluginStart()
  15. {
  16.     AddCommandListener(HookPlayerChat, "say");
  17.     RegAdminCmd("sm_a", iAdmin, ADMFLAG_ROOT);
  18. }
  19.  
  20. public Action iAdmin (int client, int args)
  21. {
  22.     DisplayPlayersControl(client);
  23. }
  24.  
  25. public Action HookPlayerChat(int iClient, const char[] sCommand, int iArgs)
  26. {
  27.     if (StrEqual(sCommand, "say") || StrEqual(sCommand, "say_team"))
  28.     {
  29.         if(IsPoint[iClient])
  30.         {
  31.             char sArg[56];
  32.             GetCmdArg(1, sArg, sizeof(sArg));
  33.             if(StrEqual(sArg, "reset"))
  34.             {
  35.                 IsPoint[iClient] = false;
  36.                 PrintToChat(iClient, "\x04•[A++] \x05Сброшено.");
  37.                 return Plugin_Handled;
  38.             }
  39.             else
  40.             {
  41.                 DisplayHurtTarget(iClient);
  42.                 iCount[iClient] = StringToInt(sArg);
  43.                 IsPoint[iClient] = false;
  44.                 return Plugin_Handled;
  45.             }
  46.         }
  47.         if(IsHeal[iClient])
  48.         {
  49.             char sArg[56];
  50.             GetCmdArg(1, sArg, sizeof(sArg));
  51.             if(StrEqual(sArg, "reset"))
  52.             {
  53.                 IsPoint[iClient] = false;
  54.                 PrintToChat(iClient, "\x04•[A++] \x05Сброшено.");
  55.                 return Plugin_Handled;
  56.             }
  57.             else
  58.             {
  59.                 DisplaySetHealT(iClient);
  60.                 iCountHeal[iClient] = StringToInt(sArg);
  61.                 IsHeal[iClient] = false;
  62.                 return Plugin_Handled;
  63.             }
  64.         }
  65.     }
  66.     return Plugin_Continue;
  67. }  
  68.  
  69. void DisplayPlayersControl(int client)
  70. {  
  71.     Handle MainPlayerControl = CreateMenu(CallbackPlayerControl);
  72.     SetMenuTitle(MainPlayerControl, "Меню управление:");
  73.     AddMenuItem(MainPlayerControl, "0", "Убить");
  74.     AddMenuItem(MainPlayerControl, "1", "Кикнуть");
  75.     AddMenuItem(MainPlayerControl, "2", "Нанести урон");
  76.     AddMenuItem(MainPlayerControl, "3", "Вылечить");
  77.     AddMenuItem(MainPlayerControl, "4", "Установить хп");
  78.     SetMenuExitButton(MainPlayerControl, true);
  79.     DisplayMenu(MainPlayerControl, client, MENU_TIME_FOREVER);
  80. }
  81.  
  82. void DisplaySetHealT(int client)
  83. {  
  84.     Handle MainHurtTarget = CreateMenu(CallbackSetHealth);
  85.     SetMenuTitle(MainHurtTarget, "Кому:");
  86.  
  87.     char userid[15];
  88.     char name[32];
  89.     AddMenuItem(MainHurtTarget, "0", "Всем");
  90.     for (int i = 1; i <= MaxClients; i++)
  91.     {
  92.         if (IsValidClient(i) && IsPlayerAlive(i))
  93.         {
  94.             IntToString(GetClientUserId(i), userid, 15);
  95.             GetClientName(i, name, 32);
  96.             AddMenuItem(MainHurtTarget, userid, name);
  97.         }
  98.     }
  99.     SetMenuExitButton(MainHurtTarget, true);
  100.     DisplayMenu(MainHurtTarget, client, MENU_TIME_FOREVER);
  101. }
  102.  
  103. public int CallbackSetHealth(Handle CallbackMainHealTarget, MenuAction action, int client, int symbol)
  104. {
  105.     if (action == MenuAction_End)
  106.     {
  107.         CloseHandle(CallbackMainHealTarget);
  108.         return;
  109.         }
  110.     if (action != MenuAction_Select) return;
  111.    
  112.     if(symbol != 0)
  113.     {
  114.         char userid[15];
  115.         GetMenuItem(CallbackMainHealTarget, symbol, userid, sizeof(userid));
  116.         int target = GetClientOfUserId(StringToInt(userid));
  117.         if (IsValidClient(target))
  118.         {
  119.             SetEntityHealth(target, iCountHeal[client]);
  120.             SetEntPropFloat(target, Prop_Send, "m_healthBuffer", 0.0);
  121.             PrintToChatAll("\x04•[A++] \x04%N установил игроку %N %i хп", client, target, iCountHeal[client]);
  122.         }
  123.     }
  124.     else
  125.     {
  126.         for (int i = 1; i <= MaxClients; i++)
  127.         {
  128.             if (IsValidClient(i))
  129.             {
  130.                 SetEntityHealth(i, iCountHeal[client]);
  131.                 SetEntPropFloat(client, Prop_Send, "m_healthBuffer", 0.0);
  132.                 PrintToChat(i, "\x04•[A++] \x04%N установил всем %i хп", client, iCountHeal[client]);
  133.             }
  134.         }
  135.     }
  136. }
  137.  
  138. void DisplayHealTarget(int client)
  139. {  
  140.     Handle MainHurtTarget = CreateMenu(CallbackMainHealTarget);
  141.     SetMenuTitle(MainHurtTarget, "Кого вылечить:");
  142.  
  143.     char userid[15];
  144.     char name[32];
  145.     AddMenuItem(MainHurtTarget, "0", "Всех");
  146.     for (int i = 1; i <= MaxClients; i++)
  147.     {
  148.         if (IsValidClient(i) && IsPlayerAlive(i))
  149.         {
  150.             IntToString(GetClientUserId(i), userid, 15);
  151.             GetClientName(i, name, 32);
  152.             AddMenuItem(MainHurtTarget, userid, name);
  153.         }
  154.     }
  155.     SetMenuExitButton(MainHurtTarget, true);
  156.     DisplayMenu(MainHurtTarget, client, MENU_TIME_FOREVER);
  157. }
  158.  
  159. public int CallbackMainHealTarget(Handle CallbackMainHealTarget, MenuAction action, int client, int symbol)
  160. {
  161.     if (action == MenuAction_End)
  162.     {
  163.         CloseHandle(CallbackMainHealTarget);
  164.         return;
  165.         }
  166.     if (action != MenuAction_Select) return;
  167.    
  168.     if(symbol != 0)
  169.     {
  170.         char userid[15];
  171.         GetMenuItem(CallbackMainHealTarget, symbol, userid, sizeof(userid));
  172.         int target = GetClientOfUserId(StringToInt(userid));
  173.         if (IsValidClient(target))
  174.         {
  175.             GiveFunction(target, "health");
  176.             SetEntityHealth(target, 100);
  177.             SetEntPropFloat(target, Prop_Send, "m_healthBuffer", 0.0);
  178.             PrintToChatAll("\x04•[A++] \x04%N полечил игрока %N", client, target);
  179.         }
  180.     }
  181.     else
  182.     {
  183.         for (int i = 1; i <= MaxClients; i++)
  184.         {
  185.             if (IsValidClient(i))
  186.             {
  187.                 GiveFunction(client, "health");
  188.                 SetEntityHealth(i, 100);
  189.                 SetEntPropFloat(client, Prop_Send, "m_healthBuffer", 0.0);
  190.                 PrintToChat(i, "\x04•[A++] \x04%N полечил всех", client);
  191.             }
  192.         }
  193.     }
  194. }
  195.  
  196. public int CallbackPlayerControl(Handle CallbackPlayerControl, MenuAction action, int client, int symbol)
  197. {
  198.  
  199.     if (action == MenuAction_End)
  200.     {
  201.         CloseHandle(CallbackPlayerControl);
  202.         return;
  203.     }
  204.     if (action != MenuAction_Select) return;
  205.  
  206.     if(IsValidClient(client))
  207.     {
  208.         if(symbol == 0)
  209.         {
  210.             DisplayPlayersKill(client);
  211.         }
  212.         else if(symbol == 1)
  213.         {
  214.             DisplayPlayersKick(client);
  215.         }
  216.         else if(symbol == 2)
  217.         {
  218.             IsPoint[client] = true;
  219.             PrintToChat(client, "\x04•[A++]\x05Напишите в чат кол-во урона, для отмены введите reset.");
  220.         }
  221.         else if(symbol == 3)
  222.         {
  223.             DisplayHealTarget(client);
  224.         }
  225.         else if(symbol == 4)
  226.         {
  227.             IsHeal[client] = true;
  228.             PrintToChat(client, "\x04•[A++]\x05Напишите в чат кол-во хп, для отмены введите reset.");
  229.         }
  230.         else if(symbol == 5)
  231.         {
  232.             DisplayPlayersKick(client);
  233.         }
  234.     }
  235. }
  236.  
  237. void DisplayHurtTarget(int client)
  238. {  
  239.     Handle MainHurtTarget = CreateMenu(CallbackMainHurtTarget);
  240.     SetMenuTitle(MainHurtTarget, "Кого ранить:");
  241.     char userid[15];
  242.     char name[32];
  243.     AddMenuItem(MainHurtTarget, "0", "Всех");
  244.     for (int i = 1; i <= MaxClients; i++)
  245.     {
  246.         if (IsValidClient(i) && IsPlayerAlive(i))
  247.         {
  248.             IntToString(GetClientUserId(i), userid, 15);
  249.             GetClientName(i, name, 32);
  250.             AddMenuItem(MainHurtTarget, userid, name);
  251.         }
  252.     }
  253.     SetMenuExitButton(MainHurtTarget, true);
  254.     DisplayMenu(MainHurtTarget, client, MENU_TIME_FOREVER);
  255. }
  256.  
  257. public int CallbackMainHurtTarget(Handle CallbackMainHurtTarget, MenuAction action, int client, int symbol)
  258. {
  259.     if (action == MenuAction_End)
  260.     {
  261.         CloseHandle(CallbackMainHurtTarget);
  262.         return;
  263.         }
  264.     if (action != MenuAction_Select) return;
  265.    
  266.     if(symbol != 0)
  267.     {
  268.         char userid[15];
  269.         GetMenuItem(CallbackMainHurtTarget, symbol, userid, sizeof(userid));
  270.         int target = GetClientOfUserId(StringToInt(userid));
  271.         if (IsValidClient(target))
  272.         {
  273.             ForceDamageEntity(client, iCount[client], target);
  274.         }
  275.     }
  276.     else
  277.     {
  278.         for (int i = 1; i <= MaxClients; i++)
  279.         {
  280.             if (IsValidClient(i))
  281.             {
  282.                 ForceDamageEntity(client, iCount[client], i);
  283.             }
  284.         }
  285.     }
  286. }
  287.  
  288. void DisplayPlayersKick(int client)
  289. {  
  290.     Handle MainKicker = CreateMenu(CallbackMainKicker);
  291.     SetMenuTitle(MainKicker, "Кого кикнуть:");
  292.     char userid[15];
  293.     char name[32];
  294.     for (int i = 1; i <= MaxClients; i++)
  295.     {
  296.         if (IsValidClient(i))
  297.         {
  298.             IntToString(GetClientUserId(i), userid, 15);
  299.             GetClientName(i, name, 32);
  300.             AddMenuItem(MainKicker, userid, name);
  301.         }
  302.     }
  303.     SetMenuExitButton(MainKicker, true);
  304.     DisplayMenu(MainKicker, client, MENU_TIME_FOREVER);
  305. }
  306.  
  307. public int CallbackMainKicker(Handle CallbackMainKicker, MenuAction action, int client, int symbol)
  308. {
  309.     if (action == MenuAction_End)
  310.     {
  311.         CloseHandle(CallbackMainKicker);
  312.         return;
  313.         }
  314.     if (action != MenuAction_Select) return;
  315.     char userid[15];
  316.     GetMenuItem(CallbackMainKicker, symbol, userid, 15);
  317.     int target = GetClientOfUserId(StringToInt(userid));
  318.     if (IsValidClient(target))
  319.     {
  320.         KickClient(target, "Вы кикнуты администратором");
  321.         PrintToChatAll("\x04•[A++] \x05Игрок %N кикнут", target);
  322.         for (int i = 1; i <= MaxClients; i++)
  323.         {
  324.             if(!IsValidClient(i)) continue;
  325.            
  326.             if(GetAdminFlags(GetUserAdmin(i), Access_Effective) & ~ADMFLAG_ROOT)
  327.             {
  328.                 PrintToChat(i, "\x04•[A++] \x05%N был кикнут администратором %N", target, client);
  329.                 DisplayPlayersKill(client);
  330.             }
  331.         }
  332.     }
  333. }
  334.  
  335. void DisplayPlayersKill(int client)
  336. {  
  337.     Handle MainKiller = CreateMenu(CallbackMainKiller);
  338.     SetMenuTitle(MainKiller, "Кого убить:");
  339.     char userid[15];
  340.     char name[32];
  341.     for (int i = 1; i <= MaxClients; i++)
  342.     {
  343.         if (IsValidClient(i) && IsPlayerAlive(i))
  344.         {
  345.             IntToString(GetClientUserId(i), userid, 15);
  346.             GetClientName(i, name, 32);
  347.             AddMenuItem(MainKiller, userid, name);
  348.         }
  349.     }
  350.     SetMenuExitButton(MainKiller, true);
  351.     DisplayMenu(MainKiller, client, MENU_TIME_FOREVER);
  352. }
  353.  
  354. public int CallbackMainKiller(Handle CallbackMainKiller, MenuAction action, int client, int symbol)
  355. {
  356.     if (action == MenuAction_End)
  357.     {
  358.         CloseHandle(CallbackMainKiller);
  359.         return;
  360.         }
  361.     if (action != MenuAction_Select) return;
  362.     char userid[15];
  363.     GetMenuItem(CallbackMainKiller, symbol, userid, 15);
  364.     int target = GetClientOfUserId(StringToInt(userid));
  365.     if (IsValidClient(target))
  366.     {
  367.         ForcePlayerSuicide(target);
  368.         PrintToChatAll("\x04•[A++] \x05Игрок %N убит", target);
  369.     }
  370. }
  371.  
  372. stock void ForceDamageEntity(int causer, int damage, int victim) // thanks to 达斯*维达
  373. {
  374.     float victim_origin[3];
  375.     char rupture[32];
  376.     char damage_victim[32];
  377.     IntToString(damage, rupture, sizeof(rupture));
  378.     Format(damage_victim, sizeof(damage_victim), "hurtme%d", victim);
  379.     GetEntPropVector(victim, Prop_Send, "m_vecOrigin", victim_origin);
  380.     int entity = CreateEntityByName("point_hurt");
  381.     DispatchKeyValue(victim, "targetname", damage_victim);
  382.     DispatchKeyValue(entity, "DamageTarget", damage_victim);
  383.     DispatchKeyValue(entity, "Damage", rupture);
  384.     DispatchSpawn(entity);
  385.     TeleportEntity(entity, victim_origin, NULL_VECTOR, NULL_VECTOR);
  386.     AcceptEntityInput(entity, "Hurt", (causer > 0 && causer <= MaxClients) ? causer : -1);
  387.     DispatchKeyValue(entity, "classname", "point_hurt");
  388.     DispatchKeyValue(victim, "targetname", "null");
  389.     AcceptEntityInput(entity, "Kill");
  390. }
  391.  
  392. stock bool IsValidClient(int client)
  393. {
  394.     if ( client < 1 || client > MaxClients ) return false;
  395.     if ( !IsClientConnected( client )) return false;
  396.     if ( !IsClientInGame( client )) return false;
  397.     return true;
  398. }
  399.  
  400. void GiveFunction(int client, char[] name)
  401. {
  402.     char sBuf[32];
  403.     int flags = GetCommandFlags("give");
  404.     SetCommandFlags("give", flags & ~FCVAR_CHEAT);
  405.     FormatEx(sBuf, sizeof sBuf, "give %s", name);
  406.     FakeClientCommand(client, sBuf);
  407. }
  408.  
  409. stock void GetLookPos(int client, float v[3])
  410. {
  411.     float EyePosition[3], EyeAngles[3];
  412.     Handle h_trace;
  413.     GetClientEyePosition(client, EyePosition);
  414.     GetClientEyeAngles(client, EyeAngles);
  415.     h_trace = TR_TraceRayFilterEx(EyePosition, EyeAngles, MASK_SOLID, RayType_Infinite, GetLookPos_Filter, client);
  416.     TR_GetEndPosition(v, h_trace);
  417.     CloseHandle(h_trace);
  418. }
  419.  
  420. public bool GetLookPos_Filter(int ent, int mask, int client)
  421. {
  422.     return client != ent;
  423. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement