From fea700fb7245b8f3b002cd38505f6791d7a9fca7 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 10 Jan 2021 19:34:44 +0000 Subject: [PATCH] Add death types support to the Lua Kill() API. --- .../Scripting/Properties/HealthProperties.cs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/OpenRA.Mods.Common/Scripting/Properties/HealthProperties.cs b/OpenRA.Mods.Common/Scripting/Properties/HealthProperties.cs index 73953a42fb..bbe7eed672 100644 --- a/OpenRA.Mods.Common/Scripting/Properties/HealthProperties.cs +++ b/OpenRA.Mods.Common/Scripting/Properties/HealthProperties.cs @@ -9,6 +9,8 @@ */ #endregion +using Eluant; +using OpenRA.Primitives; using OpenRA.Scripting; using OpenRA.Traits; @@ -34,10 +36,18 @@ namespace OpenRA.Mods.Common.Scripting [Desc("Maximum health of the actor.")] public int MaxHealth { get { return health.MaxHP; } } - [Desc("Kill the actor.")] - public void Kill() + [Desc("Kill the actor. damageTypes may be omitted, specified as a string, or as table of strings.")] + public void Kill(object damageTypes = null) { - health.InflictDamage(Self, Self, new Damage(health.MaxHP), true); + Damage damage; + if (damageTypes is string d) + damage = new Damage(health.MaxHP, new BitSet(new[] { d })); + else if (damageTypes is LuaTable t && t.TryGetClrValue(out string[] ds)) + damage = new Damage(health.MaxHP, new BitSet(ds)); + else + damage = new Damage(health.MaxHP); + + health.InflictDamage(Self, Self, damage, true); } } }