Beispiel #1
0
        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);
        }
Beispiel #2
0
        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();
        }
Beispiel #3
0
        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);
            }
        }
Beispiel #4
0
 public ICombatObject GetCombatObject(uint id)
 {
     return(Attackers.AllCombatObjects().FirstOrDefault(co => co.Id == id) ??
            Defenders.AllCombatObjects().FirstOrDefault(co => co.Id == id));
 }