Esempio n. 1
0
        public void ParticipateInBattle(Citizen citizen, Battle battle, bool isAttacker, int weaponQuality)
        {
            var damage = CalculateDamage(citizen, battle, weaponQuality, isAttacker);

            if (isAttacker)
            {
                battle.WallHealth -= (decimal)damage;
            }
            else
            {
                battle.WallHealth += (decimal)damage;
            }

            var currentRank = MilitaryRankEnumExtensions.GetRankForMilitaryRank((double)citizen.MilitaryRank);

            citizen.MilitaryRank += (decimal)damage;
            citizen.HitPoints    -= 10;
            var newRank = MilitaryRankEnumExtensions.GetRankForMilitaryRank((double)citizen.MilitaryRank);

            if (currentRank != newRank)
            {
                var msg = string.Format("You were promoted to {0}.", newRank.ToHumanReadable());
                warningService.AddWarning(citizen.ID, msg);
            }

            if (weaponQuality > 0)
            {
                equipmentRepository.RemoveEquipmentItem(citizen.Entity.EquipmentID.Value, (int)ProductTypeEnum.Weapon, weaponQuality);
            }

            var participant = new BattleParticipant()
            {
                BattleID          = battle.ID,
                CitizenID         = citizen.ID,
                DamageDealt       = (decimal)damage,
                IsAttacker        = isAttacker,
                WeaponQualityUsed = weaponQuality,
                Day      = GameHelper.CurrentDay,
                DateTime = DateTime.Now
            };

            battleRepository.AddParticipant(participant);
            ConditionalSaveChanges(battleRepository);
        }