using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using ShiftOS.Engine; using Newtonsoft.Json; using ShiftOS.Objects; using ShiftOS.WinForms.Tools; namespace ShiftOS.WinForms.Applications { [RequiresUpgrade("mud_fundamentals")] [Launcher("MUD Control Centre", true, "al_mud_control_centre")] [WinOpen("mud_control_centre")] public partial class MUDControlCentre : UserControl, IShiftOSWindow { public MUDControlCentre() { if (SaveSystem.CurrentSave.CurrentLegions == null) SaveSystem.CurrentSave.CurrentLegions = new List(); InitializeComponent(); ServerManager.MessageReceived += (msg) => { try { this.Invoke(new Action(() => { if (msg.Name == "user_not_found_in_legion") { ShowLegionInfo(new Legion { Name = "No legion", ShortName = "NONE", Description = "You are not currently in any legions! You can go to 'Join Legion' and look for a legion to join, however, or create your own.", Publicity = LegionPublicity.UnlistedInviteOnly, BannerColor = ConsoleColor.DarkRed }); } else if(msg.Name == "legion_users_found") { lvusers.Items.Clear(); foreach(var usr in JsonConvert.DeserializeObject(msg.Contents)) { lvusers.Items.Add(usr); } } else if (msg.Name == "user_legion") { ShowLegionInfo(JsonConvert.DeserializeObject(msg.Contents)); } else if(msg.Name == "legion_all") { PopulateJoinLegion(JsonConvert.DeserializeObject>(msg.Contents)); } })); } catch { } }; } public void PopulateJoinLegion(List legions) { lgn_join.BringToFront(); fllegionlist.Controls.Clear(); foreach(var lgn in legions) { var bnr = new Panel(); bnr.Height = 100; bnr.Tag = "keepbg"; bnr.BackColor = GetColor(lgn.BannerColor); bnr.Width = fllegionlist.Width; var lTitle = new Label(); lTitle.AutoSize = true; lTitle.Tag = "keepbg header2"; lTitle.Text = $"[{lgn.ShortName}] {lgn.Name}"; lTitle.Location = new Point(18, 17); bnr.Controls.Add(lTitle); lTitle.Show(); var flButtons = new FlowLayoutPanel(); flButtons.AutoSize = true; flButtons.AutoSizeMode = AutoSizeMode.GrowAndShrink; flButtons.Tag = "keepbg"; flButtons.FlowDirection = FlowDirection.RightToLeft; flButtons.Anchor = AnchorStyles.Top | AnchorStyles.Right; flButtons.Top = 2; flButtons.Left = bnr.Width - flButtons.Width - 2; bnr.Controls.Add(flButtons); flButtons.Show(); var btn = new Button(); btn.Text = "More info"; btn.Click += (o, a) => { ShowLegionInfo(lgn); }; flButtons.Controls.Add(btn); btn.Show(); fllegionlist.Controls.Add(bnr); bnr.Show(); ControlManager.SetupControls(bnr); } } public Color GetColor(ConsoleColor color) { switch (color) { case ConsoleColor.Black: return Color.Black; case ConsoleColor.Gray: return Color.Gray; case ConsoleColor.DarkGray: return Color.DarkGray; case ConsoleColor.Blue: return Color.Blue; case ConsoleColor.Cyan: return Color.Cyan; case ConsoleColor.DarkBlue: return Color.DarkBlue; case ConsoleColor.DarkCyan: return Color.DarkCyan; case ConsoleColor.DarkGreen: return Color.DarkGreen; case ConsoleColor.DarkMagenta: return Color.DarkMagenta; case ConsoleColor.DarkRed: return Color.DarkRed; case ConsoleColor.DarkYellow: case ConsoleColor.Yellow: return Color.Yellow; case ConsoleColor.Green: return Color.Green; case ConsoleColor.Magenta: return Color.Magenta; case ConsoleColor.Red: return Color.Red; case ConsoleColor.White: return Color.White; default: return Color.Black; } } public void OnLoad() { ServerManager.MessageReceived += (msg) => { if(msg.Name == "mud_usermemos") { try { foreach (var memo in JsonConvert.DeserializeObject(msg.Contents)) { this.Invoke(new Action(() => { var lbtitle = new Label(); lbtitle.Text = memo.Subject; lbtitle.Tag = "header3"; ControlManager.SetupControls(lbtitle); flmemos.Controls.Add(lbtitle); var lbsubject = new Label(); lbsubject.Text = "From " + memo.UserFrom; flmemos.Controls.Add(lbsubject); var lbbody = new Label(); lbbody.Margin = new Padding(0, 15, 0, 15); lbbody.Text = memo.Body; flmemos.Controls.Add(lbbody); lbtitle.Show(); lbsubject.Show(); lbbody.Show(); })); } } catch { } } }; SetupSystemStatus(); } public void SetupSystemStatus() { int scripts = 0; string legionname = ""; foreach(var lgn in SaveSystem.CurrentSave.CurrentLegions) { legionname += Environment.NewLine + " - " + lgn; } you_systemstatus.BringToFront(); lblsysstatus.Text = $@"Username: {SaveSystem.CurrentSave.Username} System name: {SaveSystem.CurrentSave.SystemName} Codepoints: {SaveSystem.CurrentSave.Codepoints} Upgrades: {SaveSystem.CurrentSave.CountUpgrades()}/{Shiftorium.GetDefaults().Count} System version: {SaveSystem.CurrentSave.MajorVersion}.{SaveSystem.CurrentSave.MinorVersion}.{SaveSystem.CurrentSave.Revision} Shared scripts: {scripts} Current legions: {legionname}"; } public void OnSkinLoad() { } public bool OnUnload() { return true; } public void OnUpgrade() { } private void tsMemos_Click(object sender, EventArgs e) { ServerManager.SendMessage("get_memos_for_user", $@"{{ username: ""{SaveSystem.CurrentSave.Username}"" }}"); you_memos.BringToFront(); } private void profileToolStripMenuItem_Click(object sender, EventArgs e) { SetupSystemStatus(); } private void disconnectFromMuDToolStripMenuItem_Click(object sender, EventArgs e) { } public void ShowLegionInfo(Legion lgn) { lgn_view.BringToFront(); lblegiontitle.Text = $"[{lgn.ShortName}] {lgn.Name}"; lbdescription.Text = lgn.Description; if(lgn.Publicity == LegionPublicity.PublicInviteOnly || lgn.Publicity == LegionPublicity.UnlistedInviteOnly) { btnjoinlegion.Hide(); } banner.BackColor = GetColor(lgn.BannerColor); ServerManager.SendMessage("legion_get_users", JsonConvert.SerializeObject(lgn)); btnleavelegion.Hide(); if(SaveSystem.CurrentSave.CurrentLegions.Contains(lgn.ShortName)) { btnjoinlegion.Hide(); btnleavelegion.Show(); } } private void myLegionToolStripMenuItem_Click(object sender, EventArgs e) { ServerManager.SendMessage("user_get_legion", JsonConvert.SerializeObject(SaveSystem.CurrentSave)); } private void joinLegionToolStripMenuItem_Click(object sender, EventArgs e) { ServerManager.SendMessage("legion_get_all", ""); } private void btnjoinlegion_Click(object sender, EventArgs e) { string shortname = lblegiontitle.Text.Split(']')[0].Remove(0, 1); SaveSystem.CurrentSave.CurrentLegions.Add(shortname); SaveSystem.SaveGame(); ServerManager.SendMessage("user_get_legion", JsonConvert.SerializeObject(SaveSystem.CurrentSave)); } private void btnleavelegion_Click(object sender, EventArgs e) { string shortname = lblegiontitle.Text.Split(']')[0].Remove(0, 1); SaveSystem.CurrentSave.CurrentLegions.Remove(shortname); SaveSystem.SaveGame(); ServerManager.SendMessage("user_get_legion", JsonConvert.SerializeObject(SaveSystem.CurrentSave)); } } }