diff options
Diffstat (limited to 'ShiftOS_TheReturn')
| -rw-r--r-- | ShiftOS_TheReturn/AudioManager.cs | 58 | ||||
| -rw-r--r-- | ShiftOS_TheReturn/MissionAttribute.cs | 24 | ||||
| -rw-r--r-- | ShiftOS_TheReturn/SaveSystem.cs | 84 | ||||
| -rw-r--r-- | ShiftOS_TheReturn/ServerManager.cs | 3 | ||||
| -rw-r--r-- | ShiftOS_TheReturn/ShiftOS.Engine.csproj | 1 | ||||
| -rw-r--r-- | ShiftOS_TheReturn/Story.cs | 16 |
6 files changed, 83 insertions, 103 deletions
diff --git a/ShiftOS_TheReturn/AudioManager.cs b/ShiftOS_TheReturn/AudioManager.cs index 85e1371..a9101b7 100644 --- a/ShiftOS_TheReturn/AudioManager.cs +++ b/ShiftOS_TheReturn/AudioManager.cs @@ -83,28 +83,15 @@ namespace ShiftOS.Engine /// <param name="file">The file to play.</param> public static void Play(string file) { - bool play = true; - float volume = 1f; - if (SaveSystem.CurrentSave != null) + try { - play = (SaveSystem.CurrentSave.SoundEnabled); - volume = (float)SaveSystem.CurrentSave.MusicVolume / 100f; + var bytes = File.ReadAllBytes(file); + var str = new MemoryStream(bytes); + PlayStream(str); } - if (play) + catch { - try - { - _reader = new AudioFileReader(file); - _out = new WaveOut(); - _out.Init(_reader); - _out.Volume = volume; - _out.Play(); - _out.PlaybackStopped += (o, a) => { PlayCompleted?.Invoke(); }; - } - catch (Exception ex) - { - Console.WriteLine("Audio error: " + ex.Message); - } + } } @@ -114,35 +101,14 @@ namespace ShiftOS.Engine /// <param name="str">The stream to read from.</param> public static void PlayStream(Stream str) { - try + bool play = true; + if (SaveSystem.CurrentSave != null) + play = SaveSystem.CurrentSave.SoundEnabled; + if (play) { - bool play = true; - float volume = 1f; - if (SaveSystem.CurrentSave != null) - { - play = (SaveSystem.CurrentSave.SoundEnabled); - volume = (float)SaveSystem.CurrentSave.MusicVolume / 100f; - } - if (play) - { - try - { - while (_out.PlaybackState == PlaybackState.Playing) - { - Thread.Sleep(10); - } - } - catch { } - ShiftOS.Engine.AudioManager.Stop(); - _out = new WaveOut(); - var mp3 = new WaveFileReader(str); - _out.Init(mp3); - _out.Volume = volume; - _out.Play(); - _out.PlaybackStopped += (o, a) => { PlayCompleted?.Invoke(); }; - } + var splayer = new System.Media.SoundPlayer(str); + splayer.Play(); } - catch { } } public static event Action PlayCompleted; diff --git a/ShiftOS_TheReturn/MissionAttribute.cs b/ShiftOS_TheReturn/MissionAttribute.cs new file mode 100644 index 0000000..4a0750c --- /dev/null +++ b/ShiftOS_TheReturn/MissionAttribute.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ShiftOS.Engine +{ + [AttributeUsage(AttributeTargets.Method, AllowMultiple = false)] + public class MissionAttribute : StoryAttribute + { + public MissionAttribute(string id, string friendlyName, string friendlyDesc, ulong codepointAward, string assigner) : base(id) + { + Name = friendlyName; + Description = friendlyDesc; + CodepointAward = codepointAward; + Assigner = assigner; + } + + public string Name { get; private set; } + public string Description { get; private set; } + public string Assigner { get; set; } + } +} diff --git a/ShiftOS_TheReturn/SaveSystem.cs b/ShiftOS_TheReturn/SaveSystem.cs index 8cfea4a..b767605 100644 --- a/ShiftOS_TheReturn/SaveSystem.cs +++ b/ShiftOS_TheReturn/SaveSystem.cs @@ -66,7 +66,7 @@ namespace ShiftOS.Engine /// <summary> /// Boolean representing whether the save system is ready to be used. /// </summary> - public static bool Ready = false; + public static AutoResetEvent Ready = new AutoResetEvent(false); public static bool IsSandbox = false; /// <summary> @@ -154,25 +154,17 @@ namespace ShiftOS.Engine { Console.WriteLine("{MISC_CONNECTINGTONETWORK}"); - Ready = false; + Ready.Reset(); if (PreDigitalSocietyConnection != null) { PreDigitalSocietyConnection?.Invoke(); - - while (!Ready) - { - Thread.Sleep(10); - } + Ready.WaitOne(); } - - - bool guidReceived = false; ServerManager.GUIDReceived += (str) => { //Connection successful! Stop waiting! - guidReceived = true; Console.WriteLine("{MISC_CONNECTIONSUCCESSFUL}"); Thread.Sleep(100); Console.WriteLine("{LOADINGMSG2_" + loadingJoke2 + "}"); @@ -184,37 +176,25 @@ namespace ShiftOS.Engine if (ServerManager.ServerOnline) { ServerManager.Initiate(UserConfig.Get().DigitalSocietyAddress, UserConfig.Get().DigitalSocietyPort); - //This haults the client until the connection is successful. - while (ServerManager.thisGuid == new Guid()) - { - Thread.Sleep(10); - } + // This halts the client until the connection is successful. + ServerManager.guidReceiveARE.WaitOne(); Console.WriteLine("{MISC_DHCPHANDSHAKEFINISHED}"); - FinishBootstrap(); } else { Console.WriteLine("{MISC_NONETWORK}"); Console.WriteLine("{LOADINGMSG2_" + loadingJoke2 + "}"); - FinishBootstrap(); } + FinishBootstrap(); } catch (Exception ex) { - //No errors, this never gets called. + // "No errors, this never gets called." Console.WriteLine("[inetd] SEVERE: " + ex.Message); + string dest = "Startup Exception " + DateTime.Now.ToString() + ".txt"; + System.IO.File.WriteAllText(dest, ex.ToString()); + Console.WriteLine("[inetd] Full exception details have been saved to: " + dest); Thread.Sleep(3000); - Console.WriteLine("[sys] SEVERE: Cannot connect to server. Shutting down in 5..."); - Thread.Sleep(1000); - Console.WriteLine("[sys] 4..."); - Thread.Sleep(1000); - Console.WriteLine("[sys] 3..."); - Thread.Sleep(1000); - Console.WriteLine("[sys] 2..."); - Thread.Sleep(1000); - Console.WriteLine("[sys] 1..."); - Thread.Sleep(1000); - Console.WriteLine("[sys] Bye bye."); System.Diagnostics.Process.GetCurrentProcess().Kill(); } @@ -571,8 +551,6 @@ namespace ShiftOS.Engine /// <param name="amount">The amount of Codepoints to deduct.</param> public static void TransferCodepointsToVoid(ulong amount) { - if (amount < 0) - throw new ArgumentOutOfRangeException("We see what you did there. Trying to pull Codepoints from the void? That won't work."); CurrentSave.Codepoints -= amount; NotificationDaemon.AddNotification(NotificationType.CodepointsSent, amount); } @@ -591,36 +569,35 @@ namespace ShiftOS.Engine /// </summary> public static void ReadSave() { + string path; + + path = "C:\\ShiftOS2\\"; //Migrate old saves. - if (System.IO.Directory.Exists("C:\\ShiftOS2")) + if (System.IO.Directory.Exists(path) && !System.IO.File.Exists(path + "havemigrated")) { Console.WriteLine("Old save detected. Migrating filesystem to MFS..."); - foreach (string file in System.IO.Directory.EnumerateDirectories("C:\\ShiftOS2") -.Select(d => new DirectoryInfo(d).FullName)) + foreach (string file in System.IO.Directory.EnumerateFileSystemEntries(path)) { - if (!Utils.DirectoryExists(file.Replace("C:\\ShiftOS2\\", "0:/").Replace("\\", "/"))) - Utils.CreateDirectory(file.Replace("C:\\ShiftOS2\\", "0:/").Replace("\\", "/")); - } - foreach (string file in System.IO.Directory.EnumerateFiles("C:\\ShiftOS2")) - { - - string rfile = Path.GetFileName(file); - Utils.WriteAllBytes(file.Replace("C:\\ShiftOS2\\", "0:/").Replace("\\", "/"), System.IO.File.ReadAllBytes(file)); - Console.WriteLine("Exported file " + file); + string dest = file.Replace(path, "0:/").Replace("\\", "/"); + if (System.IO.File.GetAttributes(file).HasFlag(FileAttributes.Directory)) + if (!Utils.DirectoryExists(dest)) + Utils.CreateDirectory(dest); + else + { + string rfile = Path.GetFileName(file); + Utils.WriteAllBytes(dest, System.IO.File.ReadAllBytes(file)); + Console.WriteLine("Exported file " + file); + } } - + System.IO.File.WriteAllText(path + "havemigrated", "1.0 BETA"); } - string path = Path.Combine(Paths.SaveDirectory, "autosave.save"); + path = Path.Combine(Paths.SaveDirectory, "autosave.save"); - if (System.IO.File.Exists(Path.Combine(Paths.SaveDirectory, "autosave.save"))) - { + if (System.IO.File.Exists(path)) CurrentSave = JsonConvert.DeserializeObject<Save>(System.IO.File.ReadAllText(path)); - } else - { NewSave(); - } } @@ -667,11 +644,8 @@ namespace ShiftOS.Engine }) { IsBackground = false }.Start(); if (!System.IO.Directory.Exists(Paths.SaveDirectory)) - { System.IO.Directory.CreateDirectory(Paths.SaveDirectory); - } - System.IO.File.WriteAllText(Path.Combine(Paths.SaveDirectory, "autosave.save"), serialisedSaveFile); } if (!Shiftorium.Silent) @@ -688,8 +662,6 @@ namespace ShiftOS.Engine /// <param name="amount">The amount of Codepoints.</param> public static void TransferCodepointsFrom(string who, ulong amount) { - if (amount < 0) - throw new ArgumentOutOfRangeException("We see what you did there... You can't just give a fake character Codepoints like that. It's better if you transfer them to the void."); NotificationDaemon.AddNotification(NotificationType.CodepointsReceived, amount); CurrentSave.Codepoints += amount; } diff --git a/ShiftOS_TheReturn/ServerManager.cs b/ShiftOS_TheReturn/ServerManager.cs index df3e463..66a0d37 100644 --- a/ShiftOS_TheReturn/ServerManager.cs +++ b/ShiftOS_TheReturn/ServerManager.cs @@ -89,6 +89,8 @@ Ping: {ServerManager.DigitalSocietyPing} ms /// </summary> public static Guid thisGuid { get; private set; } + public static AutoResetEvent guidReceiveARE = new AutoResetEvent(false); + /// <summary> /// Gets the underlying NetSockets client for this connection. /// </summary> @@ -241,6 +243,7 @@ Ping: {ServerManager.DigitalSocietyPing} ms { thisGuid = new Guid(msg.Contents); GUIDReceived?.Invoke(msg.Contents); + guidReceiveARE.Set(); TerminalBackend.PrefixEnabled = true; TerminalBackend.PrintPrompt(); } diff --git a/ShiftOS_TheReturn/ShiftOS.Engine.csproj b/ShiftOS_TheReturn/ShiftOS.Engine.csproj index 66d2747..4bb930e 100644 --- a/ShiftOS_TheReturn/ShiftOS.Engine.csproj +++ b/ShiftOS_TheReturn/ShiftOS.Engine.csproj @@ -139,6 +139,7 @@ <Compile Include="Localization.cs" /> <Compile Include="LoginManager.cs" /> <Compile Include="Lunix.cs" /> + <Compile Include="MissionAttribute.cs" /> <Compile Include="NotificationDaemon.cs" /> <Compile Include="OutOfBoxExperience.cs" /> <Compile Include="Paths.cs" /> diff --git a/ShiftOS_TheReturn/Story.cs b/ShiftOS_TheReturn/Story.cs index 2b00686..bf727d8 100644 --- a/ShiftOS_TheReturn/Story.cs +++ b/ShiftOS_TheReturn/Story.cs @@ -141,7 +141,7 @@ namespace ShiftOS.Engine { foreach (var mth in type.GetMethods(BindingFlags.Public | BindingFlags.Static)) { - foreach (var attrib in Array.FindAll(mth.GetCustomAttributes(false), a => a is StoryAttribute)) + foreach (var attrib in Array.FindAll(mth.GetCustomAttributes(false), a => a is StoryAttribute || a is MissionAttribute)) { var story = attrib as StoryAttribute; if (story.StoryID == stid) @@ -157,6 +157,19 @@ namespace ShiftOS.Engine SaveSystem.CurrentSave.PickupPoint = Context.Id; Context.OnComplete += () => { + if(story is MissionAttribute) + { + var mission = story as MissionAttribute; + ConsoleEx.ForegroundColor = ConsoleColor.Yellow; + ConsoleEx.Bold = true; + Console.WriteLine(" - mission complete - "); + ConsoleEx.Bold = false; + 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; }; @@ -209,5 +222,6 @@ namespace ShiftOS.Engine /// </summary> public string StoryID { get; private set; } + public ulong CodepointAward { get; protected set; } } } |
