diff --git a/OpenRa.Game/Traits/AttackBase.cs b/OpenRa.Game/Traits/AttackBase.cs index b112d3ace0..a87ed99d8b 100644 --- a/OpenRa.Game/Traits/AttackBase.cs +++ b/OpenRa.Game/Traits/AttackBase.cs @@ -142,7 +142,9 @@ namespace OpenRa.Game.Traits { if (mi.Button == MouseButton.Left || underCursor == null) return null; if (self == underCursor) return null; - if (underCursor.Owner == self.Owner && !mi.Modifiers.HasModifier( Modifiers.Ctrl )) return null; + var isHeal = Rules.WeaponInfo[self.Info.Primary].Damage < 0; + if (((underCursor.Owner == self.Owner) ^ isHeal) + && !mi.Modifiers.HasModifier( Modifiers.Ctrl )) return null; if (!Combat.HasAnyValidWeapons(self, underCursor)) return null; return new Order("Attack", self, underCursor, int2.Zero, null); } diff --git a/OpenRa.Game/Traits/AutoHeal.cs b/OpenRa.Game/Traits/AutoHeal.cs index f61f2fe6bb..42a8674a50 100644 --- a/OpenRa.Game/Traits/AutoHeal.cs +++ b/OpenRa.Game/Traits/AutoHeal.cs @@ -53,7 +53,7 @@ namespace OpenRa.Game.Traits var inRange = Game.FindUnitsInCircle(self.CenterLocation, Game.CellSize * range); return inRange - .Where(a => a.Owner == self.Owner) /* todo: one day deal with friendly players */ + .Where(a => a.Owner == self.Owner && a != self) /* todo: one day deal with friendly players */ .Where(a => Combat.HasAnyValidWeapons(self, a)) .Where(a => a.Health < a.Info.Strength) .OrderBy(a => (a.Location - self.Location).LengthSquared) diff --git a/units.ini b/units.ini index 9a2c56233e..b6eb87044c 100644 --- a/units.ini +++ b/units.ini @@ -590,7 +590,7 @@ LongDesc=Elite commando infantry, armed with \ndual pistols and C4.\n Strong vs [MEDI] Description=Medic Voice=MedicVoice -Traits=Unit, Mobile, RenderInfantry, AttackBase, TakeCover, SquishByTank, AutoHeal +Traits=Unit, Mobile, RenderInfantry, AutoHeal, AttackBase, TakeCover, SquishByTank LongDesc=Heals nearby infantry.\n Strong vs Nothing\n Weak vs Everything