diff --git a/Projects/Server/Configuration/ServerConfiguration.cs b/Projects/Server/Configuration/ServerConfiguration.cs index 98cdbc51c..fa7a237bb 100644 --- a/Projects/Server/Configuration/ServerConfiguration.cs +++ b/Projects/Server/Configuration/ServerConfiguration.cs @@ -147,9 +147,9 @@ namespace Server if (m_Settings == null) { - Console.ForegroundColor = ConsoleColor.Red; + Utility.PushColor(ConsoleColor.Red); Console.WriteLine("failed"); - Console.ResetColor(); + Utility.PopColor(); throw new Exception("Core: Server configuration failed to deserialize."); } @@ -174,9 +174,9 @@ namespace Server if (updated) { Save(); - Console.ForegroundColor = ConsoleColor.Green; + Utility.PushColor(ConsoleColor.Green); Console.WriteLine($"Core: Configuration saved to {m_RelPath}."); - Console.ResetColor(); + Utility.PopColor(); } } diff --git a/Projects/Server/Main.cs b/Projects/Server/Main.cs index 3ec6eae73..c7cf6ef90 100644 --- a/Projects/Server/Main.cs +++ b/Projects/Server/Main.cs @@ -178,7 +178,7 @@ namespace Server public static int ScriptItems => m_ItemCount; public static int ScriptMobiles => m_MobileCount; - public static string FindDataFile(string path) + public static string FindDataFile(string path, bool throwNotFound = true, bool warnNotFound = false) { string fullPath = null; @@ -192,11 +192,19 @@ namespace Server fullPath = null; } + if (fullPath == null && (throwNotFound || warnNotFound)) + { + Utility.PushColor(ConsoleColor.Red); + Console.WriteLine($"Data: {path} was not found"); + Console.WriteLine("Make sure modernuo.json is properly configured"); + Utility.PopColor(); + if (throwNotFound) + throw new FileNotFoundException($"Data: {path} was not found"); + } + return fullPath; } - public static string FindDataFile(string format, params object[] args) => FindDataFile(string.Format(format, args)); - private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { Console.WriteLine(e.IsTerminating ? "Error:" : "Warning:"); @@ -317,14 +325,13 @@ namespace Server var ver = Assembly.GetName().Version ?? new Version(); - Console.ForegroundColor = ConsoleColor.Green; + Utility.PushColor(ConsoleColor.Green); // Added to help future code support on forums, as a 'check' people can ask for to it see if they recompiled core or not - Console.WriteLine("ModernUO - [https://github.com/kamronbatman/ModernUO] Version {0}.{1}.{2}.{3}", ver.Major, + Console.WriteLine("ModernUO - [https://github.com/modernuo/modernuo] Version {0}.{1}.{2}.{3}", ver.Major, ver.Minor, ver.Build, ver.Revision); - Console.WriteLine("Core: Running on {0}", RuntimeInformation.FrameworkDescription); - Console.ResetColor(); - Console.WriteLine(); + Console.WriteLine("Core: Running on {0}\n", RuntimeInformation.FrameworkDescription); + Utility.PopColor(); var ttObj = new Timer.TimerThread(); timerThread = new Thread(ttObj.TimerMain) diff --git a/Projects/Server/MultiData.cs b/Projects/Server/MultiData.cs index e2c3b7186..c8f46ba9b 100644 --- a/Projects/Server/MultiData.cs +++ b/Projects/Server/MultiData.cs @@ -37,7 +37,7 @@ namespace Server static MultiData() { - var multiUOPPath = Core.FindDataFile("MultiCollection.uop"); + var multiUOPPath = Core.FindDataFile("MultiCollection.uop", false); if (File.Exists(multiUOPPath)) { @@ -49,47 +49,40 @@ namespace Server var idxPath = Core.FindDataFile("multi.idx"); var mulPath = Core.FindDataFile("multi.mul"); - if (File.Exists(idxPath) && File.Exists(mulPath)) + var idx = new FileStream(idxPath, FileMode.Open, FileAccess.Read, FileShare.Read); + m_IndexReader = new BinaryReader(idx); + + var stream = new FileStream(mulPath, FileMode.Open, FileAccess.Read, FileShare.Read); + m_StreamReader = new BinaryReader(stream); + + var vdPath = Core.FindDataFile("verdata.mul", false); + + if (!File.Exists(vdPath)) return; + + using var fs = new FileStream(vdPath, FileMode.Open, FileAccess.Read, FileShare.Read); + var bin = new BinaryReader(fs); + + var count = bin.ReadInt32(); + + for (var i = 0; i < count; ++i) { - var idx = new FileStream(idxPath, FileMode.Open, FileAccess.Read, FileShare.Read); - m_IndexReader = new BinaryReader(idx); + var file = bin.ReadInt32(); + var index = bin.ReadInt32(); + var lookup = bin.ReadInt32(); + var length = bin.ReadInt32(); + bin.ReadInt32(); // extra - var stream = new FileStream(mulPath, FileMode.Open, FileAccess.Read, FileShare.Read); - m_StreamReader = new BinaryReader(stream); - - var vdPath = Core.FindDataFile("verdata.mul"); - - if (!File.Exists(vdPath)) return; - - using var fs = new FileStream(vdPath, FileMode.Open, FileAccess.Read, FileShare.Read); - var bin = new BinaryReader(fs); - - var count = bin.ReadInt32(); - - for (var i = 0; i < count; ++i) + if (file == 14 && index >= 0 && lookup >= 0 && length > 0) { - var file = bin.ReadInt32(); - var index = bin.ReadInt32(); - var lookup = bin.ReadInt32(); - var length = bin.ReadInt32(); - bin.ReadInt32(); // extra + bin.BaseStream.Seek(lookup, SeekOrigin.Begin); - if (file == 14 && index >= 0 && lookup >= 0 && length > 0) - { - bin.BaseStream.Seek(lookup, SeekOrigin.Begin); + Components[index] = new MultiComponentList(bin, length / 12); - Components[index] = new MultiComponentList(bin, length / 12); - - bin.BaseStream.Seek(24 + i * 20, SeekOrigin.Begin); - } + bin.BaseStream.Seek(24 + i * 20, SeekOrigin.Begin); } + } - bin.Close(); - } - else - { - Console.WriteLine("Warning: Multi data files not found"); - } + bin.Close(); } public static MultiComponentList GetComponents(int multiID) diff --git a/Projects/Server/Network/Packets.cs b/Projects/Server/Network/Packets.cs index 7730d22f4..10b518207 100644 --- a/Projects/Server/Network/Packets.cs +++ b/Projects/Server/Network/Packets.cs @@ -27,13 +27,8 @@ using System.Text; using System.Threading; using Server.Accounting; using Server.Compression; -using Server.ContextMenus; using Server.Gumps; using Server.Items; -using Server.Menus; -using Server.Menus.ItemLists; -using Server.Menus.Questions; -using Server.Prompts; using Server.Targeting; namespace Server.Network diff --git a/Projects/Server/TileData.cs b/Projects/Server/TileData.cs index f09b47d88..75a8dcb3a 100644 --- a/Projects/Server/TileData.cs +++ b/Projects/Server/TileData.cs @@ -184,20 +184,6 @@ namespace Server { var filePath = Core.FindDataFile("tiledata.mul"); - if (!File.Exists(filePath)) - { - Console.ForegroundColor = ConsoleColor.Red; - Console.WriteLine("tiledata.mul was not found"); - Console.WriteLine("Make sure your modernuo.json is properly configured"); - Console.WriteLine("After pressing return an exception will be thrown and the server will terminate"); - Console.ResetColor(); - - Utility.PushColor(ConsoleColor.Red); - Console.WriteLine($"TileData: {filePath} not found"); - Utility.PopColor(); - return; - } - using var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read); var bin = new BinaryReader(fs); diff --git a/Projects/Server/TileMatrix.cs b/Projects/Server/TileMatrix.cs index 853d5ea14..82480939e 100644 --- a/Projects/Server/TileMatrix.cs +++ b/Projects/Server/TileMatrix.cs @@ -92,32 +92,32 @@ namespace Server if (fileIndex != 0x7F) { - var mapPath = Core.FindDataFile("map{0}LegacyMUL.uop", fileIndex); + var mapPath = Core.FindDataFile($"map{fileIndex}LegacyMUL.uop", false, true); - if (File.Exists(mapPath)) + if (mapPath != null) { m_MapStream = new FileStream(mapPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); m_MapIndex = new UOPIndex(m_MapStream); } else { - mapPath = Core.FindDataFile("map{0}.mul", fileIndex); + mapPath = Core.FindDataFile($"map{fileIndex}.mul", false, true); - if (File.Exists(mapPath)) + if (mapPath != null) m_MapStream = new FileStream(mapPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); } - var indexPath = Core.FindDataFile("staidx{0}.mul", fileIndex); + var indexPath = Core.FindDataFile($"staidx{fileIndex}.mul", false, true); - if (File.Exists(indexPath)) + if (indexPath != null) { IndexStream = new FileStream(indexPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); m_IndexReader = new BinaryReader(IndexStream); } - var staticsPath = Core.FindDataFile("statics{0}.mul", fileIndex); + var staticsPath = Core.FindDataFile($"statics{fileIndex}.mul", false, true); - if (File.Exists(staticsPath)) + if (staticsPath != null) DataStream = new FileStream(staticsPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); } @@ -183,7 +183,7 @@ namespace Server lock (shared) { - if (x >= 0 && x < shared.BlockWidth && y >= 0 && y < shared.BlockHeight) + if (x < shared.BlockWidth && y < shared.BlockHeight) { var theirTiles = shared.m_StaticTiles[x]; @@ -205,12 +205,7 @@ namespace Server return m_StaticTiles[x][y] = tiles ?? ReadStaticBlock(x, y); } - public StaticTile[] GetStaticTiles(int x, int y) - { - var tiles = GetStaticBlock(x >> 3, y >> 3); - - return tiles[x & 0x7][y & 0x7]; - } + public StaticTile[] GetStaticTiles(int x, int y) => GetStaticBlock(x >> 3, y >> 3)[x & 0x7][y & 0x7]; [MethodImpl(MethodImplOptions.Synchronized)] public StaticTile[] GetStaticTiles(int x, int y, bool multis) @@ -277,7 +272,7 @@ namespace Server lock (shared) { - if (x >= 0 && x < shared.BlockWidth && y >= 0 && y < shared.BlockHeight) + if (x < shared.BlockWidth && y < shared.BlockHeight) { var theirTiles = shared.m_LandTiles[x]; @@ -346,7 +341,7 @@ namespace Server while (pCur < pEnd) { lists[pCur->m_X & 0x7][pCur->m_Y & 0x7].Add(pCur->m_ID, pCur->m_Z); - pCur = pCur + 1; + pCur += 1; } var tiles = new StaticTile[8][][]; diff --git a/Projects/Server/TileMatrixPatch.cs b/Projects/Server/TileMatrixPatch.cs index 66ce371f7..386a1b1b7 100644 --- a/Projects/Server/TileMatrixPatch.cs +++ b/Projects/Server/TileMatrixPatch.cs @@ -35,15 +35,15 @@ namespace Server if (!Enabled) return; - var mapDataPath = Core.FindDataFile("mapdif{0}.mul", index); - var mapIndexPath = Core.FindDataFile("mapdifl{0}.mul", index); + var mapDataPath = Core.FindDataFile($"mapdif{index}.mul", false); + var mapIndexPath = Core.FindDataFile($"mapdifl{index}.mul", false); if (File.Exists(mapDataPath) && File.Exists(mapIndexPath)) m_LandBlocks = PatchLand(matrix, mapDataPath, mapIndexPath); - var staDataPath = Core.FindDataFile("stadif{0}.mul", index); - var staIndexPath = Core.FindDataFile("stadifl{0}.mul", index); - var staLookupPath = Core.FindDataFile("stadifi{0}.mul", index); + var staDataPath = Core.FindDataFile($"stadif{index}.mul", false); + var staIndexPath = Core.FindDataFile($"stadifl{index}.mul", false); + var staLookupPath = Core.FindDataFile($"stadifi{index}.mul", false); if (File.Exists(staDataPath) && File.Exists(staIndexPath) && File.Exists(staLookupPath)) m_StaticBlocks = PatchStatics(matrix, staDataPath, staIndexPath, staLookupPath); diff --git a/Projects/UOContent/Commands/Docs.cs b/Projects/UOContent/Commands/Docs.cs index 77767ad1e..be373014b 100644 --- a/Projects/UOContent/Commands/Docs.cs +++ b/Projects/UOContent/Commands/Docs.cs @@ -1548,7 +1548,7 @@ namespace Server.Commands { List list = new List(); - string path = Core.FindDataFile("models/models.txt"); + string path = Path.Combine(Core.BaseDirectory, "Data/models.txt"); if (File.Exists(path)) { @@ -1681,9 +1681,6 @@ namespace Server.Commands { Dictionary table = tables[p]; - if (p > 0) - html.WriteLine("
"); - html.WriteLine(" "); html.WriteLine("
"); html.WriteLine(" "); @@ -1767,7 +1764,7 @@ namespace Server.Commands Dictionary table = null; - string path = Core.FindDataFile("speech.mul"); + string path = Core.FindDataFile("speech.mul", false); if (File.Exists(path)) { diff --git a/Projects/UOContent/Engines/MLQuests/Objectives/CollectObjective.cs b/Projects/UOContent/Engines/MLQuests/Objectives/CollectObjective.cs index 1224fe093..9e9d56162 100644 --- a/Projects/UOContent/Engines/MLQuests/Objectives/CollectObjective.cs +++ b/Projects/UOContent/Engines/MLQuests/Objectives/CollectObjective.cs @@ -14,7 +14,7 @@ namespace Server.Engines.MLQuests.Objectives AcceptedType = type; Name = name; - if (MLQuestSystem.Debug && ShowDetailed && name.Number > 0) + if (MLQuestSystem.Debug && ShowDetailed && name?.Number > 0) { int itemid = LabelToItemID(name.Number); diff --git a/Projects/UOContent/Misc/ClientVerification.cs b/Projects/UOContent/Misc/ClientVerification.cs index 62afe1e74..5b851f22d 100644 --- a/Projects/UOContent/Misc/ClientVerification.cs +++ b/Projects/UOContent/Misc/ClientVerification.cs @@ -36,12 +36,9 @@ namespace Server.Misc EventSink.ClientVersionReceived += EventSink_ClientVersionReceived; - // ClientVersion.Required = null; - // Required = new ClientVersion( "6.0.0.0" ); - if (m_DetectClientRequirement) { - string path = Core.FindDataFile("client.exe"); + string path = Core.FindDataFile("client.exe", false); if (File.Exists(path)) { @@ -71,10 +68,10 @@ namespace Server.Misc return; if (Required != null && version < Required && (m_OldClientResponse == OldClientResponse.Kick || - (m_OldClientResponse == OldClientResponse.LenientKick && + m_OldClientResponse == OldClientResponse.LenientKick && DateTime.UtcNow - state.Mobile.CreationTime > m_AgeLeniency && state.Mobile is PlayerMobile mobile && - mobile.GameTime > m_GameTimeLeniency))) + mobile.GameTime > m_GameTimeLeniency)) { kickMessage = $"This server requires your client version be at least {Required}."; }