public void AttackOnCity(Army army, City city) { //var wall = 0; //if (city.WallType == 0 || army.Owner.IsChaosControlled) //{ // wall = city.Id; //} //else //{ // wall = -city.WallType - 1; //} Army cityArmy = null; if (city.Owner == _playersRepository.UserPlayer) { cityArmy = _armiesHelper.FindUserArmyInCity(city); } else { var defendersCount = (city.Population / 70) + 1; if (defendersCount > 10) { defendersCount = 10; } cityArmy = _armiesRepository.CreateTempArmy(defendersCount); } if (!army.Owner.IsUserControlled && (city.Owner != null && !city.Owner.IsUserControlled)) { SimulatedBattle(army, cityArmy); AfterAttackOnCity(army, city, cityArmy); } else { if (cityArmy != null) { //TODO: CENTER[X1,Y1,1] var battleContext = new TerrainActionContext(); battleContext.Type = TerrainActionType.Battle; battleContext.ActionAfter = () => AfterAttackOnCity(army, city, cityArmy); if (cityArmy.Owner == _playersRepository.UserPlayer) { battleContext.UserArmy = cityArmy; battleContext.EnemyArmy = army; var message = new Message(); message.Type = MessageType.EnemyAttacksUserCity; message.MapObjects = new List <MapObject> { city, army }; _messagesService.ShowMessage(message); } if (army.Owner == _playersRepository.UserPlayer) { battleContext.UserArmy = army; battleContext.EnemyArmy = cityArmy; var days = GlobalUtils.Rand(30) + 10; army.Owner.UpdateWar(city.Owner, days); if (city.Owner != null) { city.Owner.UpdateWar(army.Owner, days); } var message = new Message(); message.Type = MessageType.UserAttackCity; message.MapObjects = new List <MapObject> { city, army }; _messagesService.ShowMessage(message); } _viewSwitcher.OpenTerrain(battleContext); } } }
public void Riot(City city) { var userArmy = _armiesHelper.FindUserArmyInCity(city); if (userArmy == null) { city.Owner = null; city.Morale = 30; //TODO: //CENTER[MIASTA(M, 0, M_X), MIASTA(M, 0, M_Y), 1] var riotMessage = new Message(); riotMessage.Type = MessageType.RiotInTheCity; riotMessage.MapObjects = new List <MapObject> { city }; _messagesService.ShowMessage(riotMessage); return; } //TODO: CENTER[MIASTA(M, 0, M_X), MIASTA(M, 0, M_Y), 1] // there is user army in city and can fight with rebels var villagersCount = 2 + GlobalUtils.Rand(2); var count = (city.Population / 70) + 1; if (count > 10) { count = 10; } count -= villagersCount; var rebelArmy = _armiesRepository.CreateTempArmy(count); //'wieśniacy wśród buntowników for (var i = 0; i <= villagersCount; i++) { // TODO: check if 9 is villager var villager = _charactersRepository.CreateCharacter(_definitionsRepository.Races.Find(c => c.Name == "villager")); rebelArmy.Characters.Add(villager); } //TODO: BITWA[_ATAK,40,1,1,0,1,1,1,TEREN,M] var battleContext = new TerrainActionContext(); battleContext.UserArmy = userArmy; battleContext.EnemyArmy = rebelArmy; battleContext.Type = TerrainActionType.Battle; battleContext.ActionAfter = () => { city.Population -= city.Population / 4; if (rebelArmy.IsKilled) { city.Morale = 50; city.Craziness = GlobalUtils.Rand(3) + 5; } else { var successMessage = new Message(); successMessage.Type = MessageType.RiotInTheCitySuccess; successMessage.MapObjects = new List <MapObject> { city }; _messagesService.ShowMessage(successMessage); } }; var defenceMessage = new Message(); defenceMessage.Type = MessageType.RiotInTheCityWithDefence; defenceMessage.MapObjects = new List <MapObject> { city, userArmy }; defenceMessage.OnClose = () => { _viewSwitcher.OpenTerrain(battleContext); }; _messagesService.ShowMessage(defenceMessage); }