diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameMain.cs b/Barotrauma/BarotraumaClient/ClientSource/GameMain.cs index 114c52e72..b96abab6a 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameMain.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameMain.cs @@ -998,6 +998,8 @@ namespace Barotrauma SoundManager?.Update(); + GameMain.Lua.hook.Call("think", new object[] { }); + Timing.Accumulator -= Timing.Step; sw.Stop(); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Lua/LuaClasses.cs b/Barotrauma/BarotraumaClient/ClientSource/Lua/LuaClasses.cs new file mode 100644 index 000000000..db45ecdd6 --- /dev/null +++ b/Barotrauma/BarotraumaClient/ClientSource/Lua/LuaClasses.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Barotrauma.Networking; + +namespace Barotrauma +{ + partial class LuaSetup + { + public class LuaGUI + { + LuaSetup env; + public LuaGUI(LuaSetup _env) + { + env = _env; + } + + public ChatBox ChatBox + { + get + { + return GameMain.Client.ChatBox; + } + } + } + } +} diff --git a/Barotrauma/BarotraumaClient/ClientSource/Networking/GameClient.cs b/Barotrauma/BarotraumaClient/ClientSource/Networking/GameClient.cs index 46bd3de8e..77c4765eb 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Networking/GameClient.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Networking/GameClient.cs @@ -2805,6 +2805,10 @@ namespace Barotrauma.Networking public override void AddChatMessage(ChatMessage message) { + var should = new LuaResult(GameMain.Lua.hook.Call("chatMessage", new object[] { message.Text, message.SenderClient, message.Type, message })); + + if (should.Bool()) return; + base.AddChatMessage(message); if (string.IsNullOrEmpty(message.Text)) { return; } diff --git a/Barotrauma/BarotraumaServer/ServerSource/GameMain.cs b/Barotrauma/BarotraumaServer/ServerSource/GameMain.cs index 2598af51f..9df9222e6 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/GameMain.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/GameMain.cs @@ -365,7 +365,7 @@ namespace Barotrauma TaskPool.Update(); CoroutineManager.Update((float)Timing.Step, (float)Timing.Step); - GameMain.Lua.hook.Call("think", new object[] { elapsedTime, Timing.TotalTime }); + GameMain.Lua.hook.Call("think", new object[] { }); Timing.Accumulator -= Timing.Step; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaClasses.cs b/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaClasses.cs index 74ece8f06..edf0c560f 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaClasses.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaClasses.cs @@ -554,8 +554,9 @@ namespace Barotrauma public object Call(string name, object[] args) { + if (env == null) return null; if (name == null) return null; - if(args == null) { args = new object[] { }; } + if (args == null) { args = new object[] { }; } if (!hookFunctions.ContainsKey(name)) return null; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaSetup.cs b/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaSetup.cs index 3799ca5af..d69cf63e5 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaSetup.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaSetup.cs @@ -204,15 +204,15 @@ namespace Barotrauma private void AddCallMetaMember(IUserDataDescriptor IUDD) { var descriptor = (StandardUserDataDescriptor)IUDD; + descriptor.RemoveMetaMember("__call"); descriptor.AddMetaMember("__call", new ObjectCallbackMemberDescriptor("__call", HandleCall)); } public void Stop() { - - lua = null; - hook = null; - game = null; + hook = new LuaHook(null); + game = new LuaGame(null); + networking = new LuaNetworking(null); luaScriptLoader = null; luaSetup = null; @@ -321,8 +321,14 @@ namespace Barotrauma AddCallMetaMember(UserData.RegisterType()); AddCallMetaMember(UserData.RegisterType()); AddCallMetaMember(UserData.RegisterType()); + AddCallMetaMember(UserData.RegisterType()); +#if SERVER +#elif CLIENT + UserData.RegisterType(); + UserData.RegisterType(); +#endif lua = new Script(CoreModules.Preset_SoftSandbox); lua.Options.DebugPrint = PrintMessage; @@ -373,6 +379,7 @@ namespace Barotrauma lua.Globals["Vector2"] = UserData.CreateStatic(); lua.Globals["Vector3"] = UserData.CreateStatic(); lua.Globals["Vector4"] = UserData.CreateStatic(); + lua.Globals["Color"] = UserData.CreateStatic(); lua.Globals["ChatMessage"] = UserData.CreateStatic(); lua.Globals["Hull"] = UserData.CreateStatic(); lua.Globals["InvSlotType"] = UserData.CreateStatic(); @@ -384,6 +391,13 @@ namespace Barotrauma lua.Globals["ClientPacketHeader"] = UserData.CreateStatic(); lua.Globals["ServerPacketHeader"] = UserData.CreateStatic(); +#if SERVER + +#elif CLIENT + lua.Globals["GUI"] = new LuaGUI(this); +#endif + + // obsolete lua.Globals["CreateVector2"] = (Func)CreateVector2; lua.Globals["CreateVector3"] = (Func)CreateVector3; @@ -424,7 +438,9 @@ namespace Barotrauma public LuaSetup() { - + hook = new LuaHook(null); + game = new LuaGame(null); + networking = new LuaNetworking(null); } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Networking/ChatMessage.cs b/Barotrauma/BarotraumaShared/SharedSource/Networking/ChatMessage.cs index 761f6ef89..6d282715f 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Networking/ChatMessage.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Networking/ChatMessage.cs @@ -79,9 +79,16 @@ namespace Barotrauma.Networking public readonly string SenderName; + private Color? customColor = null; + public Color Color { - get { return MessageColor[(int)Type]; } + get + { + if(customColor == null) return MessageColor[(int)Type]; + return (Color)customColor; + } + set { customColor = value; } } public static string GetTimeStamp()