ShiftOS is a hydra.

You pop one bug off, 2,000 more grow in its place.
This commit is contained in:
Michael 2017-05-12 19:17:47 -04:00
parent 2cede571ca
commit bded9d1250
21 changed files with 441 additions and 181 deletions

View file

@ -55,7 +55,7 @@ namespace ShiftOS.WinForms.Applications
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.label1 = new System.Windows.Forms.Label();
this.lbshiftit = new System.Windows.Forms.Label();
this.lbaboutdesc = new System.Windows.Forms.Label();
this.lbaboutdesc = new System.Windows.Forms.TextBox();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.SuspendLayout();
//
@ -94,11 +94,11 @@ namespace ShiftOS.WinForms.Applications
this.lbaboutdesc.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.lbaboutdesc.Location = new System.Drawing.Point(14, 126);
this.lbaboutdesc.Location = new System.Drawing.Point(23, 158);
this.lbaboutdesc.Multiline = true;
this.lbaboutdesc.Name = "lbaboutdesc";
this.lbaboutdesc.Size = new System.Drawing.Size(498, 328);
this.lbaboutdesc.Size = new System.Drawing.Size(492, 302);
this.lbaboutdesc.TabIndex = 3;
this.lbaboutdesc.Text = "label2";
//
// About
//
@ -121,6 +121,6 @@ namespace ShiftOS.WinForms.Applications
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label lbshiftit;
private System.Windows.Forms.Label lbaboutdesc;
private System.Windows.Forms.TextBox lbaboutdesc;
}
}

View file

@ -53,18 +53,73 @@ namespace ShiftOS.WinForms.Applications
lbaboutdesc.Text = $@"ShiftOS
Copyright (c) 2015-{DateTime.Now.Year} Michael VanOverbeek and ShiftOS devs
Engine version: Milestone 3, 1.0 Beta Series (Developer mode ON)
Frontend version: 1.0 Beta 1.2
Multi-user domain version: 1.0 Rolling-Release
Music courtesy of Selulance. Listen to the Fractal Forest album here:
https://www.youtube.com/watch?v=LB5jAYDL3VU&t=913s
Engine version: Milestone 4, 1.0 Beta Series (Developer mode ON)
Frontend version: 1.0 Beta 2.5
Digital Society version: 1.0 Rolling-Release
Project: Unite version: 1.0 Beta 1.7
Special thanks to Philip Adams, the original creator of ShiftOS for helping us grow our community of amazing Shifters by featuring us on the YouTube Millionaire series and advertising us throughout various other series ran by him.
Also, thanks to Rylan Arbour, Victor Tran and the other community moderators and administrators for helping us keep the community peaceful.
Lastly, a huge special thanks to the community themselves - for testing, debugging, fixing, reporting bugs for, and enjoying our game even through its many failures, successes, revamps, etc. You guys are the reason we develop the game!";
Lastly, a huge special thanks to the community themselves - for testing, debugging, fixing, reporting bugs for, and enjoying our game even through its many failures, successes, revamps, etc. You guys are the reason we develop the game!
=== Licensing information
ShiftOS is licensed under the MIT license.
Copyright (c) 2017 Michael VanOverbeek and ShiftOS devs
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the ""Software""), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED ""AS IS"", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
== Credit where credit is due
-- Development and staff team:
- Rylan Arbour (Lead community administrator)
- Victor Tran (Discord administrator)
- cjhannah (ShiftFS backend developer)
- AShifter (Project: Unite penetration tester)
- arencllc (ShiftLetters developer)
- Michael VanOverbeek (Lead developer, system administrator, the guy who wrote this text)
- fixylol, Nebble, TravisNC, Neptune (Community moderators)
- bandic00t_ (Skin Engine stresstesting)
-- System audio
- Default system event sounds (Infobox, Network Connecting, System Beeps) are from the original ShiftOS 0.0.x source code.
- Ambient music list courtesy of https://www.youtube.com/channel/UC56Qctnsu8wAyvzf4Yx6LIw (ArgoFox | Royalty Free Music)
Tracklist:
Dylan Hardy - Strangely Unaffected
Noxive - Home
Dylan Hardy and Abraham Alberto - Slow Drift
A Himitsu - Easier To Fade
Noxive - Resilience
Wanderflux - Visions
Aerocity - Cold Weather Kids
Aether - Wanderlust
Aerocity - Love Lost
Finally, special thanks to our Patreon supporters. Without you guys, our servers wouldn't be running, and you wouldn't be reading this.";
}
public string GetEngineVersion()
@ -107,7 +162,7 @@ Lastly, a huge special thanks to the community themselves - for testing, debuggi
public bool OnUnload()
{
return false;
return true;
}
public void OnUpgrade()

