using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using Piston; using Sandbox; using Sandbox.Engine.Multiplayer; using Sandbox.Game.Multiplayer; using Sandbox.Game.World; using SteamSDK; namespace PistonServer { /// /// Interaction logic for PlayersControl.xaml /// public partial class PlayersControl : UserControl { public PlayersControl() { InitializeComponent(); ServerManager.Static.SessionReady += Static_SessionReady; } public void RefreshNames() { Dispatcher.Invoke(() => { foreach (var player in PlayerList.Items) { var p = (PlayerItem)player; p.Name = MyMultiplayer.Static.GetMemberName(p.SteamId); } PlayerList.Items.Refresh(); }); } private void Static_SessionReady() { MyMultiplayer.Static.ClientKicked += OnClientKicked; MyMultiplayer.Static.ClientLeft += OnClientLeft; MySession.Static.Players.PlayerRequesting += OnPlayerRequesting; } /// /// Invoked when a client logs in and hits the respawn screen. /// private void OnPlayerRequesting(PlayerRequestArgs args) { var steamId = args.PlayerId.SteamId; var player = new PlayerItem { Name = MyMultiplayer.Static.GetMemberName(steamId), SteamId = steamId }; Program.UserInterface.Chat.SendMessage($"{player.Name} connected."); Dispatcher.Invoke(() => PlayerList.Items.Add(player)); } private void OnClientKicked(ulong steamId) { OnClientLeft(steamId, ChatMemberStateChangeEnum.Kicked); } private void OnClientLeft(ulong steamId, ChatMemberStateChangeEnum stateChange) { Dispatcher.Invoke(() => { var player = PlayerList.Items.Cast().FirstOrDefault(x => x.SteamId == steamId); if (player == null) return; Program.UserInterface.Chat.SendMessage($"{player.Name} {stateChange.ToString().ToLower()}."); PlayerList.Items.Remove(player); }); } public class PlayerItem { public ulong SteamId; public string Name; public override string ToString() { return $"{Name} ({SteamId})"; } } private void KickButton_Click(object sender, RoutedEventArgs e) { if (PlayerList.SelectedItem == null) return; var player = (PlayerItem)PlayerList.SelectedItem; MyMultiplayer.Static.KickClient(player.SteamId); } private void BanButton_Click(object sender, RoutedEventArgs e) { if (PlayerList.SelectedItem == null) return; var player = (PlayerItem)PlayerList.SelectedItem; MyMultiplayer.Static.BanClient(player.SteamId, true); } } }