public override Error CanWatchBattle(IPlayer player, out IEnumerable <string> errorParams) { // Owner of stronghold gets to peek at the # of units attacking if (stronghold.Tribe != null && player.IsInTribe && player.Tribesman.Tribe == stronghold.Tribe) { var attackingUnits = Attackers.AllCombatObjects().Sum(x => x.Count); if (attackingUnits >= 100) { attackingUnits = (int)(Math.Round(attackingUnits * precision / 10) * 10); } errorParams = new[] { stronghold.Gate.ToString("#.##"), attackingUnits.ToString(CultureInfo.InvariantCulture) }; return(Error.BattleViewableGateAttackingUnits); } var canWatchBattle = base.CanWatchBattle(player, out errorParams); if (canWatchBattle != Error.Ok) { return(canWatchBattle); } // Since the gate battle isn't really viewable, we just return an error message that includes the gate HP errorParams = new[] { stronghold.Gate.ToString("#.##") }; return(Error.BattleViewableGateHp); }
private void BattleEnded(bool writeReport) { if (writeReport) { BattleReport.CompleteBattle(); } AboutToExitBattle(this, Attackers, Defenders); ExitBattle(this, Attackers, Defenders); foreach (var combatObj in Defenders.AllCombatObjects().Where(combatObj => !combatObj.IsDead)) { combatObj.ExitBattle(); } foreach (var combatObj in Attackers.AllCombatObjects().Where(combatObj => !combatObj.IsDead)) { combatObj.ExitBattle(); } foreach (var group in Attackers) { WithdrawAttacker(this, group); } foreach (var group in Defenders) { WithdrawDefender(this, group); } // Delete all groups Attackers.Clear(); Defenders.Clear(); }
private void BringWaitingTroopsIntoBattle() { foreach (var defender in Defenders.AllCombatObjects().Where(co => co.IsWaitingToJoinBattle)) { defender.JoinBattle(Round); dbManager.Save(defender); } foreach (var attacker in Attackers.AllCombatObjects().Where(co => co.IsWaitingToJoinBattle)) { attacker.JoinBattle(Round); dbManager.Save(attacker); } }
public ICombatObject GetCombatObject(uint id) { return(Attackers.AllCombatObjects().FirstOrDefault(co => co.Id == id) ?? Defenders.AllCombatObjects().FirstOrDefault(co => co.Id == id)); }