From 4646e8fb320dbfa3341cae56fa330c7e93436d21 Mon Sep 17 00:00:00 2001 From: atlimit8 Date: Wed, 26 Nov 2014 19:37:41 -0600 Subject: [PATCH] Control whether actor is poisioned by resource (Tiberium) through the use of upgrade(s) --- OpenRA.Mods.Cnc/Traits/PoisonedByTiberium.cs | 21 +++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/OpenRA.Mods.Cnc/Traits/PoisonedByTiberium.cs b/OpenRA.Mods.Cnc/Traits/PoisonedByTiberium.cs index 42d89437ad..0f58faeff2 100644 --- a/OpenRA.Mods.Cnc/Traits/PoisonedByTiberium.cs +++ b/OpenRA.Mods.Cnc/Traits/PoisonedByTiberium.cs @@ -13,10 +13,11 @@ using OpenRA.Traits; using OpenRA.Mods.RA; using OpenRA.Mods.RA.Traits; using OpenRA.GameRules; +using OpenRA.Mods.Common; namespace OpenRA.Mods.Cnc.Traits { - class PoisonedByTiberiumInfo : ITraitInfo + class PoisonedByTiberiumInfo : UpgradableTraitInfo, ITraitInfo { [WeaponReference] public readonly string Weapon = "Tiberium"; public readonly string[] Resources = { "Tiberium", "BlueTiberium" }; @@ -24,26 +25,28 @@ namespace OpenRA.Mods.Cnc.Traits public object Create(ActorInitializer init) { return new PoisonedByTiberium(this); } } - class PoisonedByTiberium : ITick, ISync + class PoisonedByTiberium : UpgradableTrait, ITick, ISync { - PoisonedByTiberiumInfo info; [Sync] int poisonTicks; - public PoisonedByTiberium(PoisonedByTiberiumInfo info) { this.info = info; } + public PoisonedByTiberium(PoisonedByTiberiumInfo info) + : base(info) { } public void Tick(Actor self) { - if (--poisonTicks > 0) return; + if (IsTraitDisabled || --poisonTicks > 0) + return; // Prevents harming infantry in cargo. - if (!self.IsInWorld) return; + if (!self.IsInWorld) + return; var rl = self.World.WorldActor.Trait(); var r = rl.GetResource(self.Location); - if (r == null) return; - if (!info.Resources.Contains(r.Info.Name)) return; + if (r == null || !Info.Resources.Contains(r.Info.Name)) + return; - var weapon = self.World.Map.Rules.Weapons[info.Weapon.ToLowerInvariant()]; + var weapon = self.World.Map.Rules.Weapons[Info.Weapon.ToLowerInvariant()]; weapon.Impact(Target.FromActor(self), self.World.WorldActor, Enumerable.Empty()); poisonTicks = weapon.ReloadDelay;