From 3ae75f870c0336fe17fcd112ca3a588dab6fdfe0 Mon Sep 17 00:00:00 2001 From: reaperrr Date: Tue, 4 Aug 2015 19:43:04 +0200 Subject: [PATCH 1/2] Add Explodes safeguards Accept both null and empty string to disable explosion weapons. Throw specific exception if weapon was not found. Require Weapon (EmptyWeapon stays optional). --- OpenRA.Mods.Common/Traits/Explodes.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/OpenRA.Mods.Common/Traits/Explodes.cs b/OpenRA.Mods.Common/Traits/Explodes.cs index a0a55f4544..27ccd5b9de 100644 --- a/OpenRA.Mods.Common/Traits/Explodes.cs +++ b/OpenRA.Mods.Common/Traits/Explodes.cs @@ -8,6 +8,7 @@ */ #endregion +using System; using System.Linq; using OpenRA.Mods.Common.Warheads; using OpenRA.Traits; @@ -17,7 +18,7 @@ namespace OpenRA.Mods.Common.Traits [Desc("This actor explodes when killed.")] public class ExplodesInfo : ITraitInfo { - [WeaponReference, Desc("Weapon to use for explosion if ammo/payload is loaded.")] + [WeaponReference, FieldLoader.Require, Desc("Weapon to use for explosion if ammo/payload is loaded.")] public readonly string Weapon = "UnitExplode"; [WeaponReference, Desc("Weapon to use for explosion if no ammo/payload is loaded.")] @@ -54,9 +55,13 @@ namespace OpenRA.Mods.Common.Traits return; var weaponName = ChooseWeaponForExplosion(self); - if (weaponName == null) + if (string.IsNullOrEmpty(weaponName)) return; + if (!e.Attacker.World.Map.Rules.Weapons.ContainsKey(weaponName.ToLowerInvariant())) + throw new InvalidOperationException("Actor " + self.Info.Name + + ": Could not find weapon '" + weaponName.ToLowerInvariant() + "', check for typos."); + var weapon = e.Attacker.World.Map.Rules.Weapons[weaponName.ToLowerInvariant()]; if (weapon.Report != null && weapon.Report.Any()) Sound.Play(weapon.Report.Random(e.Attacker.World.SharedRandom), self.CenterPosition); From 4e633b21f6614583daf13d66e85831f4d5750627 Mon Sep 17 00:00:00 2001 From: reaperrr Date: Mon, 17 Aug 2015 20:11:03 +0200 Subject: [PATCH 2/2] Fixed D2k grenadier to not explode violently when reloading Removed redundant Chance (default is 100 anyway). --- mods/d2k/rules/infantry.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/d2k/rules/infantry.yaml b/mods/d2k/rules/infantry.yaml index a2a435221a..de132a1421 100644 --- a/mods/d2k/rules/infantry.yaml +++ b/mods/d2k/rules/infantry.yaml @@ -164,7 +164,7 @@ grenadier: IdleSequences: idle Explodes: Weapon: UnitExplodeSmall - Chance: 100 + EmptyWeapon: UnitExplodeSmall AttractsWorms: Intensity: 180