Fix actors ignoring Disguise

This commit is contained in:
Pavel Penev
2015-10-18 18:29:55 +03:00
parent 8c7bdae617
commit 000c701414

View File

@@ -223,13 +223,24 @@ namespace OpenRA.Mods.Common.Traits
// (short-circuiting in the logical expression below)
var owner = null as Player;
if (t.Type == TargetType.FrozenActor)
{
owner = t.FrozenActor.Owner;
}
else if (t.Type == TargetType.Actor)
owner = t.Actor.Owner;
{
owner = t.Actor.EffectiveOwner != null && t.Actor.EffectiveOwner.Owner != null
? t.Actor.EffectiveOwner.Owner
: t.Actor.Owner;
return Armaments.Where(a => (!a.IsTraitDisabled || !onlyEnabled) &&
a.Weapon.IsValidAgainst(t, self.World, self) &&
(owner == null || (forceAttack ? a.Info.ForceTargetStances : a.Info.TargetStances)
// Special cases for spies so we don't kill friendly disguised spies
// and enable dogs to kill enemy disguised spies.
if (self.Owner.Stances[t.Actor.Owner] == Stance.Ally || self.Info.HasTraitInfo<IgnoresDisguiseInfo>())
owner = t.Actor.Owner;
}
return Armaments.Where(a => (!a.IsTraitDisabled || !onlyEnabled)
&& a.Weapon.IsValidAgainst(t, self.World, self)
&& (owner == null || (forceAttack ? a.Info.ForceTargetStances : a.Info.TargetStances)
.HasStance(self.Owner.Stances[owner])));
}