mirror of
https://git.alee14.me/shiftos-archive/ShiftOS_TheReturn.git
synced 2025-01-22 18:02:16 +00:00
another mission
This commit is contained in:
parent
4c63e5e41c
commit
8e19c85999
10 changed files with 378 additions and 67 deletions
32
ShiftOS.WinForms/Applications/Chat.Designer.cs
generated
32
ShiftOS.WinForms/Applications/Chat.Designer.cs
generated
|
@ -65,9 +65,12 @@ namespace ShiftOS.WinForms.Applications
|
|||
this.toolStrip1 = new System.Windows.Forms.ToolStrip();
|
||||
this.tschatid = new System.Windows.Forms.ToolStripLabel();
|
||||
this.tsuserdata = new System.Windows.Forms.ToolStripLabel();
|
||||
this.lbtyping = new System.Windows.Forms.ToolStripLabel();
|
||||
this.tsbottombar = new System.Windows.Forms.ToolStrip();
|
||||
this.txtuserinput = new System.Windows.Forms.ToolStripTextBox();
|
||||
this.btnsend = new System.Windows.Forms.ToolStripButton();
|
||||
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.btnsendfile = new System.Windows.Forms.ToolStripButton();
|
||||
this.panel1.SuspendLayout();
|
||||
this.pnlstart.SuspendLayout();
|
||||
this.flowLayoutPanel1.SuspendLayout();
|
||||
|
@ -179,7 +182,10 @@ namespace ShiftOS.WinForms.Applications
|
|||
//
|
||||
this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.tschatid,
|
||||
this.tsuserdata});
|
||||
this.tsuserdata,
|
||||
this.lbtyping,
|
||||
this.toolStripSeparator1,
|
||||
this.btnsendfile});
|
||||
this.toolStrip1.Location = new System.Drawing.Point(0, 0);
|
||||
this.toolStrip1.Name = "toolStrip1";
|
||||
this.toolStrip1.Size = new System.Drawing.Size(633, 25);
|
||||
|
@ -198,6 +204,12 @@ namespace ShiftOS.WinForms.Applications
|
|||
this.tsuserdata.Size = new System.Drawing.Size(86, 22);
|
||||
this.tsuserdata.Text = "toolStripLabel1";
|
||||
//
|
||||
// lbtyping
|
||||
//
|
||||
this.lbtyping.Name = "lbtyping";
|
||||
this.lbtyping.Size = new System.Drawing.Size(86, 22);
|
||||
this.lbtyping.Text = "toolStripLabel1";
|
||||
//
|
||||
// tsbottombar
|
||||
//
|
||||
this.tsbottombar.Dock = System.Windows.Forms.DockStyle.Bottom;
|
||||
|
@ -227,6 +239,21 @@ namespace ShiftOS.WinForms.Applications
|
|||
this.btnsend.Text = "Send";
|
||||
this.btnsend.Click += new System.EventHandler(this.btnsend_Click);
|
||||
//
|
||||
// toolStripSeparator1
|
||||
//
|
||||
this.toolStripSeparator1.Name = "toolStripSeparator1";
|
||||
this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);
|
||||
//
|
||||
// btnsendfile
|
||||
//
|
||||
this.btnsendfile.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
|
||||
this.btnsendfile.Image = ((System.Drawing.Image)(resources.GetObject("btnsendfile.Image")));
|
||||
this.btnsendfile.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||
this.btnsendfile.Name = "btnsendfile";
|
||||
this.btnsendfile.Size = new System.Drawing.Size(65, 22);
|
||||
this.btnsendfile.Text = "Send a file";
|
||||
this.btnsendfile.Click += new System.EventHandler(this.btnsendfile_Click);
|
||||
//
|
||||
// Chat
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
|
@ -265,5 +292,8 @@ namespace ShiftOS.WinForms.Applications
|
|||
private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1;
|
||||
private System.Windows.Forms.TextBox txtchatid;
|
||||
private System.Windows.Forms.Button btnjoin;
|
||||
private System.Windows.Forms.ToolStripLabel lbtyping;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
|
||||
private System.Windows.Forms.ToolStripButton btnsendfile;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -49,6 +49,41 @@ namespace ShiftOS.WinForms.Applications
|
|||
InitializeComponent();
|
||||
}
|
||||
|
||||
public event Action<ShiftOS.Objects.ShiftFS.File> FileSent;
|
||||
|
||||
public string Typing
|
||||
{
|
||||
get
|
||||
{
|
||||
return lbtyping.Text;
|
||||
}
|
||||
set
|
||||
{
|
||||
this.Invoke(new Action(() =>
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(value))
|
||||
{
|
||||
lbtyping.Visible = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
lbtyping.Text = value + " is typing...";
|
||||
lbtyping.Visible = true;
|
||||
}
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
public void ShowChat()
|
||||
{
|
||||
this.Invoke(new Action(() =>
|
||||
{
|
||||
pnlstart.Hide();
|
||||
rtbchat.Show();
|
||||
rtbchat.BringToFront();
|
||||
}));
|
||||
}
|
||||
|
||||
public void OnLoad()
|
||||
{
|
||||
AllInstances.Add(this);
|
||||
|
@ -86,7 +121,7 @@ namespace ShiftOS.WinForms.Applications
|
|||
|
||||
private void txtuserinput_KeyDown(object sender, KeyEventArgs e)
|
||||
{
|
||||
if(e.KeyCode == Keys.Enter)
|
||||
if (e.KeyCode == Keys.Enter)
|
||||
{
|
||||
e.SuppressKeyPress = true;
|
||||
|
||||
|
@ -108,7 +143,7 @@ namespace ShiftOS.WinForms.Applications
|
|||
|
||||
public static void SendMessage(string user, string destination, string msg)
|
||||
{
|
||||
foreach(var chat in AllInstances)
|
||||
foreach (var chat in AllInstances)
|
||||
{
|
||||
chat.PostMessage(user, destination, msg);
|
||||
}
|
||||
|
@ -138,62 +173,14 @@ namespace ShiftOS.WinForms.Applications
|
|||
txtuserinput.Text = "";
|
||||
}
|
||||
|
||||
[Story("story_thefennfamily")]
|
||||
public static void Story_TheFennFamily()
|
||||
private void btnsendfile_Click(object sender, EventArgs e)
|
||||
{
|
||||
bool complete = false;
|
||||
Infobox.Show("SimpleSRC", "A direct message has been sent to you on SimpleSRC from user \"maureenfenn@trisys\".", () =>
|
||||
FileSkimmerBackend.GetFile(new[] { "" }, FileOpenerStyle.Open, (file) =>
|
||||
{
|
||||
string ch = "maureenfenn@trisys";
|
||||
var c = new Chat();
|
||||
c.ChatID = ch;
|
||||
AppearanceManager.SetupWindow(c);
|
||||
string you = $"{SaveSystem.CurrentUser.Username}@{SaveSystem.CurrentSave.SystemName}";
|
||||
|
||||
var t = new Thread(() =>
|
||||
{
|
||||
SendMessage(you, ch, "User has joined the chat.");
|
||||
Thread.Sleep(2000);
|
||||
SendMessage(ch, ch, "Hello, " + you + ". My name is Maureen. Maureen Fenn.");
|
||||
Thread.Sleep(2500);
|
||||
SendMessage(ch, ch, "I am the author of the various Tri applications you may see on Appscape.");
|
||||
Thread.Sleep(2000);
|
||||
SendMessage(ch, ch, "I need your help with something...");
|
||||
Thread.Sleep(2500);
|
||||
SendMessage(ch, ch, "Firstly, a little backstory. There was a time in ShiftOS when none of us were connected.");
|
||||
Thread.Sleep(2500);
|
||||
SendMessage(ch, ch, "There wasn't a Digital Society, we didn't have chat applications or anything...");
|
||||
Thread.Sleep(2000);
|
||||
SendMessage(ch, ch, "All we had was the Shiftnet.");
|
||||
Thread.Sleep(2500);
|
||||
SendMessage(ch, ch, "However, in 2016, something happened called the \"connected revolution\". It was like, the invention of the Internet - it was huge for the world of ShiftOS.");
|
||||
Thread.Sleep(2500);
|
||||
SendMessage(ch, ch, "Before this, the only way you could earn Codepoints was through playing games in ShiftOS.");
|
||||
Thread.Sleep(2500);
|
||||
SendMessage(ch, ch, "I was the one who coded those games, and I would put them on a Shiftnet website that you can still access today, shiftnet/main/shiftgames.");
|
||||
Thread.Sleep(2500);
|
||||
SendMessage(ch, ch, "But when the Connected Revolution took place, things got difficult. My son, Nalyr Fenn, was born, and people stopped using my software and instead moved on to hacking eachother and stealing peoples' Codepoints.");
|
||||
Thread.Sleep(2500);
|
||||
SendMessage(ch, ch, "When Nalyr's sentience levels reached near human - i.e, he grew up, we decided to start TriOffice. It was a huge success, thanks to Aiden Nirh, the guy who runs Appscape.");
|
||||
Thread.Sleep(2500);
|
||||
SendMessage(ch, ch, "However... a few months ago he cut contact with us and we stopped receiving Codepoints from TriOffice.");
|
||||
Thread.Sleep(2500);
|
||||
SendMessage(ch, ch, "I'm running low - I can't afford to keep my system running much longer. You have to help!");
|
||||
Thread.Sleep(2500);
|
||||
SendMessage(ch, ch, "Perhaps, you could breach Aiden's server and look for clues as to why he's against us? I'll reward you with the last Codepoints I have.");
|
||||
Thread.Sleep(2500);
|
||||
SendMessage(you, ch, "Alright, I'm in - but I don't know where to begin...");
|
||||
Thread.Sleep(2500);
|
||||
SendMessage(ch, ch, "A little birdie tells me you know about the RTS exploits going around... Try using that on Aiden's server. You can find his systemname on Appscape under \"Contact Us.\" He has a mailserver on Appscape - and also has RTS on the same server.");
|
||||
Thread.Sleep(2500);
|
||||
SendMessage(ch, ch, "Good luck... My life depends on you!");
|
||||
complete = true;
|
||||
});
|
||||
t.IsBackground = true;
|
||||
t.Start();
|
||||
var finf = ShiftOS.Objects.ShiftFS.Utils.GetFileInfo(file);
|
||||
PostMessage($"{SaveSystem.CurrentUser.Username}@{SaveSystem.CurrentSave.SystemName}", ChatID, "<user sent a file: " + finf.Name + ">");
|
||||
FileSent?.Invoke(finf);
|
||||
});
|
||||
while (!complete)
|
||||
Thread.Sleep(10);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -120,16 +120,25 @@
|
|||
<metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<metadata name="tsbottombar.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>122, 17</value>
|
||||
</metadata>
|
||||
<metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<metadata name="tsbottombar.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>122, 17</value>
|
||||
</metadata>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="btnsendfile.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
|
||||
YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
|
||||
0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
|
||||
bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
|
||||
VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
|
||||
c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
|
||||
Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
|
||||
mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
|
||||
kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
|
||||
TgDQASA1MVpwzwAAAABJRU5ErkJggg==
|
||||
</value>
|
||||
</data>
|
||||
<metadata name="tsbottombar.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>122, 17</value>
|
||||
</metadata>
|
||||
<data name="btnsend.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
|
|
|
@ -20,9 +20,12 @@ namespace ShiftOS.WinForms
|
|||
var attrib = method.GetCustomAttributes(false).FirstOrDefault(x => x is MissionAttribute) as MissionAttribute;
|
||||
if (attrib != null)
|
||||
{
|
||||
if (!Shiftorium.UpgradeInstalled(attrib.StoryID))
|
||||
if (Shiftorium.UpgradeAttributesUnlocked(method))
|
||||
{
|
||||
missions.Add(attrib);
|
||||
if (!Shiftorium.UpgradeInstalled(attrib.StoryID))
|
||||
{
|
||||
missions.Add(attrib);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -62,6 +65,36 @@ namespace ShiftOS.WinForms
|
|||
Console.WriteLine("startmission --id " + missions.IndexOf(mission));
|
||||
}
|
||||
}
|
||||
|
||||
Console.WriteLine();
|
||||
|
||||
Console.WriteLine("Story progress:");
|
||||
ConsoleEx.Bold = true;
|
||||
ConsoleEx.ForegroundColor = ConsoleColor.Cyan;
|
||||
double percentage = GetMissionPercentage() * 100;
|
||||
Console.WriteLine(percentage.ToString("#.##") + "%");
|
||||
}
|
||||
|
||||
public static double GetMissionPercentage()
|
||||
{
|
||||
int missionsFound = 0;
|
||||
int missionsComplete = 0;
|
||||
foreach(var type in ReflectMan.Types)
|
||||
{
|
||||
foreach (var mth in type.GetMethods(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static))
|
||||
{
|
||||
var missionAttrib = mth.GetCustomAttributes(false).FirstOrDefault(x => x is MissionAttribute) as MissionAttribute;
|
||||
if (missionAttrib != null)
|
||||
{
|
||||
missionsFound++;
|
||||
if (Shiftorium.UpgradeInstalled(missionAttrib.StoryID))
|
||||
missionsComplete++;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
double percentage = (double)missionsComplete / (double)missionsFound;
|
||||
return percentage;
|
||||
}
|
||||
|
||||
[Command("startmission", description = "Starts the specified mission.")]
|
||||
|
|
29
ShiftOS.WinForms/Properties/Resources.Designer.cs
generated
29
ShiftOS.WinForms/Properties/Resources.Designer.cs
generated
|
@ -159,6 +159,35 @@ namespace ShiftOS.WinForms.Properties {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to {
|
||||
/// "Name": "appscape_main",
|
||||
/// "Files": [],
|
||||
/// "Subdirectories": [
|
||||
/// {
|
||||
/// "Name": "bans",
|
||||
/// "Files": [
|
||||
/// {
|
||||
/// "Name": "hacker101.txt",
|
||||
/// "Data": "RGF0ZTogMTAvMy8yMDE4DQpVc2VyOiBoYWNrZXIxMDENCg0KQmFuIHR5cGU6IEF1dG9tYXRlZA0KDQpEZXNjcmlwdGlvbjoNCg0KVGhpcyB1c2VyIGhhcyBiZWVuIGJhbm5lZCBieSB0aGUgYXV0b21hdGVkIGFudGktaGFja2luZyBzeXN0ZW0gZm9yIGNyZWF0aW9uIG9mIG1hbGljaW91cyBzb2Z0d2FyZSBhbmQgZXhwbG9pdGF0aW9uIHV0aWxpdGllcy4=",
|
||||
/// "HeaderData": null,
|
||||
/// "ReadAccessToLo [rest of string was truncated]";.
|
||||
/// </summary>
|
||||
internal static string AppscapeServerFS {
|
||||
get {
|
||||
return ResourceManager.GetString("AppscapeServerFS", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to RGF0ZTogMDQvMS8yMDE4DQpVc2VyOiBtYXVyZWVuX2Zlbm4NCg0KQmFuIHR5cGU6IENlYXNlIGFuZCBkZXNpc3QgKERldlgpDQoNCkRlc2NyaXB0aW9uOg0KDQpEZXZYIGhhcyBzZW50IGEgY2Vhc2UgYW5kIGRlc2lzdCByZXF1ZXN0IHRvIEFwcHNjYXBlIGZvciBob3N0aW5nIHRoaXMgdXNlcidzIGFwcGxpY2F0aW9ucyBhbmQgc2VuZGluZyBwcm9maXRzIG92ZXIuIFRoaXMgdXNlcidzIHNvZnR3YXJlIHdpbGwgbm90IGJlIHB1bGxlZCwgYnV0IGFsbCBDb2RlcG9pbnRzIGVhcm5lZCBmcm9tIGl0IHdpbGwgbm90IGJlIHJlZGlyZWN0ZWQgYW5kIHRoZSB1c2VyIHdpbGwgbm90IGJlIGFibGUgdG8gYWNjZXNzIHRoZWlyIGRldmVsb3BtZW50IHBhbmVsLg==.
|
||||
/// </summary>
|
||||
internal static string AppscapeWantedFile {
|
||||
get {
|
||||
return ResourceManager.GetString("AppscapeWantedFile", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
|
|
|
@ -34618,6 +34618,13 @@
|
|||
<data name="strings_fr" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\strings_fr.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
|
||||
</data>
|
||||
<data name="AppscapeServerFS" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\AppscapeServerFS.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
|
||||
</data>
|
||||
<data name="AppscapeWantedFile" xml:space="preserve">
|
||||
<value>RGF0ZTogMDQvMS8yMDE4DQpVc2VyOiBtYXVyZWVuX2Zlbm4NCg0KQmFuIHR5cGU6IENlYXNlIGFuZCBkZXNpc3QgKERldlgpDQoNCkRlc2NyaXB0aW9uOg0KDQpEZXZYIGhhcyBzZW50IGEgY2Vhc2UgYW5kIGRlc2lzdCByZXF1ZXN0IHRvIEFwcHNjYXBlIGZvciBob3N0aW5nIHRoaXMgdXNlcidzIGFwcGxpY2F0aW9ucyBhbmQgc2VuZGluZyBwcm9maXRzIG92ZXIuIFRoaXMgdXNlcidzIHNvZnR3YXJlIHdpbGwgbm90IGJlIHB1bGxlZCwgYnV0IGFsbCBDb2RlcG9pbnRzIGVhcm5lZCBmcm9tIGl0IHdpbGwgbm90IGJlIHJlZGlyZWN0ZWQgYW5kIHRoZSB1c2VyIHdpbGwgbm90IGJlIGFibGUgdG8gYWNjZXNzIHRoZWlyIGRldmVsb3BtZW50IHBhbmVsLg==</value>
|
||||
<comment>The file that Maureen Fenn wants to see in the Appscape Troubles storyline.</comment>
|
||||
</data>
|
||||
<data name="brute" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\brute.mp3;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
|
|
52
ShiftOS.WinForms/Resources/AppscapeServerFS.txt
Normal file
52
ShiftOS.WinForms/Resources/AppscapeServerFS.txt
Normal file
|
@ -0,0 +1,52 @@
|
|||
{
|
||||
"Name": "appscape_main",
|
||||
"Files": [],
|
||||
"Subdirectories": [
|
||||
{
|
||||
"Name": "bans",
|
||||
"Files": [
|
||||
{
|
||||
"Name": "hacker101.txt",
|
||||
"Data": "RGF0ZTogMTAvMy8yMDE4DQpVc2VyOiBoYWNrZXIxMDENCg0KQmFuIHR5cGU6IEF1dG9tYXRlZA0KDQpEZXNjcmlwdGlvbjoNCg0KVGhpcyB1c2VyIGhhcyBiZWVuIGJhbm5lZCBieSB0aGUgYXV0b21hdGVkIGFudGktaGFja2luZyBzeXN0ZW0gZm9yIGNyZWF0aW9uIG9mIG1hbGljaW91cyBzb2Z0d2FyZSBhbmQgZXhwbG9pdGF0aW9uIHV0aWxpdGllcy4=",
|
||||
"HeaderData": null,
|
||||
"ReadAccessToLowUsers": false,
|
||||
"permissions": 0
|
||||
},
|
||||
{
|
||||
"Name": "maureen_fenn.txt",
|
||||
"Data": "RGF0ZTogMDQvMS8yMDE4DQpVc2VyOiBtYXVyZWVuX2Zlbm4NCg0KQmFuIHR5cGU6IENlYXNlIGFuZCBkZXNpc3QgKERldlgpDQoNCkRlc2NyaXB0aW9uOg0KDQpEZXZYIGhhcyBzZW50IGEgY2Vhc2UgYW5kIGRlc2lzdCByZXF1ZXN0IHRvIEFwcHNjYXBlIGZvciBob3N0aW5nIHRoaXMgdXNlcidzIGFwcGxpY2F0aW9ucyBhbmQgc2VuZGluZyBwcm9maXRzIG92ZXIuIFRoaXMgdXNlcidzIHNvZnR3YXJlIHdpbGwgbm90IGJlIHB1bGxlZCwgYnV0IGFsbCBDb2RlcG9pbnRzIGVhcm5lZCBmcm9tIGl0IHdpbGwgbm90IGJlIHJlZGlyZWN0ZWQgYW5kIHRoZSB1c2VyIHdpbGwgbm90IGJlIGFibGUgdG8gYWNjZXNzIHRoZWlyIGRldmVsb3BtZW50IHBhbmVsLg==",
|
||||
"HeaderData": null,
|
||||
"ReadAccessToLowUsers": false,
|
||||
"permissions": 0
|
||||
}
|
||||
],
|
||||
"Subdirectories": [],
|
||||
"ReadAccessToLowUsers": false,
|
||||
"permissions": 3
|
||||
},
|
||||
{
|
||||
"Name": "feedback",
|
||||
"Files": [
|
||||
{
|
||||
"Name": "better_feedback_system.txt",
|
||||
"Data": "VXNlcjogYW5vbnltb3VzDQpEYXRlOiAyNS8xMi8yMDE3DQpUaXRsZTogQmV0dGVyIGZlZWRiYWNrIHN5c3RlbS4NCg0KRGVzY3JpcHRpb246DQoNCldoeSBtdXN0IHdlIEZUUCBpbnRvIHlvdXIgc3lzdGVtIHRvIGxlYXZlIGZlZWRiYWNrIGZvciBBcHBzY2FwZT8gSSBrbm93IHRoYXQgeW91J3ZlIGdvdCB0aGlzIGFjY291bnQgdGlnaHRseSBsb2NrZWQgYW5kIGl0IGNhbiBvbmx5IGFjY2VzcyB0aGlzIHBhcnQgb2YgeW91ciBjb21wdXRlciwgYnV0IGl0J3MgdGhlIERpZ2l0YWwgU29jaWV0eS4gU29tZW9uZSdzIGdvbm5hIGJyZWFrIHRoaXMuIENhbid0IHdlIGF0IGxlYXN0IGhhdmUgYSBtb3JlIHNlY3VyZSBTTVRQLWJhc2VkIGZlZWRiYWNrIHN5c3RlbT8gT3IgZXZlbiBhIGZvcm0gb24gQXBwc2NhcGUncyB3ZWJzaXRlPw0KDQpSZXBseToNCg0KQ29tZSBvbiBtYW4hIEl0J3MgQ2hyaXN0bWFzLCB5b3UncmUgZ29ubmEgbWFrZSBtZSBjb2RlPyBJJ20gdHJ5aW5nIHRvIHNwZW5kIHRpbWUgd2l0aCB0aGUgZmFtaWx5IGhlcmUuLi4gd2FpdCBhIG1pbnV0ZS4uLiB1aGhoLi4uIG5ldmVybWluZC4gSSdtIGFjdHVhbGx5IHdvcmtpbmcgb24gdGhhdCBhcyB3ZSBzcGVhay4=",
|
||||
"HeaderData": null,
|
||||
"ReadAccessToLowUsers": false,
|
||||
"permissions": 0
|
||||
},
|
||||
{
|
||||
"Name": "screenshots.txt",
|
||||
"Data": "VXNlcjogYW5vbnltb3VzDQpEYXRlOiAwNC8xMi8yMDE3DQpUaXRsZTogQnJpbmcgYmFjayBzY3JlZW5zaG90cy4NCg0KRGVzY3JpcHRpb246DQoNCkJhY2sgaW4gdGhlIG9sZGVuIGRheXMsIGJlZm9yZSB0aGUgRGlnaXRhbCBTb2NpZXR5LCBBcHBzY2FwZSBoYWQgZGVjZW50IHNjcmVlbnNob3RzIGZvciBpdHMgYXBwcy4gV2h5IGNhbid0IHdlIGhhdmUgdGhlbSBpbiBtb2Rlcm4gQXBwc2NhcGU/DQoNClJlcGx5Og0KDQpUaGUgU2hpZnRuZXQgaXMgaW4gaXRzIGVuZmFuY3kgYXQgdGhpcyB0aW1lLi4uIGV2ZXIgc2luY2UgRGV2WCBtYWRlIGl0IGFuIG9mZmljaWFsIHBhcnQgb2YgU2hpZnRPUyBhbmQgcmV3cm90ZSB0aGUgcGFnZSB0ZW1wbGF0aW5nIHN5c3RlbSwgSSBoYXZlbid0IGxlYXJuZWQgeWV0IGhvdyB0byBkZWFsIHdpdGggcGljdHVyZXMuIEknbGwgbG9vayBpbnRvIGl0IHRob3VnaC4gSSBzdXJlIGRvIG1pc3MgdGhlIG9sZGVyIFNoaWZ0bmV0Li4u",
|
||||
"HeaderData": null,
|
||||
"ReadAccessToLowUsers": false,
|
||||
"permissions": 0
|
||||
}
|
||||
],
|
||||
"Subdirectories": [],
|
||||
"ReadAccessToLowUsers": false,
|
||||
"permissions": 0
|
||||
}
|
||||
],
|
||||
"ReadAccessToLowUsers": false,
|
||||
"permissions": 3
|
||||
}
|
|
@ -875,6 +875,7 @@
|
|||
<None Include="Resources\Ambient9.mp3" />
|
||||
<None Include="Resources\austmicrotrends.png" />
|
||||
<None Include="Resources\brute.mp3" />
|
||||
<None Include="Resources\AppscapeServerFS.txt" />
|
||||
<Content Include="Resources\fileiconcf.bmp" />
|
||||
<None Include="Resources\infobox.wav" />
|
||||
<None Include="Resources\typesound.wav" />
|
||||
|
|
|
@ -6,6 +6,7 @@ using System.Threading;
|
|||
using System.Threading.Tasks;
|
||||
using Newtonsoft.Json;
|
||||
using ShiftOS.Engine;
|
||||
using ShiftOS.Objects;
|
||||
|
||||
namespace ShiftOS.WinForms.Stories
|
||||
{
|
||||
|
@ -80,6 +81,166 @@ namespace ShiftOS.WinForms.Stories
|
|||
Story.Context.MarkComplete();
|
||||
Story.Start("aiden_shiftnet2");
|
||||
}
|
||||
|
||||
[RequiresUpgrade("appscape_troubles")]
|
||||
[Mission("appscape_troubles_end", "Appscape Troubles: Lifting The Ban", "Maureen's been banned from Appscape. Let's see if we can get Aiden to reverse that.", 1200l, "maureen_fenn")]
|
||||
public static void AppscapeTroublesEnd()
|
||||
{
|
||||
Applications.Chat chat = null;
|
||||
Desktop.InvokeOnWorkerThread(() =>
|
||||
{
|
||||
chat = OpenChat();
|
||||
});
|
||||
while (chat == null)
|
||||
Thread.Sleep(10);
|
||||
chat.ShowChat();
|
||||
chat.ChatID = "maureen_fenn@trisys";
|
||||
CurrentChat = chat;
|
||||
SendChatMessage("maureen_fenn", "I just talked to hacker101 about our little issue here...");
|
||||
SendChatMessage("maureen_fenn", "He tried to get Aiden to lighten up, but he's too hell-bent on making DevX happy.");
|
||||
SendChatMessage("maureen_fenn", "But, I think we've gotten a plan.");
|
||||
SendChatMessage("hacker101", "<user joined chat>");
|
||||
chat.ChatID = "maureen_fenn@trisys, hacker101@pebcak";
|
||||
SendChatMessage("hacker101", "We meet again, " + SaveSystem.CurrentUser.Username + "...");
|
||||
SendChatMessage("hacker101", "Maureen tells me you've used your hacking skills to steal a document from Aiden Nirh.");
|
||||
SendChatMessage("hacker101", "I hope he didn't find out about brute...");
|
||||
SendChatMessage("maureen_fenn", "Ugh... brute? That thing? That's not hacking.");
|
||||
SendChatMessage("maureen_fenn", "You're just turning " + SaveSystem.CurrentUser.Username + " into a script-kiddie.");
|
||||
SendChatMessage("maureen_fenn", SaveSystem.CurrentUser.Username + ", you want REAL hacking? Why don't you come to me after we're done here. I'll show you how REAL sentiences get their way.");
|
||||
SendChatMessage("hacker101", "HEY. You gotta give Brute some credit. It's good at cracking passwords.");
|
||||
SendChatMessage("maureen_fenn", "Well, what happens if the user runs into a firewall block? Brute ain't going to help with that.");
|
||||
SendChatMessage("hacker101", "....whatever. Let's just get on with this.");
|
||||
SendChatMessage("hacker101", "We need to get rid of that cease and desist ban.");
|
||||
SendChatMessage("hacker101", "Firstly, let's review the document.");
|
||||
SendChatMessage("hacker101", "<sent a file: maureen_fenn.txt>");
|
||||
var bytes = Convert.FromBase64String(Properties.Resources.AppscapeWantedFile);
|
||||
chat.PostMessage("maureen_fenn.txt", chat.ChatID, Encoding.UTF8.GetString(bytes));
|
||||
SendChatMessage("hacker101", "I ain't no lawyer but I can tell you right now that C&D is bull.");
|
||||
SendChatMessage("hacker101", "Guess this is just DevX's way of saying he can't stand you, Maureen.");
|
||||
SendChatMessage("hacker101", "I want you to know that unlike him, I can. I... I...");
|
||||
SendChatMessage("maureen_fenn", "..Nope, nope. Let's not go there. You're getting a bit creepy, hacker.");
|
||||
SendChatMessage("hacker101", "Whoops. Oh well... We need to show DevX who's boss.");
|
||||
SendChatMessage("hacker101", "Maybe, " + SaveSystem.CurrentUser.Username + " can help us.");
|
||||
SendChatMessage("maureen_fenn", "Maybe they can... and meybe Aiden can as well.");
|
||||
SendChatMessage("hacker101", "No, he's convinced that we're the bad guys.");
|
||||
SendChatMessage("hacker101", "He's got me banned because of brute.");
|
||||
SendChatMessage("maureen_fenn", "Lol, banned... for BRUTE? That little harmless tool? Bahahahaha.");
|
||||
SendChatMessage(SaveSystem.CurrentUser.Username, "Will you two stop bickering at eachother about Brute and hacker101's love for Maureen and let us get on with this? I could be playing Pong right now.");
|
||||
SendChatMessage("maureen_fenn", "Right. We need to gather as much evidence against DevX as possible.");
|
||||
SendChatMessage("hacker101", "Then, we need to send it all to Aiden, right? We'll need " + SaveSystem.CurrentUser.Username + " to do that.");
|
||||
SendChatMessage("maureen_fenn", "Alrighty, " + SaveSystem.CurrentUser.Username + ". You're on our team. We'll have any tasks we need you to do in your missions list.");
|
||||
SendChatMessage("maureen_fenn", "Oh yeah, and here's a couple Codepoints as compensation for helping us out.");
|
||||
Story.Context.MarkComplete();
|
||||
Thread.Sleep(5000);
|
||||
Desktop.InvokeOnWorkerThread(() =>
|
||||
{
|
||||
AppearanceManager.Close(chat);
|
||||
});
|
||||
}
|
||||
|
||||
[RequiresUpgrade("hacker101_breakingbonds_3")]
|
||||
[Mission("appscape_troubles", "Appscape Troubles", "You know how to do some basic hacking, now you've got a chance to exercise it.", 750l, "maureen_fenn")]
|
||||
public static void AppscapeTroubles()
|
||||
{
|
||||
Applications.Chat chat = null;
|
||||
Desktop.InvokeOnWorkerThread(() =>
|
||||
{
|
||||
chat = OpenChat();
|
||||
});
|
||||
while (chat == null)
|
||||
Thread.Sleep(10);
|
||||
chat.ShowChat();
|
||||
chat.ChatID = "maureen_fenn@trisys";
|
||||
CurrentChat = chat;
|
||||
SendChatMessage("maureen_fenn", "Hello there, " + SaveSystem.CurrentUser.Username + ". My name is Maureen.");
|
||||
SendChatMessage("maureen_fenn", "I'm the developer of the various Tri apps you may've seen around the Shiftnet.");
|
||||
Story.Context.AutoComplete = false;
|
||||
SendChatMessage("maureen_fenn", "I have a bit of a problem that may need your assistance..");
|
||||
SendChatMessage("maureen_fenn", "I struck a deal with Aiden Nirh to put my software on his site and split the profits in half with me and him.");
|
||||
SendChatMessage("maureen_fenn", "But lately, even though many people have been buying my software, I've been getting nothing for it.");
|
||||
SendChatMessage("maureen_fenn", "Now I have barely enough Codepoints to keep my development environment online...");
|
||||
SendChatMessage("maureen_fenn", "My friend, you know him as hacker101, he's told me that you know how to hack.");
|
||||
SendChatMessage("maureen_fenn", "Can you bust into Aiden's server and see if he's gotten any documents or anything indicating why he's not paying me?");
|
||||
SendChatMessage("maureen_fenn", "He likes to document a lot of things about what he does and he likes to store those docs on his central Appscape server. Maybe there's something on there about me...");
|
||||
SendChatMessage("maureen_fenn", "You can find connection details for his server on Appscape's Contact page.");
|
||||
SendChatMessage("maureen_fenn", "The guy has pretty good security though... so be careful.");
|
||||
SendChatMessage("maureen_fenn", "When you find the right file, I'd download it to your system and just send it through SimpleSRC.");
|
||||
|
||||
|
||||
VirtualEnvironments.Create("appscape_main", new List<ClientSave>
|
||||
{
|
||||
new ClientSave
|
||||
{
|
||||
Username = "aiden",
|
||||
Password = GenRandomPassword(),
|
||||
Permissions = UserPermissions.Root,
|
||||
},
|
||||
new ClientSave
|
||||
{
|
||||
Username = "feedback",
|
||||
Password = "",
|
||||
Permissions = UserPermissions.Guest
|
||||
}
|
||||
}, 15000l, JsonConvert.DeserializeObject<ShiftOS.Objects.ShiftFS.Directory>(Properties.Resources.AppscapeServerFS));
|
||||
|
||||
bool validFileSent = false;
|
||||
chat.FileSent += (file) =>
|
||||
{
|
||||
if (Convert.ToBase64String(file.Data) == Properties.Resources.AppscapeWantedFile)
|
||||
validFileSent = true;
|
||||
};
|
||||
|
||||
Story.Context.AutoComplete = false;
|
||||
|
||||
Story.PushObjective("Appscape Troubles: The Secret", "Maureen has asked you to find out why Aiden Nirh, the maintainer of Appscape, isn't paying her half the profits for her TriOffice suite. Time to use your hacking skills... just like before.",
|
||||
() => { return validFileSent; },
|
||||
() =>
|
||||
{
|
||||
SendChatMessage("maureen_fenn", "File received.");
|
||||
SendChatMessage("maureen_fenn", "Awwww, come on, man! You can't tell me I got banned due to a cease and desist from DevX... That bastard... DevX, I mean.");
|
||||
SendChatMessage("maureen_fenn", "Anyways, I'll talk to Aiden about that... if I can... or maybe you can? Either way, here's your Codepoints.");
|
||||
Story.Context.MarkComplete();
|
||||
Thread.Sleep(5000);
|
||||
Desktop.InvokeOnWorkerThread(() =>
|
||||
{
|
||||
AppearanceManager.Close(chat);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
private static Applications.Chat CurrentChat;
|
||||
|
||||
public static void SendChatMessage(string who, string msg)
|
||||
{
|
||||
CurrentChat.Typing = who;
|
||||
foreach(var c in msg)
|
||||
{
|
||||
Thread.Sleep(75);
|
||||
}
|
||||
CurrentChat?.PostMessage(who, CurrentChat?.ChatID, msg);
|
||||
CurrentChat.Typing = "";
|
||||
Thread.Sleep(500);
|
||||
}
|
||||
|
||||
public static Applications.Chat OpenChat()
|
||||
{
|
||||
var chatbrd = AppearanceManager.OpenForms.FirstOrDefault(x => x.ParentWindow is Applications.Chat);
|
||||
Applications.Chat chat = null;
|
||||
if(chatbrd == null)
|
||||
{
|
||||
chat = new Applications.Chat();
|
||||
AppearanceManager.SetupWindow(chat);
|
||||
}
|
||||
else
|
||||
{
|
||||
chat = chatbrd.ParentWindow as Applications.Chat;
|
||||
}
|
||||
return chat;
|
||||
}
|
||||
|
||||
|
||||
[Mission("hacker101_breakingbonds_3", "Breaking the Bonds", "It's time you've learned how to hack.", 500l, "hacker101")]
|
||||
public static void BreakingTheBonds_Outro()
|
||||
|
|
|
@ -167,6 +167,8 @@ namespace ShiftOS.Engine
|
|||
ConsoleEx.ForegroundColor = ConsoleColor.White;
|
||||
Console.WriteLine($"{mission.Name} successfully finished. You have earned {mission.CodepointAward} Codepoints for your efforts.");
|
||||
SaveSystem.CurrentSave.Codepoints += mission.CodepointAward;
|
||||
TerminalBackend.PrintPrompt();
|
||||
TerminalBackend.PrefixEnabled = true;
|
||||
}
|
||||
StoryComplete?.Invoke(stid);
|
||||
SaveSystem.CurrentSave.PickupPoint = null;
|
||||
|
|
Loading…
Reference in a new issue