From b7395bedeafe5f17352d9a904b731573dc7d0704 Mon Sep 17 00:00:00 2001 From: Evil Factory <36804725+evilfactory@users.noreply.github.com> Date: Fri, 15 Apr 2022 19:05:24 -0300 Subject: [PATCH] Refactor and fix #56 --- .../{Lua => LuaCs}/LuaCsUpdateChecker.cs | 12 ++- .../ClientSource/Networking/GameClient.cs | 2 +- .../ClientSource/Screens/MainMenuScreen.cs | 22 +++-- .../BarotraumaClient/LinuxClient.csproj | 3 +- Barotrauma/BarotraumaClient/MacClient.csproj | 2 + .../BarotraumaClient/WindowsClient.csproj | 3 +- .../BarotraumaServer/LinuxServer.csproj | 12 ++- Barotrauma/BarotraumaServer/MacServer.csproj | 10 +++ .../ServerSource/Characters/Character.cs | 2 +- .../Characters/CharacterNetworking.cs | 2 +- .../ServerSource/DebugConsole.cs | 10 +++ .../{ => LuaCs}/Lua/LuaBarotraumaAdditions.cs | 0 .../ServerSource/Networking/ChatMessage.cs | 4 +- .../ServerSource/Networking/GameServer.cs | 8 +- .../ServerSource/Networking/RespawnManager.cs | 10 +-- .../BarotraumaServer/WindowsServer.csproj | 4 +- .../SharedSource/Characters/Character.cs | 4 +- .../Health/Afflictions/AfflictionHusk.cs | 2 +- .../Items/Components/Signal/WifiComponent.cs | 2 +- .../SharedSource/{ => LuaCs}/Cs/ACsMod.cs | 0 .../{ => LuaCs}/Cs/CsScriptFilter.cs | 0 .../{ => LuaCs}/Cs/CsScriptLoader.cs | 0 .../{ => LuaCs}/Lua/LuaBarotraumaAdditions.cs | 0 .../{ => LuaCs}/Lua/LuaClasses/LuaGame.cs | 0 .../{ => LuaCs}/Lua/LuaClasses/LuaResult.cs | 0 .../{ => LuaCs}/Lua/LuaClasses/LuaTypes.cs | 0 .../{ => LuaCs}/Lua/LuaClasses/LuaUserData.cs | 0 .../{ => LuaCs}/Lua/LuaCustomConverters.cs | 0 .../SharedSource/{ => LuaCs}/Lua/LuaDocs.cs | 0 .../SharedSource/{ => LuaCs}/Lua/LuaProxy.cs | 0 .../{ => LuaCs}/Lua/LuaScriptLoader.cs | 0 .../SharedSource/LuaCs/LuaCsHook.cs | 32 ++++--- .../SharedSource/LuaCs/LuaCsSetup.cs | 87 +++++++++---------- .../SharedSource/Map/MapEntity.cs | 4 +- .../SharedSource/Networking/RespawnManager.cs | 4 +- 35 files changed, 144 insertions(+), 97 deletions(-) rename Barotrauma/BarotraumaClient/ClientSource/{Lua => LuaCs}/LuaCsUpdateChecker.cs (77%) rename Barotrauma/BarotraumaServer/ServerSource/{ => LuaCs}/Lua/LuaBarotraumaAdditions.cs (100%) rename Barotrauma/BarotraumaShared/SharedSource/{ => LuaCs}/Cs/ACsMod.cs (100%) rename Barotrauma/BarotraumaShared/SharedSource/{ => LuaCs}/Cs/CsScriptFilter.cs (100%) rename Barotrauma/BarotraumaShared/SharedSource/{ => LuaCs}/Cs/CsScriptLoader.cs (100%) rename Barotrauma/BarotraumaShared/SharedSource/{ => LuaCs}/Lua/LuaBarotraumaAdditions.cs (100%) rename Barotrauma/BarotraumaShared/SharedSource/{ => LuaCs}/Lua/LuaClasses/LuaGame.cs (100%) rename Barotrauma/BarotraumaShared/SharedSource/{ => LuaCs}/Lua/LuaClasses/LuaResult.cs (100%) rename Barotrauma/BarotraumaShared/SharedSource/{ => LuaCs}/Lua/LuaClasses/LuaTypes.cs (100%) rename Barotrauma/BarotraumaShared/SharedSource/{ => LuaCs}/Lua/LuaClasses/LuaUserData.cs (100%) rename Barotrauma/BarotraumaShared/SharedSource/{ => LuaCs}/Lua/LuaCustomConverters.cs (100%) rename Barotrauma/BarotraumaShared/SharedSource/{ => LuaCs}/Lua/LuaDocs.cs (100%) rename Barotrauma/BarotraumaShared/SharedSource/{ => LuaCs}/Lua/LuaProxy.cs (100%) rename Barotrauma/BarotraumaShared/SharedSource/{ => LuaCs}/Lua/LuaScriptLoader.cs (100%) diff --git a/Barotrauma/BarotraumaClient/ClientSource/Lua/LuaCsUpdateChecker.cs b/Barotrauma/BarotraumaClient/ClientSource/LuaCs/LuaCsUpdateChecker.cs similarity index 77% rename from Barotrauma/BarotraumaClient/ClientSource/Lua/LuaCsUpdateChecker.cs rename to Barotrauma/BarotraumaClient/ClientSource/LuaCs/LuaCsUpdateChecker.cs index ba445d13f..6cffc4c8a 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Lua/LuaCsUpdateChecker.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/LuaCs/LuaCsUpdateChecker.cs @@ -27,7 +27,17 @@ namespace Barotrauma string[] filesToUpdate = new string[] { "Barotrauma.dll", "Barotrauma.deps.json", - "0harmony.dll", "MoonSharp.Interpreter.dll", + "0harmony.dll", "Mono.Cecil.dll", + "Mono.Cecil.Mdb.dll", "Mono.Cecil.Pdb.dll", + "Mono.Cecil.Rocks.dll", "MonoMod.Common.dll", + "MoonSharp.Interpreter.dll", + "mscordaccore_amd64_amd64_4.700.22.11601.dll", + + "Microsoft.CodeAnalysis.dll", "Microsoft.CodeAnalysis.CSharp.dll", + "Microsoft.CodeAnalysis.CSharp.Scripting.dll", "Microsoft.CodeAnalysis.Scripting.dll", + + "System.Reflection.Metadata.dll", "System.Collections.Immutable.dll", + "System.Runtime.CompilerServices.Unsafe.dll" }; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Networking/GameClient.cs b/Barotrauma/BarotraumaClient/ClientSource/Networking/GameClient.cs index 3c1128032..4bce2dec7 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Networking/GameClient.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Networking/GameClient.cs @@ -690,7 +690,7 @@ namespace Barotrauma.Networking { ServerPacketHeader header = (ServerPacketHeader)inc.ReadByte(); - GameMain.LuaCs.networking.NetMessageReceived(inc, header); + GameMain.LuaCs.Networking.NetMessageReceived(inc, header); if (roundInitStatus != RoundInitStatus.Started && roundInitStatus != RoundInitStatus.NotStarted && diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/MainMenuScreen.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/MainMenuScreen.cs index 9075ad8a4..4c21fa1c1 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/MainMenuScreen.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/MainMenuScreen.cs @@ -413,17 +413,23 @@ namespace Barotrauma { msg.Close(); + string[] filesToRemove = new string[] + { + "Barotrauma.dll", "Barotrauma.deps.json", + "System.Reflection.Metadata.dll", "System.Collections.Immutable.dll", + "System.Runtime.CompilerServices.Unsafe.dll" + }; try { - System.IO.File.Move("Barotrauma.dll", "Barotrauma.dll.todelete", true); - System.IO.File.Move("Barotrauma.deps.json", "Barotrauma.deps.json.todelete", true); - - System.IO.File.Move("Barotrauma.dll.old", "Barotrauma.dll", true); - System.IO.File.Move("Barotrauma.deps.json.old", "Barotrauma.deps.json", true); - - }catch(Exception e) + foreach (string file in filesToRemove) + { + System.IO.File.Move(file, file + ".todelete", true); + System.IO.File.Move(file + ".old", file, true); + } + } + catch(Exception e) { - new GUIMessageBox("Error", "Error: " + e.ToString()); + new GUIMessageBox("Error", $"{e} {e.InnerException}"); return false; } diff --git a/Barotrauma/BarotraumaClient/LinuxClient.csproj b/Barotrauma/BarotraumaClient/LinuxClient.csproj index 017c19e8b..c16a0f7df 100644 --- a/Barotrauma/BarotraumaClient/LinuxClient.csproj +++ b/Barotrauma/BarotraumaClient/LinuxClient.csproj @@ -13,6 +13,7 @@ ..\BarotraumaShared\Icon.ico Debug;Release;Unstable ;NU1605;CS0114;CS0108CS8597;CS8600;CS8601;CS8602;CS8603;CS8604;CS8605;CS8606;CS8607;CS8608;CS8609;CS8610;CS8611;CS8612;CS8613;CS8614;CS8615;CS8616;CS8617;CS8618;CS8619;CS8620;CS8621;CS8622;CS8624;CS8625;CS8626;CS8629;CS8631;CS8632;CS8633;CS8634;CS8638;CS8643;CS8644;CS8645;CS8653;CS8654;CS8655;CS8667;CS8669;CS8670;CS8714;CS8717;CS8765 + en diff --git a/Barotrauma/BarotraumaServer/MacServer.csproj b/Barotrauma/BarotraumaServer/MacServer.csproj index bb224a0f0..dadf01b82 100644 --- a/Barotrauma/BarotraumaServer/MacServer.csproj +++ b/Barotrauma/BarotraumaServer/MacServer.csproj @@ -13,6 +13,7 @@ ..\BarotraumaShared\Icon.ico Debug;Release;Unstable ;NU1605;CS0114;CS0108CS8597;CS8600;CS8601;CS8602;CS8603;CS8604;CS8605;CS8606;CS8607;CS8608;CS8609;CS8610;CS8611;CS8612;CS8613;CS8614;CS8615;CS8616;CS8617;CS8618;CS8619;CS8620;CS8621;CS8622;CS8624;CS8625;CS8626;CS8629;CS8631;CS8632;CS8633;CS8634;CS8638;CS8643;CS8644;CS8645;CS8653;CS8654;CS8655;CS8667;CS8669;CS8670;CS8714;CS8717;CS8765 + en @@ -81,6 +82,7 @@ + @@ -91,6 +93,14 @@ PreserveNewest + + + ..\..\Libraries\0Harmony.dll + + + ..\..\Libraries\MoonSharp.Interpreter.dll + + diff --git a/Barotrauma/BarotraumaServer/ServerSource/Characters/Character.cs b/Barotrauma/BarotraumaServer/ServerSource/Characters/Character.cs index 204c853ee..84c50b8c6 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Characters/Character.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Characters/Character.cs @@ -43,7 +43,7 @@ namespace Barotrauma var owner = GameMain.Server.ConnectedClients.Find(c => c.Character == this); if (owner != null) { - if (!GameMain.LuaCs.game.overrideTraitors) + if (!GameMain.LuaCs.Game.overrideTraitors) { GameMain.Server.SendDirectChatMessage(TextManager.FormatServerMessage("KilledByTraitorNotification"), owner, ChatMessageType.ServerMessageBoxInGame); } diff --git a/Barotrauma/BarotraumaServer/ServerSource/Characters/CharacterNetworking.cs b/Barotrauma/BarotraumaServer/ServerSource/Characters/CharacterNetworking.cs index b9f3e2c33..16a2100d7 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Characters/CharacterNetworking.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Characters/CharacterNetworking.cs @@ -700,7 +700,7 @@ namespace Barotrauma var tempBuffer = new ReadWriteMessage(); WriteStatus(tempBuffer); - if (msgLengthBeforeStatus + tempBuffer.LengthBytes >= 255 && restrictMessageSize && GameMain.LuaCs.networking.restrictMessageSize) + if (msgLengthBeforeStatus + tempBuffer.LengthBytes >= 255 && restrictMessageSize && GameMain.LuaCs.Networking.restrictMessageSize) { msg.Write(false); if (msgLengthBeforeStatus < 255) diff --git a/Barotrauma/BarotraumaServer/ServerSource/DebugConsole.cs b/Barotrauma/BarotraumaServer/ServerSource/DebugConsole.cs index b5b48d99c..86be7a28f 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/DebugConsole.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/DebugConsole.cs @@ -1273,11 +1273,21 @@ namespace Barotrauma "Mono.Cecil.Rocks.dll", "MonoMod.Common.dll", "MoonSharp.Interpreter.dll", "mscordaccore_amd64_amd64_4.700.22.11601.dll", + + "Microsoft.CodeAnalysis.dll", "Microsoft.CodeAnalysis.CSharp.dll", + "Microsoft.CodeAnalysis.CSharp.Scripting.dll", "Microsoft.CodeAnalysis.Scripting.dll", + + "System.Reflection.Metadata.dll", "System.Collections.Immutable.dll", + "System.Runtime.CompilerServices.Unsafe.dll" }; File.Move("Barotrauma.dll", "Barotrauma.dll.old", true); File.Move("Barotrauma.deps.json", "Barotrauma.deps.json.old", true); + File.Move("System.Reflection.Metadata.dll", "System.Reflection.Metadata.dll.old", true); + File.Move("System.Collections.Immutable.dll", "System.Collections.Immutable.dll.old", true); + File.Move("System.Runtime.CompilerServices.Unsafe.dll", "System.Runtime.CompilerServices.Unsafe.dll.old", true); + foreach (string file in filesToCopy) { File.Copy(Path.Combine(path, "Binary", file), file, true); diff --git a/Barotrauma/BarotraumaServer/ServerSource/Lua/LuaBarotraumaAdditions.cs b/Barotrauma/BarotraumaServer/ServerSource/LuaCs/Lua/LuaBarotraumaAdditions.cs similarity index 100% rename from Barotrauma/BarotraumaServer/ServerSource/Lua/LuaBarotraumaAdditions.cs rename to Barotrauma/BarotraumaServer/ServerSource/LuaCs/Lua/LuaBarotraumaAdditions.cs diff --git a/Barotrauma/BarotraumaServer/ServerSource/Networking/ChatMessage.cs b/Barotrauma/BarotraumaServer/ServerSource/Networking/ChatMessage.cs index e580bb693..78da74f47 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Networking/ChatMessage.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Networking/ChatMessage.cs @@ -104,7 +104,7 @@ namespace Barotrauma.Networking bool isOwner = GameMain.Server.OwnerConnection != null && c.Connection == GameMain.Server.OwnerConnection; - if (similarity + c.ChatSpamSpeed > 5.0f && !isOwner && !GameMain.LuaCs.game.disableSpamFilter) + if (similarity + c.ChatSpamSpeed > 5.0f && !isOwner && !GameMain.LuaCs.Game.disableSpamFilter) { GameMain.Server.KarmaManager.OnSpamFilterTriggered(c); @@ -125,7 +125,7 @@ namespace Barotrauma.Networking c.ChatSpamSpeed += similarity + 0.5f; - if (c.ChatSpamTimer > 0.0f && !isOwner && !GameMain.LuaCs.game.disableSpamFilter) + if (c.ChatSpamTimer > 0.0f && !isOwner && !GameMain.LuaCs.Game.disableSpamFilter) { ChatMessage denyMsg = Create("", TextManager.Get("SpamFilterBlocked").Value, ChatMessageType.Server, null); c.ChatSpamTimer = 10.0f; diff --git a/Barotrauma/BarotraumaServer/ServerSource/Networking/GameServer.cs b/Barotrauma/BarotraumaServer/ServerSource/Networking/GameServer.cs index b19f0c6fc..e40c6de39 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Networking/GameServer.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Networking/GameServer.cs @@ -378,7 +378,7 @@ namespace Barotrauma.Networking Character character = Character.CharacterList[i]; if (character.IsDead || !character.ClientDisconnected) { continue; } - if (!GameMain.LuaCs.game.disableDisconnectCharacter) + if (!GameMain.LuaCs.Game.disableDisconnectCharacter) { character.KillDisconnectedTimer += deltaTime; character.SetStun(1.0f); @@ -700,7 +700,7 @@ namespace Barotrauma.Networking ClientPacketHeader header = (ClientPacketHeader)inc.ReadByte(); - GameMain.LuaCs.networking.NetMessageReceived(inc, header, connectedClient); + GameMain.LuaCs.Networking.NetMessageReceived(inc, header, connectedClient); switch (header) { @@ -2429,7 +2429,7 @@ namespace Barotrauma.Networking { if (!(GameMain.GameSession?.GameMode is CampaignMode)) { - if (!GameMain.LuaCs.game.overrideTraitors) + if (!GameMain.LuaCs.Game.overrideTraitors) { TraitorManager = new TraitorManager(); TraitorManager.Start(this); @@ -3133,7 +3133,7 @@ namespace Barotrauma.Networking senderName = null; senderCharacter = null; } - else if (type == ChatMessageType.Radio && !GameMain.LuaCs.game.overrideSignalRadio) + else if (type == ChatMessageType.Radio && !GameMain.LuaCs.Game.overrideSignalRadio) { //send to chat-linked wifi components Signal s = new Signal(message, sender: senderCharacter, source: senderRadio.Item); diff --git a/Barotrauma/BarotraumaServer/ServerSource/Networking/RespawnManager.cs b/Barotrauma/BarotraumaServer/ServerSource/Networking/RespawnManager.cs index 7e607d936..0bca511b4 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Networking/RespawnManager.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Networking/RespawnManager.cs @@ -25,7 +25,7 @@ namespace Barotrauma.Networking MultiPlayerCampaign campaign = GameMain.GameSession.GameMode as MultiPlayerCampaign; foreach (Client c in networkMember.ConnectedClients) { - if (GameMain.LuaCs.game.overrideRespawnSub) + if (GameMain.LuaCs.Game.overrideRespawnSub) continue; if (!c.InGame) { continue; } @@ -125,7 +125,7 @@ namespace Barotrauma.Networking private bool ShouldStartRespawnCountdown(int characterToRespawnCount) { - if (GameMain.LuaCs.game.overrideRespawnSub) + if (GameMain.LuaCs.Game.overrideRespawnSub) { characterToRespawnCount = 0; } @@ -136,7 +136,7 @@ namespace Barotrauma.Networking { if (RespawnShuttle != null) { - if (!GameMain.LuaCs.game.overrideRespawnSub) + if (!GameMain.LuaCs.Game.overrideRespawnSub) { RespawnShuttle.Velocity = Vector2.Zero; } @@ -185,7 +185,7 @@ namespace Barotrauma.Networking { if (RespawnShuttle != null) { - if (GameMain.LuaCs.game.overrideRespawnSub) + if (GameMain.LuaCs.Game.overrideRespawnSub) { CurrentState = State.Waiting; } @@ -206,7 +206,7 @@ namespace Barotrauma.Networking Vector2 spawnPos = FindSpawnPos(); - if (!GameMain.LuaCs.game.overrideRespawnSub) + if (!GameMain.LuaCs.Game.overrideRespawnSub) { RespawnCharacters(spawnPos); } diff --git a/Barotrauma/BarotraumaServer/WindowsServer.csproj b/Barotrauma/BarotraumaServer/WindowsServer.csproj index 2483ee4bf..444720c82 100644 --- a/Barotrauma/BarotraumaServer/WindowsServer.csproj +++ b/Barotrauma/BarotraumaServer/WindowsServer.csproj @@ -13,6 +13,7 @@ ..\BarotraumaShared\Icon.ico Debug;Release;Unstable ;NU1605;CS0114;CS0108CS8597;CS8600;CS8601;CS8602;CS8603;CS8604;CS8605;CS8606;CS8607;CS8608;CS8609;CS8610;CS8611;CS8612;CS8613;CS8614;CS8615;CS8616;CS8617;CS8618;CS8619;CS8620;CS8621;CS8622;CS8624;CS8625;CS8626;CS8629;CS8631;CS8632;CS8633;CS8634;CS8638;CS8643;CS8644;CS8645;CS8653;CS8654;CS8655;CS8667;CS8669;CS8670;CS8714;CS8717;CS8765 + en @@ -84,9 +85,8 @@ - - + diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Character.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Character.cs index ac92e6789..7af59a771 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Character.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Character.cs @@ -2723,13 +2723,13 @@ namespace Barotrauma { for (int i = 0; i < CharacterList.Count; i++) { - if (GameMain.LuaCs.game.updatePriorityCharacters.Contains(CharacterList[i])) continue; + if (GameMain.LuaCs.Game.updatePriorityCharacters.Contains(CharacterList[i])) continue; CharacterList[i].Update(deltaTime * CharacterUpdateInterval, cam); } } - foreach (Character character in GameMain.LuaCs.game.updatePriorityCharacters) + foreach (Character character in GameMain.LuaCs.Game.updatePriorityCharacters) { if (character.Removed) continue; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/AfflictionHusk.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/AfflictionHusk.cs index 2ab56fc44..321892133 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/AfflictionHusk.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/AfflictionHusk.cs @@ -302,7 +302,7 @@ namespace Barotrauma if (Prefab is AfflictionPrefabHusk huskPrefab) { - if (huskPrefab.ControlHusk || GameMain.LuaCs.game.enableControlHusk) + if (huskPrefab.ControlHusk || GameMain.LuaCs.Game.enableControlHusk) { #if SERVER if (client != null) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/WifiComponent.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/WifiComponent.cs index 74a2ebd46..ed7af119d 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/WifiComponent.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/WifiComponent.cs @@ -74,7 +74,7 @@ namespace Barotrauma.Items.Components #if SERVER get { - if(GameMain.LuaCs.game.allowWifiChat) return true; + if(GameMain.LuaCs.Game.allowWifiChat) return true; return linkToChat; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Cs/ACsMod.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Cs/ACsMod.cs similarity index 100% rename from Barotrauma/BarotraumaShared/SharedSource/Cs/ACsMod.cs rename to Barotrauma/BarotraumaShared/SharedSource/LuaCs/Cs/ACsMod.cs diff --git a/Barotrauma/BarotraumaShared/SharedSource/Cs/CsScriptFilter.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Cs/CsScriptFilter.cs similarity index 100% rename from Barotrauma/BarotraumaShared/SharedSource/Cs/CsScriptFilter.cs rename to Barotrauma/BarotraumaShared/SharedSource/LuaCs/Cs/CsScriptFilter.cs diff --git a/Barotrauma/BarotraumaShared/SharedSource/Cs/CsScriptLoader.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Cs/CsScriptLoader.cs similarity index 100% rename from Barotrauma/BarotraumaShared/SharedSource/Cs/CsScriptLoader.cs rename to Barotrauma/BarotraumaShared/SharedSource/LuaCs/Cs/CsScriptLoader.cs diff --git a/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaBarotraumaAdditions.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaBarotraumaAdditions.cs similarity index 100% rename from Barotrauma/BarotraumaShared/SharedSource/Lua/LuaBarotraumaAdditions.cs rename to Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaBarotraumaAdditions.cs diff --git a/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaClasses/LuaGame.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaClasses/LuaGame.cs similarity index 100% rename from Barotrauma/BarotraumaShared/SharedSource/Lua/LuaClasses/LuaGame.cs rename to Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaClasses/LuaGame.cs diff --git a/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaClasses/LuaResult.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaClasses/LuaResult.cs similarity index 100% rename from Barotrauma/BarotraumaShared/SharedSource/Lua/LuaClasses/LuaResult.cs rename to Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaClasses/LuaResult.cs diff --git a/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaClasses/LuaTypes.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaClasses/LuaTypes.cs similarity index 100% rename from Barotrauma/BarotraumaShared/SharedSource/Lua/LuaClasses/LuaTypes.cs rename to Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaClasses/LuaTypes.cs diff --git a/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaClasses/LuaUserData.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaClasses/LuaUserData.cs similarity index 100% rename from Barotrauma/BarotraumaShared/SharedSource/Lua/LuaClasses/LuaUserData.cs rename to Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaClasses/LuaUserData.cs diff --git a/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaCustomConverters.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaCustomConverters.cs similarity index 100% rename from Barotrauma/BarotraumaShared/SharedSource/Lua/LuaCustomConverters.cs rename to Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaCustomConverters.cs diff --git a/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaDocs.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaDocs.cs similarity index 100% rename from Barotrauma/BarotraumaShared/SharedSource/Lua/LuaDocs.cs rename to Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaDocs.cs diff --git a/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaProxy.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaProxy.cs similarity index 100% rename from Barotrauma/BarotraumaShared/SharedSource/Lua/LuaProxy.cs rename to Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaProxy.cs diff --git a/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaScriptLoader.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaScriptLoader.cs similarity index 100% rename from Barotrauma/BarotraumaShared/SharedSource/Lua/LuaScriptLoader.cs rename to Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaScriptLoader.cs diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsHook.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsHook.cs index f1efbb405..11933eee5 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsHook.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsHook.cs @@ -47,6 +47,8 @@ namespace Barotrauma } } + private Harmony harmony; + private Dictionary> hookFunctions; private Dictionary> hookPrefixMethods; @@ -54,7 +56,11 @@ namespace Barotrauma private Queue<(float, CsAction, object[])> queuedFunctionCalls; - private LuaCsHook() { + private static LuaCsHook instance; + + public LuaCsHook() { + instance = this; + hookFunctions = new Dictionary>(); hookPrefixMethods = new Dictionary>(); @@ -63,10 +69,12 @@ namespace Barotrauma queuedFunctionCalls = new Queue<(float, CsAction, object[])>(); } - private static LuaCsHook _inst; - static LuaCsHook() => _inst = new LuaCsHook(); - public static LuaCsHook Instance { get => _inst; } + public void Initialize() + { + harmony = new Harmony("LuaCsForBarotrauma"); + } + private static void _hookLuaCsPatch(MethodBase __originalMethod, object[] __args, object __instance, out object result, HookMethodType hookMethodType) { result = null; @@ -81,10 +89,10 @@ namespace Barotrauma switch (hookMethodType) { case HookMethodType.Before: - _inst.hookPrefixMethods.TryGetValue(funcAddr, out methodSet); + instance.hookPrefixMethods.TryGetValue(funcAddr, out methodSet); break; case HookMethodType.After: - _inst.hookPostfixMethods.TryGetValue(funcAddr, out methodSet); + instance.hookPostfixMethods.TryGetValue(funcAddr, out methodSet); break; default: break; @@ -196,7 +204,6 @@ namespace Barotrauma public void HookMethod(string identifier, MethodInfo method, CsPatch patch, HookMethodType hookType = HookMethodType.Before, ACsMod owner = null) { - Console.WriteLine($" --== '{identifier}' {method.ReflectedType.Name}.{method.Name} -> {method.ReturnType.Name} | {hookType.ToString("G")}"); if (identifier == null || method == null || patch == null) throw new ArgumentNullException("Identifier, Method and Patch arguments must not be null."); var funcAddr = ((long)method.MethodHandle.GetFunctionPointer()); @@ -208,14 +215,14 @@ namespace Barotrauma { if (patches == null || patches.Prefixes == null || patches.Prefixes.Find(patch => patch.PatchMethod == _miHookLuaCsPatchRetPrefix) == null) { - GameMain.LuaCs.harmony.Patch(method, prefix: new HarmonyMethod(_miHookLuaCsPatchRetPrefix)); + harmony.Patch(method, prefix: new HarmonyMethod(_miHookLuaCsPatchRetPrefix)); } } else { if (patches == null || patches.Prefixes == null || patches.Prefixes.Find(patch => patch.PatchMethod == _miHookLuaCsPatchPrefix) == null) { - GameMain.LuaCs.harmony.Patch(method, prefix: new HarmonyMethod(_miHookLuaCsPatchPrefix)); + harmony.Patch(method, prefix: new HarmonyMethod(_miHookLuaCsPatchPrefix)); } } @@ -236,14 +243,14 @@ namespace Barotrauma { if (patches == null || patches.Postfixes == null || patches.Postfixes.Find(patch => patch.PatchMethod == _miHookLuaCsPatchRetPostfix) == null) { - GameMain.LuaCs.harmony.Patch(method, postfix: new HarmonyMethod(_miHookLuaCsPatchRetPostfix)); + harmony.Patch(method, postfix: new HarmonyMethod(_miHookLuaCsPatchRetPostfix)); } } else { if (patches == null || patches.Postfixes == null || patches.Postfixes.Find(patch => patch.PatchMethod == _miHookLuaCsPatchPostfix) == null) { - GameMain.LuaCs.harmony.Patch(method, postfix: new HarmonyMethod(_miHookLuaCsPatchPostfix)); + harmony.Patch(method, postfix: new HarmonyMethod(_miHookLuaCsPatchPostfix)); } } @@ -312,7 +319,6 @@ namespace Barotrauma { name = name.ToLower(); - LuaCsSetup.PrintLogMessage($"'{name}' | '{hookName}'"); if (name == null || hookName == null || hook == null) throw new ArgumentNullException("Names and Hook must not be null"); if (!hookFunctions.ContainsKey(name)) @@ -340,7 +346,7 @@ namespace Barotrauma queuedFunctionCalls.Clear(); - GameMain.LuaCs.harmony?.UnpatchAll(); + harmony?.UnpatchAll(); } diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsSetup.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsSetup.cs index b921d003c..6f199bc43 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsSetup.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsSetup.cs @@ -24,19 +24,18 @@ namespace Barotrauma internal LuaCsHook Hook { get; private set; } - public LuaGame game; - public LuaCsNetworking networking; - public Harmony harmony; + public LuaGame Game; + public LuaCsNetworking Networking; - public LuaScriptLoader luaScriptLoader; - public CsScriptLoader netScriptLoader; + public LuaScriptLoader LuaScriptLoader; + public CsScriptLoader NetScriptLoader; public LuaCsSetup() { - Hook = LuaCsHook.Instance; + Hook = new LuaCsHook(); - game = new LuaGame(); - networking = new LuaCsNetworking(); + Game = new LuaGame(); + Networking = new LuaCsNetworking(); } @@ -265,7 +264,7 @@ namespace Barotrauma public void SetModulePaths(string[] str) { - luaScriptLoader.ModulePaths = str; + LuaScriptLoader.ModulePaths = str; } public void Update() @@ -279,31 +278,12 @@ namespace Barotrauma ACsMod.LoadedMods.Clear(); Hook?.Call("stop"); - game?.Stop(); - //harmony?.UnpatchAll(); + Game?.Stop(); - //Hook = new LuaCsHook(); Hook.Clear(); - game = new LuaGame(); - networking = new LuaCsNetworking(); - luaScriptLoader = null; - } - - private void InitCs() - { - netScriptLoader = new CsScriptLoader(this); - netScriptLoader.SearchFolders(); - if (netScriptLoader == null) throw new Exception("LuaCsSetup was not properly initialized."); - try - { - var modTypes = netScriptLoader.Compile(); - //modTypes.ForEach(t => ACsMod.CreateInstance(t)); - modTypes.ForEach(t => t.GetConstructor(new Type[] { })?.Invoke(null)); - } - catch (Exception ex) - { - PrintMessage(ex); - } + Game = new LuaGame(); + Networking = new LuaCsNetworking(); + LuaScriptLoader = null; } public void Initialize() @@ -312,32 +292,27 @@ namespace Barotrauma PrintMessage("LuaCs! Version " + AssemblyInfo.GitRevision); - luaScriptLoader = new LuaScriptLoader(); - luaScriptLoader.ModulePaths = new string[] { }; - InitCs(); + LuaScriptLoader = new LuaScriptLoader(); + LuaScriptLoader.ModulePaths = new string[] { }; + + NetScriptLoader = new CsScriptLoader(this); LuaCustomConverters.RegisterAll(); lua = new Script(CoreModules.Preset_SoftSandbox | CoreModules.Debug); lua.Options.DebugPrint = PrintMessage; - lua.Options.ScriptLoader = luaScriptLoader; + lua.Options.ScriptLoader = LuaScriptLoader; - harmony = new Harmony("com.LuaForBarotrauma"); - harmony.UnpatchAll(); + Hook.Initialize(); + Game = new LuaGame(); + Networking = new LuaCsNetworking(); - //Hook = new LuaCsHook(); - game = new LuaGame(); - networking = new LuaCsNetworking(); - - //UserData.RegisterType(); UserData.RegisterType(); UserData.RegisterType(); UserData.RegisterType(); UserData.RegisterType(); UserData.RegisterType(); UserData.RegisterType(); - - lua.Globals["printerror"] = (Action)PrintError; var hookType = UserData.RegisterType(); var hookDesc = (StandardUserDataDescriptor)hookType; @@ -353,6 +328,8 @@ namespace Barotrauma } }); + lua.Globals["printerror"] = (Action)PrintError; + lua.Globals["setmodulepaths"] = (Action)SetModulePaths; lua.Globals["dofile"] = (Func)DoFile; @@ -363,11 +340,11 @@ namespace Barotrauma lua.Globals["load"] = (Func)LoadString; lua.Globals["LuaUserData"] = UserData.CreateStatic(); - lua.Globals["Game"] = game; + lua.Globals["Game"] = Game; lua.Globals["Hook"] = Hook; lua.Globals["Timer"] = new LuaCsTimer(); lua.Globals["File"] = UserData.CreateStatic(); - lua.Globals["Networking"] = networking; + lua.Globals["Networking"] = Networking; bool isServer; @@ -382,6 +359,20 @@ namespace Barotrauma // LuaDocs.GenerateDocsAll(); + + NetScriptLoader.SearchFolders(); + if (NetScriptLoader == null) throw new Exception("LuaCsSetup was not properly initialized."); + try + { + var modTypes = NetScriptLoader.Compile(); + modTypes.ForEach(t => t.GetConstructor(new Type[] { })?.Invoke(null)); + } + catch (Exception ex) + { + PrintMessage(ex); + } + + ContentPackage luaPackage = GetPackage(); if (File.Exists(LUASETUP_FILE)) @@ -411,7 +402,7 @@ namespace Barotrauma } else { - PrintError("LuaCs loader not found! Lua/LuaSetup.lua, no Lua scripts will be executed or work."); + PrintError("LuaSetup.lua not found! Lua/LuaSetup.lua, no Lua scripts will be executed or work."); } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/MapEntity.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/MapEntity.cs index a03be0e13..ec8e6a735 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/MapEntity.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/MapEntity.cs @@ -596,12 +596,12 @@ namespace Barotrauma Powered.UpdatePower(deltaTime * MapEntityUpdateInterval); foreach (Item item in Item.ItemList) { - if (GameMain.LuaCs.game.updatePriorityItems.Contains(item)) continue; + if (GameMain.LuaCs.Game.updatePriorityItems.Contains(item)) continue; item.Update(deltaTime * MapEntityUpdateInterval, cam); } } - foreach (var item in GameMain.LuaCs.game.updatePriorityItems) + foreach (var item in GameMain.LuaCs.Game.updatePriorityItems) { if (item.Removed) continue; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Networking/RespawnManager.cs b/Barotrauma/BarotraumaShared/SharedSource/Networking/RespawnManager.cs index 91db5ad38..a79799ec4 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Networking/RespawnManager.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Networking/RespawnManager.cs @@ -117,7 +117,7 @@ namespace Barotrauma.Networking foreach (Wire wire in connection.Wires) { #if SERVER - if (GameMain.LuaCs.game.overrideRespawnSub == false) + if (GameMain.LuaCs.Game.overrideRespawnSub == false) { if (wire != null) wire.Locked = true; } @@ -205,7 +205,7 @@ namespace Barotrauma.Networking { #if SERVER - if (GameMain.LuaCs.game.overrideRespawnSub) + if (GameMain.LuaCs.Game.overrideRespawnSub) { yield return CoroutineStatus.Success; }