aboutsummaryrefslogtreecommitdiff
path: root/source/WindowsFormsApplication1/Apps/NetworkBrowser.cs
diff options
context:
space:
mode:
Diffstat (limited to 'source/WindowsFormsApplication1/Apps/NetworkBrowser.cs')
-rw-r--r--source/WindowsFormsApplication1/Apps/NetworkBrowser.cs461
1 files changed, 461 insertions, 0 deletions
diff --git a/source/WindowsFormsApplication1/Apps/NetworkBrowser.cs b/source/WindowsFormsApplication1/Apps/NetworkBrowser.cs
new file mode 100644
index 0000000..58dd811
--- /dev/null
+++ b/source/WindowsFormsApplication1/Apps/NetworkBrowser.cs
@@ -0,0 +1,461 @@
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using ShiftOS.Online.Hacking;
+
+namespace ShiftOS
+{
+ public partial class NetworkBrowser : Form
+ {
+ public NetworkBrowser()
+ {
+ InitializeComponent();
+ }
+
+ public Dictionary<string, EnemyHacker> Networks = null;
+
+ private void NetworkBrowser_Load(object sender, EventArgs e)
+ {
+ Online.Hacking.Matchmaker.Initiated += (o, a) =>
+ {
+ if (selected_server == null)
+ {
+ lbonlineservers.Items.Clear();
+ foreach (var s in Online.Hacking.Matchmaker.Servers)
+ {
+ lbonlineservers.Items.Add(s.ServerName);
+ }
+ }
+ };
+ Online.Hacking.Matchmaker.MorePlayersFound += (o, a) =>
+ {
+ if(selected_server != null)
+ {
+ lbonlineheader.Text = selected_server.ServerName + " - Lobby";
+ lbonlinedesc.Text = $@"Network Browser is waiting for the server to pair you with another network...
+
+
+Players in lobby: {Online.Hacking.Matchmaker.Players.Count}
+
+{API.CurrentSave.MyOnlineNetwork.Name} - My Network:
+ - {Hacking.MyNetwork.Count} available modules
+ - {API.Codepoints} codepoints
+ - {API.CurrentSave.MyOnlineNetwork.Wins} wins, {API.CurrentSave.MyOnlineNetwork.Losses} losses.
+
+You can set your name and description in the Network Status page.";
+
+ }
+ };
+ LoadNetworks();
+ SetupSidePane();
+ pnlmynet.Hide();
+ }
+
+ public string CurrentTier = "easy";
+ public EnemyHacker SelectedNet = null;
+
+ public void LoadNetworks()
+ {
+ switch(CurrentTier)
+ {
+ case "easy":
+ btntier.Text = "1";
+ break;
+ case "medium":
+ btntier.Text = "2";
+ break;
+ case "hard":
+ btntier.Text = "3";
+ break;
+ }
+ Networks = JsonConvert.DeserializeObject<Dictionary<string, EnemyHacker>>(Properties.Resources.NetBrowser_Enemies);
+ lbnets.Items.Clear();
+ var Tier1 = new List<string>();
+ var Tier2 = new List<string>();
+ var Tier3 = new List<string>();
+
+ foreach (var net in Networks)
+ {
+ if (!API.CurrentSave.CompletedNets.Contains(net.Key))
+ {
+ switch (net.Value.Difficulty)
+ {
+ case "easy":
+ Tier1.Add(net.Key);
+ break;
+ case "medium":
+ Tier2.Add(net.Key);
+ break;
+ case "hard":
+ Tier3.Add(net.Key);
+ break;
+ }
+ }
+ }
+
+ switch (CurrentTier)
+ {
+ case "easy":
+ SetupUI(Tier1);
+ break;
+ case "medium":
+ SetupUI(Tier2);
+ break;
+ case "hard":
+ SetupUI(Tier3);
+ break;
+ }
+ }
+
+ public void SetupSidePane()
+ {
+ if(SelectedNet != null)
+ {
+ lbtitle.Text = SelectedNet.Name;
+ lbnetdesc.Text = SelectedNet.Description + @"
+
+Leader hack speed: " + SelectedNet.FriendSpeed.ToString() + @"
+Leader hack skill: " + SelectedNet.FriendSkill.ToString() + @"
+
+Those above values only matter if the leader decides to become a friend. If they do, you can hire them for free to hack into certain ShiftOS applications.";
+ btnstartbattle.Enabled = true;
+ }
+ else
+ {
+ lbtitle.Text = "Network Browser";
+ lbnetdesc.Text = "No network selected.";
+ btnstartbattle.Enabled = false;
+ }
+ }
+
+ public void SetupUI(List<string> tier)
+ {
+ pnlonline.Visible = online_mode;
+ pnlonline.BringToFront();
+ btnjoinlobby.Enabled = (selected_server != null);
+ if (online_mode)
+ {
+ if(Online.Hacking.Matchmaker.Servers == null)
+ {
+ Online.Hacking.Matchmaker.Initiate();
+ }
+ }
+ else
+ {
+ if (tier.Count > 0)
+ {
+ foreach (var t in tier)
+ {
+ lbnets.Items.Add(t);
+ }
+ }
+ else
+ {
+ AddLeader(CurrentTier);
+ }
+ }
+ }
+
+ public void AddLeader(string tier)
+ {
+ if (API.Upgrades["nb_tier_" + tier] == false)
+ {
+ var enemy = JsonConvert.DeserializeObject<EnemyHacker>(Get_Leader_JSON(tier));
+ Networks.Add(enemy.Name, enemy);
+ lbnets.Items.Add(enemy.Name);
+ }
+ }
+
+ public string Get_Leader_JSON(string tier)
+ {
+ switch(tier)
+ {
+ case "easy":
+ return Properties.Resources.Hacker_DanaRoss;
+ case "medium":
+ return Properties.Resources.Hacker_AustinWalker;
+ case "hard":
+ return Properties.Resources.Hacker_JonathanRivard;
+ default:
+ return null;
+
+ }
+ }
+
+ private void btntier_Click(object sender, EventArgs e)
+ {
+ switch(btntier.Text)
+ {
+ case "1":
+ if(API.Upgrades["nb_tier_easy"] == true)
+ {
+ CurrentTier = "medium";
+ }
+ break;
+ case "2":
+ if (API.Upgrades["nb_tier_medium"] == true)
+ {
+ CurrentTier = "hard";
+ }
+ else
+ {
+ CurrentTier = "easy";
+ }
+ break;
+ case "3":
+ CurrentTier = "easy";
+ break;
+ }
+ LoadNetworks();
+ }
+
+ private void lbnets_SelectedIndexChanged(object sender, EventArgs e)
+ {
+ var t = lbnets.SelectedItem as string;
+ foreach(var net in Networks)
+ {
+ if(net.Key == t)
+ {
+ SelectedNet = net.Value;
+ }
+ }
+ SetupSidePane();
+ }
+
+ private void btnstartbattle_Click(object sender, EventArgs e)
+ {
+ if (Hacking.MyCore.HP == 0)
+ {
+ SetupMyNet();
+ pnlmynet.Show();
+ btnscreen.Text = "My Network";
+ API.CreateInfoboxSession("Your Core isn't ready.", "Your Core (hostname \"localhost\") has 0 HP, and cannot fight. Please wait until your Core regenerates.", infobox.InfoboxMode.Info);
+ }
+ else
+ {
+ if (online_mode == false)
+ {
+ string tier_upgrade = null;
+ if (SelectedNet.IsLeader == true)
+ {
+ tier_upgrade = "nb_tier_" + CurrentTier;
+ }
+ var hui = new HackUI(SelectedNet);
+ hui.OnWin += (object s, EventArgs a) =>
+ {
+ if (tier_upgrade != null)
+ {
+ API.Upgrades[tier_upgrade] = true;
+ if (CurrentTier == "easy")
+ {
+ if (API.Upgrades["midgamebridge"] == false)
+ {
+ var term = new Terminal();
+ API.CreateForm(term, API.LoadedNames.TerminalName, API.GetIcon("Terminal"));
+ term.StartDanaRossStory();
+ }
+ }
+ else if (CurrentTier == "medium")
+ {
+ var h = new HoloChat();
+ var fakeroom = new FakeChatClient();
+ fakeroom.Name = "The Hacker Alliance";
+ fakeroom.Topic = "The Hacker Alliance - We are the masters. DevX cannot control us.";
+ fakeroom.OtherCharacters = new List<string>(new[] { "Richard Ladouceur" });
+ fakeroom.Messages = JsonConvert.DeserializeObject<Dictionary<string, string>>(Properties.Resources.AustinWalkerCompletionStory);
+ API.CreateForm(h, "QuickChat", API.GetIcon("QuickChat"));
+ var t = new Thread(new ThreadStart(new Action(() =>
+ {
+ Thread.Sleep(200);
+ h.Invoke(new Action(() =>
+ {
+ h.SetupFakeClient(fakeroom);
+ }));
+ })));
+
+ }
+ foreach (var mod in SelectedNet.Network)
+ {
+ if (mod.Type != SystemType.Core)
+ {
+ mod.HP = 0;
+ Hacking.MyNetwork.Add(mod);
+ }
+ }
+ SetupMyNet();
+ }
+ API.CurrentSave.CompletedNets.Add(SelectedNet.Name);
+ SelectedNet = null;
+ LoadNetworks();
+ SetupSidePane();
+ };
+ hui.Show();
+ }
+ else
+ {
+ //nyi
+ }
+ }
+ }
+
+ public void SetupMyNet()
+ {
+ flmodules.Controls.Clear();
+ foreach(var m in Hacking.MyNetwork)
+ {
+ var mStatus = new NetModuleStatus(m);
+ flmodules.Controls.Add(mStatus);
+ mStatus.Show();
+ }
+ }
+
+ private void btnscreen_Click(object sender, EventArgs e)
+ {
+ switch (btnscreen.Text)
+ {
+ case "My Network":
+ LoadNetworks();
+ SetupSidePane();
+ pnlmynet.Hide();
+ btnscreen.Text = "Network List";
+ break;
+ case "Network List":
+ SetupMyNet();
+ pnlmynet.Show();
+ btnscreen.Text = "My Network";
+ break;
+ }
+
+ }
+
+ private void tmrcalctotal_Tick(object sender, EventArgs e)
+ {
+ int total = 0;
+ int hp = 0;
+ foreach(var mod in Hacking.MyNetwork)
+ {
+ total += mod.GetTotalHP();
+ hp += mod.HP;
+ }
+ pgtotalhealth.MaxValue = total;
+ pgtotalhealth.Value = hp;
+ }
+
+ bool online_mode = false;
+
+ private void button1_Click(object sender, EventArgs e)
+ {
+ var me = API.CurrentSave.MyOnlineNetwork;
+ if (me.Name == null && me.Description == null)
+ {
+ pnlmynet.Show();
+ pnlmynet.BringToFront();
+ SetupMyNet();
+ API.CreateInfoboxSession("Make a name for yourself.", "Before you can battle online, please enter a name and a description that people will see when you matchmake. When you're done, click Battle Online again.", infobox.InfoboxMode.Info);
+ }
+ else
+ {
+ online_mode = !online_mode;
+ LoadNetworks();
+ }
+ }
+
+ Online.Hacking.ServerInfo selected_server = null;
+
+ private void lbonlineservers_SelectedIndexChanged(object sender, EventArgs e)
+ {
+ var server_name = lbonlineservers.SelectedItem as string;
+ var server = new Online.Hacking.ServerInfo();
+ foreach(var srv in Online.Hacking.Matchmaker.Servers)
+ {
+ if (srv.ServerName == server_name)
+ server = srv;
+ }
+ selected_server = server;
+ LoadNetworks();
+ }
+
+ private void btnjoinlobby_Click(object sender, EventArgs e)
+ {
+ lbonlineservers.Hide();
+ API.CurrentSave.MyOnlineNetwork.Codepoints = API.Codepoints;
+ Package_Grabber.SendMessage(selected_server.IPAddress, $"join_lobby {JsonConvert.SerializeObject(API.CurrentSave.MyOnlineNetwork)}");
+ Online.Hacking.Matchmaker.Matchmake(selected_server);
+ var t = new System.Windows.Forms.Timer();
+ t.Interval = 5000;
+ int sindex = 0;
+ t.Tick += (o, a) =>
+ {
+ try
+ {
+ SetupSidePane(Online.Hacking.Matchmaker.Players[sindex]);
+ if (Matchmaker.Players.Count > 1)
+ {
+ if (sindex < Online.Hacking.Matchmaker.Players.Count - 1)
+ {
+ sindex = 0;
+ }
+ else
+ {
+ sindex += 1;
+ }
+ }
+ }
+ catch
+ {
+
+ }
+ };
+ t.Start();
+ }
+
+ private void SetupSidePane(Network network)
+ {
+ try
+ {
+ lbtitle.Text = network.Name;
+ lbnetdesc.Text = $@"{network.Description}
+
+ - {network.Codepoints} codepoints.
+ - {network.Wins} wins, {network.Losses} losses.";
+ }
+ catch
+ {
+ lbtitle.Text = "<null>";
+ lbnetdesc.Text = @"<no description>
+
+ - unknown codepoints.
+ - unknown wins, unknown losses.
+
+
+If you see this happen, it's a phantom client. The server won't pair you with it.";
+ }
+ }
+
+ private void stop_matchmake(object sender, FormClosingEventArgs e)
+ {
+ if(selected_server != null)
+ {
+ Package_Grabber.SendMessage(selected_server.IPAddress, $"leave_lobby {JsonConvert.SerializeObject(API.CurrentSave.MyOnlineNetwork)}");
+ }
+ }
+
+ private void txtmydescription_TextChanged(object sender, EventArgs e)
+ {
+ API.CurrentSave.MyOnlineNetwork.Description = txtmydescription.Text;
+ }
+
+ private void txtmyname_TextChanged(object sender, EventArgs e)
+ {
+ API.CurrentSave.MyOnlineNetwork.Name = txtmyname.Text;
+ }
+ }
+}