Xyberviri

Kits.cs

Mar 29th, 2015
739
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 24.75 KB | None | 0 0
  1.  
  2. using System.Collections.Generic;
  3. using System;
  4. using System.Reflection;
  5. using System.Data;
  6. using UnityEngine;
  7. using Oxide.Core;
  8. using Oxide.Core.Configuration;
  9. using Oxide.Core.Logging;
  10. using Oxide.Core.Plugins;
  11.  
  12. namespace Oxide.Plugins
  13. {
  14.     [Info("Kits", "Reneb", "2.0.11")]
  15.     class Kits : RustPlugin
  16.     {
  17.         static string noAccess = "You are not allowed to use this command";
  18.         static List<object> permissionsList = GetDefaultPermList();
  19.         static int authLevel = 1;
  20.         static string itemNotFound = "Item not found: ";
  21.         static string cantUseKit = "You are not allowed to use this kit";
  22.         static string maxKitReached = "You've used all your tokens for this kit";
  23.         static string unknownKit = "This kit doesn't exist";
  24.         static string kitredeemed = "You've redeemed a kit";
  25.         static string kitsreset = "All kits data from players were deleted";
  26.  
  27.         private DateTime epoch;
  28.         private Core.Configuration.DynamicConfigFile KitsConfig;
  29.         private Core.Configuration.DynamicConfigFile KitsData;
  30.         private bool Changed;
  31.         private Dictionary<string, string> displaynameToShortname;
  32.         private List<string> permNames = new List<string>();
  33.          
  34.         void Loaded()
  35.         {
  36.             epoch = new System.DateTime(1970, 1, 1);
  37.             displaynameToShortname = new Dictionary<string, string>();
  38.             foreach (var perm in permissionsList)
  39.             {
  40.                 if (!permission.PermissionExists(perm.ToString())) permission.RegisterPermission(perm.ToString(), this);
  41.                 if(!permNames.Contains(perm.ToString())) permNames.Add(perm.ToString());
  42.             }
  43.             InitializeKits();
  44.             foreach(Signage sign in Resources.FindObjectsOfTypeAll<Signage>())
  45.             {
  46.                 sign.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);
  47.             }
  48.         }
  49.         void OnServerInitialized()
  50.         {
  51.             InitializeTable();
  52.         }
  53.         double CurrentTime()
  54.         {
  55.             return System.DateTime.UtcNow.Subtract(epoch).TotalSeconds;
  56.         }
  57.         private void InitializeKits()
  58.         {
  59.             KitsConfig = Interface.GetMod().DataFileSystem.GetDatafile("Kits_List");
  60.             KitsData = Interface.GetMod().DataFileSystem.GetDatafile("Kits_Data");
  61.         }
  62.         private void SaveKits()
  63.         {
  64.             Interface.GetMod().DataFileSystem.SaveDatafile("Kits_List");
  65.         }
  66.         private void SaveKitsData()
  67.         {
  68.             Interface.GetMod().DataFileSystem.SaveDatafile("Kits_Data");
  69.         }
  70.         private void InitializeTable()
  71.         {
  72.             displaynameToShortname.Clear();
  73.             List<ItemDefinition> ItemsDefinition = ItemManager.GetItemDefinitions() as List<ItemDefinition>;
  74.             foreach (ItemDefinition itemdef in ItemsDefinition)
  75.             {
  76.                 displaynameToShortname.Add(itemdef.displayName.english.ToString().ToLower(), itemdef.shortname.ToString());
  77.             }
  78.         }
  79.  
  80.         private void CheckCfg<T>(string Key, ref T var)
  81.         {
  82.             if (Config[Key] is T)
  83.                 var = (T)Config[Key];
  84.             else
  85.                 Config[Key] = var;
  86.         }
  87.  
  88.         void Init()
  89.         {
  90.             CheckCfg<int>("Settings: authLevel", ref authLevel);
  91.             CheckCfg<List<object>>("Settings: Permissions List", ref permissionsList);
  92.             CheckCfg<string>("Messages: noAccess", ref noAccess);
  93.             CheckCfg<string>("Messages: itemNotFound", ref itemNotFound);
  94.             CheckCfg<string>("Messages: cantUseKit", ref cantUseKit);
  95.             CheckCfg<string>("Messages: maxKitReached", ref maxKitReached);
  96.             CheckCfg<string>("Messages: unknownKit", ref unknownKit);
  97.             CheckCfg<string>("Messages: kitredeemed", ref kitredeemed);
  98.             CheckCfg<string>("Messages: kitsreset", ref kitsreset);
  99.             SaveConfig();
  100.  
  101.         }
  102.  
  103.         void LoadDefaultConfig() { }
  104.  
  105.         static List<object> GetDefaultPermList()
  106.         {
  107.             var newobject = new List<object>();
  108.             newobject.Add("vip");
  109.             newobject.Add("donator");
  110.             return newobject;
  111.         }
  112.  
  113.         bool hasAccess(BasePlayer player)
  114.         {
  115.             if (player.net.connection.authLevel >= authLevel)
  116.                 return true;
  117.             return false;
  118.         }
  119.         bool hasVip(object source, string name)
  120.         {
  121.             if (!(source is BasePlayer)) return true;
  122.             if (((BasePlayer)source).net.connection.authLevel >= authLevel) return true;
  123.             return permission.UserHasPermission(((BasePlayer)source).userID.ToString(), name);
  124.         }
  125.         public object GiveItem(BasePlayer player, string itemname, int amount, ItemContainer pref)
  126.         {
  127.             itemname = itemname.ToLower();
  128.  
  129.             bool isBP = false;
  130.             if (itemname.EndsWith(" bp"))
  131.             {
  132.                 isBP = true;
  133.                 itemname = itemname.Substring(0, itemname.Length - 3);
  134.             }
  135.             if (displaynameToShortname.ContainsKey(itemname))
  136.                 itemname = displaynameToShortname[itemname];
  137.             var definition = ItemManager.FindItemDefinition(itemname);
  138.             if (definition == null)
  139.                 return string.Format("{0} {1}", itemNotFound, itemname);
  140.             int giveamount = 0;
  141.             int stack = (int)definition.stackable;
  142.             if (isBP)
  143.                 stack = 1;
  144.             if (stack < 1) stack = 1;
  145.             for (var i = amount; i > 0; i = i - stack)
  146.             {
  147.                 if (i >= stack)
  148.                     giveamount = stack;
  149.                 else
  150.                     giveamount = i;
  151.                 if (giveamount < 1) return true;
  152.                 player.inventory.GiveItem(ItemManager.CreateByItemID((int)definition.itemid, giveamount, isBP), pref);
  153.             }
  154.             return true;
  155.         }
  156.         private void SendTheReply(object source, string msg)
  157.         {
  158.             if (source is BasePlayer)
  159.                 SendReply((BasePlayer)source, msg);
  160.             else if (source is ConsoleSystem.Arg)
  161.                 SendReply((ConsoleSystem.Arg)source, msg);
  162.             else
  163.                 Puts(msg);
  164.         }
  165.         void SendList(object source)
  166.         {
  167.             var kitEnum = KitsConfig.GetEnumerator();
  168.             int authlevel = GetSourceLevel(source);
  169.  
  170.             while (kitEnum.MoveNext())
  171.             {
  172.                 int kitlvl = 0;
  173.                 string kitdescription = string.Empty;
  174.                 string options = string.Empty;
  175.                 string kitname = string.Empty;
  176.                 options = string.Empty;
  177.                 kitname = kitEnum.Current.Key.ToString();
  178.                 var kitdata = kitEnum.Current.Value as Dictionary<string, object>;
  179.                 if (kitdata.ContainsKey("description"))
  180.                     kitdescription = kitdata["description"].ToString();
  181.                 if (kitdata.ContainsKey("level"))
  182.                 {
  183.                     kitlvl = (int)kitdata["level"];
  184.                     options = string.Format("{0} - {1}+", options, kitlvl.ToString());
  185.                 }
  186.                 foreach (string name in permNames)
  187.                 {
  188.                     if (kitdata.ContainsKey(name))
  189.                     {
  190.                         options = string.Format("{0} - {1}", options, name);
  191.                         if (!hasVip(source, name)) kitlvl = authLevel;
  192.                     }
  193.                 }
  194.                
  195.                 if (kitdata.ContainsKey("max"))
  196.                 {
  197.                     options = string.Format("{0} - {1} max", options, kitdata["max"].ToString());
  198.                 }
  199.                 if (kitdata.ContainsKey("cooldown"))
  200.                 {
  201.                     options = string.Format("{0} - {1}s cooldown", options, kitdata["cooldown"].ToString());
  202.                 }
  203.                 if (kitlvl <= authlevel)
  204.                 {
  205.                     SendTheReply(source, string.Format("{0} - {1} {2}", kitname, kitdescription, options));
  206.                 }
  207.             }
  208.         }
  209.         int GetSourceLevel(object source)
  210.         {
  211.             if (source is BasePlayer)
  212.             {
  213.                 return ((BasePlayer)source).net.connection.authLevel;
  214.             }
  215.             return 2;
  216.         }
  217.  
  218.         void cmdAddKit(BasePlayer player, string[] args)
  219.         {
  220.             if (args.Length < 3)
  221.             {
  222.                 SendTheReply(player, "/kit add \"KITNAME\" \"DESCRIPTION\" -option1 -option2 etc, Everything you have in your inventory will be used in the kit");
  223.                 SendTheReply(player, "Options avaible:");
  224.                 SendTheReply(player, "-maxXX => max times someone can use this kit. Default is infinite.");
  225.                 SendTheReply(player, "-cooldownXX => cooldown of the kit. Default is none.");
  226.                 SendTheReply(player, "-authlevelXX => Level needed to use this plugin: 0, 1 or 2. Default is 0");
  227.                 foreach( string name in permNames)
  228.                 {
  229.                     SendTheReply(player, string.Format("-{0} => Allow to give this kit only to {0}s", name));
  230.                 }
  231.                 return;
  232.             }
  233.             string kitname = args[1].ToString();
  234.             string desription = args[2].ToString();
  235.             int authlevel = 0;
  236.             int max = -1;
  237.             var vip = new List<string>();
  238.             double cooldown = 0.0;
  239.             if (KitsConfig[kitname] != null)
  240.             {
  241.                 SendTheReply(player, string.Format("The kit {0} already exists. Delete it first or change the name.", kitname));
  242.                 return;
  243.             }
  244.             if (args.Length > 3)
  245.             {
  246.                 object validoptions = VerifyOptions(args, out authlevel, out max, out cooldown, out vip);
  247.                 if (validoptions is string)
  248.                 {
  249.                     SendTheReply(player, (string)validoptions);
  250.                     return;
  251.                 }
  252.             }
  253.             Dictionary<string, object> kitsitems = GetNewKitFromPlayer(player);
  254.             Dictionary<string, object> newkit = new Dictionary<string, object>();
  255.             newkit.Add("items", kitsitems);
  256.             if (authlevel > 0)
  257.                 newkit.Add("level", authlevel);
  258.             if (max >= 0)
  259.                 newkit.Add("max", max);
  260.             foreach (string name in vip)
  261.             {
  262.                 newkit.Add(name, true);
  263.             }
  264.             if (cooldown > 0.0)
  265.                 newkit.Add("cooldown", cooldown);
  266.             newkit.Add("description", desription);
  267.             KitsConfig[kitname] = newkit;
  268.             SaveKits();
  269.         }
  270.         Dictionary<string, object> GetNewKitFromPlayer(BasePlayer player)
  271.         {
  272.             Dictionary<string, object> kitsitems = new Dictionary<string, object>();
  273.             List<object> wearList = new List<object>();
  274.             List<object> mainList = new List<object>();
  275.             List<object> beltList = new List<object>();
  276.  
  277.             ItemContainer wearcontainer = player.inventory.containerWear;
  278.             ItemContainer maincontainer = player.inventory.containerMain;
  279.             ItemContainer beltcontainer = player.inventory.containerBelt;
  280.  
  281.             string itemname = string.Empty;
  282.             foreach (Item item in (List<Item>)wearcontainer.itemList)
  283.             {
  284.                 Dictionary<string, object> newObject = new Dictionary<string, object>();
  285.  
  286.  
  287.                 newObject.Add(item.info.shortname.ToString(), (int)item.amount);
  288.                 wearList.Add(newObject);
  289.             }
  290.  
  291.             foreach (Item item in (List<Item>)maincontainer.itemList)
  292.             {
  293.                 Dictionary<string, object> newObject = new Dictionary<string, object>();
  294.                 itemname = item.info.shortname.ToString();
  295.                 if ((bool)item.isBlueprint)
  296.                     itemname = string.Format("{0} BP", itemname);
  297.                 newObject.Add(itemname, (int)item.amount);
  298.                 mainList.Add(newObject);
  299.             }
  300.             foreach (Item item in (List<Item>)beltcontainer.itemList)
  301.             {
  302.                 Dictionary<string, object> newObject = new Dictionary<string, object>();
  303.                 itemname = item.info.shortname.ToString();
  304.                 if ((bool)item.isBlueprint)
  305.                     itemname = string.Format("{0} BP", itemname);
  306.                 newObject.Add(itemname, (int)item.amount);
  307.                 beltList.Add(newObject);
  308.             }
  309.             player.inventory.Strip();
  310.             kitsitems.Add("wear", wearList);
  311.             kitsitems.Add("main", mainList);
  312.             kitsitems.Add("belt", beltList);
  313.             return kitsitems;
  314.         }
  315.         object VerifyOptions(string[] args, out int authlevel, out int max, out double cooldown, out List<string> vip)
  316.         {
  317.             authlevel = 0;
  318.             max = -1;
  319.             cooldown = 0.0;
  320.             vip = new List<string>();
  321.             bool error = true;
  322.             for (var i = 3; i < args.Length; i++)
  323.             {
  324.                 int substring = 0;
  325.                 if (args[i].StartsWith("-max"))
  326.                 {
  327.                     substring = 4;
  328.                     if (!(int.TryParse(args[i].Substring(substring), out max)))
  329.                         return string.Format("Wrong Number Value for : {0}", args[i].ToString());
  330.                 }
  331.                 else if (args[i].StartsWith("-cooldown"))
  332.                 {
  333.                     substring = 9;
  334.                     if (!(double.TryParse(args[i].Substring(substring), out cooldown)))
  335.                         return string.Format("Wrong Number Value for : {0}", args[i].ToString());
  336.                 }
  337.                 else if (args[i].StartsWith("-authlevel"))
  338.                 {
  339.                     substring = 10;
  340.                     if (!(int.TryParse(args[i].Substring(substring), out authlevel)))
  341.                         return string.Format("Wrong Number Value for : {0}", args[i].ToString());
  342.                     if (authlevel > 2)
  343.                         authlevel = 2;
  344.                     if (authlevel < 0)
  345.                         authlevel = 0;
  346.                 }
  347.                 else
  348.                 {
  349.                     error = true;
  350.                     foreach (string name in permNames)
  351.                     {
  352.                         if(args[i].StartsWith("-"+name))
  353.                         {
  354.                             if (!vip.Contains(name)) vip.Add(name);
  355.                             error = false;
  356.                         }
  357.                     }
  358.                     if(error)
  359.                         return string.Format("Wrong Options: {0}", args[i].ToString());
  360.                 }
  361.             }
  362.             return true;
  363.         }
  364.         void cmdResetKits(BasePlayer player, string[] args)
  365.         {
  366.             KitsData.Clear();
  367.             SendTheReply(player, "All kits data from players were deleted");
  368.             SaveKitsData();
  369.         }
  370.         void OnPlayerRespawned(BasePlayer player)
  371.         {
  372.             if (KitsConfig["autokit"] == null) return;
  373.             object thereturn = Interface.GetMod().CallHook("canRedeemKit", new object[] { player });
  374.             if (thereturn == null)
  375.             {
  376.                 player.inventory.Strip();
  377.                 GiveKit(player, "autokit");
  378.             }
  379.         }
  380.         void cmdRemoveKit(BasePlayer player, string[] args)
  381.         {
  382.             if (args.Length < 2)
  383.             {
  384.                 SendTheReply(player, "Kit must specify the name of the kit that you want to remove");
  385.                 return;
  386.             }
  387.             int authlevel = GetSourceLevel(player);
  388.             int kitlvl = 0;
  389.             string kitname = args[1].ToString();
  390.             if (KitsConfig[kitname] == null)
  391.             {
  392.                 SendTheReply(player, string.Format("The kit {0} doesn't exist", kitname));
  393.                 return;
  394.             }
  395.  
  396.             var kitdata = (KitsConfig[kitname]) as Dictionary<string, object>;
  397.             if (kitdata.ContainsKey("level"))
  398.                 kitlvl = (int)kitdata["level"];
  399.             if (kitlvl > 2)
  400.                 kitlvl = 2;
  401.             if (kitlvl > authlevel)
  402.             {
  403.                 SendTheReply(player, "You don't have the level to remove this kit");
  404.                 return;
  405.             }
  406.             var newKits = new Dictionary<string, object>();
  407.             var enumkits = KitsConfig.GetEnumerator();
  408.             while (enumkits.MoveNext())
  409.             {
  410.                 if (enumkits.Current.Key.ToString() != kitname && enumkits.Current.Value != null)
  411.                 {
  412.                     newKits.Add(enumkits.Current.Key.ToString(), enumkits.Current.Value);
  413.                 }
  414.             }
  415.             KitsConfig.Clear();
  416.             foreach (KeyValuePair<string, object> pair in newKits)
  417.             {
  418.                 KitsConfig[pair.Key] = pair.Value;
  419.             }
  420.             SaveKits();
  421.             SendTheReply(player, string.Format("The kit {0} was successfully removed", kitname));
  422.         }
  423.         int GetKitLeft(BasePlayer player, string kitname, int max)
  424.         {
  425.             if (KitsData[player.userID.ToString()] == null) return max;
  426.             var data = KitsData[player.userID.ToString()] as Dictionary<string, object>;
  427.             if (!(data.ContainsKey(kitname))) return max;
  428.             var currentkit = data[kitname] as Dictionary<string, object>;
  429.             if (!(currentkit.ContainsKey("used"))) return max;
  430.             return (max - (int)currentkit["used"]);
  431.         }
  432.         double GetKitTimeleft(BasePlayer player, string kitname, double max)
  433.         {
  434.             if (KitsData[player.userID.ToString()] == null) return 0.0;
  435.             var data = KitsData[player.userID.ToString()] as Dictionary<string, object>;
  436.             if (!(data.ContainsKey(kitname))) return 0.0;
  437.             var currentkit = data[kitname] as Dictionary<string, object>;
  438.             if (!(currentkit.ContainsKey("cooldown"))) return 0.0;
  439.             return ((double)currentkit["cooldown"] - CurrentTime());
  440.         }
  441.         void TryGiveKit(BasePlayer player, string kitname)
  442.         {
  443.             if (KitsConfig[kitname] == null)
  444.             {
  445.                 SendTheReply(player, unknownKit);
  446.                 return;
  447.             }
  448.             object thereturn = Interface.GetMod().CallHook("canRedeemKit", new object[1] { player });
  449.             if (thereturn != null)
  450.             {
  451.                 if (thereturn is string)
  452.                 {
  453.                     SendTheReply(player, (string)thereturn);
  454.                 }
  455.                 return;
  456.             }
  457.  
  458.             Dictionary<string, object> kitdata = (KitsConfig[kitname]) as Dictionary<string, object>;
  459.             double cooldown = 0.0;
  460.             int kitleft = 1;
  461.             int kitlvl = 0;
  462.  
  463.             if (kitdata.ContainsKey("level"))
  464.                 kitlvl = (int)kitdata["level"];
  465.             if (kitlvl > player.net.connection.authLevel)
  466.             {
  467.                 SendTheReply(player, cantUseKit);
  468.                 return;
  469.             }
  470.             if (kitdata.ContainsKey("max"))
  471.                 kitleft = GetKitLeft(player, kitname, (int)(kitdata["max"]));
  472.             if (kitleft <= 0)
  473.             {
  474.                 SendTheReply(player, maxKitReached);
  475.                 return;
  476.             }
  477.             foreach (string name in permNames)
  478.             {
  479.                 if(kitdata.ContainsKey(name))
  480.                 {
  481.                     if (!hasVip(player, name))
  482.                     {
  483.                         SendReply(player, cantUseKit);
  484.                         return;
  485.                     }
  486.                 }
  487.             }
  488.                
  489.             if (kitdata.ContainsKey("cooldown"))
  490.                 cooldown = GetKitTimeleft(player, kitname, (double)(kitdata["cooldown"]));
  491.             if (cooldown > 0.0)
  492.             {
  493.                 SendTheReply(player, string.Format("You must wait {0}s before using this kit again", cooldown.ToString()));
  494.                 return;
  495.             }
  496.             object wasGiven = GiveKit(player, kitname);
  497.             if ((wasGiven is bool) && !((bool)wasGiven))
  498.             {
  499.                 Puts(string.Format("An error occurred while giving the kit {0} to {1}", kitname, player.displayName.ToString()));
  500.                 return;
  501.             }
  502.             proccessKitGiven(player, kitname, kitdata, kitleft);
  503.         }
  504.  
  505.         void proccessKitGiven(BasePlayer player, string kitname, Dictionary<string, object> kitdata, int kitleft)
  506.         {
  507.             string userid = player.userID.ToString();
  508.             if (KitsData[userid] == null)
  509.             {
  510.                 (KitsData[userid]) = new Dictionary<string, object>();
  511.             }
  512.             var playerData = (KitsData[userid]) as Dictionary<string, object>;
  513.             var currentKitData = new Dictionary<string, object>();
  514.             bool write = false;
  515.             if (kitdata.ContainsKey("max"))
  516.             {
  517.                 currentKitData.Add("used", (((int)kitdata["max"] - kitleft) + 1));
  518.                 write = true;
  519.             }
  520.             if (kitdata.ContainsKey("cooldown"))
  521.             {
  522.                 currentKitData.Add("cooldown", ((double)kitdata["cooldown"] + CurrentTime()));
  523.                 write = true;
  524.             }
  525.             if (write)
  526.             {
  527.                 if (playerData.ContainsKey(kitname))
  528.                     playerData[kitname] = currentKitData;
  529.                 else
  530.                     playerData.Add(kitname, currentKitData);
  531.                 KitsData[userid] = playerData;
  532.                 SaveKitsData();
  533.             }
  534.         }
  535.         bool isKit(string kitname)
  536.         {
  537.             if (KitsConfig[kitname] == null)
  538.                 return false;
  539.             return true;
  540.         }
  541.        
  542.         object GiveKit(BasePlayer player, string kitname)
  543.         {
  544.             if (KitsConfig[kitname] == null)
  545.             {
  546.                 SendTheReply(player, unknownKit);
  547.                 return false;
  548.             }
  549.             var kitdata = (KitsConfig[kitname]) as Dictionary<string, object>;
  550.             var kitsitems = kitdata["items"] as Dictionary<string, object>;
  551.             List<object> wearList = kitsitems["wear"] as List<object>;
  552.             List<object> mainList = kitsitems["main"] as List<object>;
  553.             List<object> beltList = kitsitems["belt"] as List<object>;
  554.             ItemContainer pref = player.inventory.containerWear;
  555.  
  556.             if (wearList.Count > 0)
  557.             {
  558.                 pref = player.inventory.containerWear;
  559.                 foreach (object items in wearList)
  560.                 {
  561.                     foreach (KeyValuePair<string, object> pair in items as Dictionary<string, object>)
  562.                     {
  563.                         GiveItem(player, (string)pair.Key, (int)pair.Value, pref);
  564.                     }
  565.                 }
  566.             }
  567.  
  568.             if (mainList.Count > 0)
  569.             {
  570.                 pref = player.inventory.containerMain;
  571.                 foreach (object items in mainList)
  572.                 {
  573.                     foreach (KeyValuePair<string, object> pair in items as Dictionary<string, object>)
  574.                     {
  575.                         GiveItem(player, (string)pair.Key, (int)pair.Value, pref);
  576.                     }
  577.                 }
  578.             }
  579.             if (beltList.Count > 0)
  580.             {
  581.                 pref = player.inventory.containerBelt;
  582.                 foreach (object items in beltList)
  583.                 {
  584.                     foreach (KeyValuePair<string, object> pair in items as Dictionary<string, object>)
  585.                     {
  586.                         GiveItem(player, (string)pair.Key, (int)pair.Value, pref);
  587.                     }
  588.                 }
  589.             }
  590.             SendTheReply(player, kitredeemed);
  591.             return true;
  592.         }
  593.         [ChatCommand("kit")]
  594.         void cmdChatKits(BasePlayer player, string command, string[] args)
  595.         {
  596.             if (args.Length > 0 && (args[0].ToString() == "add" || args[0].ToString() == "reset" || args[0].ToString() == "remove"))
  597.             {
  598.                 if (!hasAccess(player))
  599.                 {
  600.                     SendReply(player, noAccess);
  601.                     return;
  602.                 }
  603.                 if (args[0].ToString() == "add")
  604.                     cmdAddKit(player, args);
  605.                 else if (args[0].ToString() == "reset")
  606.                     cmdResetKits(player, args);
  607.                 else if (args[0].ToString() == "remove")
  608.                     cmdRemoveKit(player, args);
  609.                 return;
  610.             }
  611.             if (args.Length == 0)
  612.             {
  613.                 SendList(player);
  614.                 return;
  615.             }
  616.             TryGiveKit(player, args[0]);
  617.         }
  618.     }
  619. }
Advertisement
Add Comment
Please, Sign In to add comment