Beispiel #1
0
        public void AfterBattle()
        {
            if (LoserUser.LastStep.GameUserInfo.Unit.Count(p => p.Terrain1 == this.LocalDefenceTerrain) > 0)
            {
                //куда впринципе можно отступить
                var minRetreatCount = 0;
                var retreatTerrain  = GetRetreatTerrain(out minRetreatCount);

                //отступление не возможно
                if (retreatTerrain.Count == 0)
                {
                    Step newStep     = LoserUser.LastStep.CopyStep("Default", true);
                    var  retreatUnit = newStep.GameUserInfo.Unit.Where(p => p.Terrain1 == this.LocalDefenceTerrain).ToList();
                    retreatUnit.ForEach(p =>
                    {
                        newStep.GameUserInfo.Unit.Remove(p);
                        newStep.NewMessage(string.Format("dynamic_unitRemove1*unitType_{0}*unitRemoveType_disbanding0*unitRemoveType_noRetreats", p.UnitType));
                    });
                    AfterBattle();
                }
                //Возможен единственный вариант
                else if (retreatTerrain.Count == 1)
                {
                    Step newStep     = LoserUser.LastStep.CopyStep("Default", true);
                    var  retreatUnit = newStep.GameUserInfo.Unit.Where(p => p.Terrain1 == this.LocalDefenceTerrain).OrderByDescending(p => p.UnitType1.Strength).ToList();
                    retreatUnit.ForEach(p => AutoRetreatUnit(LoserUser, p, retreatTerrain[0]));
                    TerrainHold(LoserUser, retreatTerrain[0]);
                    AfterBattle();
                }
                //Множество вариантов
                else if (!RobbStark(WinnerUser, LoserUser))
                {
                    Step newStep = LoserUser.LastStep.CopyStep("Отступление", false);
                    newStep.NewMarch();
                    newStep.NewMessage("dynamic_planning*stepType_Отступление");
                    newStep.NewMessage("dynamic_retreatsCount*" + minRetreatCount);
                }
            }
            else
            {
                //карты после боя
                if (AfterBattleCard())
                {
                    GameHost.NewDoStep(_Game, _Game.DbContext.DoType.Single(p => p.Sort == 1));
                }
            }
        }
Beispiel #2
0
        //все ходы исполненны
        static private void NextStage(Game game)
        {
            Step     lastStep = game.HomeSteps.Last(p => p.StepType != "Default");
            GameUser user     = lastStep.GameUser1;

            switch (lastStep.StepType)
            {
            case "Замысел":
            {
                ClearEmptyOrder(game);

                GameUser ravenGameUser = game.HomeUsersSL.Single(p => p.LastStep.GameUserInfo.RavenInfluence == 1);
                Step     newStep       = ravenGameUser.LastStep.CopyStep("Посыльный_ворон", false);
                newStep.NewRaven();
                newStep.NewMessage("dynamic_planning*stepType_Посыльный_ворон");
                break;
            }

            case "Посыльный_ворон":
            case "Неожиданный_шаг":
            case "Разведка_за_стеной":
            {
                game.Vesteros.LastStep.IsNew = false;
                Step step = game.Vesteros.LastStep.CopyStep("Набег", true);
                step.NewMessage("dynamic_planning*stepType_Замысел");

                game.HomeSteps.ForEach(p => p.IsNew = false);
                GameHost.NewDoStep(game, game.DbContext.DoType.Single(p => p.Sort == 0), 0);
                break;
            }

            case "Набег":
                GameHost.NewDoStep(game, game.DbContext.DoType.Single(p => p.Sort == 0), game.ThroneProgress);
                break;

            case "dragon_Rodrik_the_Reader":
            case "dragon_Ser_Gerris_Drinkwater":
            case "dragon_Reek":
            case "dragon_Ser_Ilyn_Payne":
            case "dragon_Melisandre":
            case "dragon_Jon_Snow":
            case "Робб_Старк":
            case "Ренли_Баратеон":
            case "Серсея_Ланнистер":
            case "Пестряк":
            case "Отступление":
            case "Поход":
                GameHost.NewDoStep(game, game.DbContext.DoType.Single(p => p.Sort == 1), game.ThroneProgress);
                break;

            case "Усиление_власти_Вестерос":
                if (lastStep.GameUserInfo.Order.Count != 0)
                {
                    Step newStep = lastStep.CopyStep("Усиление_власти_Вестерос", false);
                    newStep.NewMessage("dynamic_planning*stepType_Усиление_власти_Вестерос");
                }
                else
                {
                    game.NewSbor();
                }
                break;

            case "Усиление_власти":
                GameHost.NewDoStep(game, game.DbContext.DoType.Single(p => p.Sort == 2), game.ThroneProgress);
                break;

            case "Роспуск_войск":
                switch (lastStep.March.SourceOrder)
                {
                //Захват порта с автороспуском войск (предел количества типов)
                case "Захват_порта":
                    GameHost.NewDoStep(game, game.DbContext.DoType.Single(p => p.Sort == 1), game.ThroneProgress);
                    break;
                }
                break;

            case "Подмога":
                UpdateSupport(game);
                break;

            case "Сражение":
            case "Тирион_Ланнистер":
            case "Эйерон_Сыровласый":
            case "dragon_Qyburn":
            case "Доран_Мартелл":
            case "Королева_Шипов":
            case "Валирийский_меч":
            case "dragon_Aeron_Damphair":
                game.GameInfo.Battle.UpdateBattle();
                break;

            case "Борьба_за_влияние":
                if (UpdateVoting(game, lastStep.Voting.Target))
                {
                    game.NextVoting(lastStep.Voting.Target);
                }
                break;
            }
        }