public static void StartBattle(PartyBase defenderParty) { StartBattleAction.Apply(MobileParty.MainParty.Party, defenderParty); PlayerEncounter.RestartPlayerEncounter(MobileParty.MainParty.Party, defenderParty, true); PlayerEncounter.Update(); CampaignMission.OpenBattleMission(PlayerEncounter.GetBattleSceneForMapPosition(MobileParty.MainParty.Position2D)); }
private void PreBattle(MobileParty targetParty) { PlayerEncounter.LeaveSettlement(); PlayerEncounter.Finish(true); StartBattleAction.Apply(targetParty.Party, MobileParty.MainParty.Party); PlayerEncounter.RestartPlayerEncounter(MobileParty.MainParty.Party, targetParty.Party, true); PlayerEncounter.Update(); }
internal static void StartRevolt(Settlement settlement) { var textObject = new TextObject(Localization.GameTexts.RevoltsRevoltStart); textObject.SetTextVariable("SETTLEMENT", settlement.Name); InformationManager.AddNotice(new SettlementRebellionMapNotification(settlement, textObject)); InformationManager.AddQuickInformation(textObject); var settlementInfo = Managers.Settlement.Get(settlement); var atWarWithLoyalFaction = settlementInfo.CurrentFaction.IsAtWarWith(settlementInfo.LoyalFaction); Hero leader; if (atWarWithLoyalFaction) { leader = Managers.Faction.GetLordWithLeastFiefs(settlementInfo.LoyalFaction).HeroObject; } else { leader = Managers.Character.CreateRandomLeader(settlementInfo.LoyalFaction?.Leader?.Clan ?? settlement.OwnerClan, settlementInfo); Managers.Character.Get(leader.CharacterObject).IsRevoltKingdomLeader = true; var bannerInfo = Managers.Banner.GetBanner(settlementInfo); var banner = bannerInfo != null ? new Banner(bannerInfo.BannerId) : null; var clan = Managers.Clan.CreateClan(leader, null, null, banner); Managers.Clan.Get(leader.Clan).IsRevoltClan = true; textObject = new TextObject(Localization.GameTexts.RevoltsMinorFactionKingdom); textObject.SetTextVariable("SETTLEMENT", settlement.Name); Managers.Kingdom.CreateKingdom(leader, textObject, textObject, banner ?? clan.Banner, false); Managers.Kingdom.Get(leader.Clan.Kingdom).IsRevoltKingdom = true; } var mobileParty = Managers.Party.CreateMobileParty(leader, null, settlement.GatePosition, settlement, !atWarWithLoyalFaction, true); var amountOfTroops = (RevolutionsSettings.Instance.RevoltsGeneralBaseSize + (int)(settlement.Prosperity * RevolutionsSettings.Instance.RevoltsGeneralProsperityMulitplier)) / 3; var basicUnits = new TroopRoster(); basicUnits.AddToCounts(leader.Culture.RangedMilitiaTroop, amountOfTroops); basicUnits.AddToCounts(leader.Culture.MeleeMilitiaTroop, amountOfTroops * 2); mobileParty.MemberRoster.Add(basicUnits); if (settlement.MilitaParty != null && settlement.MilitaParty.CurrentSettlement == settlement && settlement.MilitaParty.MapEvent == null) { foreach (var troopRosterElement in settlement.MilitaParty.MemberRoster) { mobileParty.AddElementToMemberRoster(troopRosterElement.Character, troopRosterElement.Number, false); } settlement.MilitaParty.RemoveParty(); } mobileParty.ChangePartyLeader(mobileParty.Party.Owner.CharacterObject, false); if (!FactionManager.IsAtWarAgainstFaction(leader.MapFaction, settlement.MapFaction)) { DeclareWarAction.Apply(leader.MapFaction, settlement.MapFaction); } var revolt = new Revolt(mobileParty.Party.Id, settlement, !atWarWithLoyalFaction); Managers.Revolt.Revolts.Add(revolt); settlementInfo.HasRebellionEvent = true; if (settlementInfo.Garrision == null || settlementInfo.Garrision.TotalStrength == 0) { RevoltBehavior.EndSucceededRevolt(revolt); return; } mobileParty.Ai.SetDoNotMakeNewDecisions(true); StartBattleAction.Apply(mobileParty.Party, settlementInfo.Garrision); }
internal void CECaptorHuntPrisoners(MenuCallbackArgs args, int amount = 20) { CEPersistence.animationPlayEvent = false; TroopRoster releasedPrisoners = TroopRoster.CreateDummyTroopRoster(); if (CESettings.Instance != null) { amount = CESettings.Instance.AmountOfTroopsForHunt; } try { for (int i = 0; i < amount; i++) { TroopRosterElement test = MobileParty.MainParty.PrisonRoster.GetTroopRoster().Where(troop => !troop.Character.IsHero).GetRandomElementInefficiently(); if (test.Character == null) { continue; } MobileParty.MainParty.PrisonRoster.RemoveTroop(test.Character); releasedPrisoners.AddToCounts(test.Character, 1, true); } } catch (Exception) { CECustomHandler.LogToFile("Couldn't find anymore prisoners."); } if (!releasedPrisoners.GetTroopRoster().IsEmpty()) { CECaptorContinue(args); try { Clan clan = Clan.BanditFactions.First(clanLooters => clanLooters.StringId == "looters"); clan.Banner.SetBannerVisual(Banner.CreateRandomBanner().BannerVisual); Settlement nearest = SettlementHelper.FindNearestSettlement(settlement => { return(true); }); MobileParty prisonerParty = BanditPartyComponent.CreateBanditParty("CustomPartyCE_Hunt_" + MBRandom.RandomInt(int.MaxValue), clan, nearest.Hideout, false); PartyTemplateObject defaultPartyTemplate = clan.DefaultPartyTemplate; prisonerParty.InitializeMobileParty(defaultPartyTemplate, MobileParty.MainParty.Position2D, 0.5f, 0.1f, -1); prisonerParty.SetCustomName(new TextObject("{=CEEVENTS1107}Escaped Captives")); prisonerParty.MemberRoster.Clear(); prisonerParty.MemberRoster.Add(releasedPrisoners.ToFlattenedRoster()); prisonerParty.RecentEventsMorale = -100; prisonerParty.IsActive = true; prisonerParty.ActualClan = clan; prisonerParty.Party.Owner = clan.Leader; prisonerParty.Party.Visuals.SetMapIconAsDirty(); prisonerParty.HomeSettlement = nearest; prisonerParty.InitializePartyTrade(0); Hero.MainHero.HitPoints += 40; CECustomHandler.LogToFile(prisonerParty.Leader.Name.ToString()); PlayerEncounter.RestartPlayerEncounter(prisonerParty.Party, MobileParty.MainParty.Party, true); StartBattleAction.Apply(MobileParty.MainParty.Party, prisonerParty.Party); PlayerEncounter.Update(); CEPersistence.huntState = CEPersistence.HuntState.StartHunt; CampaignMission.OpenBattleMission(PlayerEncounter.GetBattleSceneForMapPosition(MobileParty.MainParty.Position2D)); } catch (Exception) { CECaptorKillPrisoners(args, amount); } } else { CECaptorContinue(args); } }