diff --git a/HorseIsleServer/HISP.sln b/HorseIsleServer/HISP.sln index 2998cec..1ad84f5 100644 --- a/HorseIsleServer/HISP.sln +++ b/HorseIsleServer/HISP.sln @@ -7,7 +7,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibHISP", "LibHISP\LibHISP. EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HISP", "HISP\HISP.csproj", "{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "N00BS", "N00BS\N00BS.csproj", "{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HISP-N00BS", "N00BS\HISP-N00BS.csproj", "{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -38,8 +38,8 @@ Global Windows|x86 = Windows|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Debug|Any CPU.ActiveCfg = Debug|AnyCPU - {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Debug|Any CPU.Build.0 = Debug|AnyCPU + {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Debug|Any CPU.Build.0 = Debug|Any CPU {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Debug|ARM.ActiveCfg = Debug|ARM {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Debug|ARM.Build.0 = Debug|ARM {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Debug|ARM64.ActiveCfg = Debug|ARM64 diff --git a/HorseIsleServer/HISP/HISP - Shortcut.lnk b/HorseIsleServer/HISP/HISP - Shortcut.lnk deleted file mode 100644 index d2a3e54..0000000 Binary files a/HorseIsleServer/HISP/HISP - Shortcut.lnk and /dev/null differ diff --git a/HorseIsleServer/HISP/HISP.csproj b/HorseIsleServer/HISP/HISP.csproj index 60a3a9f..f2e91b8 100644 --- a/HorseIsleServer/HISP/HISP.csproj +++ b/HorseIsleServer/HISP/HISP.csproj @@ -16,16 +16,6 @@ Resources.resx - - - copy "$(SolutionDir)..\HorseIsleData\gamedata.json" "$(TargetDir)gamedata.json" /Y - copy "$(SolutionDir)..\HorseIsleData\HI1.MAP" "$(TargetDir)HI1.MAP" /Y - - - cp -f "$(SolutionDir)../HorseIsleData/gamedata.json" "$(TargetDir)gamedata.json" - cp -f "$(SolutionDir)../HorseIsleData/HI1.MAP" "$(TargetDir)HI1.MAP" - - false false @@ -37,7 +27,7 @@ icon.ico HISP.Program OnBuildSuccess - none + embedded False none False @@ -216,7 +206,7 @@ 3 1701;1702;2026 - True + False diff --git a/HorseIsleServer/HISP/Program.cs b/HorseIsleServer/HISP/Program.cs index 16e6c81..868fcb9 100644 --- a/HorseIsleServer/HISP/Program.cs +++ b/HorseIsleServer/HISP/Program.cs @@ -5,12 +5,18 @@ namespace HISP { public static class Program { + public static bool ShuttingDown = false; + public static void OnShutdown() + { + ShuttingDown = true; + } public static void Main(string[] args) { Logger.SetCallback(Console.WriteLine); - Start.InitalizeAndStart(); + Entry.SetShutdownCallback(OnShutdown); + Entry.Start(); - while (true) { /* Allow asyncronous operations to happen. */ }; + while (!ShuttingDown) { /* Allow asyncronous operations to happen. */ }; } } } diff --git a/HorseIsleServer/LibHISP/Game/Chat/Command.cs b/HorseIsleServer/LibHISP/Game/Chat/Command.cs index 5817d09..2ab0e52 100644 --- a/HorseIsleServer/LibHISP/Game/Chat/Command.cs +++ b/HorseIsleServer/LibHISP/Game/Chat/Command.cs @@ -34,34 +34,12 @@ namespace HISP.Game.Chat public static bool Shutdown(string message, string[] args, User user) { if (!user.Administrator) - return false; - - try - { - foreach(GameClient client in GameClient.ConnectedClients) - { - - if (client.LoggedIn) - { - for(int i = 0; i < 2; i++) - { - ItemInstance rubyItem = new ItemInstance(Item.Ruby); - client.LoggedinUser.Inventory.AddIgnoringFull(rubyItem); - } - - client.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.GameUpdates).Count++; - } - - client.Kick("%SHUTDOWN Command Executed by an Administrator (Probably a server restart)"); - - } - } - catch (Exception) { }; + return false; byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message.Substring(1)), PacketBuilder.CHAT_BOTTOM_LEFT); user.LoggedinClient.SendPacket(chatPacket); - Thread.Sleep(1000); // give it a few seconds to shut down, if it doesnt force exit - Environment.Exit(0); + GameServer.ShutdownServer(); + return true; } public static bool Give(string message, string[] args, User user) diff --git a/HorseIsleServer/LibHISP/Game/SwfModules/Drawingroom.cs b/HorseIsleServer/LibHISP/Game/SwfModules/Drawingroom.cs index a86c731..a6c079c 100644 --- a/HorseIsleServer/LibHISP/Game/SwfModules/Drawingroom.cs +++ b/HorseIsleServer/LibHISP/Game/SwfModules/Drawingroom.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; namespace HISP.Game.SwfModules { - class Drawingroom + public class Drawingroom { private static List drawingRooms = new List(); public static Drawingroom[] DrawingRooms diff --git a/HorseIsleServer/LibHISP/LibHISP.csproj b/HorseIsleServer/LibHISP/LibHISP.csproj index 98b65a1..3188731 100644 --- a/HorseIsleServer/LibHISP/LibHISP.csproj +++ b/HorseIsleServer/LibHISP/LibHISP.csproj @@ -13,6 +13,18 @@ Resources.resx + + + PreserveNewest + gamedata.json + + + + + PreserveNewest + HI1.MAP + + @@ -206,7 +218,7 @@ 3 1701;1702;2026 - True + False diff --git a/HorseIsleServer/LibHISP/Server/Database.cs b/HorseIsleServer/LibHISP/Server/Database.cs index e0fdd11..e1ed180 100644 --- a/HorseIsleServer/LibHISP/Server/Database.cs +++ b/HorseIsleServer/LibHISP/Server/Database.cs @@ -1,5 +1,7 @@ using System; using System.Collections.Generic; +using System.Data.Common; + using HISP.Game; using HISP.Player; using HISP.Game.Horse; @@ -11,7 +13,6 @@ using HISP.Game.SwfModules; using MySqlConnector; using Microsoft.Data.Sqlite; -using System.Data.Common; namespace HISP.Server { @@ -39,12 +40,18 @@ namespace HISP.Server return new SqliteConnection(ConnectionString); } + public static void OnShutdown() + { + MySqlConnection.ClearAllPools(); + SqliteConnection.ClearAllPools(); + } + public static void OpenDatabase() { if (!ConfigReader.SqlLite) - ConnectionString = "server=" + ConfigReader.DatabaseIP + ";user=" + ConfigReader.DatabaseUsername + ";password=" + ConfigReader.DatabasePassword + ";database=" + ConfigReader.DatabaseName; + ConnectionString = "server=" + ConfigReader.DatabaseIP + ";user=" + ConfigReader.DatabaseUsername + ";password=" + ConfigReader.DatabasePassword + ";database=" + ConfigReader.DatabaseName; else - ConnectionString = "Data Source=./" + ConfigReader.DatabaseName + ".db;"; + ConnectionString = "Data Source=./" + ConfigReader.DatabaseName + ".db;"; Logger.InfoPrint(ConnectionString); @@ -61,6 +68,8 @@ namespace HISP.Server Environment.Exit(1); } + string SqlPragma = "PRAGMA journal_mode=WAL;"; + string UserTable = "CREATE TABLE IF NOT EXISTS Users(Id INT, Username TEXT(16), PassHash TEXT(128), Salt TEXT(128), Gender TEXT(16), Admin TEXT(3), Moderator TEXT(3))"; string ExtTable = "CREATE TABLE IF NOT EXISTS UserExt(Id INT, X INT, Y INT, LastLogin INT, Money INT, QuestPoints INT, BankBalance DOUBLE, BankInterest DOUBLE, ProfilePage Text(4000),IpAddress TEXT(1028),PrivateNotes Text(65535), CharId INT, ChatViolations INT,Subscriber TEXT(3), SubscribedUntil INT, Experience INT, Tiredness INT, Hunger INT, Thirst INT, FreeMinutes INT, TotalLogins INT)"; string MailTable = "CREATE TABLE IF NOT EXISTS Mailbox(RandomId INT, IdTo INT, IdFrom INT, Subject TEXT(100), Message Text(65535), TimeSent INT, BeenRead TEXT(3))"; @@ -99,6 +108,20 @@ namespace HISP.Server string DeleteOnlineUsers = "DROP TABLE OnlineUsers"; string OnlineUsers = "CREATE TABLE IF NOT EXISTS OnlineUsers(playerId INT, Admin TEXT(3), Moderator TEXT(3), Subscribed TEXT(3), New TEXT(3))"; + if (ConfigReader.SqlLite) + { + try + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = SqlPragma; + sqlCommand.ExecuteNonQuery(); + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + } + try { DbCommand sqlCommand = db.CreateCommand(); @@ -4675,7 +4698,6 @@ namespace HISP.Server Int32 count = Convert.ToInt32(sqlCommand.ExecuteScalar()); - return count >= 1; } } @@ -4874,6 +4896,23 @@ namespace HISP.Server } } + public static int GetNextFreeUserId() + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT MAX(Id)+1 FROM Users"; + sqlCommand.Prepare(); + + object res = sqlCommand.ExecuteScalar(); + if (res == DBNull.Value) + return 0; + + return Convert.ToInt32(res); + } + } + public static void CreateUser(int id, string username, string passhash, string salt, string gender, bool admin, bool moderator) { using (DbConnection db = connectDb()) diff --git a/HorseIsleServer/LibHISP/Server/Start.cs b/HorseIsleServer/LibHISP/Server/Entry.cs similarity index 79% rename from HorseIsleServer/LibHISP/Server/Start.cs rename to HorseIsleServer/LibHISP/Server/Entry.cs index c219987..89bc993 100644 --- a/HorseIsleServer/LibHISP/Server/Start.cs +++ b/HorseIsleServer/LibHISP/Server/Entry.cs @@ -5,13 +5,28 @@ using HISP.Game.Services; using HISP.Game.SwfModules; using HISP.Security; using System; +using System.Diagnostics; namespace HISP.Server { - public static class Start + public static class Entry { // "Entry Point" - public static void InitalizeAndStart() + + + private static void defaultOnShutdownCallback() + { + Process.GetCurrentProcess().Close(); + } + public static Action OnShutdown = defaultOnShutdownCallback; + + + public static void SetShutdownCallback(Action callback) + { + OnShutdown = callback; + } + + public static void Start() { #if (!DEBUG) AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); diff --git a/HorseIsleServer/LibHISP/Server/GameClient.cs b/HorseIsleServer/LibHISP/Server/GameClient.cs index f06249e..758fb0d 100644 --- a/HorseIsleServer/LibHISP/Server/GameClient.cs +++ b/HorseIsleServer/LibHISP/Server/GameClient.cs @@ -1,12 +1,13 @@ using System; using System.Net.Sockets; -using System.Text; using System.Threading; using System.Collections.Generic; using HISP.Player; using HISP.Game; using HISP.Game.Horse; using HISP.Game.Events; +using HISP.Game.Items; +using HISP.Game.Inventory; namespace HISP.Server { @@ -87,6 +88,30 @@ namespace HISP.Server receivePackets(null, evt); } + public static void OnShutdown() + { + try + { + foreach (GameClient client in ConnectedClients) + { + + if (client.LoggedIn) + { + for (int i = 0; i < 2; i++) + { + ItemInstance rubyItem = new ItemInstance(Item.Ruby); + client.LoggedinUser.Inventory.AddIgnoringFull(rubyItem); + } + + client.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.GameUpdates).Count++; + } + + client.Kick("Server shutdown."); + + } + } + catch (Exception) { }; + } public static void CreateClient(object sender, SocketAsyncEventArgs e) { do @@ -114,7 +139,7 @@ namespace HISP.Server // Close Socket if (ClientSocket != null) { - ClientSocket.Close(); + ClientSocket.Disconnect(false); ClientSocket.Dispose(); ClientSocket = null; } diff --git a/HorseIsleServer/LibHISP/Server/GameServer.cs b/HorseIsleServer/LibHISP/Server/GameServer.cs index 85e950c..6cb45ee 100644 --- a/HorseIsleServer/LibHISP/Server/GameServer.cs +++ b/HorseIsleServer/LibHISP/Server/GameServer.cs @@ -18,6 +18,7 @@ using HISP.Game.SwfModules; using HISP.Game.Horse; using HISP.Game.Events; using HISP.Game.Items; +using System.Diagnostics; namespace HISP.Server { @@ -8251,6 +8252,20 @@ namespace HISP.Server } return true; } + public static void OnShutdown() + { + ServerSocket.Dispose(); + gameTimer.Dispose(); + minuteTimer.Dispose(); + } + public static void ShutdownServer() + { + GameClient.OnShutdown(); + GameServer.OnShutdown(); + Database.OnShutdown(); + Entry.OnShutdown(); + } + public static void StartServer() { ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); diff --git a/HorseIsleServer/N00BS/HISP-N00BS.csproj b/HorseIsleServer/N00BS/HISP-N00BS.csproj new file mode 100644 index 0000000..6cd8965 --- /dev/null +++ b/HorseIsleServer/N00BS/HISP-N00BS.csproj @@ -0,0 +1,145 @@ + + + WinExe + HISP + 10.0 + true + + x64;x86;AnyCPU + Debug;Windows + + + + + + + True + True + Resources.resx + + + + + PreserveNewest + + + + + + PreserveNewest + client\%(Filename)%(Extension) + + + + + + PreserveNewest + client\map750.png + + + + + + PreserveNewest + client\mod\%(Filename)%(Extension) + + + + + + PreserveNewest + client\tack\%(Filename)%(Extension) + + + + + + + PreserveNewest + client\breed\%(Filename)%(Extension) + + + + + + PreserveNewest + client\resource\%(Filename)%(Extension) + + + + + false + false + + + net6.0-windows + false + true + icon.ico + HISP.Program + OnBuildSuccess + embedded + False + none + False + Public Domain, 2022 + https://islehorse.com + https://github.com/islehorse/HISP + git + + + + win-x86 + true + x86 + OS_WINDOWS;ARCH_X86 + 3 + 1701;1702;2026 + + + win-x64 + true + x64 + OS_WINDOWS;ARCH_X86_64 + 3 + 1701;1702;2026 + + + + net6.0 + win-x86;win-x64 + True + OS_ALL;ARCH_ANYCPU + + + + False + DEBUG;TRACE;OS_DEBUG;ARCH_X86_64 + 3 + 1701;1702;2026 + + + + + False + DEBUG;TRACE;OS_DEBUG;ARCH_X86 + 3 + 1701;1702;2026 + + + + + False + OS_WINDOWS;ARCH_ANYCPU + 3 + 1701;1702;2026 + + + + 3 + 1701;1702;2026 + False + + + + diff --git a/HorseIsleServer/N00BS/HISP-N00BS.csproj.user b/HorseIsleServer/N00BS/HISP-N00BS.csproj.user new file mode 100644 index 0000000..a02acd6 --- /dev/null +++ b/HorseIsleServer/N00BS/HISP-N00BS.csproj.user @@ -0,0 +1,15 @@ + + + + + + Form + + + Form + + + Form + + + \ No newline at end of file diff --git a/HorseIsleServer/N00BS/HTTP/ContentServer.cs b/HorseIsleServer/N00BS/HTTP/ContentServer.cs index b0919f7..cd8a49a 100644 --- a/HorseIsleServer/N00BS/HTTP/ContentServer.cs +++ b/HorseIsleServer/N00BS/HTTP/ContentServer.cs @@ -1,4 +1,7 @@ -using System.Net; +using System; +using System.Collections.Generic; +using System.IO; +using System.Net; using System.Net.Sockets; using System.Text; @@ -31,7 +34,6 @@ namespace HTTP { clientSock = ClientSocket; baseServ = Server; - Server.Clients.Add(this); baseServ.WriteDebugOutput("Client Connected @ " + clientSock.RemoteEndPoint.ToString()); ProcessRequests(); clientSock.Close(); @@ -103,11 +105,10 @@ namespace HTTP return headers; } - private void RespondGet(string path, Dictionary query) + private void RespondGet(string name) { - baseServ.WriteDebugOutput("GET " + path); - string name = path.Remove(0, 1); - + baseServ.WriteDebugOutput("GET " + name); + if (ContentItemExists(name)) { ContentItem ci = GetContentItem(name); @@ -143,8 +144,8 @@ namespace HTTP } else { - string body = GeneratePage(path); - string requestStr = GenerateHeaders(path, body.Length); + string body = GeneratePage(name); + string requestStr = GenerateHeaders(name, body.Length); requestStr += body; SendString(requestStr); @@ -204,12 +205,7 @@ namespace HTTP { if (path == "/") { - string body = "Content Downloader Server.
Open this url in PSVita's \"Content Downloader\" To view avalible files."; - foreach (ContentItem content in baseServ.Contents) - { - body += ""; - } - + string body = "Horse Isle Web Server..
Fork of SilicaAndPina's \"Content Server\""; return body; } else @@ -227,23 +223,6 @@ namespace HTTP else return relativeUri; } - private Dictionary ExtractQuery(string relativeUri) - { - int questionIndex = relativeUri.IndexOf("?"); - if (questionIndex != -1) - { - string[] queryStrList = relativeUri.Substring(questionIndex + 1).Split('&'); - Dictionary queryDict = new Dictionary(); - foreach(string queryStr in queryStrList) - { - string[] qStr = queryStr.Split('='); - queryDict.Add(qStr[0], qStr[1]); - } - return queryDict; - } - else - return new Dictionary(); - } private string ExtractRelativeUrl(string header) { return header.Split(' ')[1]; @@ -264,8 +243,8 @@ namespace HTTP { string relUrl = ExtractRelativeUrl(line); string path = ExtractPath(relUrl); - Dictionary query = ExtractQuery(relUrl); - RespondGet(path, query); + //Dictionary query = ExtractQuery(relUrl); + RespondGet(path); return; } else if (line.StartsWith("HEAD")) @@ -282,36 +261,34 @@ namespace HTTP class ContentServer { public List Contents = new List(); - public List Clients = new List(); - + public Socket ServerSocket; public void WriteDebugOutput(string txt) { - Console.WriteLine("[HTTP] "+txt); + Console.WriteLine("[HTTP] " + txt); } + public void CreateClient(object sender, SocketAsyncEventArgs e) + { + do + { + Socket eSocket = e.AcceptSocket; + if (eSocket != null) + new ContentClient(this, eSocket); + e.AcceptSocket = null; + } while (!ServerSocket.AcceptAsync(e)); + } public ContentServer() { - new Thread(() => - { - WriteDebugOutput("Listening for connections on port 12515."); - IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Parse("0.0.0.0"), 12515); - Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); - newsock.Bind(localEndPoint); - newsock.Listen(20); + WriteDebugOutput("Listening for connections on port 80."); + IPEndPoint ep = new IPEndPoint(IPAddress.Parse("0.0.0.0"), 80); + ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); + ServerSocket.Bind(ep); + ServerSocket.Listen(0x7fffffff); - while(true) - { - Socket clientSock = newsock.Accept(); - - new Thread(() => - { - ContentClient client = new ContentClient(this, clientSock); - Clients.Remove(client); - }).Start(); - } - - }).Start(); + SocketAsyncEventArgs e = new SocketAsyncEventArgs(); + e.Completed += CreateClient; + CreateClient(this, e); } diff --git a/HorseIsleServer/N00BS/LoadingForm.Designer.cs b/HorseIsleServer/N00BS/LoadingForm.Designer.cs new file mode 100644 index 0000000..8b1663d --- /dev/null +++ b/HorseIsleServer/N00BS/LoadingForm.Designer.cs @@ -0,0 +1,95 @@ +namespace HISP +{ + partial class LoadingForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LoadingForm)); + this.StepName = new System.Windows.Forms.Label(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.StartProgress = new System.Windows.Forms.ProgressBar(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // StepName + // + this.StepName.AutoSize = true; + this.StepName.Location = new System.Drawing.Point(79, 22); + this.StepName.Name = "StepName"; + this.StepName.Size = new System.Drawing.Size(92, 15); + this.StepName.TabIndex = 0; + this.StepName.Text = "Starting Server..."; + // + // pictureBox1 + // + this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); + this.pictureBox1.Location = new System.Drawing.Point(12, 12); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(61, 73); + this.pictureBox1.TabIndex = 1; + this.pictureBox1.TabStop = false; + // + // StartProgress + // + this.StartProgress.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.StartProgress.Location = new System.Drawing.Point(79, 40); + this.StartProgress.Maximum = 18; + this.StartProgress.Name = "StartProgress"; + this.StartProgress.Size = new System.Drawing.Size(618, 23); + this.StartProgress.Step = 1; + this.StartProgress.TabIndex = 2; + // + // LoadingForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(709, 101); + this.Controls.Add(this.StartProgress); + this.Controls.Add(this.pictureBox1); + this.Controls.Add(this.StepName); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MaximumSize = new System.Drawing.Size(725, 140); + this.MinimumSize = new System.Drawing.Size(725, 140); + this.Name = "LoadingForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Starting Server..."; + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label StepName; + private System.Windows.Forms.PictureBox pictureBox1; + public System.Windows.Forms.ProgressBar StartProgress; + } +} \ No newline at end of file diff --git a/HorseIsleServer/N00BS/LoadingForm.cs b/HorseIsleServer/N00BS/LoadingForm.cs new file mode 100644 index 0000000..e34e641 --- /dev/null +++ b/HorseIsleServer/N00BS/LoadingForm.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace HISP +{ + public partial class LoadingForm : Form + { + public LoadingForm() + { + InitializeComponent(); + } + } +} diff --git a/HorseIsleServer/N00BS/LoadingForm.resx b/HorseIsleServer/N00BS/LoadingForm.resx new file mode 100644 index 0000000..b9a23d8 --- /dev/null +++ b/HorseIsleServer/N00BS/LoadingForm.resx @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + R0lGODlhOgBEAIYAAAAAAP///0kBPZyEmPsA7tEAxs8AxMoAv8gAv8EAuaEAmp8AmIoAhDIALzAALiUF + I7cAtKAAmp4AmJ4AmpcAlJUAkpEAjZAAjYUAgIQAgHkAd1gAVVcAVFUAUlMAUE8ATUkARz0APDUAMzEA + MC4ALf8n96gAposAioMAgWsAa0QAQzUANZkAnZUAmI4AkXMAdWEAZF8AYS8AMIgAjn4Ag3sAf1sAXlcA + WzcAOWhAeE0wWKaJsZF4m35Lk6mpqXZ2dkBAQP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEBAAAh+QQB + AABBACwAAAAAOgBEAAAI/wCDCBxIsKDBgwgLbkjIsKHDhwIXQpxIkWGJEhskVtxY8WJGjiAnFijwoCAQ + ICFTEtww8oHLlydVytygoKbNlzJTPsho86bLnCF30lQwcmTNj0ApAnHJk2jRoxqTPnzZtGiBpkilNqQ6 + 1CrWqFoRCu1Zs+UDowqyhiW4dCxZs2jVrhXItWwBuyMJEIgLNmxdp3gL6OU7d+BftD3z7r2btm/Otky7 + Mk4seDHUtYcrQ6U8+KpjmZn1brapeKRcoKEJQM1YtejpnKlXsw78GnRTu6Ibrxx6WWrb205zqwVeO2hk + zqp1K2SN+Thpzcp3F+eYo3oO51aFfw5r/brb7MmnQ//sbrD7jh3VgYPvnZJ8QfPoc6gvqr19jvPnu1fH + v4MHj+o66ECZVexRdx9++h14nn8ACvgcgdFVtF9//vHAX4UVdhcgYk4RZuCCFV6I4X/WbThZh4yJx5AO + I7aYoX4mogWhigmx6GKLCcbI2IzbObRBgAkGWWKAOnRmlYcVCQWkkEESWeRiR6bYY0JuOWnllU8G2Blu + 4U1p0G9DYSlmlk/KCB2NbGFXwJIa6qCYXtVBqFiBD4FpF5tDvklAnE8F12VFdtqkV4A9FNrDD4gmahWf + NW0ZYZ3ONUoAoYYmqmhRjCrgKJqGRRZBBAssYIABSyLqpA8+LJrDp6GO+mlGAij/9ZJQrIpKqg7VmUok + qqrW6moEsMr6kgACcMDBBBMgoCwCAaLqrA811RpgBx0ccACyEkhgbKwTQfYAscYiuyyzOjyLarSgLjBt + tddOkO22xELkLbEeeFBBBRZYcMEF+X7wQQYZBMjAwAxggEGA/iaQAAUU1Evsw/KWJBC99uKrL78W+Auw + wAQbjPAHCjPs8MMQbyVxEMT6e8IJKLTsMgggELtuvf4SCzMEEKxcM8nxInQSThMLoDLLLrcMs8w6UEvz + BzaDgLPOHwxEckI//xQ0sSqo8MILLLCggQZZ92xQ1iaY8LUKBk3tM2RSP5z11l2frYLYBZFtNtgI0W0S + 21cLwxBCCC64MMMMKaQQgkMhtNBC4YcfpDdbSxWkduCDM4644oUn9PhAP0techAj0EBDDDHg4BAOMMCw + AkObC9Q5QWqDLjrpD6Guet7cUh1532LLUEMNI0C0gg02yIB7QzG1HbvvwAtPvOO5O5R87AKRcMMNwTtE + OgnHy4sSyp9Xf332DOGw/WPfUx+EA9c3cDrx3Ms0ffjrt/++DfEnpf4IAwwgwun9yx9Q1BeE/v3PIQEs + zEFEYLqHjMABCjQIAyHyQJUEBAA7 + + + + + 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 + + + \ No newline at end of file diff --git a/HorseIsleServer/N00BS/N00BS.csproj b/HorseIsleServer/N00BS/N00BS.csproj deleted file mode 100644 index c7e1363..0000000 --- a/HorseIsleServer/N00BS/N00BS.csproj +++ /dev/null @@ -1,20 +0,0 @@ - - - - Exe - net6.0-windows - enable - enable - HISP.Program - icon.ico - - - - - - - - - - - diff --git a/HorseIsleServer/N00BS/Program.cs b/HorseIsleServer/N00BS/Program.cs index 9849777..be67b2c 100644 --- a/HorseIsleServer/N00BS/Program.cs +++ b/HorseIsleServer/N00BS/Program.cs @@ -1,21 +1,31 @@ // An HTTP Server, and Horse Isle Server, Flash Player, in a single package // Idea is to just be open and play. +using HISP.Game; +using HISP.Game.Horse; +using HISP.Game.Items; +using HISP.Game.Services; +using HISP.Game.SwfModules; using HISP.Security; using HISP.Server; using HTTP; +using System; using System.Diagnostics; +using System.IO; using System.Reflection; +using System.Threading.Tasks; +using System.Windows.Forms; namespace HISP { public static class Program { + private static LoadingForm lfrm; private static string baseDir; private static ContentServer cs; private static void addToList(string path) { - string Name = path.Remove(0, Path.Combine(baseDir, "client").Length+1); + string Name = path.Remove(0, Path.Combine(baseDir, "client").Length); Name = Name.Replace("\\", "/"); ContentItem ci = new ContentItem(Name, path); @@ -23,35 +33,62 @@ namespace HISP } + public static void OnShutdown() + { + if(!Process.GetCurrentProcess().CloseMainWindow()) + Process.GetCurrentProcess().Close(); + } + + public static void StartLRFrm() + { + if (lfrm.ShowDialog() == DialogResult.Cancel) + { + GameServer.ShutdownServer(); + } + } + + public static void IncrementProgress() + { + if (lfrm.InvokeRequired) + { + lfrm.Invoke(() => + { + lfrm.StartProgress.Increment(1); + }); + } + else + { + lfrm.StartProgress.Increment(1); + } + } public static void Main(string[] args) { - baseDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); + Directory.SetCurrentDirectory(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)); + baseDir = Directory.GetCurrentDirectory(); + + lfrm = new LoadingForm(); + Task startForm = new Task(StartLRFrm); + startForm.Start(); ConfigReader.OpenConfig(); - if (File.Exists(ConfigReader.ConfigurationFileName)) - File.WriteAllText(ConfigReader.ConfigurationFileName, File.ReadAllText(ConfigReader.ConfigurationFileName).Replace("sql_lite=false", "sql_lite=true")); + ConfigReader.SqlLite = true; + ConfigReader.LogLevel = 0; + + IncrementProgress(); + Database.OpenDatabase(); - if(Database.GetUsers().Length == 0) + IncrementProgress(); + + if (Database.GetUsers().Length <= 0) { - Console.Write("Username: "); - string username = Console.ReadLine(); - Console.Write("Password: "); - string password = Console.ReadLine(); - Console.Write("Gender: "); - string gender = Console.ReadLine(); + RegisterForm rfrm = new RegisterForm(); + if (rfrm.ShowDialog() == DialogResult.Cancel) + GameServer.ShutdownServer(); + + lfrm.Focus(); - Random r = new Random(); - byte[] salt = new byte[64]; - - r.NextBytes(salt); - - string saltText = BitConverter.ToString(salt).Replace("-", ""); - - string hashsalt = BitConverter.ToString(Authentication.HashAndSalt(password, salt)).Replace("-", ""); - - Database.CreateUser(0, username, hashsalt, saltText, gender, true, true); } // Start Web Server @@ -60,18 +97,62 @@ namespace HISP foreach (string file in fileList) addToList(file); + IncrementProgress(); + // Start HI1 Server Logger.SetCallback(Console.WriteLine); - Start.InitalizeAndStart(); + IncrementProgress(); - // Start Flash (Windows) - Process p = new Process(); - p.StartInfo.FileName = Path.Combine(baseDir, "flash.dll"); - p.StartInfo.Arguments = "http://127.0.0.1:12515/horseisle.swf?SERVER=127.0.0.1&PORT=12321"; - p.Start(); + Entry.SetShutdownCallback(OnShutdown); + IncrementProgress(); - while (true) { /* Allow asyncronous operations to happen. */ }; + CrossDomainPolicy.GetPolicy(); + IncrementProgress(); + GameDataJson.ReadGamedata(); + IncrementProgress(); + + Map.OpenMap(); + IncrementProgress(); + + World.ReadWorldData(); + IncrementProgress(); + + Treasure.Init(); + IncrementProgress(); + + DroppedItems.Init(); + IncrementProgress(); + + WildHorse.Init(); + IncrementProgress(); + + Drawingroom.LoadAllDrawingRooms(); + IncrementProgress(); + + Brickpoet.LoadPoetryRooms(); + IncrementProgress(); + + Multiroom.CreateMultirooms(); + IncrementProgress(); + + Auction.LoadAllAuctionRooms(); + IncrementProgress(); + + Item.DoSpecialCases(); + IncrementProgress(); + + GameServer.StartServer(); + IncrementProgress(); + + lfrm.DialogResult = DialogResult.OK; + startForm.Wait(); + + SystemTrayIcon stry = new SystemTrayIcon(); + stry.ShowDialog(); + + // Finally, shutdown server + GameServer.ShutdownServer(); } } } diff --git a/HorseIsleServer/N00BS/Properties/PublishProfiles/Linux64.pubxml b/HorseIsleServer/N00BS/Properties/PublishProfiles/Linux64.pubxml deleted file mode 100644 index e633e09..0000000 --- a/HorseIsleServer/N00BS/Properties/PublishProfiles/Linux64.pubxml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - Linux - x64 - bin\x64\Linux\net6.0\linux-x64\publish\ - FileSystem - net6.0 - linux-x64 - True - True - True - True - OS_LINUX;ARCH_X86_64 - - \ No newline at end of file diff --git a/HorseIsleServer/N00BS/Properties/PublishProfiles/LinuxARM.pubxml b/HorseIsleServer/N00BS/Properties/PublishProfiles/LinuxARM.pubxml deleted file mode 100644 index 8257770..0000000 --- a/HorseIsleServer/N00BS/Properties/PublishProfiles/LinuxARM.pubxml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - Linux - ARM - bin\ARM\Linux\net6.0\linux-arm\publish\ - FileSystem - net6.0 - linux-arm - True - True - True - True - OS_LINUX;ARCH_ARM - - \ No newline at end of file diff --git a/HorseIsleServer/N00BS/Properties/PublishProfiles/LinuxARM64.pubxml b/HorseIsleServer/N00BS/Properties/PublishProfiles/LinuxARM64.pubxml deleted file mode 100644 index b9c21d1..0000000 --- a/HorseIsleServer/N00BS/Properties/PublishProfiles/LinuxARM64.pubxml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - Linux - ARM64 - bin\ARM64\Linux\net6.0\linux-arm64\publish\ - FileSystem - net6.0 - linux-arm64 - True - True - True - True - OS_LINUX;ARCH_ARM64 - - diff --git a/HorseIsleServer/N00BS/Properties/PublishProfiles/Osx64.pubxml b/HorseIsleServer/N00BS/Properties/PublishProfiles/Osx64.pubxml deleted file mode 100644 index 8e6230a..0000000 --- a/HorseIsleServer/N00BS/Properties/PublishProfiles/Osx64.pubxml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - MacOS - x64 - bin\x64\MacOS\net6.0\osx-x64\publish\ - FileSystem - net6.0 - osx-x64 - True - True - True - True - OS_MACOS;ARCH_X86_64 - - \ No newline at end of file diff --git a/HorseIsleServer/N00BS/Properties/PublishProfiles/OsxARM64.pubxml b/HorseIsleServer/N00BS/Properties/PublishProfiles/OsxARM64.pubxml deleted file mode 100644 index bf66d06..0000000 --- a/HorseIsleServer/N00BS/Properties/PublishProfiles/OsxARM64.pubxml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - MacOS - ARM64 - bin\arm64\MacOS\net6.0\osx-arm64\publish\ - FileSystem - net6.0 - osx-arm64 - True - True - True - True - OS_MACOS;ARCH_ARM64 - - \ No newline at end of file diff --git a/HorseIsleServer/N00BS/Properties/PublishProfiles/Win32.pubxml b/HorseIsleServer/N00BS/Properties/PublishProfiles/Win32.pubxml index 627bbac..53c9e1c 100644 --- a/HorseIsleServer/N00BS/Properties/PublishProfiles/Win32.pubxml +++ b/HorseIsleServer/N00BS/Properties/PublishProfiles/Win32.pubxml @@ -2,18 +2,18 @@ - + Windows x86 bin\x86\Windows\net6.0\win-x86\publish\ FileSystem - net6.0 + net6.0-windows win-x86 True True True - True - OS_WINDOWS;ARCH_X86 + + OS_WINDOWS;ARCH_X86 \ No newline at end of file diff --git a/HorseIsleServer/N00BS/Properties/PublishProfiles/Win64.pubxml b/HorseIsleServer/N00BS/Properties/PublishProfiles/Win64.pubxml index b7888f5..943de83 100644 --- a/HorseIsleServer/N00BS/Properties/PublishProfiles/Win64.pubxml +++ b/HorseIsleServer/N00BS/Properties/PublishProfiles/Win64.pubxml @@ -8,12 +8,12 @@ https://go.microsoft.com/fwlink/?LinkID=208121. x64 bin\x64\Windows\net6.0\win-x64\publish\ FileSystem - net6.0 + net6.0-windows win-x64 True True True - True - OS_WINDOWS;ARCH_X86_64 + + OS_WINDOWS;ARCH_X86_64
\ No newline at end of file diff --git a/HorseIsleServer/N00BS/Properties/PublishProfiles/WinARM.pubxml b/HorseIsleServer/N00BS/Properties/PublishProfiles/WinARM.pubxml deleted file mode 100644 index 202b002..0000000 --- a/HorseIsleServer/N00BS/Properties/PublishProfiles/WinARM.pubxml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - Windows - ARM - bin\arm\Windows\net6.0\windows-arm\publish\ - FileSystem - net6.0 - win-arm - True - True - True - True - OS_WINDOWS;ARCH_ARM - - \ No newline at end of file diff --git a/HorseIsleServer/N00BS/Properties/PublishProfiles/WinARM64.pubxml b/HorseIsleServer/N00BS/Properties/PublishProfiles/WinARM64.pubxml deleted file mode 100644 index 32dcdcb..0000000 --- a/HorseIsleServer/N00BS/Properties/PublishProfiles/WinARM64.pubxml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - Windows - ARM64 - bin\arm64\Windows\net6.0\windows-arm64\publish\ - FileSystem - net6.0 - win-arm64 - True - True - True - True - OS_WINDOWS;ARCH_ARM64 - - \ No newline at end of file diff --git a/HorseIsleServer/N00BS/Properties/launchSettings.json b/HorseIsleServer/N00BS/Properties/launchSettings.json index e6013fa..8f753d5 100644 --- a/HorseIsleServer/N00BS/Properties/launchSettings.json +++ b/HorseIsleServer/N00BS/Properties/launchSettings.json @@ -1,6 +1,6 @@ { "profiles": { - "HISP": { + "N00BS": { "commandName": "Project" } } diff --git a/HorseIsleServer/N00BS/RegisterForm.Designer.cs b/HorseIsleServer/N00BS/RegisterForm.Designer.cs new file mode 100644 index 0000000..a15d4be --- /dev/null +++ b/HorseIsleServer/N00BS/RegisterForm.Designer.cs @@ -0,0 +1,233 @@ +namespace HISP +{ + partial class RegisterForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RegisterForm)); + this.isAdmin = new System.Windows.Forms.CheckBox(); + this.isMod = new System.Windows.Forms.CheckBox(); + this.label1 = new System.Windows.Forms.Label(); + this.Username = new System.Windows.Forms.TextBox(); + this.Password = new System.Windows.Forms.TextBox(); + this.BoySelecton = new System.Windows.Forms.RadioButton(); + this.GirlSelection = new System.Windows.Forms.RadioButton(); + this.label2 = new System.Windows.Forms.Label(); + this.CreateAccount = new System.Windows.Forms.Button(); + this.label3 = new System.Windows.Forms.Label(); + this.UsernameValidationFailReason = new System.Windows.Forms.Label(); + this.PasswordValidationFailReason = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // isAdmin + // + this.isAdmin.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.isAdmin.AutoSize = true; + this.isAdmin.Checked = true; + this.isAdmin.CheckState = System.Windows.Forms.CheckState.Checked; + this.isAdmin.Location = new System.Drawing.Point(238, 169); + this.isAdmin.Name = "isAdmin"; + this.isAdmin.Size = new System.Drawing.Size(99, 19); + this.isAdmin.TabIndex = 6; + this.isAdmin.Text = "Administrator"; + this.isAdmin.UseVisualStyleBackColor = true; + this.isAdmin.CheckedChanged += new System.EventHandler(this.isAdmin_CheckedChanged); + // + // isMod + // + this.isMod.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.isMod.AutoSize = true; + this.isMod.Checked = true; + this.isMod.CheckState = System.Windows.Forms.CheckState.Checked; + this.isMod.Location = new System.Drawing.Point(238, 145); + this.isMod.Name = "isMod"; + this.isMod.Size = new System.Drawing.Size(82, 19); + this.isMod.TabIndex = 5; + this.isMod.Text = "Moderator"; + this.isMod.UseVisualStyleBackColor = true; + this.isMod.CheckedChanged += new System.EventHandler(this.isMod_CheckedChanged); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 9); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(71, 15); + this.label1.TabIndex = 3; + this.label1.Text = "User Details:"; + // + // Username + // + this.Username.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.Username.Location = new System.Drawing.Point(12, 27); + this.Username.MaxLength = 16; + this.Username.Name = "Username"; + this.Username.PlaceholderText = "Username"; + this.Username.Size = new System.Drawing.Size(325, 23); + this.Username.TabIndex = 1; + this.Username.TextChanged += new System.EventHandler(this.Username_TextChanged); + this.Username.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Username_KeyPress); + // + // Password + // + this.Password.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.Password.Location = new System.Drawing.Point(12, 56); + this.Password.MaxLength = 16; + this.Password.Name = "Password"; + this.Password.PasswordChar = '*'; + this.Password.PlaceholderText = "Password"; + this.Password.Size = new System.Drawing.Size(325, 23); + this.Password.TabIndex = 2; + this.Password.TextChanged += new System.EventHandler(this.Password_TextChanged); + this.Password.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Password_KeyPress); + // + // BoySelecton + // + this.BoySelecton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.BoySelecton.AutoSize = true; + this.BoySelecton.Location = new System.Drawing.Point(17, 168); + this.BoySelecton.Name = "BoySelecton"; + this.BoySelecton.Size = new System.Drawing.Size(45, 19); + this.BoySelecton.TabIndex = 4; + this.BoySelecton.TabStop = true; + this.BoySelecton.Text = "Boy"; + this.BoySelecton.UseVisualStyleBackColor = true; + // + // GirlSelection + // + this.GirlSelection.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.GirlSelection.AutoSize = true; + this.GirlSelection.Checked = true; + this.GirlSelection.Location = new System.Drawing.Point(17, 144); + this.GirlSelection.Name = "GirlSelection"; + this.GirlSelection.Size = new System.Drawing.Size(43, 19); + this.GirlSelection.TabIndex = 3; + this.GirlSelection.TabStop = true; + this.GirlSelection.Text = "Girl"; + this.GirlSelection.UseVisualStyleBackColor = true; + // + // label2 + // + this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(12, 121); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(48, 15); + this.label2.TabIndex = 9; + this.label2.Text = "Gender:"; + // + // CreateAccount + // + this.CreateAccount.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.CreateAccount.Enabled = false; + this.CreateAccount.Location = new System.Drawing.Point(12, 201); + this.CreateAccount.Name = "CreateAccount"; + this.CreateAccount.Size = new System.Drawing.Size(325, 29); + this.CreateAccount.TabIndex = 7; + this.CreateAccount.Text = "Create Account"; + this.CreateAccount.UseVisualStyleBackColor = true; + this.CreateAccount.Click += new System.EventHandler(this.CreateAccount_Click); + // + // label3 + // + this.label3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(238, 121); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(64, 15); + this.label3.TabIndex = 11; + this.label3.Text = "Privledges:"; + // + // UsernameValidationFailReason + // + this.UsernameValidationFailReason.AutoSize = true; + this.UsernameValidationFailReason.ForeColor = System.Drawing.Color.Red; + this.UsernameValidationFailReason.Location = new System.Drawing.Point(12, 82); + this.UsernameValidationFailReason.Name = "UsernameValidationFailReason"; + this.UsernameValidationFailReason.Size = new System.Drawing.Size(241, 15); + this.UsernameValidationFailReason.TabIndex = 12; + this.UsernameValidationFailReason.Text = "- Username must be more than 3 characters."; + // + // PasswordValidationFailReason + // + this.PasswordValidationFailReason.AutoSize = true; + this.PasswordValidationFailReason.ForeColor = System.Drawing.Color.Red; + this.PasswordValidationFailReason.Location = new System.Drawing.Point(12, 97); + this.PasswordValidationFailReason.Name = "PasswordValidationFailReason"; + this.PasswordValidationFailReason.Size = new System.Drawing.Size(238, 15); + this.PasswordValidationFailReason.TabIndex = 13; + this.PasswordValidationFailReason.Text = "- Password must be more than 6 characters."; + // + // RegisterForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(349, 241); + this.Controls.Add(this.PasswordValidationFailReason); + this.Controls.Add(this.UsernameValidationFailReason); + this.Controls.Add(this.label3); + this.Controls.Add(this.CreateAccount); + this.Controls.Add(this.label2); + this.Controls.Add(this.GirlSelection); + this.Controls.Add(this.BoySelecton); + this.Controls.Add(this.Password); + this.Controls.Add(this.Username); + this.Controls.Add(this.label1); + this.Controls.Add(this.isMod); + this.Controls.Add(this.isAdmin); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.MinimumSize = new System.Drawing.Size(365, 280); + this.Name = "RegisterForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Create Account"; + this.Load += new System.EventHandler(this.RegisterForm_Load); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.CheckBox isAdmin; + private System.Windows.Forms.CheckBox isMod; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox Username; + private System.Windows.Forms.TextBox Password; + private System.Windows.Forms.RadioButton BoySelecton; + private System.Windows.Forms.RadioButton GirlSelection; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Button CreateAccount; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label UsernameValidationFailReason; + private System.Windows.Forms.Label PasswordValidationFailReason; + } +} \ No newline at end of file diff --git a/HorseIsleServer/N00BS/RegisterForm.cs b/HorseIsleServer/N00BS/RegisterForm.cs new file mode 100644 index 0000000..1dbca61 --- /dev/null +++ b/HorseIsleServer/N00BS/RegisterForm.cs @@ -0,0 +1,169 @@ +using System; +using System.Text.RegularExpressions; +using System.Windows.Forms; +using HISP.Security; +using HISP.Server; + +namespace HISP +{ + public partial class RegisterForm : Form + { + public RegisterForm() + { + InitializeComponent(); + } + + private void RegisterForm_Load(object sender, EventArgs e) + { + ValidateInput(); + } + + private void ValidateInput() + { + if(ValidateUsername() && ValidatePassword()) + CreateAccount.Enabled = true; + else + CreateAccount.Enabled = false; + } + + private bool ValidatePassword() + { + int selStart = Password.SelectionStart; + int selLen = Password.SelectionLength; + Password.Text = Regex.Replace(Password.Text, "[^A-Za-z0-9]", ""); + Password.SelectionStart = selStart; + Password.SelectionLength = selLen; + + if (Password.Text.Length < 6) + { + PasswordValidationFailReason.Text = "- Password must be more than 6 characters."; + return false; + } + + if (Password.Text.Length >= 16) + { + PasswordValidationFailReason.Text = "- Password must be less than 16 characters."; + return false; + } + + PasswordValidationFailReason.Text = ""; + return true; + } + + private bool ValidateUsername() + { + int selStart = Username.SelectionStart; + int selLen = Username.SelectionLength; + Username.Text = Regex.Replace(Username.Text, "[^A-Za-z]", ""); + Username.SelectionStart = selStart; + Username.SelectionLength = selLen; + + if (Username.Text.Length < 3) + { + UsernameValidationFailReason.Text = "- Username must be more than 3 characters."; + return false; + } + + if (Username.Text.Length >= 16) + { + UsernameValidationFailReason.Text = "- Username must be less than 16 characters."; + return false; + } + + if (Regex.IsMatch(Username.Text, "[A-Z]{2,}")) + { + UsernameValidationFailReason.Text = "- Username have the first letter of each word capitalized."; + return false; + } + + if (Username.Text.ToUpper()[0] != Username.Text[0]) + { + UsernameValidationFailReason.Text = "- Username have the first letter of each word capitalized."; + return false; + } + + if (Database.CheckUserExist(Username.Text)) + { + UsernameValidationFailReason.Text = "- Username is already in use."; + return false; + } + + UsernameValidationFailReason.Text = ""; + return true; + } + + private void Username_TextChanged(object sender, EventArgs e) + { + ValidateInput(); + } + + private void Password_TextChanged(object sender, EventArgs e) + { + ValidateInput(); + } + + private void CreateAccount_Click(object sender, EventArgs e) + { + int newUserId = Database.GetNextFreeUserId(); + + // Generate random salt + byte[] salt = new byte[64]; + new Random(Guid.NewGuid().GetHashCode()).NextBytes(salt); + + // Hash password + string saltText = BitConverter.ToString(salt).Replace("-", ""); + string hashsalt = BitConverter.ToString(Authentication.HashAndSalt(Password.Text, salt)).Replace("-", ""); + + // Insert LGBT Patch here. + string gender = ""; + if (BoySelecton.Checked) + gender = "MALE"; + + if (GirlSelection.Checked) + gender = "FEMALE"; + + Database.CreateUser(newUserId, Username.Text, hashsalt, saltText, gender, isAdmin.Checked, isMod.Checked); + this.DialogResult = DialogResult.OK; + } + + private void isAdmin_CheckedChanged(object sender, EventArgs e) + { + if (isAdmin.Checked) + isMod.Checked = true; + } + + private void isMod_CheckedChanged(object sender, EventArgs e) + { + if (!isMod.Checked) + isAdmin.Checked = false; + } + + private void Password_KeyPress(object sender, KeyPressEventArgs e) + { + if(e.KeyChar == (char)Keys.Return) + { + if (CreateAccount.Enabled) + { + e.Handled = true; + CreateAccount_Click(null, null); + } + + } + + } + + private void Username_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar == (char)Keys.Return) + { + if (CreateAccount.Enabled) + { + e.Handled = true; + CreateAccount_Click(null, null); + } + + } + } + + } +} diff --git a/HorseIsleServer/N00BS/RegisterForm.resx b/HorseIsleServer/N00BS/RegisterForm.resx new file mode 100644 index 0000000..efd70f7 --- /dev/null +++ b/HorseIsleServer/N00BS/RegisterForm.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + + + \ No newline at end of file diff --git a/HorseIsleServer/N00BS/SystemTrayIcon.Designer.cs b/HorseIsleServer/N00BS/SystemTrayIcon.Designer.cs new file mode 100644 index 0000000..49216d1 --- /dev/null +++ b/HorseIsleServer/N00BS/SystemTrayIcon.Designer.cs @@ -0,0 +1,117 @@ +namespace HISP +{ + partial class SystemTrayIcon + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SystemTrayIcon)); + this.HispNotifyIcon = new System.Windows.Forms.NotifyIcon(this.components); + this.HispContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.usersToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.serverToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.closeServerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.createNewUserToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.HispContextMenuStrip.SuspendLayout(); + this.SuspendLayout(); + // + // HispNotifyIcon + // + this.HispNotifyIcon.ContextMenuStrip = this.HispContextMenuStrip; + this.HispNotifyIcon.Icon = ((System.Drawing.Icon)(resources.GetObject("HispNotifyIcon.Icon"))); + this.HispNotifyIcon.Text = "Horse Isle"; + this.HispNotifyIcon.Visible = true; + // + // HispContextMenuStrip + // + this.HispContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.usersToolStripMenuItem, + this.serverToolStripMenuItem}); + this.HispContextMenuStrip.Name = "HispContextMenuStrip"; + this.HispContextMenuStrip.Size = new System.Drawing.Size(107, 48); + // + // usersToolStripMenuItem + // + this.usersToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.createNewUserToolStripMenuItem}); + this.usersToolStripMenuItem.Name = "usersToolStripMenuItem"; + this.usersToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.usersToolStripMenuItem.Text = "Users"; + // + // serverToolStripMenuItem + // + this.serverToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.closeServerToolStripMenuItem}); + this.serverToolStripMenuItem.Name = "serverToolStripMenuItem"; + this.serverToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.serverToolStripMenuItem.Text = "Server"; + // + // closeServerToolStripMenuItem + // + this.closeServerToolStripMenuItem.Name = "closeServerToolStripMenuItem"; + this.closeServerToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.closeServerToolStripMenuItem.Text = "Close Server"; + this.closeServerToolStripMenuItem.Click += new System.EventHandler(this.closeServerToolStripMenuItem_Click); + // + // createNewUserToolStripMenuItem + // + this.createNewUserToolStripMenuItem.Name = "createNewUserToolStripMenuItem"; + this.createNewUserToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.createNewUserToolStripMenuItem.Text = "Create New User"; + this.createNewUserToolStripMenuItem.Click += new System.EventHandler(this.createNewUserToolStripMenuItem_Click); + // + // SystemTrayIcon + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(90, 92); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "SystemTrayIcon"; + this.Opacity = 0D; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.Text = "SystemTrayIcon"; + this.WindowState = System.Windows.Forms.FormWindowState.Minimized; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.SystemTrayIcon_FormClosing); + this.Load += new System.EventHandler(this.SystemTrayIcon_Load); + this.HispContextMenuStrip.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.NotifyIcon HispNotifyIcon; + private System.Windows.Forms.ContextMenuStrip HispContextMenuStrip; + private System.Windows.Forms.ToolStripMenuItem usersToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem createNewUserToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem serverToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem closeServerToolStripMenuItem; + } +} \ No newline at end of file diff --git a/HorseIsleServer/N00BS/SystemTrayIcon.cs b/HorseIsleServer/N00BS/SystemTrayIcon.cs new file mode 100644 index 0000000..1025206 --- /dev/null +++ b/HorseIsleServer/N00BS/SystemTrayIcon.cs @@ -0,0 +1,65 @@ +using HISP.Server; +using System; +using System.Diagnostics; +using System.Windows.Forms; + +namespace HISP +{ + public partial class SystemTrayIcon : Form + { + Process clientProcess = new Process(); + + public SystemTrayIcon() + { + InitializeComponent(); + } + + private void createNewUserToolStripMenuItem_Click(object sender, EventArgs e) + { + RegisterForm frm = new RegisterForm(); + frm.ShowDialog(); + } + + private void closeServerToolStripMenuItem_Click(object sender, EventArgs e) + { + this.Close(); + } + + private void SystemTrayIcon_Load(object sender, EventArgs e) + { + clientProcess.StartInfo.FileName = "flash.dll"; + clientProcess.StartInfo.Arguments = "http://127.0.0.1/horseisle.swf?SERVER=127.0.0.1&PORT=12321"; + + clientProcess.StartInfo.RedirectStandardOutput = true; + clientProcess.StartInfo.RedirectStandardError = true; + + clientProcess.EnableRaisingEvents = true; + clientProcess.Exited += clientExited; + clientProcess.Start(); + + } + + private void clientExited(object sender, EventArgs e) + { + if (this.InvokeRequired) + { + this.Invoke(() => + { + this.Close(); + }); + } + else + { + this.Close(); + } + + + } + + private void SystemTrayIcon_FormClosing(object sender, FormClosingEventArgs e) + { + HispNotifyIcon.Visible = false; + clientProcess.Kill(); + } + } +} diff --git a/HorseIsleServer/N00BS/SystemTrayIcon.resx b/HorseIsleServer/N00BS/SystemTrayIcon.resx new file mode 100644 index 0000000..0a09329 --- /dev/null +++ b/HorseIsleServer/N00BS/SystemTrayIcon.resx @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 150, 17 + + + + + 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 + + + + 79 + + \ No newline at end of file diff --git a/HorseIsleServer/N00BS/flash.dll b/HorseIsleServer/N00BS/flash.dll new file mode 100644 index 0000000..ecbeaef Binary files /dev/null and b/HorseIsleServer/N00BS/flash.dll differ