aboutsummaryrefslogtreecommitdiff
path: root/ShiftOS_TheReturn/Story.cs
diff options
context:
space:
mode:
authorwilliam341 <[email protected]>2017-05-28 12:37:00 -0700
committerGitHub <[email protected]>2017-05-28 12:37:00 -0700
commit771c20cfb3a703e0f1550fdcf9eb07b78298c944 (patch)
tree59cb532e15ebff313fdba2be264d78ec0033f407 /ShiftOS_TheReturn/Story.cs
parent496b0cbf8659c99203f48210fd39c572400ae623 (diff)
parentc7ba7d733c756d196f98dd4533289a1ef4db715f (diff)
downloadshiftos_thereturn-771c20cfb3a703e0f1550fdcf9eb07b78298c944.tar.gz
shiftos_thereturn-771c20cfb3a703e0f1550fdcf9eb07b78298c944.tar.bz2
shiftos_thereturn-771c20cfb3a703e0f1550fdcf9eb07b78298c944.zip
Merge pull request #1 from shiftos-game/master
welp, no longer a dev.
Diffstat (limited to 'ShiftOS_TheReturn/Story.cs')
-rw-r--r--ShiftOS_TheReturn/Story.cs273
1 files changed, 65 insertions, 208 deletions
diff --git a/ShiftOS_TheReturn/Story.cs b/ShiftOS_TheReturn/Story.cs
index 9d8078e..d62dae4 100644
--- a/ShiftOS_TheReturn/Story.cs
+++ b/ShiftOS_TheReturn/Story.cs
@@ -35,231 +35,88 @@ using Newtonsoft.Json;
namespace ShiftOS.Engine
{
- public class Story
+ /// <summary>
+ /// Storyline management class.
+ /// </summary>
+ public static class Story
{
- public static void RunFromInternalResource(string resource_id)
- {
- var t = typeof(Properties.Resources);
-
- foreach(var prop in t.GetProperties(System.Reflection.BindingFlags.NonPublic | BindingFlags.Static))
- {
- if(prop.Name == resource_id)
- {
- if(prop.PropertyType == typeof(string))
- {
- WriteStory(prop.GetValue(null) as string);
-
- return;
- }
- }
- }
- throw new ArgumentException("Couldn't find resource ID inside the engine: " + resource_id);
- }
-
-
- public string Character { get; set; }
- public List<string> Lines { get; set; }
-
- public static void Start()
+ /// <summary>
+ /// Starts the storyline with the specified Storyline ID.
+ /// </summary>
+ /// <param name="stid">The storyline ID to start.</param>
+ public static void Start(string stid)
{
- Console.WriteLine();
- if(SaveSystem.CurrentSave.StoryPosition == 5)
+ foreach (var exec in System.IO.Directory.GetFiles(Environment.CurrentDirectory))
{
- StartDevXLies();
- }
- }
-
- public static void StartDevXLies()
- {
- int chatProgress = 0;
- //bool LoopStuck = false;
- string textToWrite = "";
- const int TYPE_SPEED_MS = 45;
- bool done = false;
- bool write = true;
-
- while (done == false) {
- write = true;
- switch (chatProgress)
- {
- case 0:
- textToWrite = "User joined: @" + SaveSystem.CurrentSave.Username;
- break;
- case 1:
- textToWrite = $"Hello, {SaveSystem.CurrentSave.Username}.";
- break;
- case 2: //If C:\ShiftOS doesn't exist the player won't notice this is here.
- if (Directory.Exists(Paths.GetPath("classic")))
- {
- textToWrite = "I see you've participated in my previous ShiftOS experiment. Welcome back, Shifter. I assume you know lots about ShiftOS, but there are some updates I have to tell you.";
- }
- else
- {
- write = false;
- }
- break;
- case 3: //DevX hates ShiftOS-Next secretly.
- if (Directory.Exists(Paths.GetPath("classic") + "-Next"))
- {
- textToWrite = "Hmmmm.... looking at my sentience records, I see you've participated in ShiftOS-Next. This is gonna be difficult.";
- }
- else
- {
- write = false;
- }
- break;
- case 4:
- textToWrite = "There's a lot that has changed within ShiftOS.";
- break;
- case 5:
- textToWrite = "First off, I want to tell you a bit about myself in case you don't already know.";
- break;
- case 6:
- textToWrite = "My name is DevX. I am the architect of ShiftOS. I have chosen you to take part in helping me out with it.";
- break;
- case 7:
- textToWrite = "You see, in my past attempts it has all been about an evolving operating system and seeing how the users work with it...";
- break;
- case 8:
- textToWrite = "Almost one hundred percent of the time, people have found out it was an experiment and they could simply return to their regular system with a specific upgrade.";
- break;
- case 9:
- textToWrite = "But now, I want to try something different - something unique.";
- break;
- case 10:
- textToWrite = "ShiftOS is the same as it has been in my previous attempts, but now, your goal is to gain as much wealth and power as possible.";
- break;
- case 11:
- textToWrite = "Right now you are inside my segregation LAN. Only you and me exist within this domain. You are free from other users unless I create them.";
- break;
- case 12:
- textToWrite = "Since you have proved your sentience, I have a task for you outside the segregation LAN.";
- break;
- case 13:
- textToWrite = "But first... you need to be taught a few things.";
- break;
- case 14:
- textToWrite = "First off, when I bring you into my multi-user domain, you'll first want to establish as much wealth as possible.";
- break;
- case 15:
- textToWrite = "Wealth comes in the form of Codepoints - a currency used among users of the multi-user domain.";
- break;
- case 16:
- textToWrite = @"You can get Codepoints by doing the following:
-
- - Stealing them from other users
- - Extracting them from inactive/unverified sentiences
- - Using specific scripts/programs within ShiftOS
- - Creating paid scripts/applications within ShiftOS";
- break;
- case 17:
- textToWrite = "You can use Codepoints to buy upgrades using the 'shiftorium.buy' command, or you can use them to pay other users, or scripts.";
- break;
- case 18:
- textToWrite = "Within the multi-user domain you are free to do whatever you want. Larcany, theft, deceiving, lies, and distribution of malware is permitted under my watch.";
- break;
- case 19:
- textToWrite = "Do whatever you have to to get Codepoints.";
- break;
- case 20:
- textToWrite = "Then use them to make yourself stronger by buying upgrades at the shiftorium.";
- break;
- case 21:
- textToWrite = "If you want to get a bit devious within the multi-user domain, look around for scripts that will expose user account information.";
- break;
- case 22:
- textToWrite = "Or just spread a virus around the mud.";
- break;
- case 23:
- textToWrite = "Or you can be the 'good' guy and stop these attacks and gain the trust of other users.";
- break;
- case 24:
- textToWrite = "It's up to you. Just, don't mess with my system. You won't want me coming to you after that. I'm watching.";
- break;
- case 25:
- textToWrite = "User left chat: @" + SaveSystem.CurrentSave.Username;
- done = true;
- SaveSystem.CurrentSave.StoryPosition++;
- TerminalBackend.InvokeCommand("sos.save");
- break;
-
- }
-
- if (write == true)
+ if(exec.EndsWith(".exe") || exec.EndsWith(".dll"))
{
- Console.WriteLine();
- Console.Write("DevX: ");
- foreach(char c in textToWrite)
+ try
{
- Console.Beep(750, TYPE_SPEED_MS);
- if (c == '\n')
- {
-
- }
- else if (c == '\r')
+ if (SaveSystem.CurrentSave.StoriesExperienced == null)
+ SaveSystem.CurrentSave.StoriesExperienced = new List<string>();
+ var asm = Assembly.LoadFile(exec);
+ foreach(var type in asm.GetTypes())
{
- Console.WriteLine();
- }
- else
- {
- Console.Write(c);
+ foreach(var mth in type.GetMethods(BindingFlags.Public | BindingFlags.Static))
+ {
+ foreach(var attrib in mth.GetCustomAttributes(false))
+ {
+ if(attrib is StoryAttribute)
+ {
+ var story = attrib as StoryAttribute;
+ if(story.StoryID == stid)
+ {
+ new Thread(() =>
+ {
+ mth.Invoke(null, null);
+ SaveSystem.CurrentSave.StoriesExperienced.Add(stid);
+ }).Start();
+ return;
+ }
+ }
+ }
+ }
}
}
- Thread.Sleep(1000);
+ catch (Exception ex) { throw ex; }
}
- chatProgress += 1;
}
+#if DEBUG
+ throw new ArgumentException("Story ID not found: " + stid + " - Talk to Michael. NOW.");
+#else
+ Debug.Print("No such story: " + stid);
+#endif
}
-
- public static void WriteStory(string json)
+ [Obsolete("Please use Story.Start() in tandem with [StoryAttribute].")]
+ public static void RunFromInternalResource(string resource_id)
{
- var thread = new Thread(new ThreadStart(() =>
- {
- var story = JsonConvert.DeserializeObject<Story>(json);
-
- const int TYPESPEED = 45;
-
- foreach (var line in story.Lines)
- {
- var localized = Localization.Parse(line);
+ }
- if (line.StartsWith("cmd:"))
- {
- string[] cmdsplit = line.Replace("cmd:", "").Split(' ');
- switch (cmdsplit[0])
- {
- case "givecp":
- SaveSystem.TransferCodepointsFrom(story.Character, Convert.ToInt32(cmdsplit[1]));
- break;
- }
- }
- else
- {
- Console.Write(story.Character + ": ");
+ }
- foreach (var c in localized)
- {
- Console.Beep(1024, TYPESPEED);
- if (c == '\r')
- {
+ [AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
+ public class StoryAttribute : Attribute
+ {
+ /// <summary>
+ /// Creates a new instance of the <see cref="StoryAttribute"/> attribute.
+ /// </summary>
+ /// <param name="id">The ID of this story plot.</param>
+ /// <remarks>
+ /// <para>
+ /// The <see cref="StoryAttribute"/> is used to turn a static, public method into a story element. Using the specified <paramref name="id"/> argument, the ShiftOS Engine can determine whether this plot has already been experienced, and using the <see cref="Shiftorium"/> classes, the ID is treated as a special Shiftorium upgrade, and you can use the <see cref="RequiresUpgradeAttribute"/> attribute as well as the various other ways of determining whether a Shiftorium upgrade is installed to determine if this plot has been experienced.
+ /// </para>
+ /// </remarks>
+ public StoryAttribute(string id)
+ {
+ StoryID = id;
+ }
- }
- else if (c == '\n')
- Console.WriteLine();
- else
- Console.Write(c);
- }
+ /// <summary>
+ /// Gets the storyline ID stored in this attribute.
+ /// </summary>
+ public string StoryID { get; private set; }
- Console.WriteLine();
- Thread.Sleep(1000);
- }
- }
- Console.Write($"{SaveSystem.CurrentSave.Username}@{SaveSystem.CurrentSave.SystemName}:~$ ");
- }));
- thread.IsBackground = true;
- thread.Start();
- }
}
}