Exemplo n.º 1
0
        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);
                }
            }
        }
Exemplo n.º 2
0
        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);
        }