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)); } } }
//все ходы исполненны 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; } }