public bool Execute(ArraySegment <string> arguments, ICommandSender sender, out string response) { string target; string badge; if (!sender.CheckPermission("scputils.handlebadges")) { response = "<color=red> You need a higher administration level to use this command!</color>"; return(false); } else if (arguments.Count < 3) { response = $"Usage: {Command} <player name / id> <Badge Name> <Minutes>"; return(false); } target = arguments.Array[1].ToString(); badge = arguments.Array[2].ToString(); Exiled.API.Features.Player player = Exiled.API.Features.Player.Get(target); Player databasePlayer = target.GetDatabasePlayer(); if (databasePlayer == null) { response = "<color=yellow>Player not found on Database or Player is loading data!</color>"; return(false); } else if (!ServerStatic.GetPermissionsHandler().GetAllGroups().ContainsKey(badge)) { response = "Invalid role name!"; return(false); } else if (int.TryParse(arguments.Array[3], out int duration)) { UserGroup group = ServerStatic.GetPermissionsHandler()._groups[badge]; if (group.KickPower > ((CommandSender)sender).KickPower && !((CommandSender)sender).FullPermissions) { response = $"You need a higher administration level to use this command: The group you are trying to set has more kick power than yours. (Your kick power: {((CommandSender)sender).KickPower}, Required: {group.KickPower})"; return(false); } if (player != null) { BadgeSetEvent args = new BadgeSetEvent(); args.Player = player; args.NewBadgeName = badge; if (ServerStatic.PermissionsHandler._members.ContainsKey(player.UserId)) { ServerStatic.PermissionsHandler._members.Remove(player.UserId); } player.ReferenceHub.serverRoles.SetGroup(group, false, true, true); ServerStatic.PermissionsHandler._members.Add(player.UserId, badge); ScpUtils.StaticInstance.Events.OnBadgeSet(args); } databasePlayer.BadgeName = badge; databasePlayer.BadgeExpire = DateTime.Now.AddMinutes(duration); Database.LiteDatabase.GetCollection <Player>().Update(databasePlayer); response = $"Successfully set {group.BadgeText} badge! Duration: {duration} minute(s)!"; } else { response = "Arg3 must be integer!"; } return(true); }
public void PostLoadPlayer(Exiled.API.Features.Player player) { Player databasePlayer = player.GetDatabasePlayer(); if (!string.IsNullOrEmpty(databasePlayer.BadgeName)) { UserGroup group = ServerStatic.GetPermissionsHandler()._groups[databasePlayer.BadgeName]; if (databasePlayer.BadgeExpire >= DateTime.Now) { player.ReferenceHub.serverRoles.SetGroup(group, false, true, true); if (ServerStatic.PermissionsHandler._members.ContainsKey(player.UserId)) { ServerStatic.PermissionsHandler._members.Remove(player.UserId); } ServerStatic.PermissionsHandler._members.Add(player.UserId, databasePlayer.BadgeName); BadgeSetEvent args = new BadgeSetEvent(); args.Player = player; args.NewBadgeName = databasePlayer.BadgeName; pluginInstance.Events.OnBadgeSet(args); } else { BadgeRemovedEvent args = new BadgeRemovedEvent(); args.Player = player; args.BadgeName = databasePlayer.BadgeName; databasePlayer.BadgeName = ""; if (ServerStatic.PermissionsHandler._members.ContainsKey(player.UserId)) { ServerStatic.PermissionsHandler._members.Remove(player.UserId); } if (ServerStatic.RolesConfig.GetStringDictionary("Members").ContainsKey(player.UserId)) { UserGroup previous = ServerStatic.GetPermissionsHandler()._groups[ServerStatic.RolesConfig.GetStringDictionary("Members")[player.UserId]]; ServerStatic.PermissionsHandler._members.Add(player.UserId, ServerStatic.RolesConfig.GetStringDictionary("Members")[player.UserId]); player.ReferenceHub.serverRoles.SetGroup(previous, false, true, true); } pluginInstance.Events.OnBadgeRemoved(args); } } Timing.CallDelayed(1.5f, () => { if (!string.IsNullOrEmpty(databasePlayer.ColorPreference) && databasePlayer.ColorPreference != "None") { if (player.CheckPermission("scputils.changecolor") || player.CheckPermission("scputils.playersetcolor") || databasePlayer.KeepPreferences || pluginInstance.Config.KeepColorWithoutPermission) { player.RankColor = databasePlayer.ColorPreference; } else { databasePlayer.ColorPreference = ""; } } if (databasePlayer.HideBadge == true) { if (player.CheckPermission("scputils.badgevisibility") || databasePlayer.KeepPreferences || pluginInstance.Config.KeepBadgeVisibilityWithoutPermission) { player.BadgeHidden = true; } else { databasePlayer.HideBadge = false; } } if (!string.IsNullOrEmpty(databasePlayer.CustomNickName) && databasePlayer.CustomNickName != "None") { if (player.CheckPermission("scputils.changenickname") || player.CheckPermission("scputils.playersetname") || databasePlayer.KeepPreferences || pluginInstance.Config.KeepNameWithoutPermission) { player.DisplayNickname = databasePlayer.CustomNickName; } else { databasePlayer.CustomNickName = ""; } } if (pluginInstance.Config.AutoKickBannedNames && pluginInstance.Functions.CheckNickname(player.Nickname) && !player.CheckPermission("scputils.bypassnickrestriction")) { Timing.CallDelayed(2f, () => { player.Kick("Auto-Kick: " + pluginInstance.Config.AutoKickBannedNameMessage, "SCPUtils"); }); } }); if (databasePlayer.UserNotified.Count() <= 0) { return; } if (databasePlayer.UserNotified[databasePlayer.UserNotified.Count() - 1] == false) { player.ClearBroadcasts(); player.Broadcast(pluginInstance.Config.OfflineWarnNotification); databasePlayer.UserNotified[databasePlayer.UserNotified.Count() - 1] = true; } }