From anon, 2 Years ago, written in C++.
Embed
  1. #include <sourcemod>
  2. #include <sdktools>
  3. #include <adminmenu>
  4.  
  5. #define TANGO_REDIRECT "https://tangoworldwide.net/weblinks/webshortcuts_f.html?web="
  6. #define PLUGIN_PREFIX "[\x03SM\x01]"
  7.  
  8. public Plugin myinfo =
  9. {
  10.         name = "MoreCommands",
  11.         author = "Urbana",
  12.         description = "Adds new and useful commands to the server.",
  13.         version = "1.0.0",
  14.         url = "git.tangoworldwide.net/Urbana"
  15. };
  16.  
  17. public void OnPluginStart()
  18. {
  19.         LoadTranslations("common.phrases.txt");
  20.        
  21.         RegConsoleCmd("sm_joingroup", Command_JoinGroup, "Opens TangoWorldWide group page.");
  22.         RegConsoleCmd("sm_usp", Command_Usp, "Gives USP to client.");
  23.         RegAdminCmd("sm_disarm", Command_Disarm, ADMFLAG_GENERIC, "Removes all of a client's weapons.");
  24.         RegAdminCmd("sm_tp", Command_Teleport, ADMFLAG_GENERIC, "Teleport a client to you or vice versa.");
  25.         RegAdminCmd("sm_teleport", Command_Teleport, ADMFLAG_GENERIC, "Teleport a client to you or vice versa.");
  26. }
  27.  
  28. /* FUNCTIONS */
  29.  
  30. public void Disarm(int iClient)
  31. {
  32.         for (int i = 0; i < 5; i++)
  33.         {
  34.                 int iWeapon = 0;
  35.                 while (iWeapon != -1)
  36.                 {
  37.                         iWeapon = GetPlayerWeaponSlot(iClient, i);
  38.                         if (IsValidEntity(iWeapon))     RemovePlayerItem(iClient, iWeapon);
  39.                 }
  40.         }
  41. }
  42.  
  43. /* END FUNCTIONS */
  44.  
  45. public Action Command_JoinGroup(int iClient, int iArgs)
  46. {
  47.         char iUrl[512];
  48.         Format(iUrl, sizeof(iUrl), "%shttps://steamcommunity.com/groups/TangoWW", TANGO_REDIRECT);
  49.         ShowMOTDPanel(iClient, "TangoWorldWide Steam Group", iUrl, MOTDPANEL_TYPE_URL);
  50.         return Plugin_Handled;
  51. }
  52.  
  53. public Action Command_Disarm(int iClient, int iArgs)
  54. {
  55.         if (iArgs > 1)  ReplyToCommand(iClient, "[SM] Usage: sm_disarm <o:target>");
  56.         else if (iArgs == 0)
  57.         {
  58.                 Menu iDisarmMenu = new Menu(gDisarmHandler);
  59.                 iDisarmMenu.SetTitle("Disarm");
  60.                 AddTargetsToMenu2(iDisarmMenu, 0, COMMAND_FILTER_ALIVE);
  61.         }
  62.         else if (iArgs == 1)
  63.         {
  64.                 char iPattern[512];
  65.                 GetCmdArg(1, iPattern, sizeof(iPattern));
  66.                
  67.                 int iTargets[MAXPLAYERS + 1];
  68.                 char iTargetName[512];
  69.                 bool iMl;
  70.                 int iCount = ProcessTargetString(iPattern, iClient, iTargets, sizeof(iTargets), COMMAND_FILTER_ALIVE, iTargetName, sizeof(iTargetName), iMl);
  71.                
  72.                 if (iCount < 0) ReplyToTargetError(iClient, iCount);
  73.                 else
  74.                 {
  75.                         for (int iCurrent = 0; iCurrent < iCount; iCurrent++)
  76.                         {
  77.                                 Disarm(iTargets[iCurrent]);
  78.                                 LogAction(iClient, iTargets[iCurrent], "\"%L\" disarmed player \"%L\"", iClient, iTargets[iCurrent]);
  79.                                 ReplyToCommand(iClient, "%s Disarmed %N.", PLUGIN_PREFIX, iTargets[iCurrent]);
  80.                         }
  81.                 }
  82.         }
  83.         return Plugin_Handled;
  84. }
  85.  
  86. public Action Command_Usp(int iClient, int iArgs)
  87. {
  88.         GivePlayerItem(iClient, "weapon_hpk2000");
  89.         ReplyToCommand(iClient, "%s You now have a USP.", PLUGIN_PREFIX);
  90.         return Plugin_Handled;
  91. }
  92.  
  93. public Action Command_Teleport(int iClient, int iArgs)
  94. {
  95.         if (iArgs > 2)  ReplyToCommand(iClient, "[SM] Usage: sm_tp <target>");
  96.         else if (iArgs == 0)
  97.         {
  98.                 Menu iTeleportMenu = new Menu(gTeleportHandler);
  99.                 iTeleportMenu.SetTitle("Teleport");
  100.                 AddTargetsToMenu2(iTeleportMenu, 0, COMMAND_FILTER_ALIVE);
  101.                 iTeleportMenu.Display(iClient, 20);
  102.         }
  103.         else if (iArgs == 1)
  104.         {
  105.                 char iPattern[512];
  106.                 GetCmdArg(1, iPattern, sizeof(iPattern));
  107.                 int iTarget = FindTarget(iClient, iPattern, false, false);
  108.                 if (iTarget == -1)      ReplyToTargetError(iClient, iTarget);
  109.                 else
  110.                 {
  111.                         if (IsValidEntity(iTarget))
  112.                         {
  113.                                 float iTargetOrigin[3];
  114.                                 GetClientAbsOrigin(iTarget, iTargetOrigin);
  115.                                 TeleportEntity(iClient, iTargetOrigin, NULL_VECTOR, NULL_VECTOR);
  116.                                 ReplyToCommand(iClient, "%s Teleported to %N.", PLUGIN_PREFIX, iTarget);
  117.                                 LogAction(iClient, iTarget, "\"%L\" teleported to \"%L\"", iClient, iTarget);
  118.                         }
  119.                 }
  120.         }
  121.         else if (iArgs == 2)
  122.         {
  123.                 char iPattern1[512];
  124.                 char iPattern2[512];
  125.                 GetCmdArg(1, iPattern1, sizeof(iPattern1));
  126.                 GetCmdArg(2, iPattern2, sizeof(iPattern2));
  127.                
  128.                 int iSource = FindTarget(iClient, iPattern1, false, false);
  129.                 int iTarget = FindTarget(iClient, iPattern2, false, false);
  130.                
  131.                 if (iSource == -1 || iTarget == -1)     ReplyToTargetError(iClient, -1);
  132.                 else
  133.                 {
  134.                         float iTargetOrigin[3];
  135.                         GetClientAbsOrigin(iTarget, iTargetOrigin);
  136.                         TeleportEntity(iSource, iTargetOrigin, NULL_VECTOR, NULL_VECTOR);
  137.                         PrintToChatAll("%s %N teleported %N to %N.", PLUGIN_PREFIX, iClient, iSource, iTarget);
  138.                         LogAction(iClient, iTarget, "\"%L\" teleported %N to \"%L\"", iClient, iSource, iTarget);
  139.                 }
  140.         }
  141. }
  142.  
  143. public int gDisarmHandler(Menu iMenu, MenuAction iAction, int iParam1, int iParam2)
  144. {
  145.         if (iAction == MenuAction_Select)
  146.         {
  147.                 char iInfo[512];
  148.                 iMenu.GetItem(iParam2, iInfo, sizeof(iInfo));
  149.                
  150.                 int iClient = GetClientOfUserId(StringToInt(iInfo));
  151.                 Disarm(iClient);
  152.                 LogAction(iParam1, iClient, "\"%L\" disarmed player \"%L\"", iParam1, iClient);
  153.                 PrintToChat(iParam1, "%s Disarmed %N.", iClient);
  154.         }
  155.         else if (iAction == MenuAction_End)     delete iMenu;
  156. }
  157.  
  158. public int gTeleportHandler(Menu iMenu, MenuAction iAction, int iParam1, int iParam2)
  159. {
  160.         if (iAction == MenuAction_Select)
  161.         {
  162.                 char iInfo[512];
  163.                 iMenu.GetItem(iParam2, iInfo, sizeof(iInfo));
  164.                        
  165.                 int iTarget = GetClientOfUserId(StringToInt(iInfo));
  166.                
  167.                 if (IsValidEntity(iTarget))
  168.                 {
  169.                         float iTargetOrigin[3];
  170.                         GetClientAbsOrigin(iTarget, iTargetOrigin);
  171.                         TeleportEntity(iParam1, iTargetOrigin, NULL_VECTOR, NULL_VECTOR);
  172.                         LogAction(iParam1, iTarget, "\"%L\" teleported to \"%L\"", iParam1, iTarget);
  173.                 }
  174.                 else PrintToChat(iParam1, "%s Client is no longer connected.", PLUGIN_PREFIX);
  175.                
  176.         }
  177.         else if (iAction == MenuAction_End)     delete iMenu;
  178. }