diff --git a/.gitignore b/.gitignore index 0d774be..54a68c2 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ *.suo *.user *.sln.docstates +*.vs # Build results [Dd]ebug/ diff --git a/CommandKits.cs b/CommandKits.cs index be8a4cc..6faa0ea 100644 --- a/CommandKits.cs +++ b/CommandKits.cs @@ -1,4 +1,5 @@ using Rocket.API; +using Rocket.API.Serialisation; using Rocket.Core.Logging; using Rocket.Unturned.Chat; using Rocket.Unturned.Player; @@ -53,15 +54,34 @@ public void Execute(IRocketPlayer caller, string[] command) List availableKits = new List(); List kits = Kits.Instance.Configuration.Instance.Kits; - foreach(Kit kit in kits) + + // Gets all caller's permissions + List callerPerms = caller.GetPermissions().Distinct(new PermissionComparer()).ToList(); + + foreach (var item in kits) { - if(caller.HasPermission("kit." + kit.Name.ToLower())) - { - availableKits.Add(kit.Name); - } + // Adds the kit if it's permission is contained in the caller's permission list + if (callerPerms.Exists(x => x.Name == $"kit.{item.Name.ToLower()}")) + availableKits.Add(item.Name); } UnturnedChat.Say(caller, Kits.Instance.Translations.Instance.Translate("command_kits", String.Join(", ",availableKits.ToArray()))); } } + + /// + /// Provides the comparison method for Rocket's Permission + /// + internal class PermissionComparer : IEqualityComparer + { + public bool Equals(Permission x, Permission y) + { + return x.Name == y.Name && x.Cooldown == y.Cooldown; + } + + public int GetHashCode(Permission obj) + { + return obj.GetHashCode(); + } + } }