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); }