private void SendPermissionChange(ulong steamId, CommandStruct commandStruct) { var message = new MessageCommandPermission() { Commands = new List <CommandStruct>(), CommandAction = CommandActions.Level }; message.Commands.Add(commandStruct); ConnectionHelper.SendMessageToPlayer(steamId, message); }
public void UpdateCommandSecurity(CommandStruct command, ulong sender) { var commandStruct = Commands.FirstOrDefault(c => c.Name.Equals(command.Name, StringComparison.InvariantCultureIgnoreCase)); int index; if (_commandCache.ContainsKey(sender) && command.Name.Substring(0, 1) == "#" && Int32.TryParse(command.Name.Substring(1), out index) && index > 0 && index <= _commandCache[sender].Count) { commandStruct = Commands.FirstOrDefault( c => c.Name.Equals(_commandCache[sender][index - 1].Name, StringComparison.InvariantCultureIgnoreCase)); } if (string.IsNullOrEmpty(commandStruct.Name)) { MessageClientTextMessage.SendMessage(sender, "Server", string.Format("Command {0} could not be found.", command.Name)); return; } command.Name = commandStruct.Name; //update security first var i = Commands.IndexOf(commandStruct); commandStruct.NeededLevel = command.NeededLevel; Commands[i] = commandStruct; //then send changes List <IMyPlayer> players = new List <IMyPlayer>(); MyAPIGateway.Players.GetPlayers(players, p => p != null); foreach (IMyPlayer player in players) { var playerPermission = Players.FirstOrDefault(p => p.Player.SteamId == player.SteamUserId); if (playerPermission.Player.SteamId == 0) { //no player found -> send changes SendPermissionChange(player.SteamUserId, commandStruct); continue; } //don't send changes to players with exeptional permissions if (playerPermission.Extensions.Any(s => s.Equals(commandStruct.Name)) || playerPermission.Restrictions.Any(s => s.Equals(commandStruct.Name))) { continue; } SendPermissionChange(player.SteamUserId, commandStruct); } if (commandStruct.NeededLevel == uint.MaxValue) { MessageClientTextMessage.SendMessage(sender, "Server", string.Format("The command '{0}' was disabled.", commandStruct.Name)); } else { MessageClientTextMessage.SendMessage(sender, "Server", string.Format("The level of command '{0}' was set to {1}.", commandStruct.Name, commandStruct.NeededLevel)); } }