View file

@ -24,8 +24,10 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace ShiftOS.WinForms
@ -37,5 +39,65 @@ namespace ShiftOS.WinForms
{
}
internal static byte[] GetRandomSong()
{
var r = new Random().Next(1, 10);
switch (r)
{
case 1:
return Properties.Resources.Ambient1;
case 2:
return Properties.Resources.Ambient2;
case 3:
return Properties.Resources.Ambient3;
case 4:
return Properties.Resources.Ambient4;
case 5:
return Properties.Resources.Ambient5;
case 6:
return Properties.Resources.Ambient6;
case 7:
return Properties.Resources.Ambient7;
case 8:
return Properties.Resources.Ambient8;
default:
return Properties.Resources.Ambient9;
}
}
internal static void StartAmbientLoop()
{
var athread = new Thread(() =>
{
MemoryStream str = null;
NAudio.Wave.Mp3FileReader mp3 = null;
NAudio.Wave.WaveOut o = null;
while (!Engine.SaveSystem.ShuttingDown)
{
str = new MemoryStream(GetRandomSong());
mp3 = new NAudio.Wave.Mp3FileReader(str);
o = new NAudio.Wave.WaveOut();
o.Init(mp3);
bool c = false;
o.Play();
o.PlaybackStopped += (s, a) =>
{
c = true;
};
while (!c)
Thread.Sleep(10);
str.Dispose();
o.Dispose();
mp3.Dispose();
}
str?.Dispose();
o?.Dispose();
mp3?.Dispose();
});
athread.IsBackground = true;
athread.Start();
}
}
}

View file

@ -49,6 +49,19 @@ namespace ShiftOS.WinForms
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//if ANYONE puts code before those two winforms config lines they will be declared a drunky. - Michael
SaveSystem.PreDigitalSocietyConnection += () =>
{
Action completed = null;
completed = () =>
{
SaveSystem.Ready = true;
Engine.AudioManager.PlayCompleted -= completed;
AudioManager.StartAmbientLoop();
};
Engine.AudioManager.PlayCompleted += completed;
Engine.AudioManager.PlayStream(Properties.Resources.dial_up_modem_02);
};
LoginManager.Init(new GUILoginFrontend());
CrashHandler.SetGameMetadata(Assembly.GetExecutingAssembly());
SkinEngine.SetIconProber(new ShiftOSIconProvider());

View file

