aboutsummaryrefslogtreecommitdiff
path: root/ShiftOS.WinForms/Applications/MUDControlCentre.cs
diff options
context:
space:
mode:
Diffstat (limited to 'ShiftOS.WinForms/Applications/MUDControlCentre.cs')
-rw-r--r--ShiftOS.WinForms/Applications/MUDControlCentre.cs314
1 files changed, 314 insertions, 0 deletions
diff --git a/ShiftOS.WinForms/Applications/MUDControlCentre.cs b/ShiftOS.WinForms/Applications/MUDControlCentre.cs
new file mode 100644
index 0000000..7cd398b
--- /dev/null
+++ b/ShiftOS.WinForms/Applications/MUDControlCentre.cs
@@ -0,0 +1,314 @@
+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<string>();
+ 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<string[]>(msg.Contents))
+ {
+ lvusers.Items.Add(usr);
+ }
+ }
+ else if (msg.Name == "user_legion")
+ {
+ ShowLegionInfo(JsonConvert.DeserializeObject<Legion>(msg.Contents));
+ }
+ else if(msg.Name == "legion_all")
+ {
+ PopulateJoinLegion(JsonConvert.DeserializeObject<List<Legion>>(msg.Contents));
+ }
+
+ }));
+ }
+ catch { }
+ };
+ }
+
+ public void PopulateJoinLegion(List<Legion> 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<MUDMemo[]>(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));
+
+ }
+ }
+}