From 7f0fac3553284f3e88e171b845ec0d7fbb936b74 Mon Sep 17 00:00:00 2001 From: Evil Factory <36804725+evilfactory@users.noreply.github.com> Date: Mon, 9 Aug 2021 17:00:50 -0300 Subject: [PATCH] new affliction hook --- .../ServerSource/Lua/LuaSetup.cs | 1 + .../Characters/Health/CharacterHealth.cs | 31 ++++++++++++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/Barotrauma/BarotraumaServer/ServerSource/Lua/LuaSetup.cs b/Barotrauma/BarotraumaServer/ServerSource/Lua/LuaSetup.cs index e82d37dab..d65fd456b 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Lua/LuaSetup.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Lua/LuaSetup.cs @@ -123,6 +123,7 @@ namespace Barotrauma UserData.RegisterType(); UserData.RegisterType(); UserData.RegisterType(); + UserData.RegisterType(); lua = new Script(CoreModules.Preset_SoftSandbox | CoreModules.LoadMethods); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/CharacterHealth.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/CharacterHealth.cs index ad2d820c5..25c2385ef 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/CharacterHealth.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/CharacterHealth.cs @@ -6,12 +6,13 @@ using System.Xml.Linq; using Barotrauma.Networking; using Barotrauma.Extensions; using System.Globalization; +using MoonSharp.Interpreter; namespace Barotrauma { partial class CharacterHealth { - class LimbHealth + public class LimbHealth { public Sprite IndicatorSprite; public Sprite HighlightSprite; @@ -408,19 +409,47 @@ namespace Barotrauma { if (targetLimb == null) { +#if SERVER + var should = GameMain.Lua.hook.Call("afflictionApplied", new DynValue[] { UserData.Create(this), UserData.Create(affliction) }); + + if (should != null && should.CastToBool()) + { + return; + } +#endif + //if a limb-specific affliction is applied to no specific limb, apply to all limbs foreach (LimbHealth limbHealth in limbHealths) { AddLimbAffliction(limbHealth, affliction); } + } else { +#if SERVER + var should = GameMain.Lua.hook.Call("afflictionApplied", new DynValue[] { UserData.Create(this), UserData.Create(affliction), UserData.Create(targetLimb) }); + + if (should != null && should.CastToBool()) + { + return; + } +#endif + AddLimbAffliction(targetLimb, affliction); } } else { +#if SERVER + var should = GameMain.Lua.hook.Call("afflictionApplied", new DynValue[] { UserData.Create(this), UserData.Create(affliction)}); + + if (should != null && should.CastToBool()) + { + return; + } +#endif + AddAffliction(affliction); } }