Command theming complete
This commit is contained in:
commit
5ee6043b9e
43 changed files with 1298 additions and 197 deletions
|
@ -206,7 +206,7 @@ Public Class SkinConverterCommands
|
|||
skn.Header2Font = New Font("Microsoft Sans Serif", 15, FontStyle.Regular)
|
||||
skn.Header3Font = New Font("Microsoft Sans Serif", 12.5, FontStyle.Regular)
|
||||
|
||||
skn.TerminalBackColor = Color.Black
|
||||
skn.TerminalBackColorCC = ConsoleColor.Black
|
||||
|
||||
Console.WriteLine(" ...done!")
|
||||
Console.WriteLine("Skin conversion complete.")
|
||||
|
|
|
@ -96,10 +96,11 @@ namespace ShiftOS.Server
|
|||
{
|
||||
Name = "run",
|
||||
GUID = "Server",
|
||||
Contents = $@"{{
|
||||
script:""{File.ReadAllText($"scripts/{user}/{script}.lua").Replace("\"", "\\\"")}"",
|
||||
args:""{sArgs}""
|
||||
}}"
|
||||
Contents = JsonConvert.SerializeObject(new
|
||||
{
|
||||
script = File.ReadAllText($"scripts/{user}/{script}.lua"),
|
||||
args = sArgs
|
||||
})
|
||||
}));
|
||||
}
|
||||
else
|
||||
|
@ -115,7 +116,7 @@ namespace ShiftOS.Server
|
|||
{
|
||||
Name = "Error",
|
||||
GUID = "Server",
|
||||
Contents = JsonConvert.SerializeObject(new MudException("Command parse error"))
|
||||
Contents = JsonConvert.SerializeObject(new MudException("<script_runner> Script not found or script error detected."))
|
||||
}));
|
||||
}
|
||||
catch
|
||||
|
@ -126,6 +127,17 @@ namespace ShiftOS.Server
|
|||
|
||||
}
|
||||
|
||||
[MudRequest("diag_log", typeof(string))]
|
||||
public static void Diagnostic(string guid, string line)
|
||||
{
|
||||
List<string> lines = new List<string>();
|
||||
if (File.Exists("diagnostics.log"))
|
||||
lines = new List<string>(File.ReadAllLines("diagnostics.log"));
|
||||
|
||||
lines.Add(line);
|
||||
File.WriteAllLines("diagnostics.log", lines.ToArray());
|
||||
}
|
||||
|
||||
[MudRequest("getusers", typeof(string))]
|
||||
public static void GetAllUsers(string guid, string contents)
|
||||
{
|
||||
|
@ -182,8 +194,8 @@ namespace ShiftOS.Server
|
|||
GUID = "server",
|
||||
Contents = JsonConvert.SerializeObject(saveFile)
|
||||
}));
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
foreach (var sve in Directory.GetFiles("saves"))
|
||||
|
@ -199,8 +211,8 @@ namespace ShiftOS.Server
|
|||
GUID = "server",
|
||||
Contents = JsonConvert.SerializeObject(saveFile)
|
||||
}));
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -43,37 +43,49 @@ namespace ShiftOS.Server
|
|||
string url = contents as string;
|
||||
if (!url.StartsWith("shiftnet/"))
|
||||
{
|
||||
server.DispatchTo(new Guid(guid), new NetObject("shiftnet_got", new ServerMessage
|
||||
try
|
||||
{
|
||||
Name = "shiftnet_file",
|
||||
GUID = "server",
|
||||
Contents = (File.Exists("badrequest.md") == true) ? File.ReadAllText("badrequest.md") : @"# Bad request.
|
||||
|
||||
server.DispatchTo(new Guid(guid), new NetObject("shiftnet_got", new ServerMessage
|
||||
{
|
||||
Name = "shiftnet_file",
|
||||
GUID = "server",
|
||||
Contents = (File.Exists("badrequest.md") == true) ? File.ReadAllText("badrequest.md") : @"# Bad request.
|
||||
|
||||
You have sent a bad request to the multi-user domain. Please try again."
|
||||
}));
|
||||
}));
|
||||
}
|
||||
catch { }
|
||||
return;
|
||||
}
|
||||
|
||||
if (File.Exists(url))
|
||||
{
|
||||
server.DispatchTo(new Guid(guid), new NetObject("download", new ServerMessage
|
||||
try
|
||||
{
|
||||
Name = "download_meta",
|
||||
GUID = "server",
|
||||
Contents = JsonConvert.SerializeObject(File.ReadAllBytes(url))
|
||||
}));
|
||||
server.DispatchTo(new Guid(guid), new NetObject("download", new ServerMessage
|
||||
{
|
||||
Name = "download_meta",
|
||||
GUID = "server",
|
||||
Contents = JsonConvert.SerializeObject(File.ReadAllBytes(url))
|
||||
}));
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
else
|
||||
{
|
||||
server.DispatchTo(new Guid(guid), new NetObject("shiftnet_got", new ServerMessage
|
||||
try
|
||||
{
|
||||
Name = "shiftnet_file",
|
||||
GUID = "server",
|
||||
Contents = (File.Exists("notfound.md") == true) ? File.ReadAllText("notfound.md") : @"# Not found.
|
||||
server.DispatchTo(new Guid(guid), new NetObject("shiftnet_got", new ServerMessage
|
||||
{
|
||||
Name = "shiftnet_file",
|
||||
GUID = "server",
|
||||
Contents = (File.Exists("notfound.md") == true) ? File.ReadAllText("notfound.md") : @"# Not found.
|
||||
|
||||
The page you requested at was not found on this multi-user domain."
|
||||
}));
|
||||
|
||||
}));
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -41,6 +41,7 @@ using ShiftOS.Engine;
|
|||
|
||||
namespace ShiftOS.WinForms.Applications
|
||||
{
|
||||
[MultiplayerOnly]
|
||||
[Launcher("Artpad", true, "al_artpad", "Graphics")]
|
||||
[RequiresUpgrade("artpad")]
|
||||
[WinOpen("artpad")]
|
||||
|
|
|
@ -36,6 +36,7 @@ using ShiftOS.Engine;
|
|||
|
||||
namespace ShiftOS.WinForms.Applications
|
||||
{
|
||||
[MultiplayerOnly]
|
||||
public partial class Chat : UserControl, IShiftOSWindow
|
||||
{
|
||||
public Chat(string chatId)
|
||||
|
|
|
@ -76,12 +76,16 @@ namespace ShiftOS.WinForms.Applications
|
|||
btnok.Click += (o, a) =>
|
||||
{
|
||||
AppearanceManager.Close(this);
|
||||
OpenCallback?.Invoke();
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
public void Open(string title, string msg)
|
||||
private Action OpenCallback = null;
|
||||
|
||||
public void Open(string title, string msg, Action c = null)
|
||||
{
|
||||
OpenCallback = c;
|
||||
new Dialog().OpenInternal(title, msg);
|
||||
}
|
||||
|
||||
|
|
|
@ -41,6 +41,7 @@ using System.IO.Compression;
|
|||
|
||||
namespace ShiftOS.WinForms.Applications
|
||||
{
|
||||
[MultiplayerOnly]
|
||||
[Launcher("Downloader", false, null, "Networking")]
|
||||
[DefaultIcon("iconDownloader")]
|
||||
public partial class Downloader : UserControl, IShiftOSWindow
|
||||
|
|
|
@ -34,6 +34,7 @@ using System.Windows.Forms;
|
|||
using ShiftOS.Engine;
|
||||
|
||||
namespace ShiftOS.WinForms.Applications {
|
||||
[MultiplayerOnly]
|
||||
[Launcher("FormatEditor", true, "al_format_editor", "Games")]
|
||||
[RequiresUpgrade("format_editor")]
|
||||
[WinOpen("formateditor")]
|
||||
|
|
|
@ -37,6 +37,7 @@ using ShiftOS.WinForms.Tools;
|
|||
|
||||
namespace ShiftOS.WinForms.Applications
|
||||
{
|
||||
[MultiplayerOnly]
|
||||
[DefaultTitle("Choose graphic")] [DefaultIcon("icongraphicpicker")]
|
||||
public partial class GraphicPicker : UserControl, IShiftOSWindow
|
||||
{
|
||||
|
|
|
@ -38,6 +38,7 @@ using ShiftOS.WinForms.Tools;
|
|||
|
||||
namespace ShiftOS.WinForms.Applications
|
||||
{
|
||||
[MultiplayerOnly]
|
||||
[RequiresUpgrade("mud_fundamentals")]
|
||||
[Launcher("MUD Control Centre", true, "al_mud_control_centre", "Networking")]
|
||||
[WinOpen("mud_control_centre")]
|
||||
|
|
|
@ -38,6 +38,7 @@ using ShiftOS.WinForms.Tools;
|
|||
|
||||
namespace ShiftOS.WinForms.Applications {
|
||||
|
||||
[MultiplayerOnly]
|
||||
[Launcher("Name Changer", true, "al_name_changer", "Customization")]
|
||||
[RequiresUpgrade("name_changer")]
|
||||
[WinOpen("name_changer")]
|
||||
|
|
|
@ -37,6 +37,7 @@ using ShiftOS.Objects;
|
|||
|
||||
namespace ShiftOS.WinForms.Applications
|
||||
{
|
||||
[MultiplayerOnly]
|
||||
[Launcher("Pong", true, "al_pong", "Games")]
|
||||
[WinOpen("pong")]
|
||||
[DefaultIcon("iconPong")]
|
||||
|
|
|
@ -36,6 +36,7 @@ using System.Windows.Forms;
|
|||
|
||||
namespace ShiftOS.WinForms.Applications
|
||||
{
|
||||
[MultiplayerOnly]
|
||||
[Launcher("ShiftLetters", false, null, "Games")]
|
||||
[RequiresUpgrade("shiftletters")]
|
||||
[WinOpen("shiftletters")]
|
||||
|
@ -50,7 +51,7 @@ namespace ShiftOS.WinForms.Applications
|
|||
"shiftorium", "codepoints", "shiftletters", "shops", "mud", "notification", "namechanger",
|
||||
"skinning", "skinloader", "calculator", "fileskimmer", "lua", "shiftnet", "terminal", "textpad"};
|
||||
List<String> contributorsWordlist = new List<string> { "philipadams", "carverh", "computelinux", "lempamo",
|
||||
"wowmom", "michaeltheshifter", "arencclc", "therandommelon", "pfg", "craftxbox"};
|
||||
"wowmom", "michaeltheshifter", "arencllc", "therandommelon", "pfg", "craftxbox", "ashifter"};
|
||||
|
||||
List<string> osWordlist = new List<string>
|
||||
{
|
||||
|
@ -90,7 +91,8 @@ namespace ShiftOS.WinForms.Applications
|
|||
"vienna",
|
||||
"whistler",
|
||||
"windowsxp",
|
||||
"windowsforworkgroups"
|
||||
"windowsforworkgroups",
|
||||
"shiftos"
|
||||
};
|
||||
|
||||
public ShiftLetters()
|
||||
|
|
231
ShiftOS.WinForms/Applications/ShiftLotto.Designer.cs
generated
Normal file
231
ShiftOS.WinForms/Applications/ShiftLotto.Designer.cs
generated
Normal file
|
@ -0,0 +1,231 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
namespace ShiftOS.WinForms.Applications
|
||||
{
|
||||
partial class ShiftLotto
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Component Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ShiftLotto));
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.label4 = new System.Windows.Forms.Label();
|
||||
this.button1 = new System.Windows.Forms.Button();
|
||||
this.label5 = new System.Windows.Forms.Label();
|
||||
this.label6 = new System.Windows.Forms.Label();
|
||||
this.cpUpDown = new System.Windows.Forms.NumericUpDown();
|
||||
this.difUpDown = new System.Windows.Forms.NumericUpDown();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.timer1 = new System.Windows.Forms.Timer(this.components);
|
||||
this.label7 = new System.Windows.Forms.Label();
|
||||
((System.ComponentModel.ISupportInitialize)(this.cpUpDown)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.difUpDown)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// label2
|
||||
//
|
||||
this.label2.AutoSize = true;
|
||||
this.label2.Location = new System.Drawing.Point(19, 49);
|
||||
this.label2.Name = "label2";
|
||||
this.label2.Size = new System.Drawing.Size(376, 39);
|
||||
this.label2.TabIndex = 2;
|
||||
this.label2.Text = resources.GetString("label2.Text");
|
||||
//
|
||||
// label3
|
||||
//
|
||||
this.label3.AutoSize = true;
|
||||
this.label3.Location = new System.Drawing.Point(35, 122);
|
||||
this.label3.Name = "label3";
|
||||
this.label3.Size = new System.Drawing.Size(60, 13);
|
||||
this.label3.TabIndex = 3;
|
||||
this.label3.Text = "Codepoints\r\n";
|
||||
//
|
||||
// label4
|
||||
//
|
||||
this.label4.AutoSize = true;
|
||||
this.label4.Location = new System.Drawing.Point(319, 122);
|
||||
this.label4.Name = "label4";
|
||||
this.label4.Size = new System.Drawing.Size(47, 13);
|
||||
this.label4.TabIndex = 4;
|
||||
this.label4.Text = "Difficulty";
|
||||
//
|
||||
// button1
|
||||
//
|
||||
this.button1.Location = new System.Drawing.Point(22, 164);
|
||||
this.button1.Name = "button1";
|
||||
this.button1.Size = new System.Drawing.Size(369, 23);
|
||||
this.button1.TabIndex = 6;
|
||||
this.button1.Text = "Go!";
|
||||
this.button1.UseVisualStyleBackColor = true;
|
||||
this.button1.Click += new System.EventHandler(this.button1_Click);
|
||||
//
|
||||
// label5
|
||||
//
|
||||
this.label5.Location = new System.Drawing.Point(120, 136);
|
||||
this.label5.Name = "label5";
|
||||
this.label5.RightToLeft = System.Windows.Forms.RightToLeft.No;
|
||||
this.label5.Size = new System.Drawing.Size(173, 23);
|
||||
this.label5.TabIndex = 7;
|
||||
this.label5.Text = "0 CP";
|
||||
this.label5.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// label6
|
||||
//
|
||||
this.label6.AutoSize = true;
|
||||
this.label6.Location = new System.Drawing.Point(173, 122);
|
||||
this.label6.Name = "label6";
|
||||
this.label6.Size = new System.Drawing.Size(74, 13);
|
||||
this.label6.TabIndex = 8;
|
||||
this.label6.Text = "You could win";
|
||||
//
|
||||
// cpUpDown
|
||||
//
|
||||
this.cpUpDown.Location = new System.Drawing.Point(22, 138);
|
||||
this.cpUpDown.Maximum = new decimal(new int[] {
|
||||
1000000,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.cpUpDown.Minimum = new decimal(new int[] {
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.cpUpDown.Name = "cpUpDown";
|
||||
this.cpUpDown.Size = new System.Drawing.Size(92, 20);
|
||||
this.cpUpDown.TabIndex = 9;
|
||||
this.cpUpDown.Value = new decimal(new int[] {
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
//
|
||||
// difUpDown
|
||||
//
|
||||
this.difUpDown.Location = new System.Drawing.Point(299, 138);
|
||||
this.difUpDown.Maximum = new decimal(new int[] {
|
||||
1000,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.difUpDown.Minimum = new decimal(new int[] {
|
||||
10,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.difUpDown.Name = "difUpDown";
|
||||
this.difUpDown.Size = new System.Drawing.Size(92, 20);
|
||||
this.difUpDown.TabIndex = 10;
|
||||
this.difUpDown.Value = new decimal(new int[] {
|
||||
10,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
//
|
||||
// label1
|
||||
//
|
||||
this.label1.AutoSize = true;
|
||||
this.label1.Location = new System.Drawing.Point(147, 20);
|
||||
this.label1.Name = "label1";
|
||||
this.label1.Size = new System.Drawing.Size(115, 13);
|
||||
this.label1.TabIndex = 11;
|
||||
this.label1.Text = "Welcome to ShiftLotto!";
|
||||
//
|
||||
// timer1
|
||||
//
|
||||
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
|
||||
//
|
||||
// label7
|
||||
//
|
||||
this.label7.Location = new System.Drawing.Point(22, 190);
|
||||
this.label7.Name = "label7";
|
||||
this.label7.RightToLeft = System.Windows.Forms.RightToLeft.No;
|
||||
this.label7.Size = new System.Drawing.Size(369, 23);
|
||||
this.label7.TabIndex = 12;
|
||||
this.label7.Text = "Current CP: 0 CP";
|
||||
this.label7.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// ShiftLotto
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Controls.Add(this.label7);
|
||||
this.Controls.Add(this.label1);
|
||||
this.Controls.Add(this.difUpDown);
|
||||
this.Controls.Add(this.cpUpDown);
|
||||
this.Controls.Add(this.label6);
|
||||
this.Controls.Add(this.label5);
|
||||
this.Controls.Add(this.button1);
|
||||
this.Controls.Add(this.label4);
|
||||
this.Controls.Add(this.label3);
|
||||
this.Controls.Add(this.label2);
|
||||
this.Name = "ShiftLotto";
|
||||
this.Size = new System.Drawing.Size(419, 252);
|
||||
((System.ComponentModel.ISupportInitialize)(this.cpUpDown)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.difUpDown)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.Label label3;
|
||||
private System.Windows.Forms.Label label4;
|
||||
private System.Windows.Forms.Button button1;
|
||||
private System.Windows.Forms.Label label5;
|
||||
private System.Windows.Forms.Label label6;
|
||||
private System.Windows.Forms.NumericUpDown cpUpDown;
|
||||
private System.Windows.Forms.NumericUpDown difUpDown;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.Timer timer1;
|
||||
private System.Windows.Forms.Label label7;
|
||||
}
|
||||
}
|
134
ShiftOS.WinForms/Applications/ShiftLotto.cs
Normal file
134
ShiftOS.WinForms/Applications/ShiftLotto.cs
Normal file
|
@ -0,0 +1,134 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using ShiftOS.Engine;
|
||||
|
||||
namespace ShiftOS.WinForms.Applications
|
||||
{
|
||||
[Launcher("ShiftLotto", true, "al_shiftlotto", "Games")]
|
||||
[MultiplayerOnly]
|
||||
[DefaultIcon("iconShiftLotto")]
|
||||
[RequiresUpgrade("shiftlotto")]
|
||||
[WinOpen("shiftlotto")]
|
||||
public partial class ShiftLotto : UserControl, IShiftOSWindow
|
||||
{
|
||||
public ShiftLotto()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
public void OnLoad()
|
||||
{
|
||||
timer1.Start();
|
||||
}
|
||||
|
||||
|
||||
public void OnSkinLoad()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public bool OnUnload()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public void OnUpgrade()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// The Dynamic Display
|
||||
private void timer1_Tick(object sender, EventArgs e)
|
||||
{
|
||||
int codePoints = Convert.ToInt32(Math.Round(cpUpDown.Value, 0));
|
||||
int difficulty = Convert.ToInt32(Math.Round(difUpDown.Value, 0));
|
||||
label5.Text = codePoints * difficulty + " CP";
|
||||
label7.Text = "Current CP: " + SaveSystem.CurrentSave.Codepoints.ToString() + " CP";
|
||||
}
|
||||
|
||||
private void button1_Click(object sender, EventArgs e)
|
||||
{
|
||||
// Make codePoints and difficulty in this function
|
||||
int codePoints = Convert.ToInt32(Math.Round(cpUpDown.Value, 0));
|
||||
int difficulty = Convert.ToInt32(Math.Round(difUpDown.Value, 0));
|
||||
|
||||
if (SaveSystem.CurrentSave.Codepoints <= 9)
|
||||
{
|
||||
Infobox.Show("Not enough Codepoints", "You do not have enough Codepoints to use ShiftLotto!");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (SaveSystem.CurrentSave.Codepoints - (codePoints * difficulty) <= 0)
|
||||
{
|
||||
Infobox.Show("Not enough Codepoints", "You do not have enough Codepoints to gamble this amount!");
|
||||
}
|
||||
else
|
||||
{
|
||||
// Create Random Ints
|
||||
Random rnd = new Random();
|
||||
|
||||
// Set their highest possible number to Difficulty
|
||||
int guessedNumber = rnd.Next(0, difficulty);
|
||||
int winningNumber = rnd.Next(0, difficulty);
|
||||
|
||||
// Multiply CodePoints * Difficulty
|
||||
int jackpot = codePoints * difficulty;
|
||||
|
||||
// Test the random ints
|
||||
if (guessedNumber == winningNumber)
|
||||
{
|
||||
// If you win
|
||||
|
||||
// Add Codepoints
|
||||
SaveSystem.TransferCodepointsFrom("shiftlotto", jackpot);
|
||||
|
||||
// Infobox
|
||||
Infobox.Show("YOU WON!", "Good Job! " + jackpot.ToString() + " CP has been added to your account. ");
|
||||
}
|
||||
else
|
||||
{
|
||||
// If you fail
|
||||
|
||||
// Remove Codepoints
|
||||
SaveSystem.TransferCodepointsToVoid(jackpot);
|
||||
|
||||
|
||||
|
||||
// Infobox
|
||||
Infobox.Show("YOU FAILED!", "Sorry! " + jackpot.ToString() + " CP has been removed from your account.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
128
ShiftOS.WinForms/Applications/ShiftLotto.resx
Normal file
128
ShiftOS.WinForms/Applications/ShiftLotto.resx
Normal file
|
@ -0,0 +1,128 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="label2.Text" xml:space="preserve">
|
||||
<value>ShiftLotto lets you to turn a few codepoints into a FOURTUNE! All you need to
|
||||
do is bet a certain amount of codepoints, set a difficulty, and try your luck.
|
||||
There have been many winners - Will you be one too?</value>
|
||||
</data>
|
||||
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
</root>
|
|
@ -36,6 +36,7 @@ using ShiftOS.Engine;
|
|||
namespace ShiftOS.WinForms.Applications {
|
||||
[Launcher("ShiftSweeper", true, "al_shiftsweeper", "Games")]
|
||||
[RequiresUpgrade("shiftsweeper")]
|
||||
[MultiplayerOnly]
|
||||
[WinOpen("shiftsweeper")]
|
||||
[DefaultIcon("iconShiftSweeper")]
|
||||
public partial class ShiftSweeper : UserControl, IShiftOSWindow {
|
||||
|
|
|
@ -32,7 +32,9 @@ using System.Windows.Forms;
|
|||
using ShiftOS.Engine;
|
||||
using ShiftOS.WinForms.Tools;
|
||||
|
||||
namespace ShiftOS.WinForms.Applications {
|
||||
namespace ShiftOS.WinForms.Applications
|
||||
{
|
||||
[MultiplayerOnly]
|
||||
[Launcher("Shifter", true, "al_shifter", "Customization")]
|
||||
[RequiresUpgrade("shifter")]
|
||||
[WinOpen("shifter")]
|
||||
|
@ -439,6 +441,30 @@ namespace ShiftOS.WinForms.Applications {
|
|||
flbody.Controls.Add(color);
|
||||
color.Show();
|
||||
}
|
||||
else if(c.Field.FieldType.IsEnum == true)
|
||||
{
|
||||
var cBox = new ComboBox();
|
||||
cBox.Width = 150;
|
||||
ControlManager.SetupControl(cBox);
|
||||
|
||||
foreach(var itm in Enum.GetNames(c.Field.FieldType))
|
||||
{
|
||||
cBox.Items.Add(itm);
|
||||
}
|
||||
|
||||
cBox.Text = c.Field.GetValue(LoadedSkin).ToString();
|
||||
|
||||
cBox.SelectedIndexChanged += (o, a) =>
|
||||
{
|
||||
c.Field.SetValue(LoadedSkin, Enum.Parse(c.Field.FieldType, cBox.Text));
|
||||
};
|
||||
|
||||
labelHeight = cBox.Height;
|
||||
|
||||
flbody.Controls.Add(cBox);
|
||||
cBox.Show();
|
||||
flbody.SetFlowBreak(cBox, true);
|
||||
}
|
||||
else if(c.Field.FieldType == typeof(int))
|
||||
{
|
||||
if (c.Field.HasShifterEnumMask())
|
||||
|
|
|
@ -34,9 +34,11 @@ using System.Windows.Forms;
|
|||
using ShiftOS.Engine;
|
||||
using Newtonsoft.Json;
|
||||
using static ShiftOS.Engine.SkinEngine;
|
||||
using ShiftOS.WinForms.Tools;
|
||||
|
||||
namespace ShiftOS.WinForms.Applications {
|
||||
[Launcher("Shiftnet", false, null, "Networking")]
|
||||
[MultiplayerOnly]
|
||||
[DefaultIcon("iconShiftnet")]
|
||||
public partial class Shiftnet : UserControl, IShiftOSWindow {
|
||||
public Shiftnet() {
|
||||
|
@ -62,6 +64,8 @@ namespace ShiftOS.WinForms.Applications {
|
|||
}
|
||||
|
||||
public string ConstructHtml(string markdown) {
|
||||
var TerminalForeColor = ControlManager.ConvertColor(SkinEngine.LoadedSkin.TerminalForeColorCC);
|
||||
var TerminalBackColor = ControlManager.ConvertColor(SkinEngine.LoadedSkin.TerminalBackColorCC);
|
||||
string html = $@"<html>
|
||||
<head>
|
||||
<style>
|
||||
|
@ -90,8 +94,8 @@ namespace ShiftOS.WinForms.Applications {
|
|||
pre, code {{
|
||||
font-family: ""{LoadedSkin.TerminalFont.Name}"";
|
||||
font-size: {LoadedSkin.TerminalFont.SizeInPoints}pt;
|
||||
color: rgb({LoadedSkin.TerminalForeColor.R}, {LoadedSkin.TerminalForeColor.G}, {LoadedSkin.TerminalForeColor.B});
|
||||
background-color: rgb({LoadedSkin.TerminalBackColor.R}, {LoadedSkin.TerminalBackColor.G}, {LoadedSkin.TerminalBackColor.B});
|
||||
color: rgb({TerminalForeColor.R}, {TerminalForeColor.G}, {TerminalForeColor.B});
|
||||
background-color: rgb({TerminalBackColor.R}, {TerminalBackColor.G}, {TerminalBackColor.B});
|
||||
}}
|
||||
</style>
|
||||
</head>
|
||||
|
|
|
@ -39,6 +39,7 @@ namespace ShiftOS.WinForms.Applications
|
|||
{
|
||||
[Launcher("Shiftorium", true, "al_shiftorium", "Utilities")]
|
||||
[RequiresUpgrade("shiftorium_gui")]
|
||||
[MultiplayerOnly]
|
||||
[WinOpen("shiftorium")]
|
||||
[DefaultTitle("Shiftorium")]
|
||||
[DefaultIcon("iconShiftorium")]
|
||||
|
|
|
@ -43,6 +43,7 @@ using System.Collections;
|
|||
using static ShiftOS.Engine.SkinEngine;
|
||||
using ShiftOS.Engine;
|
||||
using ShiftOS.Objects;
|
||||
using ShiftOS.WinForms.Tools;
|
||||
|
||||
namespace ShiftOS.WinForms.Applications {
|
||||
[Launcher("Terminal", false, null, "Utilities")]
|
||||
|
@ -115,8 +116,9 @@ namespace ShiftOS.WinForms.Applications {
|
|||
rtbterm.Text = "";
|
||||
TerminalBackend.PrefixEnabled = true;
|
||||
TerminalBackend.InStory = false;
|
||||
Console.Write($"{SaveSystem.CurrentSave.Username}@{SaveSystem.CurrentSave.SystemName}:~$ ");
|
||||
if (Shiftorium.UpgradeInstalled("wm_free_placement")) {
|
||||
TerminalBackend.PrintPrompt();
|
||||
if (Shiftorium.UpgradeInstalled("wm_free_placement"))
|
||||
{
|
||||
this.ParentForm.Width = 640;
|
||||
this.ParentForm.Height = 480;
|
||||
this.ParentForm.Left = (Screen.PrimaryScreen.Bounds.Width - 640) / 2;
|
||||
|
@ -235,8 +237,9 @@ namespace ShiftOS.WinForms.Applications {
|
|||
}
|
||||
}
|
||||
}
|
||||
if (TerminalBackend.PrefixEnabled) {
|
||||
Console.Write($"{SaveSystem.CurrentSave.Username}@{SaveSystem.CurrentSave.SystemName}:~$ ");
|
||||
if (TerminalBackend.PrefixEnabled)
|
||||
{
|
||||
TerminalBackend.PrintPrompt();
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
|
@ -289,8 +292,8 @@ namespace ShiftOS.WinForms.Applications {
|
|||
txt.Focus();
|
||||
|
||||
txt.Font = LoadedSkin.TerminalFont;
|
||||
txt.ForeColor = LoadedSkin.TerminalForeColor;
|
||||
txt.BackColor = LoadedSkin.TerminalBackColor;
|
||||
txt.ForeColor = ControlManager.ConvertColor(LoadedSkin.TerminalForeColorCC);
|
||||
txt.BackColor = ControlManager.ConvertColor(LoadedSkin.TerminalBackColorCC);
|
||||
|
||||
}
|
||||
|
||||
|
@ -321,8 +324,7 @@ namespace ShiftOS.WinForms.Applications {
|
|||
rtbterm.Text = AppearanceManager.LastTerminalText;
|
||||
rtbterm.Select(rtbterm.TextLength, 0);
|
||||
}
|
||||
Console.Write($"{SaveSystem.CurrentSave.Username}@{SaveSystem.CurrentSave.SystemName}:~$ ");
|
||||
|
||||
TerminalBackend.PrintPrompt();
|
||||
}
|
||||
|
||||
|
||||
|
@ -331,9 +333,11 @@ namespace ShiftOS.WinForms.Applications {
|
|||
public void OnSkinLoad() {
|
||||
try {
|
||||
rtbterm.Font = LoadedSkin.TerminalFont;
|
||||
rtbterm.ForeColor = LoadedSkin.TerminalForeColor;
|
||||
rtbterm.BackColor = LoadedSkin.TerminalBackColor;
|
||||
} catch {
|
||||
rtbterm.ForeColor = ControlManager.ConvertColor(LoadedSkin.TerminalForeColorCC);
|
||||
rtbterm.BackColor = ControlManager.ConvertColor(LoadedSkin.TerminalBackColorCC);
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
@ -369,5 +373,4 @@ namespace ShiftOS.WinForms.Applications {
|
|||
}
|
||||
|
||||
}
|
||||
}
|
||||
//lol you found this comment i made so i chould push a change to make a point.
|
||||
}
|
|
@ -21,6 +21,8 @@ namespace ShiftOS.WinForms.Applications
|
|||
InitializeComponent();
|
||||
IsComplete = false;
|
||||
lbltuttext.Text = "";
|
||||
lbltuttext.Padding = new Padding(15);
|
||||
lbltuttext.Margin = lbltuttext.Padding;
|
||||
}
|
||||
|
||||
bool stillTyping = false;
|
||||
|
@ -47,6 +49,7 @@ namespace ShiftOS.WinForms.Applications
|
|||
}));
|
||||
Thread.Sleep(75);
|
||||
}
|
||||
Thread.Sleep(5000);
|
||||
stillTyping = false;
|
||||
}).Start();
|
||||
}
|
||||
|
|
|
@ -24,11 +24,14 @@
|
|||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using ShiftOS.Engine;
|
||||
using ShiftOS.WinForms.Tools;
|
||||
|
||||
namespace ShiftOS.WinForms.Controls
|
||||
{
|
||||
|
@ -53,13 +56,60 @@ namespace ShiftOS.WinForms.Controls
|
|||
public void Write(string text)
|
||||
{
|
||||
this.HideSelection = true;
|
||||
this.Select(this.TextLength, 0);
|
||||
this.SelectionFont = ConstructFont();
|
||||
this.SelectionColor = ControlManager.ConvertColor(ConsoleEx.ForegroundColor);
|
||||
this.SelectionBackColor = ControlManager.ConvertColor(ConsoleEx.BackgroundColor);
|
||||
this.AppendText(Localization.Parse(text));
|
||||
this.HideSelection = false;
|
||||
}
|
||||
|
||||
private Font ConstructFont()
|
||||
{
|
||||
FontStyle fs = FontStyle.Regular;
|
||||
if (ConsoleEx.Bold)
|
||||
fs = fs | FontStyle.Bold;
|
||||
if (ConsoleEx.Italic)
|
||||
fs = fs | FontStyle.Italic;
|
||||
if (ConsoleEx.Underline)
|
||||
fs = fs | FontStyle.Underline;
|
||||
|
||||
return new Font(this.Font, fs);
|
||||
}
|
||||
|
||||
public void WriteLine(string text)
|
||||
{
|
||||
this.HideSelection = true;
|
||||
this.Select(this.TextLength, 0);
|
||||
this.SelectionFont = ConstructFont();
|
||||
this.SelectionColor = ControlManager.ConvertColor(ConsoleEx.ForegroundColor);
|
||||
this.SelectionBackColor = ControlManager.ConvertColor(ConsoleEx.BackgroundColor);
|
||||
this.AppendText(Localization.Parse(text) + Environment.NewLine);
|
||||
this.HideSelection = false;
|
||||
}
|
||||
|
||||
bool quickCopying = false;
|
||||
|
||||
protected override void OnMouseDown(MouseEventArgs e)
|
||||
{
|
||||
//if right-clicking, then we initiate a quick-copy.
|
||||
if (e.Button == MouseButtons.Right)
|
||||
quickCopying = true;
|
||||
|
||||
//Override the mouse event so that it's a left-click at all times.
|
||||
base.OnMouseDown(new MouseEventArgs(MouseButtons.Left, e.Clicks, e.X, e.Y, e.Delta));
|
||||
}
|
||||
|
||||
protected override void OnMouseUp(MouseEventArgs mevent)
|
||||
{
|
||||
if(quickCopying == true)
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(this.SelectedText))
|
||||
{
|
||||
this.Copy();
|
||||
}
|
||||
}
|
||||
base.OnMouseUp(mevent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -59,10 +59,25 @@ namespace ShiftOS.WinForms
|
|||
{
|
||||
private static void writeSlow(string text)
|
||||
{
|
||||
Console.Write("[hacker101@undisclosed]: ");
|
||||
Thread.Sleep(200);
|
||||
ConsoleEx.ForegroundColor = ConsoleColor.DarkYellow;
|
||||
ConsoleEx.Bold = false;
|
||||
ConsoleEx.Italic = false;
|
||||
Console.Write("[");
|
||||
ConsoleEx.ForegroundColor = ConsoleColor.Magenta;
|
||||
ConsoleEx.Bold = true;
|
||||
Console.Write("hacker101");
|
||||
ConsoleEx.ForegroundColor = ConsoleColor.DarkYellow;
|
||||
ConsoleEx.Italic = true;
|
||||
Console.Write("@");
|
||||
ConsoleEx.ForegroundColor = ConsoleColor.White;
|
||||
Console.Write("undisclosed");
|
||||
ConsoleEx.ForegroundColor = ConsoleColor.DarkYellow;
|
||||
ConsoleEx.Bold = false;
|
||||
ConsoleEx.Italic = false;
|
||||
Console.Write("]: ");
|
||||
Thread.Sleep(850);
|
||||
Console.WriteLine(text);
|
||||
Thread.Sleep(1000);
|
||||
Thread.Sleep(4000);
|
||||
}
|
||||
|
||||
[Story("hacker101_deadaccts")]
|
||||
|
@ -121,9 +136,12 @@ namespace ShiftOS.WinForms
|
|||
TerminalBackend.PrefixEnabled = true;
|
||||
Console.Write($"{SaveSystem.CurrentSave.Username}@{SaveSystem.CurrentSave.SystemName}:~$ ");
|
||||
StartHackerTutorial();
|
||||
TerminalBackend.PrefixEnabled = true;
|
||||
TerminalBackend.PrintPrompt();
|
||||
});
|
||||
t.IsBackground = true;
|
||||
t.Start();
|
||||
TerminalBackend.PrefixEnabled = false;
|
||||
}
|
||||
|
||||
internal static void StartHackerTutorial()
|
||||
|
@ -140,8 +158,7 @@ namespace ShiftOS.WinForms
|
|||
int tutPos = 0;
|
||||
Action ondec = () =>
|
||||
{
|
||||
if (tutPos == 2)
|
||||
tutPos++;
|
||||
tutPos++;
|
||||
};
|
||||
TerminalBackend.CommandProcessed += (o, a) =>
|
||||
{
|
||||
|
@ -351,6 +368,7 @@ namespace ShiftOS.WinForms
|
|||
|
||||
const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890-_";
|
||||
|
||||
[MultiplayerOnly]
|
||||
[Command("breach_user_password")]
|
||||
[KernelMode]
|
||||
[RequiresArgument("user")]
|
||||
|
@ -360,7 +378,7 @@ namespace ShiftOS.WinForms
|
|||
{
|
||||
string usr = args["user"].ToString();
|
||||
string sys = args["sys"].ToString();
|
||||
|
||||
bool received = false;
|
||||
ServerMessageReceived msgReceived = null;
|
||||
|
||||
Console.WriteLine("--hooking system thread...");
|
||||
|
@ -373,30 +391,34 @@ namespace ShiftOS.WinForms
|
|||
var rnd = new Random();
|
||||
var sw = new Stopwatch();
|
||||
sw.Start();
|
||||
string pass = "";
|
||||
for(int i = 0; i < sve.Password.Length; i++)
|
||||
Thread.Sleep(2000);
|
||||
if(rnd.Next(0, 100) >= 75)
|
||||
{
|
||||
char c = '\0';
|
||||
while (c != sve.Password[i])
|
||||
c = chars[rnd.Next(0, chars.Length)];
|
||||
pass += c;
|
||||
Thread.Sleep(rnd.Next(25,75));
|
||||
Console.WriteLine("--operation took too long - failed.");
|
||||
ServerManager.SendMessage("mud_save_allow_dead", JsonConvert.SerializeObject(sve));
|
||||
ServerManager.MessageReceived -= msgReceived;
|
||||
TerminalBackend.PrefixEnabled = true;
|
||||
return;
|
||||
}
|
||||
sw.Stop();
|
||||
Console.WriteLine(pass);
|
||||
Console.WriteLine(sve.Password);
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("--password breached. Operation took " + sw.ElapsedMilliseconds + " milliseconds.");
|
||||
received = true;
|
||||
ServerManager.MessageReceived -= msgReceived;
|
||||
TerminalBackend.PrintPrompt();
|
||||
}
|
||||
else if(msg.Name == "user_data_not_found")
|
||||
{
|
||||
Console.WriteLine("--access denied.");
|
||||
received = true;
|
||||
ServerManager.MessageReceived -= msgReceived;
|
||||
TerminalBackend.PrintPrompt();
|
||||
}
|
||||
TerminalBackend.PrefixEnabled = true;
|
||||
};
|
||||
|
||||
Console.WriteLine("--beginning brute-force attack on " + usr + "@" + sys + "...");
|
||||
Thread.Sleep(500);
|
||||
ServerManager.MessageReceived += msgReceived;
|
||||
|
||||
ServerManager.SendMessage("get_user_data", JsonConvert.SerializeObject(new
|
||||
|
@ -404,9 +426,13 @@ namespace ShiftOS.WinForms
|
|||
user = usr,
|
||||
sysname = sys
|
||||
}));
|
||||
TerminalBackend.PrefixEnabled = false;
|
||||
Thread.Sleep(500);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
[MultiplayerOnly]
|
||||
[Command("print_user_info")]
|
||||
[KernelMode]
|
||||
[RequiresArgument("pass")]
|
||||
|
@ -418,7 +444,7 @@ namespace ShiftOS.WinForms
|
|||
string usr = args["user"].ToString();
|
||||
string sys = args["sys"].ToString();
|
||||
string pass = args["pass"].ToString();
|
||||
|
||||
bool received = false;
|
||||
ServerMessageReceived msgReceived = null;
|
||||
|
||||
Console.WriteLine("--hooking multi-user domain response call...");
|
||||
|
@ -441,18 +467,22 @@ namespace ShiftOS.WinForms
|
|||
{
|
||||
Console.WriteLine("--access denied.");
|
||||
}
|
||||
received = true;
|
||||
ServerManager.MessageReceived -= msgReceived;
|
||||
|
||||
TerminalBackend.PrintPrompt();
|
||||
|
||||
}
|
||||
else if (msg.Name == "user_data_not_found")
|
||||
{
|
||||
Console.WriteLine("--access denied.");
|
||||
received = true;
|
||||
ServerManager.MessageReceived -= msgReceived;
|
||||
TerminalBackend.PrintPrompt();
|
||||
}
|
||||
TerminalBackend.PrefixEnabled = true;
|
||||
};
|
||||
|
||||
Console.WriteLine("--contacting multi-user domain...");
|
||||
Thread.Sleep(500);
|
||||
ServerManager.MessageReceived += msgReceived;
|
||||
|
||||
ServerManager.SendMessage("get_user_data", JsonConvert.SerializeObject(new
|
||||
|
@ -460,9 +490,12 @@ namespace ShiftOS.WinForms
|
|||
user = usr,
|
||||
sysname = sys
|
||||
}));
|
||||
Thread.Sleep(500);
|
||||
TerminalBackend.PrefixEnabled = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
[MultiplayerOnly]
|
||||
[Command("steal_codepoints")]
|
||||
[KernelMode]
|
||||
[RequiresArgument("amount")]
|
||||
|
@ -476,7 +509,7 @@ namespace ShiftOS.WinForms
|
|||
string sys = args["sys"].ToString();
|
||||
string pass = args["pass"].ToString();
|
||||
long amount = (long)args["amount"];
|
||||
|
||||
bool received = false;
|
||||
if(amount < 0)
|
||||
{
|
||||
Console.WriteLine("--invalid codepoint amount - halting...");
|
||||
|
@ -497,6 +530,8 @@ namespace ShiftOS.WinForms
|
|||
if(amount > sve.Codepoints)
|
||||
{
|
||||
Console.WriteLine("--can't steal this many codepoints from user.");
|
||||
ServerManager.SendMessage("mud_save_allow_dead", JsonConvert.SerializeObject(sve));
|
||||
TerminalBackend.PrefixEnabled = true;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -509,14 +544,18 @@ namespace ShiftOS.WinForms
|
|||
{
|
||||
Console.WriteLine("--access denied.");
|
||||
}
|
||||
|
||||
received = true;
|
||||
ServerManager.MessageReceived -= msgReceived;
|
||||
TerminalBackend.PrintPrompt();
|
||||
}
|
||||
else if (msg.Name == "user_data_not_found")
|
||||
{
|
||||
Console.WriteLine("--access denied.");
|
||||
received = true;
|
||||
ServerManager.MessageReceived -= msgReceived;
|
||||
TerminalBackend.PrintPrompt();
|
||||
}
|
||||
TerminalBackend.PrefixEnabled = true;
|
||||
};
|
||||
|
||||
Console.WriteLine("--contacting multi-user domain...");
|
||||
|
@ -528,9 +567,65 @@ namespace ShiftOS.WinForms
|
|||
user = usr,
|
||||
sysname = sys
|
||||
}));
|
||||
Thread.Sleep(500);
|
||||
TerminalBackend.PrefixEnabled = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
[MultiplayerOnly]
|
||||
[Command("purge_user")]
|
||||
[KernelMode]
|
||||
[RequiresArgument("pass")]
|
||||
[RequiresArgument("user")]
|
||||
[RequiresArgument("sys")]
|
||||
[RequiresUpgrade("hacker101_deadaccts")]
|
||||
public static bool PurgeUser(Dictionary<string, object> args)
|
||||
{
|
||||
string usr = args["user"].ToString();
|
||||
string sys = args["sys"].ToString();
|
||||
string pass = args["pass"].ToString();
|
||||
ServerMessageReceived msgReceived = null;
|
||||
|
||||
Console.WriteLine("--hooking multi-user domain response call...");
|
||||
|
||||
msgReceived = (msg) =>
|
||||
{
|
||||
if (msg.Name == "user_data")
|
||||
{
|
||||
var sve = JsonConvert.DeserializeObject<Save>(msg.Contents);
|
||||
if (sve.Password == pass)
|
||||
{
|
||||
ServerManager.SendMessage("delete_dead_save", JsonConvert.SerializeObject(sve));
|
||||
Console.WriteLine("<mud> User purged successfully.");
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("--access denied.");
|
||||
}
|
||||
ServerManager.MessageReceived -= msgReceived;
|
||||
}
|
||||
else if (msg.Name == "user_data_not_found")
|
||||
{
|
||||
Console.WriteLine("--access denied.");
|
||||
ServerManager.MessageReceived -= msgReceived;
|
||||
}
|
||||
TerminalBackend.PrintPrompt();
|
||||
TerminalBackend.PrefixEnabled = true;
|
||||
};
|
||||
|
||||
Console.WriteLine("--contacting multi-user domain...");
|
||||
Thread.Sleep(500);
|
||||
ServerManager.MessageReceived += msgReceived;
|
||||
|
||||
ServerManager.SendMessage("get_user_data", JsonConvert.SerializeObject(new
|
||||
{
|
||||
user = usr,
|
||||
sysname = sys
|
||||
}));
|
||||
Thread.Sleep(500);
|
||||
TerminalBackend.PrefixEnabled = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
[Command("brute_decrypt", true)]
|
||||
|
@ -573,6 +668,7 @@ namespace ShiftOS.WinForms
|
|||
}
|
||||
}
|
||||
|
||||
[MultiplayerOnly]
|
||||
[Namespace("storydev")]
|
||||
public static class StoryDevCommands
|
||||
{
|
||||
|
@ -604,5 +700,15 @@ namespace ShiftOS.WinForms
|
|||
|
||||
return true;
|
||||
}
|
||||
|
||||
[Command("experience", description = "Marks a story plot as experienced without triggering the plot.", usage ="{id:}")]
|
||||
[RequiresArgument("id")]
|
||||
[RemoteLock]
|
||||
public static bool Experience(Dictionary<string, object> args)
|
||||
{
|
||||
SaveSystem.CurrentSave.StoriesExperienced.Add(args["id"].ToString());
|
||||
SaveSystem.SaveGame();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
24
ShiftOS.WinForms/Properties/Resources.Designer.cs
generated
24
ShiftOS.WinForms/Properties/Resources.Designer.cs
generated
|
@ -729,6 +729,16 @@ namespace ShiftOS.WinForms.Properties {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap iconShiftLotto {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("iconShiftLotto", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
|
@ -923,15 +933,11 @@ namespace ShiftOS.WinForms.Properties {
|
|||
/// Company: "ShiftSoft"
|
||||
/// },
|
||||
/// {
|
||||
/// Company: ""
|
||||
/// },
|
||||
/// {
|
||||
///
|
||||
/// },
|
||||
/// {
|
||||
///
|
||||
/// },
|
||||
///].
|
||||
/// Company: "Shiftcast",
|
||||
/// Name: "NetXtreme Hyper Edition",
|
||||
/// CostPerMonth: 1500,
|
||||
/// DownloadSpeed: 524288, //512 kb/s
|
||||
/// Description: "It's time to supercharge your Shif [rest of string was truncated]";.
|
||||
/// </summary>
|
||||
internal static string ShiftnetServices {
|
||||
get {
|
||||
|
|
|
@ -475,4 +475,7 @@
|
|||
<data name="ShiftnetServices" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\ShiftnetServices.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
|
||||
</data>
|
||||
<data name="iconShiftLotto" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\systemicons\iconshiftlotto.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
</root>
|
|
@ -125,6 +125,20 @@
|
|||
Description: "Want to adjust the volume of ShiftOS's audio? This upgrade will let you."
|
||||
},
|
||||
|
||||
//SHIFTLOTTO UPGRADES
|
||||
{
|
||||
Name: "ShiftLotto",
|
||||
Cost: 200,
|
||||
Dependencies: null,
|
||||
Description: "Are you feeling lucky? Spend some money on this upgrade! If you have any left, go ahead and bet your money in ShiftLotto!"
|
||||
},
|
||||
{
|
||||
Name: "AL ShiftLotto",
|
||||
Cost: 150,
|
||||
Dependencies: "app_launcher;shiftlotto",
|
||||
Description: "This upgrade allows you to find ShiftLotto in your App Launcher."
|
||||
},
|
||||
|
||||
// COLOR DEPTH AND DITHERING
|
||||
|
||||
{
|
||||
|
|
|
@ -166,6 +166,12 @@
|
|||
<Compile Include="Applications\Shifter.Designer.cs">
|
||||
<DependentUpon>Shifter.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Applications\ShiftLotto.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Applications\ShiftLotto.Designer.cs">
|
||||
<DependentUpon>ShiftLotto.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Applications\Shiftnet.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
|
@ -341,6 +347,9 @@
|
|||
<EmbeddedResource Include="Applications\Shifter.resx">
|
||||
<DependentUpon>Shifter.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Applications\ShiftLotto.resx">
|
||||
<DependentUpon>ShiftLotto.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Applications\Shiftnet.resx">
|
||||
<DependentUpon>Shiftnet.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
|
@ -609,6 +618,7 @@
|
|||
<Content Include="SystemIcons\iconPong.png" />
|
||||
<Content Include="SystemIcons\iconShifter.png" />
|
||||
<None Include="SystemIcons\iconShiftLetters.png" />
|
||||
<Content Include="SystemIcons\iconShiftLotto.png" />
|
||||
<Content Include="SystemIcons\iconShiftnet.png" />
|
||||
<Content Include="SystemIcons\iconShiftorium.png" />
|
||||
<None Include="SystemIcons\iconShiftSweeper.png" />
|
||||
|
|
BIN
ShiftOS.WinForms/SystemIcons/iconShiftLotto.png
Normal file
BIN
ShiftOS.WinForms/SystemIcons/iconShiftLotto.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 299 B |
|
@ -152,6 +152,48 @@ namespace ShiftOS.WinForms.Tools
|
|||
}
|
||||
}
|
||||
|
||||
internal static Color ConvertColor(ConsoleColor cCol)
|
||||
{
|
||||
switch (cCol)
|
||||
{
|
||||
case ConsoleColor.Black:
|
||||
return Color.Black;
|
||||
case ConsoleColor.Gray:
|
||||
return Color.Gray;
|
||||
case ConsoleColor.DarkGray:
|
||||
return Color.DarkGray;
|
||||
case ConsoleColor.Blue:
|
||||
return Color.Blue;
|
||||
case ConsoleColor.Cyan:
|
||||
return Color.Cyan;
|
||||
case ConsoleColor.DarkBlue:
|
||||
return Color.DarkBlue;
|
||||
case ConsoleColor.DarkCyan:
|
||||
return Color.DarkCyan;
|
||||
case ConsoleColor.DarkGreen:
|
||||
return Color.DarkGreen;
|
||||
case ConsoleColor.DarkMagenta:
|
||||
return Color.DarkMagenta;
|
||||
case ConsoleColor.DarkRed:
|
||||
return Color.DarkRed;
|
||||
case ConsoleColor.DarkYellow:
|
||||
return Color.YellowGreen;
|
||||
case ConsoleColor.Yellow:
|
||||
return Color.Yellow;
|
||||
case ConsoleColor.Green:
|
||||
return Color.Green;
|
||||
case ConsoleColor.Magenta:
|
||||
return Color.Magenta;
|
||||
case ConsoleColor.Red:
|
||||
return Color.Red;
|
||||
case ConsoleColor.White:
|
||||
return Color.White;
|
||||
default:
|
||||
return Color.Black;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static void SetCursor(Control ctrl)
|
||||
{
|
||||
#if STUPID
|
||||
|
|
|
@ -63,8 +63,10 @@ namespace ShiftOS.WinForms
|
|||
NotificationDaemon.NotificationMade += (note) =>
|
||||
{
|
||||
//Soon this will pop a balloon note.
|
||||
btnnotifications.Text = "Notifications (" + NotificationDaemon.GetUnreadCount().ToString() + ")";
|
||||
|
||||
this.Invoke(new Action(() =>
|
||||
{
|
||||
btnnotifications.Text = "Notifications (" + NotificationDaemon.GetUnreadCount().ToString() + ")";
|
||||
}));
|
||||
};
|
||||
|
||||
NotificationDaemon.NotificationRead += () =>
|
||||
|
|
|
@ -106,6 +106,24 @@ namespace ShiftOS.WinForms
|
|||
return;
|
||||
}
|
||||
|
||||
foreach(var attr in form.GetType().GetCustomAttributes(true))
|
||||
{
|
||||
if(attr is MultiplayerOnlyAttribute)
|
||||
{
|
||||
if(KernelWatchdog.MudConnected == false)
|
||||
{
|
||||
Infobox.PromptYesNo("Disconnected from MUD", "This application requires a connection to the MUD. Would you like to reconnect?", new Action<bool>((answer) =>
|
||||
{
|
||||
if(answer == true)
|
||||
{
|
||||
KernelWatchdog.MudConnected = true;
|
||||
SetupWindow(form);
|
||||
}
|
||||
}));
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!Shiftorium.UpgradeAttributesUnlocked(form.GetType()))
|
||||
{
|
||||
|
|
|
@ -21,6 +21,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ModLauncher", "ModLauncher\
|
|||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ShiftOS.Server.WebAdmin", "ShiftOS.Server.WebAdmin\ShiftOS.Server.WebAdmin.csproj", "{B29FDD06-E6FE-40A2-8258-283728CED81A}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Gwen", "Gwen\Gwen.csproj", "{ADDA2F43-96C0-497F-8216-29C67ABC9806}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Gwen.Renderer.OpenTK", "Gwen.Renderer.OpenTK\Gwen.Renderer.OpenTK.csproj", "{41650C82-D630-4E5C-845A-F1513C8FDC99}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
|
@ -63,6 +67,14 @@ Global
|
|||
{B29FDD06-E6FE-40A2-8258-283728CED81A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B29FDD06-E6FE-40A2-8258-283728CED81A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B29FDD06-E6FE-40A2-8258-283728CED81A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{ADDA2F43-96C0-497F-8216-29C67ABC9806}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{ADDA2F43-96C0-497F-8216-29C67ABC9806}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{ADDA2F43-96C0-497F-8216-29C67ABC9806}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{ADDA2F43-96C0-497F-8216-29C67ABC9806}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{41650C82-D630-4E5C-845A-F1513C8FDC99}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{41650C82-D630-4E5C-845A-F1513C8FDC99}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{41650C82-D630-4E5C-845A-F1513C8FDC99}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{41650C82-D630-4E5C-845A-F1513C8FDC99}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
|
|
@ -66,12 +66,24 @@ namespace ShiftOS.Engine
|
|||
{
|
||||
foreach (var attr in type.GetCustomAttributes(false))
|
||||
{
|
||||
if (attr is LauncherAttribute)
|
||||
bool isAllowed = true;
|
||||
if(attr is MultiplayerOnlyAttribute)
|
||||
{
|
||||
var launch = attr as LauncherAttribute;
|
||||
if (launch.UpgradeInstalled)
|
||||
if(KernelWatchdog.MudConnected == false)
|
||||
{
|
||||
win.Add(new LauncherItem { DisplayData = launch, LaunchType = type });
|
||||
isAllowed = false;
|
||||
|
||||
}
|
||||
}
|
||||
if (isAllowed == true)
|
||||
{
|
||||
if (attr is LauncherAttribute)
|
||||
{
|
||||
var launch = attr as LauncherAttribute;
|
||||
if (launch.UpgradeInstalled)
|
||||
{
|
||||
win.Add(new LauncherItem { DisplayData = launch, LaunchType = type });
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -133,6 +133,7 @@ namespace ShiftOS.Engine
|
|||
[Namespace("mud")]
|
||||
public static class MUDCommands
|
||||
{
|
||||
[MultiplayerOnly]
|
||||
[Command("status")]
|
||||
public static bool Status()
|
||||
{
|
||||
|
@ -155,6 +156,8 @@ namespace ShiftOS.Engine
|
|||
{
|
||||
Console.WriteLine("{ERROR}: " + ex.Message);
|
||||
}
|
||||
|
||||
TerminalBackend.PrefixEnabled = false;
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
@ -174,6 +177,7 @@ namespace ShiftOS.Engine
|
|||
return true;
|
||||
}
|
||||
|
||||
[MultiplayerOnly]
|
||||
[Command("disconnect")]
|
||||
[RequiresUpgrade("hacker101_deadaccts")]
|
||||
public static bool Disconnect()
|
||||
|
@ -183,6 +187,7 @@ namespace ShiftOS.Engine
|
|||
return true;
|
||||
}
|
||||
|
||||
[MultiplayerOnly]
|
||||
[Command("sendmsg")]
|
||||
[KernelMode]
|
||||
[RequiresUpgrade("hacker101_deadaccts")]
|
||||
|
@ -195,48 +200,6 @@ namespace ShiftOS.Engine
|
|||
}
|
||||
}
|
||||
|
||||
[RequiresUpgrade("mud_fundamentals")]
|
||||
[Namespace("chat")]
|
||||
public static class ChatCommands
|
||||
{
|
||||
[RequiresArgument("id")]
|
||||
[RequiresArgument("name")]
|
||||
[RequiresArgument("topic")]
|
||||
[Command("create")]
|
||||
public static bool CreateChat(Dictionary<string, object> args)
|
||||
{
|
||||
string id = "";
|
||||
string topic = "";
|
||||
string name = "";
|
||||
int max_users = 0;
|
||||
|
||||
id = args["id"] as string;
|
||||
name = args["topic"] as string;
|
||||
topic = args["name"] as string;
|
||||
|
||||
bool valid = true;
|
||||
|
||||
if (string.IsNullOrEmpty(id) || string.IsNullOrEmpty(name) || string.IsNullOrEmpty(topic))
|
||||
valid = false;
|
||||
|
||||
if (valid)
|
||||
{
|
||||
ServerManager.SendMessage("chat_create", $@"{{
|
||||
id: ""{id}"",
|
||||
name: ""{name}"",
|
||||
topic: ""{topic}"",
|
||||
max_users: {max_users}
|
||||
}}");
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("{CHAT_PLEASE_PROVIDE_VALID_CHANNEL_DATA}");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
[TutorialLock]
|
||||
[Namespace("trm")]
|
||||
public static class TerminalCommands
|
||||
|
@ -266,6 +229,7 @@ namespace ShiftOS.Engine
|
|||
}
|
||||
}
|
||||
|
||||
[MultiplayerOnly]
|
||||
[Namespace("dev")]
|
||||
public static class ShiftOSDevCommands
|
||||
{
|
||||
|
@ -475,6 +439,7 @@ namespace ShiftOS.Engine
|
|||
return true;
|
||||
}
|
||||
|
||||
[MultiplayerOnly]
|
||||
[Command("save")]
|
||||
public static bool Save()
|
||||
{
|
||||
|
@ -482,6 +447,7 @@ namespace ShiftOS.Engine
|
|||
return true;
|
||||
}
|
||||
|
||||
[MultiplayerOnly]
|
||||
[Command("status")]
|
||||
public static bool Status()
|
||||
{
|
||||
|
@ -494,7 +460,7 @@ Upgrades: {SaveSystem.CurrentSave.CountUpgrades()} installed,
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
[MultiplayerOnly]
|
||||
[Namespace("shiftorium")]
|
||||
public static class ShiftoriumCommands
|
||||
{
|
||||
|
|
28
ShiftOS_TheReturn/ConsoleEx.cs
Normal file
28
ShiftOS_TheReturn/ConsoleEx.cs
Normal file
|
@ -0,0 +1,28 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace ShiftOS.Engine
|
||||
{
|
||||
public static class ConsoleEx
|
||||
{
|
||||
static ConsoleEx()
|
||||
{
|
||||
ForegroundColor = ConsoleColor.White;
|
||||
BackgroundColor = ConsoleColor.Black;
|
||||
|
||||
Bold = false;
|
||||
Italic = false;
|
||||
Underline = false;
|
||||
}
|
||||
|
||||
public static ConsoleColor ForegroundColor { get; set; }
|
||||
public static ConsoleColor BackgroundColor { get; set; }
|
||||
|
||||
public static bool Bold { get; set; }
|
||||
public static bool Italic { get; set; }
|
||||
public static bool Underline { get; set; }
|
||||
}
|
||||
}
|
|
@ -55,11 +55,11 @@ namespace ShiftOS.Engine
|
|||
/// </summary>
|
||||
/// <param name="title">Infobox title</param>
|
||||
/// <param name="message">Infobox message</param>
|
||||
public static void Show(string title, string message)
|
||||
public static void Show(string title, string message, Action callback = null)
|
||||
{
|
||||
title = Localization.Parse(title);
|
||||
message = Localization.Parse(message);
|
||||
_infobox.Open(title, message);
|
||||
_infobox.Open(title, message, callback);
|
||||
}
|
||||
|
||||
public static void PromptText(string title, string message, Action<string> callback)
|
||||
|
@ -89,7 +89,7 @@ namespace ShiftOS.Engine
|
|||
// Infobox Interface
|
||||
public interface IInfobox
|
||||
{
|
||||
void Open(string title, string msg);
|
||||
void Open(string title, string msg, Action callback = null);
|
||||
void PromptText(string title, string message, Action<string> callback);
|
||||
void PromptYesNo(string title, string message, Action<bool> callback);
|
||||
}
|
||||
|
|
|
@ -25,8 +25,44 @@ namespace ShiftOS.Engine
|
|||
}
|
||||
}
|
||||
|
||||
private static bool _mudConnected = true;
|
||||
|
||||
public static bool InKernelMode { get; private set; }
|
||||
public static bool MudConnected { get; set; }
|
||||
public static bool MudConnected
|
||||
{
|
||||
get
|
||||
{
|
||||
return _mudConnected;
|
||||
}
|
||||
set
|
||||
{
|
||||
if(value == false)
|
||||
{
|
||||
foreach(var win in AppearanceManager.OpenForms)
|
||||
{
|
||||
foreach(var attr in win.ParentWindow.GetType().GetCustomAttributes(true))
|
||||
{
|
||||
if(attr is MultiplayerOnlyAttribute)
|
||||
{
|
||||
ConsoleEx.Bold = true;
|
||||
ConsoleEx.Underline = false;
|
||||
ConsoleEx.Italic = true;
|
||||
ConsoleEx.ForegroundColor = ConsoleColor.Red;
|
||||
Console.Write("Error:");
|
||||
ConsoleEx.Bold = false;
|
||||
ConsoleEx.ForegroundColor = ConsoleColor.DarkYellow;
|
||||
Console.WriteLine("Cannot disconnect from multi-user domain because an app that depends on it is open.");
|
||||
TerminalBackend.PrintPrompt();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_mudConnected = value;
|
||||
Desktop.PopulateAppLauncher();
|
||||
}
|
||||
}
|
||||
|
||||
public static bool IsSafe(Type type)
|
||||
{
|
||||
|
@ -66,5 +102,31 @@ namespace ShiftOS.Engine
|
|||
InKernelMode = false;
|
||||
Console.WriteLine("<kernel> Kernel mode disabled.");
|
||||
}
|
||||
|
||||
internal static bool CanRunOffline(Type method)
|
||||
{
|
||||
if (MudConnected)
|
||||
return true;
|
||||
|
||||
foreach (var attr in method.GetCustomAttributes(false))
|
||||
{
|
||||
if (attr is MultiplayerOnlyAttribute)
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
internal static bool CanRunOffline(MethodInfo method)
|
||||
{
|
||||
if (MudConnected)
|
||||
return true;
|
||||
|
||||
foreach(var attr in method.GetCustomAttributes(false))
|
||||
{
|
||||
if (attr is MultiplayerOnlyAttribute)
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -63,6 +63,26 @@ namespace ShiftOS.Engine.Scripting
|
|||
public dynamic Lua = new DynamicLua.DynamicLua();
|
||||
public bool Running = true;
|
||||
|
||||
static LuaInterpreter()
|
||||
{
|
||||
ServerManager.MessageReceived += (msg) =>
|
||||
{
|
||||
if (msg.Name == "run")
|
||||
{
|
||||
TerminalBackend.PrefixEnabled = false;
|
||||
var cntnts = JsonConvert.DeserializeObject<dynamic>(msg.Contents);
|
||||
var interp = new LuaInterpreter();
|
||||
Desktop.InvokeOnWorkerThread(() =>
|
||||
{
|
||||
interp.Execute(cntnts.script.ToString());
|
||||
|
||||
});
|
||||
TerminalBackend.PrefixEnabled = true;
|
||||
TerminalBackend.PrintPrompt();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public static string CreateSft(string lua)
|
||||
{
|
||||
byte[] bytes = Encoding.UTF8.GetBytes(lua);
|
||||
|
@ -341,12 +361,41 @@ end");
|
|||
}
|
||||
}
|
||||
|
||||
[Exposed("mud")]
|
||||
public class MUDFunctions
|
||||
{
|
||||
public void sendDiagnostic(string src, string cat, object val)
|
||||
{
|
||||
ServerManager.SendMessage("diag_log", $"[{src}] <{cat}>: {val}");
|
||||
}
|
||||
}
|
||||
|
||||
[Exposed("userinfo")]
|
||||
public class UserInfoFunctions
|
||||
{
|
||||
public string getUsername()
|
||||
{
|
||||
return SaveSystem.CurrentSave.Username;
|
||||
}
|
||||
|
||||
public string getSysname()
|
||||
{
|
||||
return SaveSystem.CurrentSave.SystemName;
|
||||
}
|
||||
|
||||
public string getEmail()
|
||||
{
|
||||
return getUsername() + "@" + getSysname();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[Exposed("infobox")]
|
||||
public class InfoboxFunctions
|
||||
{
|
||||
public void show(string title, string message)
|
||||
public void show(string title, string message, Action callback = null)
|
||||
{
|
||||
Infobox.Show(title, message);
|
||||
Infobox.Show(title, message, callback);
|
||||
}
|
||||
|
||||
public void question(string title, string message, Action<bool> callback)
|
||||
|
|
|
@ -125,6 +125,8 @@ namespace ShiftOS.Engine
|
|||
{
|
||||
thisGuid = new Guid(msg.Contents);
|
||||
GUIDReceived?.Invoke(msg.Contents);
|
||||
TerminalBackend.PrefixEnabled = true;
|
||||
TerminalBackend.PrintPrompt();
|
||||
}
|
||||
else if(msg.Name == "allusers")
|
||||
{
|
||||
|
@ -132,6 +134,7 @@ namespace ShiftOS.Engine
|
|||
{
|
||||
Console.WriteLine(acc);
|
||||
}
|
||||
TerminalBackend.PrintPrompt();
|
||||
}
|
||||
else if(msg.Name == "update_your_cp")
|
||||
{
|
||||
|
@ -154,9 +157,15 @@ namespace ShiftOS.Engine
|
|||
{
|
||||
var ex = JsonConvert.DeserializeObject<Exception>(msg.Contents);
|
||||
TerminalBackend.PrefixEnabled = true;
|
||||
Console.WriteLine($@"{{MUD_ERROR}}: {ex.Message}");
|
||||
ConsoleEx.ForegroundColor = ConsoleColor.Red;
|
||||
ConsoleEx.Bold = true;
|
||||
Console.Write($@"{{MUD_ERROR}}: ");
|
||||
ConsoleEx.Bold = false;
|
||||
ConsoleEx.Italic = true;
|
||||
ConsoleEx.ForegroundColor = ConsoleColor.DarkYellow;
|
||||
Console.WriteLine(ex.Message);
|
||||
TerminalBackend.PrefixEnabled = true;
|
||||
Console.Write($"{SaveSystem.CurrentSave.Username}@{CurrentSave.SystemName}:~$ ");
|
||||
TerminalBackend.PrintPrompt();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -100,6 +100,7 @@
|
|||
<Compile Include="CommandParser.cs" />
|
||||
<Compile Include="Commands.cs" />
|
||||
<Compile Include="Command.cs" />
|
||||
<Compile Include="ConsoleEx.cs" />
|
||||
<Compile Include="CrashHandler.cs" />
|
||||
<Compile Include="CrashHandler.Designer.cs">
|
||||
<DependentUpon>CrashHandler.cs</DependentUpon>
|
||||
|
|
|
@ -865,12 +865,12 @@ namespace ShiftOS.Engine {
|
|||
[ShifterMeta("System")]
|
||||
[ShifterCategory("General")]
|
||||
[ShifterName("Terminal text color")]
|
||||
public Color TerminalForeColor = DefaultForeground;
|
||||
public ConsoleColor TerminalForeColorCC = ConsoleColor.White;
|
||||
|
||||
[ShifterMeta("System")]
|
||||
[ShifterCategory("General")]
|
||||
[ShifterName("Terminal background color")]
|
||||
public Color TerminalBackColor = DesktopBG;
|
||||
public ConsoleColor TerminalBackColorCC = ConsoleColor.Black;
|
||||
|
||||
[ShifterMeta("Desktop")]
|
||||
[ShifterCategory("Desktop Panel")]
|
||||
|
|
|
@ -149,97 +149,170 @@ namespace ShiftOS.Engine {
|
|||
return RunClient(ns + "." + cmd, args, isRemote);
|
||||
}
|
||||
|
||||
public static bool RunClient(string text, Dictionary<string, string> args, bool isRemote = false) {
|
||||
|
||||
public static bool RunClient(string text, Dictionary<string, string> argss, bool isRemote = false) {
|
||||
Dictionary<string, object> args = new Dictionary<string, object>();
|
||||
foreach (KeyValuePair<string, string> arg in argss) {
|
||||
args[arg.Key] = arg.Value;
|
||||
}
|
||||
return RunClient(text, args, isRemote);
|
||||
}
|
||||
|
||||
public static bool RunClient(string text, Dictionary<string, object> args, bool isRemote = false) {
|
||||
latestCommmand = text;
|
||||
|
||||
//Console.WriteLine(text + " " + "{" + string.Join(",", args.Select(kv => kv.Key + "=" + kv.Value).ToArray()) + "}" + " " + isRemote);
|
||||
|
||||
foreach (var asmExec in System.IO.Directory.GetFiles(Environment.CurrentDirectory)) {
|
||||
try {
|
||||
var asm = Assembly.LoadFile(asmExec);
|
||||
|
||||
var types = asm.GetTypes();
|
||||
|
||||
foreach (var type in types) {
|
||||
if (Shiftorium.UpgradeAttributesUnlocked(type)) {
|
||||
if (KernelWatchdog.IsSafe(type)) {
|
||||
foreach (var a in type.GetCustomAttributes(false)) {
|
||||
if (a is Namespace) {
|
||||
var ns = a as Namespace;
|
||||
if (text.Split('.')[0] == ns.name) {
|
||||
foreach (var method in type.GetMethods(BindingFlags.Public | BindingFlags.Static)) {
|
||||
if (Shiftorium.UpgradeAttributesUnlocked(method)) {
|
||||
if (KernelWatchdog.IsSafe(method)) {
|
||||
if (CanRunRemotely(method, isRemote)) {
|
||||
foreach (var ma in method.GetCustomAttributes(false)) {
|
||||
if (ma is Command) {
|
||||
foreach (var type in types)
|
||||
{
|
||||
if (Shiftorium.UpgradeAttributesUnlocked(type))
|
||||
{
|
||||
foreach (var a in type.GetCustomAttributes(false))
|
||||
{
|
||||
if (a is Namespace)
|
||||
{
|
||||
var ns = a as Namespace;
|
||||
if (text.Split('.')[0] == ns.name)
|
||||
{
|
||||
if (KernelWatchdog.IsSafe(type))
|
||||
{
|
||||
if (KernelWatchdog.CanRunOffline(type))
|
||||
{
|
||||
foreach (var method in type.GetMethods(BindingFlags.Public | BindingFlags.Static))
|
||||
{
|
||||
if (Shiftorium.UpgradeAttributesUnlocked(method))
|
||||
{
|
||||
if (CanRunRemotely(method, isRemote))
|
||||
{
|
||||
foreach (var ma in method.GetCustomAttributes(false))
|
||||
{
|
||||
if (ma is Command)
|
||||
{
|
||||
var cmd = ma as Command;
|
||||
if (text.Split('.')[1] == cmd.name) {
|
||||
if (text.Split('.')[1] == cmd.name)
|
||||
{
|
||||
if (KernelWatchdog.IsSafe(method))
|
||||
{
|
||||
if (KernelWatchdog.CanRunOffline(method))
|
||||
{
|
||||
var attr = method.GetCustomAttribute<CommandObsolete>();
|
||||
|
||||
var attr = method.GetCustomAttribute<CommandObsolete>();
|
||||
|
||||
if (attr != null) {
|
||||
string newcommand = attr.newcommand;
|
||||
if (attr.warn) {
|
||||
Console.WriteLine(Localization.Parse((newcommand == "" ? "{ERROR}" : "{WARN}") + attr.reason, new Dictionary<string, string>() {
|
||||
if (attr != null)
|
||||
{
|
||||
string newcommand = attr.newcommand;
|
||||
if (attr.warn)
|
||||
{
|
||||
Console.WriteLine(Localization.Parse((newcommand == "" ? "{ERROR}" : "{WARN}") + attr.reason, new Dictionary<string, string>() {
|
||||
{"%newcommand", newcommand}
|
||||
}));
|
||||
}
|
||||
if (newcommand != "") {
|
||||
// redo the entire process running newcommand
|
||||
}
|
||||
if (newcommand != "")
|
||||
{
|
||||
// redo the entire process running newcommand
|
||||
|
||||
return RunClient(newcommand, args);
|
||||
}
|
||||
}
|
||||
return RunClient(newcommand, args);
|
||||
}
|
||||
}
|
||||
|
||||
var requiresArgs = method.GetCustomAttributes<RequiresArgument>();
|
||||
var requiresArgs = method.GetCustomAttributes<RequiresArgument>();
|
||||
bool error = false;
|
||||
bool providedusage = false;
|
||||
|
||||
bool error = false;
|
||||
bool providedusage = false;
|
||||
foreach (RequiresArgument argument in requiresArgs)
|
||||
{
|
||||
if (!args.ContainsKey(argument.argument))
|
||||
{
|
||||
|
||||
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>() {
|
||||
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}"));
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine(Localization.Parse("{ERROR_ARGUMENT_REQUIRED_NO_USAGE}"));
|
||||
}
|
||||
|
||||
error = true;
|
||||
}
|
||||
}
|
||||
|
||||
error = 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
|
||||
{
|
||||
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);
|
||||
else
|
||||
{
|
||||
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.");
|
||||
KernelWatchdog.Log("potential_sys_breach", "user attempted to run kernel mode command " + text + " - watchdog has prevented this, good sir.");
|
||||
return true;
|
||||
} catch {
|
||||
return (bool)method.Invoke(null, new object[] { });
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
@ -250,21 +323,90 @@ namespace ShiftOS.Engine {
|
|||
|
||||
}
|
||||
}
|
||||
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;
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
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.");
|
||||
KernelWatchdog.Log("potential_sys_breach", "user attempted to run kernel mode command " + text + " - watchdog has prevented this, good sir.");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
} catch { }
|
||||
}
|
||||
return false;
|
||||
}
|
||||
public static void PrintPrompt()
|
||||
{
|
||||
if (SaveSystem.CurrentSave != null)
|
||||
{
|
||||
ConsoleEx.BackgroundColor = SkinEngine.LoadedSkin.TerminalBackColorCC;
|
||||
ConsoleEx.Italic = false;
|
||||
ConsoleEx.Underline = false;
|
||||
|
||||
static TerminalBackend() {
|
||||
ServerMessageReceived onMessageReceived = (msg) => {
|
||||
if (msg.Name == "trm_invokecommand") {
|
||||
ConsoleEx.ForegroundColor = ConsoleColor.Magenta;
|
||||
ConsoleEx.Bold = true;
|
||||
|
||||
Console.Write(SaveSystem.CurrentSave.Username);
|
||||
ConsoleEx.Bold = false;
|
||||
ConsoleEx.ForegroundColor = ConsoleColor.Gray;
|
||||
Console.Write("@");
|
||||
ConsoleEx.Italic = true;
|
||||
ConsoleEx.Bold = true;
|
||||
ConsoleEx.ForegroundColor = ConsoleColor.Yellow;
|
||||
Console.Write(SaveSystem.CurrentSave.SystemName);
|
||||
ConsoleEx.Italic = false;
|
||||
ConsoleEx.Bold = false;
|
||||
ConsoleEx.ForegroundColor = ConsoleColor.Gray;
|
||||
Console.Write(":~");
|
||||
Console.ForegroundColor = ConsoleColor.White;
|
||||
ConsoleEx.Italic = true;
|
||||
if (KernelWatchdog.InKernelMode == true)
|
||||
Console.Write("#");
|
||||
else
|
||||
Console.Write("$");
|
||||
ConsoleEx.Italic = false;
|
||||
ConsoleEx.Bold = false;
|
||||
ConsoleEx.ForegroundColor = SkinEngine.LoadedSkin.TerminalForeColorCC;
|
||||
Console.Write(" ");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static TerminalBackend()
|
||||
{
|
||||
ServerMessageReceived onMessageReceived = (msg) =>
|
||||
{
|
||||
if (msg.Name == "trm_invokecommand")
|
||||
{
|
||||
string text3 = "";
|
||||
string text4 = msg.Contents;
|
||||
|
||||
|
|
Reference in a new issue