@ -69,6 +69,96 @@ namespace ShiftOS.WinForms.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Byte[].
/// </summary>
internal static byte[] Ambient1 {
get {
object obj = ResourceManager.GetObject("Ambient1", resourceCulture);
return ((byte[])(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Byte[].
/// </summary>
internal static byte[] Ambient2 {
get {
object obj = ResourceManager.GetObject("Ambient2", resourceCulture);
return ((byte[])(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Byte[].
/// </summary>
internal static byte[] Ambient3 {
get {
object obj = ResourceManager.GetObject("Ambient3", resourceCulture);
return ((byte[])(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Byte[].
/// </summary>
internal static byte[] Ambient4 {
get {
object obj = ResourceManager.GetObject("Ambient4", resourceCulture);
return ((byte[])(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Byte[].
/// </summary>
internal static byte[] Ambient5 {
get {
object obj = ResourceManager.GetObject("Ambient5", resourceCulture);
return ((byte[])(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Byte[].
/// </summary>
internal static byte[] Ambient6 {
get {
object obj = ResourceManager.GetObject("Ambient6", resourceCulture);
return ((byte[])(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Byte[].
/// </summary>
internal static byte[] Ambient7 {
get {
object obj = ResourceManager.GetObject("Ambient7", resourceCulture);
return ((byte[])(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Byte[].
/// </summary>
internal static byte[] Ambient8 {
get {
object obj = ResourceManager.GetObject("Ambient8", resourceCulture);
return ((byte[])(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Byte[].
/// </summary>
internal static byte[] Ambient9 {
get {
object obj = ResourceManager.GetObject("Ambient9", resourceCulture);
return ((byte[])(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
@ -994,22 +1084,18 @@ namespace ShiftOS.WinForms.Properties {
/// <summary>
/// Looks up a localized string similar to [
/// //TEMPORARY
/// {
/// Name: &quot;Desktop Widgets&quot;,
/// Cost: 0,
/// Description: &quot;Temporary upgrade. Will be replaced by either a Shiftnet app or a story element.&quot;,
/// Dependencies: &quot;advanced_app_launcher;wm_free_placement&quot;,
/// Category: &quot;Work-in-progress&quot;
/// },
///
///
///
///// SCREENSAVER
/// {
/// Name: &quot;Screensavers&quot;,
/// Cost: 750,
/// Description: &quot;Like to leave your PC idle for long periods of time? Save some energy and keep your screen from being tired by hiding the desktop behind a black screen with an image on it.&quot; [rest of string was truncated]&quot;;.
/// Description: &quot;Like to leave your PC idle for long periods of time? Save some energy and keep your screen from being tired by hiding the desktop behind a black screen with an image on it.&quot;,
/// Dependencies: &quot;desktop&quot;,
/// Category: &quot;Enhancements&quot;,
/// },
/// {
/// Name: &quot;GUI Based Login Screen&quot;,
/// Cost: 500,
/// Description: &quot;Tired of using the text-based login screen in ShiftOS? Well, we have a functioning window manager, and a functioning desktop, w [rest of string was truncated]&quot;;.
/// </summary>
internal static string Shiftorium {
get {

View file

@ -122,7 +122,7 @@
AAEAAAD/////AQAAAAAAAAAEAQAAABZTeXN0ZW0uSU8uTWVtb3J5U3RyZWFtCgAAAAdfYnVmZmVyB19v
cmlnaW4JX3Bvc2l0aW9uB19sZW5ndGgJX2NhcGFjaXR5C19leHBhbmRhYmxlCV93cml0YWJsZQpfZXhw
b3NhYmxlB19pc09wZW4dTWFyc2hhbEJ5UmVmT2JqZWN0K19faWRlbnRpdHkHAAAAAAAAAAACAggICAgB
AQEBCQIAAAAAAAAAAAAAAJKjAACSowAAAAEAAQoPAgAAAJKjAAACUklGRoqjAABXQVZFZm10IBAAAAAB
AQEBCQIAAAAAAAAAkqMAAJKjAACSowAAAAEAAQoPAgAAAJKjAAACUklGRoqjAABXQVZFZm10IBAAAAAB
AAEARKwAAIhYAQACABAAZGF0YWajAAABAP7/AgD9/wMA/f8DAPz/BAD8/wQA/f8BAP//AAABAAAA//8C
AP3/BAD9/wIAAAD//wIA//8BAAAAAAABAP//AQAAAAEAAAACAP7/AQABAAAAAQAAAAEAAAACAP7/AwD+
/wIAAAD//wIA/v8DAP7/AwD9/wMA//8AAAIA/f8DAAAA//8BAAAA/v8CAP////8CAPz/BAD8/wMA/f8A
@ -838,7 +838,7 @@
AAEAAAD/////AQAAAAAAAAAEAQAAABZTeXN0ZW0uSU8uTWVtb3J5U3RyZWFtCgAAAAdfYnVmZmVyB19v
cmlnaW4JX3Bvc2l0aW9uB19sZW5ndGgJX2NhcGFjaXR5C19leHBhbmRhYmxlCV93cml0YWJsZQpfZXhw
b3NhYmxlB19pc09wZW4dTWFyc2hhbEJ5UmVmT2JqZWN0K19faWRlbnRpdHkHAAAAAAAAAAACAggICAgB
AQEBCQIAAAAAAAAAAAAAAEwYAABMGAAAAAEAAQoPAgAAAEwYAAACUklGRkQYAABXQVZFZm10IBAAAAAB
AQEBCQIAAAAAAAAATBgAAEwYAABMGAAAAAEAAQoPAgAAAEwYAAACUklGRkQYAABXQVZFZm10IBAAAAAB
AAEARKwAAIhYAQACABAAZGF0YSAYAAD/X5Vil2TRZUJmF2ZLZadjS2FqXt9aj1awUVtMc0b4PyQ57DFS
KmUiSxoDEo4JEQGO+Bzwweee35zX9c+pyK7BGLsYtZqvlqoipneiW5/YnBCbFZq3mfOZEJvknD6fSqIg
poaqcK/rtAq7i8FvyMrPgNdo347n7e9h+N8AXwnPERoaQSIlKrcx+zjmP0lGKUykUYJWs1pKXlJhpWMl
@ -964,7 +964,7 @@
<value>..\Resources\SweeperNormalFace.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="strings_en" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\strings_en.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
<value>..\Resources\strings_en.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;iso-8859-1</value>
</data>
<data name="SweeperTile5" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\SweeperTile5.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
@ -974,7 +974,7 @@
AAEAAAD/////AQAAAAAAAAAEAQAAABZTeXN0ZW0uSU8uTWVtb3J5U3RyZWFtCgAAAAdfYnVmZmVyB19v
cmlnaW4JX3Bvc2l0aW9uB19sZW5ndGgJX2NhcGFjaXR5C19leHBhbmRhYmxlCV93cml0YWJsZQpfZXhw
b3NhYmxlB19pc09wZW4dTWFyc2hhbEJ5UmVmT2JqZWN0K19faWRlbnRpdHkHAAAAAAAAAAACAggICAgB
AQEBCQIAAAAAAAAAAAAAAPwBHgD8AR4AAAEAAQoPAgAAAPwBHgACUklGRvQBHgBXQVZFZm10IBAAAAAB
AQEBCQIAAAAAAAAA/AEeAPwBHgD8AR4AAAEAAQoPAgAAAPwBHgACUklGRvQBHgBXQVZFZm10IBAAAAAB
AAIAgLsAAADuAgAEABAATElTVBQAAABJTkZPSUFSVAgAAABQaGlsaXAAAGRhdGG0AR4A//8CAAwA5v8a
APT/8P8sAMf/OADX/xoA5v8bAPL/8/8aAOb/DQAOANb/KgDk/w4AAQDh/zwAt/9HAMj/GwACAPH/DgDy
/w0AAQDy/xwA1f8sAO//5v84ALn/OQDk//7/AwD+/xAA4v8dANX/LADw//T/GgDl/w4AAADx/x4A4f8R
@ -33831,7 +33831,7 @@
AAEAAAD/////AQAAAAAAAAAEAQAAABZTeXN0ZW0uSU8uTWVtb3J5U3RyZWFtCgAAAAdfYnVmZmVyB19v
cmlnaW4JX3Bvc2l0aW9uB19sZW5ndGgJX2NhcGFjaXR5C19leHBhbmRhYmxlCV93cml0YWJsZQpfZXhw
b3NhYmxlB19pc09wZW4dTWFyc2hhbEJ5UmVmT2JqZWN0K19faWRlbnRpdHkHAAAAAAAAAAACAggICAgB
AQEBCQIAAAAAAAAAAAAAAPBWAADwVgAAAAEAAQoPAgAAAPBWAAACUklGRuhWAABXQVZFZm10IBAAAAAB
AQEBCQIAAAAAAAAA8FYAAPBWAADwVgAAAAEAAQoPAgAAAPBWAAACUklGRuhWAABXQVZFZm10IBAAAAAB
AAEARKwAAIhYAQACABAAZGF0YcRWAAAAAGQL6gtkDL8MEA3kDLUMaAwUDKULKwuYCvcJQAl4CJ0Hrwaw
BaAEfgNQAg4Bwf9p/v/8mfsn+rD4OPe59T/0wPJH8dPvYu7+7JzrTeoG6dLnreaX5Z/kruPl4jHinOEk
4cTgh+Bl4GLgguDC4B7hpeFC4g3j7uP35B/mZufO6FXq9eu67ZHviPGT87L15/cr+oL84f5QAcMDPwa9
@ -34456,7 +34456,7 @@
AAEAAAD/////AQAAAAAAAAAEAQAAABZTeXN0ZW0uSU8uTWVtb3J5U3RyZWFtCgAAAAdfYnVmZmVyB19v
cmlnaW4JX3Bvc2l0aW9uB19sZW5ndGgJX2NhcGFjaXR5C19leHBhbmRhYmxlCV93cml0YWJsZQpfZXhw
b3NhYmxlB19pc09wZW4dTWFyc2hhbEJ5UmVmT2JqZWN0K19faWRlbnRpdHkHAAAAAAAAAAACAggICAgB
AQEBCQIAAAAAAAAAAAAAAIwWAACMFgAAAAEAAQoPAgAAAIwWAAACUklGRoQWAABXQVZFZm10IBAAAAAB
AQEBCQIAAAAAAAAAjBYAAIwWAACMFgAAAAEAAQoPAgAAAIwWAAACUklGRoQWAABXQVZFZm10IBAAAAAB
AAEARKwAAIhYAQACABAAZGF0YWAWAAAAAKYLIxdYIhQtQjexQFBJ81CUVwddTmFLZP9lXmZqZSRjl1/J
WtFUu02mRao84jJzKHsdJRKPBub6TO/q4+XYZM6FxG67ObMCrOel8aA9ncuar5nimWybQZ5eoq+nKa6t
tTC+hcec0U3cbefr8on+MQq6FfQgxSsFNo8/R0gRUMpWblzSYAFk2WVlZpxlfmMbYHJboVWsTrdG1D0l
@ -34573,4 +34573,31 @@
<data name="SuperDesk screenshot" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\SuperDesk screenshot.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Ambient1" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Ambient1.mp3;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="Ambient2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Ambient2.mp3;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="Ambient3" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Ambient3.mp3;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="Ambient4" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Ambient4.mp3;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="Ambient5" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Ambient5.mp3;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="Ambient6" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Ambient6.mp3;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="Ambient7" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Ambient7.mp3;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="Ambient8" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Ambient8.mp3;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="Ambient9" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Ambient9.mp3;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -757,6 +757,15 @@
<None Include="Resources\ShiftnetServices.txt" />
<None Include="Resources\3beepvirus.wav" />
<None Include="Resources\dial-up-modem-02.wav" />
<None Include="Resources\Ambient1.mp3" />
<None Include="Resources\Ambient2.mp3" />
<None Include="Resources\Ambient3.mp3" />
<None Include="Resources\Ambient4.mp3" />
<None Include="Resources\Ambient5.mp3" />
<None Include="Resources\Ambient6.mp3" />
<None Include="Resources\Ambient7.mp3" />
<None Include="Resources\Ambient8.mp3" />
<None Include="Resources\Ambient9.mp3" />
<Content Include="Resources\fileiconcf.bmp" />
<None Include="Resources\infobox.wav" />
<None Include="Resources\typesound.wav" />

View file

@ -223,9 +223,9 @@ namespace ShiftOS.Engine
/// </summary>
internal static void Exit()
{
OnExit?.Invoke();
//disconnect from MUD
ServerManager.Disconnect();
Environment.Exit(0);
}
/// <summary>

View file

@ -47,9 +47,12 @@ namespace ShiftOS.Engine
/// </summary>
public static void Stop()
{
_out?.Stop();
_reader?.Dispose();
_out?.Dispose();
Desktop.InvokeOnWorkerThread(() =>
{
_out?.Stop();
_reader?.Dispose();
_out?.Dispose();
});
}
/// <summary>

View file

@ -366,7 +366,6 @@ namespace ShiftOS.Engine
public static bool Shutdown()
{
TerminalBackend.InvokeCommand("sos.save");
SaveSystem.ShuttingDown = true;
AppearanceManager.Exit();
return true;
}

View file

@ -52,6 +52,9 @@ namespace ShiftOS.Engine
public static ClientSave CurrentUser { get; set; }
public static bool Ready = false;
public static event Action PreDigitalSocietyConnection;
public static Save CurrentSave { get; set; }
@ -118,6 +121,18 @@ namespace ShiftOS.Engine
Console.WriteLine("[inetd] Connecting to network...");
Ready = false;
if (PreDigitalSocietyConnection != null)
{
PreDigitalSocietyConnection?.Invoke();
while (!Ready)
{
Thread.Sleep(10);
}
}
if (defaultConf.ConnectToMud == true)
{
bool guidReceived = false;

View file

@ -213,211 +213,201 @@ namespace ShiftOS.Engine
{
if (Shiftorium.UpgradeAttributesUnlocked(method))
{
if (CanRunRemotely(method, isRemote))
foreach (var ma in method.GetCustomAttributes(false))
{
foreach (var ma in method.GetCustomAttributes(false))
if (ma is Command)
{
if (ma is Command)
var cmd = ma as Command;
if (text.Split('.')[1] == cmd.name)
{
var cmd = ma as Command;
if (text.Split('.')[1] == cmd.name)
if (KernelWatchdog.IsSafe(method))
{
if (KernelWatchdog.IsSafe(method))
if (KernelWatchdog.CanRunOffline(method))
{
if (KernelWatchdog.CanRunOffline(method))
{
var attr = method.GetCustomAttribute<CommandObsolete>();
var attr = method.GetCustomAttribute<CommandObsolete>();
if (attr != null)
if (attr != null)
{
string newcommand = attr.newcommand;
if (attr.warn)
{
string newcommand = attr.newcommand;
if (attr.warn)
{
Console.WriteLine(Localization.Parse((newcommand == "" ? "{ERROR}" : "{WARN}") + attr.reason, new Dictionary<string, string>() {
Console.WriteLine(Localization.Parse((newcommand == "" ? "{ERROR}" : "{WARN}") + attr.reason, new Dictionary<string, string>() {
{"%newcommand", newcommand}
}));
}
if (newcommand != "")
{
// redo the entire process running newcommand
return RunClient(newcommand, args);
}
}
var requiresArgs = method.GetCustomAttributes<RequiresArgument>();
bool error = false;
bool providedusage = false;
foreach (RequiresArgument argument in requiresArgs)
if (newcommand != "")
{
if (!args.ContainsKey(argument.argument))
{
// redo the entire process running newcommand
if (!providedusage)
{
string usageparse = "{COMMAND_" + ns.name.ToUpper() + "_" + cmd.name.ToUpper() + "_USAGE}";
if (usageparse == Localization.Parse(usageparse))
usageparse = "";
else
usageparse = Shiftorium.UpgradeInstalled("help_usage") ? Localization.Parse("{ERROR}{USAGE}" + usageparse, new Dictionary<string, string>() {
return RunClient(newcommand, args);
}
}
var requiresArgs = method.GetCustomAttributes<RequiresArgument>();
bool error = false;
bool providedusage = false;
foreach (RequiresArgument argument in requiresArgs)
{
if (!args.ContainsKey(argument.argument))
{
if (!providedusage)
{
string usageparse = "{COMMAND_" + ns.name.ToUpper() + "_" + cmd.name.ToUpper() + "_USAGE}";
if (usageparse == Localization.Parse(usageparse))
usageparse = "";
else
usageparse = Shiftorium.UpgradeInstalled("help_usage") ? Localization.Parse("{ERROR}{USAGE}" + usageparse, new Dictionary<string, string>() {
{"%ns", ns.name},
{"%cmd", cmd.name}
}) : "";
Console.WriteLine(usageparse);
Console.WriteLine(usageparse);
providedusage = true;
}
if (Shiftorium.UpgradeInstalled("help_usage"))
{
Console.WriteLine(Localization.Parse("{ERROR_ARGUMENT_REQUIRED}", new Dictionary<string, string>() {
providedusage = true;
}
if (Shiftorium.UpgradeInstalled("help_usage"))
{
Console.WriteLine(Localization.Parse("{ERROR_ARGUMENT_REQUIRED}", new Dictionary<string, string>() {
{"%argument", argument.argument}
}));
}
else
{
Console.WriteLine(Localization.Parse("{ERROR_ARGUMENT_REQUIRED_NO_USAGE}"));
}
error = true;
}
}
else
{
Console.WriteLine(Localization.Parse("{ERROR_ARGUMENT_REQUIRED_NO_USAGE}"));
}
if (error)
{
throw new Exception("{ERROR_COMMAND_WRONG}");
}
try
{
return (bool)method.Invoke(null, new[] { args });
}
catch (TargetInvocationException e)
{
Console.WriteLine(Localization.Parse("{ERROR_EXCEPTION_THROWN_IN_METHOD}"));
Console.WriteLine(e.InnerException.Message);
Console.WriteLine(e.InnerException.StackTrace);
return true;
}
catch
{
return (bool)method.Invoke(null, new object[] { });
error = true;
}
}
else
{
Console.Write("<");
ConsoleEx.Bold = true;
ConsoleEx.ForegroundColor = ConsoleColor.DarkRed;
Console.Write("session_mgr");
ConsoleEx.ForegroundColor = SkinEngine.LoadedSkin.TerminalForeColorCC;
ConsoleEx.Bold = false;
Console.Write(">");
ConsoleEx.Italic = true;
ConsoleEx.ForegroundColor = ConsoleColor.DarkYellow;
Console.WriteLine(" You cannot run this command while disconnected from the multi-user domain..");
return true;
if (error)
{
throw new Exception("{ERROR_COMMAND_WRONG}");
}
try
{
return (bool)method.Invoke(null, new[] { args });
}
catch (TargetInvocationException e)
{
Console.WriteLine(Localization.Parse("{ERROR_EXCEPTION_THROWN_IN_METHOD}"));
Console.WriteLine(e.InnerException.Message);
Console.WriteLine(e.InnerException.StackTrace);
return true;
}
catch
{
return (bool)method.Invoke(null, new object[] { });
}
}
else
{
if (SaveSystem.CurrentUser.Permissions == Objects.UserPermissions.Admin)
{
Infobox.PromptText("Elevate to root mode", "This command cannot be run as a regular user. To run this command, please enter your password to elevate to root mode temporarily.", (pass) =>
{
if (pass == SaveSystem.CurrentUser.Password)
{
KernelWatchdog.EnterKernelMode();
RunClient(text, args, isRemote);
KernelWatchdog.LeaveKernelMode();
}
else
{
Infobox.Show("Access denied.", "You did not type in the correct password.");
}
}, true);
return true;
}
Console.Write("<");
ConsoleEx.Bold = true;
ConsoleEx.ForegroundColor = ConsoleColor.DarkRed;
Console.Write("watchdog");
Console.Write("session_mgr");
ConsoleEx.ForegroundColor = SkinEngine.LoadedSkin.TerminalForeColorCC;
ConsoleEx.Bold = false;
Console.Write(">");
ConsoleEx.Italic = true;
ConsoleEx.ForegroundColor = ConsoleColor.DarkYellow;
Console.WriteLine(" You cannot run this command. You do not have permission. Incident reported.");
KernelWatchdog.Log("potential_sys_breach", "user attempted to run kernel mode command " + text + " - watchdog has prevented this, good sir.");
Console.WriteLine(" You cannot run this command while disconnected from the multi-user domain..");
return true;
}
}
else
{
if (SaveSystem.CurrentUser.Permissions == Objects.UserPermissions.Admin)
{
Infobox.PromptText("Elevate to root mode", "This command cannot be run as a regular user. To run this command, please enter your password to elevate to root mode temporarily.", (pass) =>
{
if (pass == SaveSystem.CurrentUser.Password)
{
KernelWatchdog.EnterKernelMode();
RunClient(text, args, isRemote);
KernelWatchdog.LeaveKernelMode();
}
else
{
Infobox.Show("Access denied.", "You did not type in the correct password.");
}
}, true);
return true;
}
Console.Write("<");
ConsoleEx.Bold = true;
ConsoleEx.ForegroundColor = ConsoleColor.DarkRed;
Console.Write("watchdog");
ConsoleEx.ForegroundColor = SkinEngine.LoadedSkin.TerminalForeColorCC;
ConsoleEx.Bold = false;
Console.Write(">");
ConsoleEx.Italic = true;
ConsoleEx.ForegroundColor = ConsoleColor.DarkYellow;
Console.WriteLine(" You cannot run this command. You do not have permission. Incident reported.");
KernelWatchdog.Log("potential_sys_breach", "user attempted to run kernel mode command " + text + " - watchdog has prevented this, good sir.");
return true;
}
}
}
}
}
else
{
Console.WriteLine(text + " cannot be ran in a remote session");
Console.Write("<");
ConsoleEx.Bold = true;
ConsoleEx.ForegroundColor = ConsoleColor.DarkRed;
Console.Write("session_mgr");
ConsoleEx.ForegroundColor = SkinEngine.LoadedSkin.TerminalForeColorCC;
ConsoleEx.Bold = false;
Console.Write(">");
ConsoleEx.Italic = true;
ConsoleEx.ForegroundColor = ConsoleColor.DarkYellow;
Console.WriteLine(" You cannot run this command while disconnected from the multi-user domain..");
return true;
}
}
}
}
else
{
if (SaveSystem.CurrentUser.Permissions == Objects.UserPermissions.Admin)
{
Infobox.PromptText("Elevate to root mode", "This command cannot be run as a regular user. To run this command, please enter your password to elevate to root mode temporarily.", (pass) =>
{
if (pass == SaveSystem.CurrentUser.Password)
{
KernelWatchdog.EnterKernelMode();
RunClient(text, args, isRemote);
KernelWatchdog.LeaveKernelMode();
}
else
{
Infobox.Show("Access denied.", "You did not type in the correct password.");
}
}, true);
return true;
}
Console.Write("<");
ConsoleEx.Bold = true;
ConsoleEx.ForegroundColor = ConsoleColor.DarkRed;
Console.Write("session_mgr");
Console.Write("watchdog");
ConsoleEx.ForegroundColor = SkinEngine.LoadedSkin.TerminalForeColorCC;
ConsoleEx.Bold = false;
Console.Write(">");
ConsoleEx.Italic = true;
ConsoleEx.ForegroundColor = ConsoleColor.DarkYellow;
Console.WriteLine(" You cannot run this command while disconnected from the multi-user domain..");
return true;
}
}
else
{
if (SaveSystem.CurrentUser.Permissions == Objects.UserPermissions.Admin)
{
Infobox.PromptText("Elevate to root mode", "This command cannot be run as a regular user. To run this command, please enter your password to elevate to root mode temporarily.", (pass) =>
{
if (pass == SaveSystem.CurrentUser.Password)
{
KernelWatchdog.EnterKernelMode();
RunClient(text, args, isRemote);
KernelWatchdog.LeaveKernelMode();
}
else
{
Infobox.Show("Access denied.", "You did not type in the correct password.");
}
}, true);
Console.WriteLine(" You cannot run this command. You do not have permission. Incident reported.");
KernelWatchdog.Log("potential_sys_breach", "user attempted to run kernel mode command " + text + " - watchdog has prevented this, good sir.");
return true;
}
Console.Write("<");
ConsoleEx.Bold = true;
ConsoleEx.ForegroundColor = ConsoleColor.DarkRed;
Console.Write("watchdog");
ConsoleEx.ForegroundColor = SkinEngine.LoadedSkin.TerminalForeColorCC;
ConsoleEx.Bold = false;
Console.Write(">");
ConsoleEx.Italic = true;
ConsoleEx.ForegroundColor = ConsoleColor.DarkYellow;
Console.WriteLine(" You cannot run this command. You do not have permission. Incident reported.");
KernelWatchdog.Log("potential_sys_breach", "user attempted to run kernel mode command " + text + " - watchdog has prevented this, good sir.");
return true;
}
}
}
@ -429,6 +419,7 @@ namespace ShiftOS.Engine
}
return false;
}
public static void PrintPrompt()
{
if (SaveSystem.CurrentSave != null && CurrentUser != null)