private void AttackTroop(Troop troop) { if (troop != null) { TroopDamage damage2; TroopDamage damage = troop.ReceiveAttackDamage(this.SendAttackDamage(troop, false)); if ((!damage.Waylay && !damage.AntiCounterAttack) && this.CounterAttackAvail(troop)) { damage2 = this.ReceiveAttackDamage(troop.SendAttackDamage(this, true)); damage.BeCountered = true; damage.CounterDamage = damage2.Damage; damage.CounterInjury = damage2.Injury; damage.CounterCombativityDown = damage2.CounterCombativityDown; } if (this.PierceAttack || this.BasePierceAttack) { foreach (Troop troop2 in this.GetTroopsBetween(troop)) { if (!this.TroopNoAccidentalInjury || !this.IsFriendly(troop2.BelongedFaction)) { damage2 = troop2.ReceiveAttackDamage(this.SendAttackDamage(troop2, false)); this.StartAttackTroop(troop2, damage2, true); } } } if (((this.AreaAttackRadius > 0) || (this.BaseAreaAttackRadius > 0)) || (this.StuntAttackRadius > 0)) { int radius = (this.AreaAttackRadius > this.BaseAreaAttackRadius) ? this.AreaAttackRadius : this.BaseAreaAttackRadius; radius = (this.StuntAttackRadius > radius) ? this.StuntAttackRadius : radius; foreach (Troop troop2 in this.GetAreaAttackTroops(troop.Position, radius, this.ScatteredShootingOblique)) { if (((troop2 != troop) && (troop2 != this)) && (!this.TroopNoAccidentalInjury || !this.IsFriendly(troop2.BelongedFaction))) { damage2 = troop2.ReceiveAttackDamage(this.SendAttackDamage(troop2, false)); this.StartAttackTroop(troop2, damage2, true); } } } if ((this.BaseAroundAttackRadius > 0) || (this.AroundAttackRadius > 0)) { foreach (Troop troop2 in this.GetAreaAttackTroops(this.Position, this.AroundAttackRadius, true)) { if (((troop2 != troop) && (troop2 != this)) && (!this.TroopNoAccidentalInjury || !this.IsFriendly(troop2.BelongedFaction))) { damage2 = troop2.ReceiveAttackDamage(this.SendAttackDamage(troop2, false)); this.StartAttackTroop(troop2, damage2, true); } } } if (this.BaseAttackAllOffenceArea || this.AttackAllOffenceArea) { foreach (Troop troop2 in this.GetAllOffenceAreaTroops(this.Position)) { if (((troop2 != troop) && (troop2 != this)) && (!this.TroopNoAccidentalInjury || !this.IsFriendly(troop2.BelongedFaction))) { damage2 = troop2.ReceiveAttackDamage(this.SendAttackDamage(troop2, false)); this.StartAttackTroop(troop2, damage2, true); } } } this.StartAttackTroop(troop, damage, false); } }