From Urbana, 9 Months ago, written in C++.
Embed
  1. #include <sourcemod>
  2.  
  3. public void OnPluginStart()
  4. {
  5.         RegConsoleCmd("sm_guns", Command_Guns);
  6. }
  7.  
  8. public Action Command_Guns(int client, int args)
  9. {
  10.         DisplayGunMenu(client);
  11.         return Plugin_Handled;
  12. }
  13.  
  14. public int MenuHandler_Guns(Menu menu, MenuAction action, int param1, int param2)
  15. {
  16.         if (action == MenuAction_Select)
  17.         {
  18.                 char selection[4];
  19.                 if (!menu.GetItem(param2, selection, sizeof(selection)))
  20.                         return;
  21.  
  22.                 if (StrEqual(selection, "p"))
  23.                         DisplayPrimaryMenu(param1);
  24.                 else if (StrEqual(selection, "s"))
  25.                         DisplaySecondaryMenu(param1);
  26.  
  27.         }
  28.         else if (action == MenuAction_End)
  29.         {
  30.                 delete menu;
  31.         }
  32. }
  33.  
  34. public int MenuHandler_Primary(Menu menu, MenuAction action, int param1, int param2)
  35. {
  36.         if (action == MenuAction_Select)
  37.         {
  38.                 char weapon[64];
  39.                 if (!menu.GetItem(param2, weapon, sizeof(weapon)))
  40.                         return;
  41.  
  42.                 ReplacePlayerWeapon(param1, weapon, CS_SLOT_PRIMARY);
  43.         }
  44.         else if (action == MenuAction_Cancel)
  45.         {
  46.                 if (param2 == MenuCancel_ExitBack)
  47.                         DisplayGunMenu(param1);
  48.         }
  49.         else if (action == MenuAction_End)
  50.         {
  51.                 delete menu;
  52.         }
  53. }
  54.  
  55. public int MenuHandler_Secondary(Menu menu, MenuAction action, int param1, int param2)
  56. {
  57.         if (action == MenuAction_Select)
  58.         {
  59.                 char weapon[64];
  60.                 if (!menu.GetItem(param2, weapon, sizeof(weapon)))
  61.                         return;
  62.  
  63.                 ReplacePlayerWeapon(param1, weapon, CS_SLOT_SECONDARY);
  64.         }
  65.         else if (action == MenuAction_Cancel)
  66.         {
  67.                 if (param2 == MenuCancel_ExitBack)
  68.                         DisplayGunMenu(param1);
  69.         }
  70.         else if (action == MenuAction_End)
  71.         {
  72.                 delete menu;
  73.         }
  74. }
  75.  
  76. void DisplayGunMenu(int client)
  77. {
  78.         Menu menu = new Menu(MenuHandler_Guns);
  79.         menu.SetTitle("Guns Menu");
  80.         menu.AddItem("p", "Primary");
  81.         menu.AddItem("s", "Secondary");
  82.         menu.Display(client, MENU_TIME_FOREVER);
  83. }
  84.  
  85. void DisplayPrimaryMenu(int client)
  86. {
  87.         Menu menu = new Menu(MenuHandler_Primary);
  88.         menu.SetTitle("Primary Guns");
  89.         menu.AddItem("weapon_ak47", "AK47");
  90.         menu.AddItem("weapon_awp", "AWP");
  91.         menu.ExitBackButton = true;
  92.         menu.Display(client, MENU_TIME_FOREVER);
  93. }
  94.  
  95. void DisplaySecondaryMenu(int client)
  96. {
  97.         Menu menu = new Menu(MenuHandler_Secondary);
  98.         menu.SetTitle("Secondary Guns");
  99.         menu.AddItem("weapon_usp_silencer", "USP-S");
  100.         menu.AddItem("weapon_glock", "Glock");
  101.         menu.ExitBackButton = true;
  102.         menu.Display(client, MENU_TIME_FOREVER);
  103. }
  104.  
  105. void ReplacePlayerWeapon(int client, const char[] weapon, int slot)
  106. {
  107.         char curWep[64];
  108.         GetClientWeapon(client, curWep, sizeof(curWep));
  109.        
  110.         if (StrEqual(curWep, weapon))
  111.                 return;
  112.        
  113.         int weaponSlot = GetPlayerWeaponSlot(client, slot);
  114.         if (weaponSlot != -1)
  115.         {
  116.                 RemovePlayerItem(client, weaponSlot);
  117.                 AcceptEntityInput(weaponSlot, "Kill");
  118.         }
  119.        
  120.         if (IsPlayerAlive(client))
  121.                 GivePlayerItem(client, weapon);
  122. }