private void StartMeeting(Hero hero) { var heroParty = hero.PartyBelongedTo?.Party; var player = Hero.MainHero; var playerParty = player.PartyBelongedTo?.Party; if (!hero.IsWanderer || heroParty != null) { keepEncounter = PlayerEncounter.Current; keepSettlement = player.PartyBelongedTo.CurrentSettlement; if (heroParty == null && hero.CurrentSettlement != null) { player.PartyBelongedTo.CurrentSettlement = hero.CurrentSettlement; } PlayerEncounter.Start(); PlayerEncounter.Current.SetupFields(playerParty, heroParty ?? playerParty); meetingEncounter = PlayerEncounter.Current; meetingHero = hero; Campaign.Current.TimeControlMode = CampaignTimeControlMode.Stop; Campaign.Current.CurrentConversationContext = ConversationContext.Default; AccessTools.Field(typeof(PlayerEncounter), "_mapEventState").SetValue(PlayerEncounter.Current, PlayerEncounterState.Begin); AccessTools.Field(typeof(PlayerEncounter), "_stateHandled").SetValue(PlayerEncounter.Current, true); AccessTools.Field(typeof(PlayerEncounter), "_meetingDone").SetValue(PlayerEncounter.Current, true); } ConversationCharacterData playerCharacterData = new ConversationCharacterData(CharacterObject.PlayerCharacter, playerParty); ConversationCharacterData conversationPartnerData = new ConversationCharacterData(hero.CharacterObject, heroParty); CampaignMission.OpenConversationMission(playerCharacterData, conversationPartnerData); }
static bool DoMeetingPrefix(PlayerEncounter __instance, PartyBase ____encounteredParty, ref bool ____stateHandled, PartyBase ____defenderParty, ref bool ____meetingDone) { try { if (BanditToggle.SkipDialog && ____encounteredParty != null && ____encounteredParty.IsMobile) { var party = ____encounteredParty.MobileParty; if (party != null && party.IsBandit && !party.IsLordParty && !party.IsBanditBossParty && !party.IsCurrentlyUsedByAQuest) { Campaign.Current.CurrentConversationContext = ConversationContext.PartyEncounter; Traverse.Create(__instance).Property <PlayerEncounterState>("EncounterState").Value = PlayerEncounterState.Begin; ____stateHandled = true; var _defenderParty = ____defenderParty; if (PlayerEncounter.PlayerIsAttacker && _defenderParty.IsMobile && _defenderParty.MobileParty.Army != null && _defenderParty.MobileParty.Army.LeaderParty == _defenderParty.MobileParty && _defenderParty.MobileParty.Army.LeaderParty.MapFaction == MobileParty.MainParty.MapFaction && !_defenderParty.MobileParty.Army.LeaderParty.AttachedParties.Contains(MobileParty.MainParty)) { GameMenu.SwitchToMenu("army_encounter"); return(false); } ____meetingDone = true; GameMenu.SwitchToMenu("army_encounter"); return(false); } } return(true); } catch (Exception ex) { FileLogExtension.Log("EXCEPTION OCCURED: " + ex.Message); return(true); } }
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)); }
public void StartDialogue(Hero targetHero) { PartyBase heroParty = PartyBase.MainParty; PartyBase targetParty = targetHero.PartyBelongedTo?.Party; bool isCivilian = false; if (targetParty == null) { targetParty = targetHero.CurrentSettlement?.Party ?? targetHero.BornSettlement?.Party; isCivilian = true; } PlayerEncounter.Start(); PlayerEncounter.Current.SetupFields(heroParty, targetParty ?? heroParty); string specialScene = ""; string sceneLevels = ""; Campaign.Current.CurrentConversationContext = ConversationContext.Default; Mission conversationMission = (Mission)Campaign.Current.CampaignMissionManager.OpenConversationMission( new ConversationCharacterData(Hero.MainHero.CharacterObject, heroParty, true, false, false, isCivilian), new ConversationCharacterData(targetHero.CharacterObject, targetParty, true, false, false, isCivilian), specialScene, sceneLevels); conversationMission.AddListener(this); }
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 void CECaptivityLeave(ref MenuCallbackArgs args) { new CESubModule().LoadTexture("default"); PartyBase captorParty = PlayerCaptivity.CaptorParty; CECampaignBehavior.ExtraProps.Owner = null; if (!captorParty.IsSettlement || !captorParty.Settlement.IsTown) { PlayerCaptivity.EndCaptivity(); return; } try { if (Hero.MainHero.IsAlive) { if (Hero.MainHero.IsWounded) { Hero.MainHero.HitPoints = 20; } PlayerEncounter.ProtectPlayerSide(); MobileParty.MainParty.IsDisorganized = false; PartyBase.MainParty.AddElementToMemberRoster(CharacterObject.PlayerCharacter, 1, true); } MobileParty.MainParty.CurrentSettlement = PlayerCaptivity.CaptorParty.Settlement; if (Campaign.Current.CurrentMenuContext != null) { GameMenu.SwitchToMenu("town"); } if (Hero.MainHero.IsAlive) { Hero.MainHero.ChangeState(Hero.CharacterStates.Active); } if (captorParty.IsActive) { captorParty.PrisonRoster.RemoveTroop(Hero.MainHero.CharacterObject); } if (Hero.MainHero.IsAlive) { MobileParty.MainParty.IsActive = true; PartyBase.MainParty.SetAsCameraFollowParty(); MobileParty.MainParty.SetMoveModeHold(); PartyBase.MainParty.UpdateVisibilityAndInspected(true); } PlayerCaptivity.CaptorParty = null; } catch (Exception) { PlayerCaptivity.EndCaptivity(); } }
public void OnEndMission() { _messengers.Remove(_activeMessenger); _activeMessenger = null; if (PlayerEncounter.Current != null) { PlayerEncounter.Finish(); } }
public void ExecuteDate() { // CampaignMission.OpenBattleMission(PlayerEncounter.GetBattleSceneForMapPosition(MobileParty.MainParty.Position2D)); String scenc = PlayerEncounter.GetBattleSceneForMapPosition(MobileParty.MainParty.Position2D); List <Hero> heros = new List <Hero>(); heros.AddRange(this._spouses); heros.Add(Hero.MainHero); SpousesMissons.OpenDateMission(scenc, heros); }
private void OnConversationEnded(CharacterObject character) { if (meetingEncounter != null) { PlayerEncounter.Finish(false); meetingEncounter = null; meetingHero = null; AccessTools.Property(typeof(Campaign), "PlayerEncounter").SetValue(Campaign.Current, keepEncounter); keepEncounter = null; Hero.MainHero.PartyBelongedTo.CurrentSettlement = keepSettlement; keepSettlement = null; } }
public void BattleInCenter(MenuCallbackArgs args) { MobileParty targetParty = this._parties.Where(obj => obj.Name.ToString() == args.Text.ToString()).GetRandomElement(); if (null == targetParty) { PlayerEncounter.LeaveSettlement(); PlayerEncounter.Finish(true); return; } int upgradeLevel = Settlement.CurrentSettlement.GetComponent <Town>().GetWallLevel(); String scene = LocationComplex.Current.GetLocationWithId("center").GetSceneName(upgradeLevel); PreBattle(targetParty); StartBattleNormal(scene, upgradeLevel); }
public static void Postfix(SPScoreboardVM __instance) { StatExplainer renownExplainer = null; StatExplainer influencExplainer = null; StatExplainer moraleExplainer = null; float renownChange = 0; float influenceChange = 0; float moraleChange = 0; float goldChange = 0; float playerEarnedLootPercentage = 0; if (PlayerEncounter.IsActive) { PlayerEncounter.GetBattleRewards(out renownChange, out influenceChange, out moraleChange, out goldChange, out playerEarnedLootPercentage, ref renownExplainer, ref influencExplainer, ref moraleExplainer); } Campaign.Current.GetCampaignBehavior <SpousesStatsBehavior>().GetSpouseStatsBusiness() .EndCountHeroBattleData(__instance.BattleResultIndex, renownChange, influenceChange, moraleChange, goldChange, playerEarnedLootPercentage); }
private static void surrender_consequence_delegate(DialogueParams param, string isPlayer) // for surrenders you need to update the player encounter- not sure if this closes the window or not { isPlayer = isPlayer.ToLower(); if (isPlayer == "true") { PlayerEncounter.PlayerSurrender = true; } else if (isPlayer == "false") { //Interestingly, PlayerEncounter.EnemySurrender = true; results in a null reference crash. param.PlayerParty.Party.AddPrisoners(param.AdversaryParty.Party.MemberRoster); param.AdversaryParty.RemoveParty(); CustomSpawns.UX.ShowMessage("You have taken your enemies prisoner.", TaleWorlds.Library.Colors.Green); end_conversation_consequence_delegate(param); } else { ErrorHandler.ShowPureErrorMessage("Can't interpret " + isPlayer.ToString() + " as a bool. Possible typo in the XML consequence 'Surrender'"); } PlayerEncounter.Update(); }
public void BattleInLordShall(MenuCallbackArgs args) { Hero target = this._lordHeros.Where(obj => obj.Name.ToString() == args.Text.ToString()).GetRandomElement(); if (null == target) { PlayerEncounter.LeaveSettlement(); PlayerEncounter.Finish(true); return; } int upgradeLevel = Settlement.CurrentSettlement.GetComponent <Town>().GetWallLevel(); String scene = LocationComplex.Current.GetLocationWithId("lordshall").GetSceneName(upgradeLevel); MobileParty targetParty = target.Clan.CreateNewMobileParty(target); AddRandomTroopToParty(targetParty); SelectMainPartyMember(args, () => { PreBattle(targetParty); OpenBattleJustHero(scene, upgradeLevel); }, SneakMaxNum); //InformationManager.AddQuickInformation(); }
public void BattleInLordShall(MenuCallbackArgs args) { this._sneakType = SneakType.LordShall; Hero target = this._lordHerosWithOutParty.Where(obj => obj.Name.ToString() == args.Text.ToString()).ToList().GetRandomElement(); if (null == target) { PlayerEncounter.LeaveSettlement(); PlayerEncounter.Finish(true); return; } int upgradeLevel = Settlement.CurrentSettlement.GetComponent <Town>().GetWallLevel(); String scene = LocationComplex.Current.GetLocationWithId("lordshall").GetSceneName(upgradeLevel); //empire_castle_keep_a_l3_interior this._tempTargetParty = target.Clan.CreateNewMobileParty(target); AddRandomTroopToParty(this._tempTargetParty); SelectMainPartyMember(args, () => { PreBattle(this._tempTargetParty); OpenBattleJustHero(scene, upgradeLevel); }, SneakMaxNum); }
private void OnSessionLaunched(CampaignGameStarter campaignGameStarter) { campaignGameStarter.AddGameMenu( FastDialogueSubModule.FastEncounterMenu, "{=!}{ENCOUNTER_TEXT}", Init, GameOverlays.MenuOverlayType.Encounter, GameMenu.MenuFlags.none, null); campaignGameStarter.AddGameMenuOption( FastDialogueSubModule.FastEncounterMenu, $"{FastDialogueSubModule.FastEncounterMenu}_attack", "{=o1pZHZOF}Attack!", args => { return(ShouldShowWarOptions() && ReflectionUtils.ForceCall <bool>(GetGlobalCampaignBehaviorManager(), "game_menu_encounter_attack_on_condition", new object[] { args })); }, ConsequenceOf("game_menu_encounter_attack_on_consequence"), false, -1, false); campaignGameStarter.AddGameMenuOption( FastDialogueSubModule.FastEncounterMenu, $"{FastDialogueSubModule.FastEncounterMenu}_troops", "{=rxSz5dY1}Send troops.", (args) => { return(ShouldShowWarOptions() && ReflectionUtils.ForceCall <bool>(GetGlobalCampaignBehaviorManager(), "game_menu_encounter_order_attack_on_condition", new object[] { args })); }, ConsequenceOf("game_menu_encounter_order_attack_on_consequence"), false, -1, false); campaignGameStarter.AddGameMenuOption( FastDialogueSubModule.FastEncounterMenu, $"{FastDialogueSubModule.FastEncounterMenu}_getaway", "{=qNgGoqmI}Try to get away.", ConditionOf("game_menu_encounter_leave_your_soldiers_behind_on_condition"), ConsequenceOf("game_menu_encounter_leave_your_soldiers_behind_accept_on_consequence"), false, -1, false); campaignGameStarter.AddGameMenuOption( FastDialogueSubModule.FastEncounterMenu, $"{FastDialogueSubModule.FastEncounterMenu}_talk", "{=qNgGoqmI}Converse.", args => { args.optionLeaveType = GameMenuOption.LeaveType.Conversation; return(true); }, args => { PlayerEncounter.DoMeeting(); }, false, -1, false); campaignGameStarter.AddGameMenuOption( FastDialogueSubModule.FastEncounterMenu, $"{FastDialogueSubModule.FastEncounterMenu}_surrend", "{=3nT5wWzb}Surrender.", ConditionOf("game_menu_encounter_surrender_on_condition"), args => { PlayerEncounter.PlayerSurrender = true; PlayerEncounter.Update(); }, false, -1, false); campaignGameStarter.AddGameMenuOption( FastDialogueSubModule.FastEncounterMenu, $"{FastDialogueSubModule.FastEncounterMenu}_leave", "{=2YYRyrOO}Leave...", ConditionOf("game_menu_encounter_leave_on_condition"), (args) => { MenuHelper.EncounterLeaveConsequence(args); if (PartyBase.MainParty.IsMobile && PartyBase.MainParty.MobileParty != null) { PartyBase.MainParty.MobileParty.IsDisorganized = false; } }, true, -1, false); }
internal void CECaptorPrisonerRebel(MenuCallbackArgs args) { CEPersistence.animationPlayEvent = false; TroopRoster releasedPrisoners = TroopRoster.CreateDummyTroopRoster(); try { foreach (TroopRosterElement element in MobileParty.MainParty.PrisonRoster.GetTroopRoster()) { if (element.Character.IsHero) { element.Character.HeroObject.ChangeState(Hero.CharacterStates.Active); } } releasedPrisoners.Add(MobileParty.MainParty.PrisonRoster.ToFlattenedRoster()); MobileParty.MainParty.PrisonRoster.Clear(); } catch (Exception) { CECustomHandler.LogToFile("Couldn't find anymore prisoners."); } if (!releasedPrisoners.GetTroopRoster().IsEmpty()) { try { TroopRosterElement leader = releasedPrisoners.GetTroopRoster().FirstOrDefault(hasHero => hasHero.Character.IsHero); Clan clan = null; Settlement nearest = null; MobileParty prisonerParty = null; if (leader.Character != null) { clan = leader.Character.HeroObject.Clan; nearest = SettlementHelper.FindNearestSettlement(settlement => settlement.OwnerClan == clan) ?? SettlementHelper.FindNearestSettlement(settlement => true); prisonerParty = LordPartyComponent.CreateLordParty("CustomPartyCE_" + MBRandom.RandomInt(int.MaxValue), leader.Character.HeroObject, MobileParty.MainParty.Position2D, 0.5f, nearest); } else { clan = Clan.BanditFactions.First(clanLooters => clanLooters.StringId == "looters"); clan.Banner.SetBannerVisual(Banner.CreateRandomBanner().BannerVisual); nearest = SettlementHelper.FindNearestSettlement(settlement => true); prisonerParty = BanditPartyComponent.CreateBanditParty("CustomPartyCE_" + 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.ActualClan = clan; prisonerParty.MemberRoster.Add(releasedPrisoners.ToFlattenedRoster()); prisonerParty.IsActive = true; prisonerParty.HomeSettlement = nearest; prisonerParty.SetMovePatrolAroundPoint(nearest.IsTown ? nearest.GatePosition : nearest.Position2D); if (leader.Character != null) { prisonerParty.Party.Owner = leader.Character.HeroObject; #if BETA prisonerParty.ChangePartyLeader(leader.Character); #else prisonerParty.ChangePartyLeader(leader.Character, true); #endif } else { prisonerParty.Party.Owner = clan.Leader; } prisonerParty.RecentEventsMorale = -100; prisonerParty.Aggressiveness = 0.2f; prisonerParty.InitializePartyTrade(0); Hero.MainHero.HitPoints += 40; CECustomHandler.LogToFile(prisonerParty.Leader.Name.ToString()); PlayerEncounter.RestartPlayerEncounter(MobileParty.MainParty.Party, prisonerParty.Party); GameMenu.SwitchToMenu("encounter"); } catch (Exception) { CECaptorContinue(args); } } else { CECaptorContinue(args); } }
private void OnSessionLaunched(CampaignGameStarter starter) { MBTextManager.SetTextVariable("PLAYER_CAMP_STATE", "idling"); MBTextManager.SetTextVariable("PLAYER_CAMP_START_STOP", "Start"); starter.AddGameMenu( PlayerCampMenu, "Player camp.\n \nTroops are currently {PLAYER_CAMP_STATE}.\nResources left for {PLAYER_CAMP_RESOURCES} days.", null ); starter.AddGameMenuOption( PlayerCampMenu, "player_camp_train", "{PLAYER_CAMP_START_STOP} training", Utils.positiveLeaveType(GameMenuOption.LeaveType.Recruit), _ => { if (_establishedCamp != null) { _establishedCamp.IsTraining = !_establishedCamp.IsTraining; MBTextManager.SetTextVariable("PLAYER_CAMP_STATE", _establishedCamp.IsTraining ? "training" : "idling"); MBTextManager.SetTextVariable("PLAYER_CAMP_START_STOP", _establishedCamp.IsTraining ? "Stop" : "Start"); } } ); starter.AddGameMenuOption( PlayerCampMenu, "player_camp_remove", "Remove camp", Utils.positiveLeaveType(GameMenuOption.LeaveType.Continue), _ => { RemoveCamp(); PlayerEncounter.Finish(); }, true ); starter.AddGameMenuOption( PlayerCampMenu, "player_camp_wait", "Wait", Utils.positiveLeaveType(GameMenuOption.LeaveType.Wait), _ => GameMenu.ActivateGameMenu("player_camp_menu_wait") ); starter.AddGameMenuOption( PlayerCampMenu, "player_camp_leave", "Leave", Utils.positiveLeaveType(GameMenuOption.LeaveType.Leave), _ => PlayerEncounter.Finish() ); // wait menu starter.AddWaitGameMenu("player_camp_menu_wait", "Waiting.", null, args => { args.MenuContext.GameMenu.AllowWaitingAutomatically(); args.optionLeaveType = GameMenuOption.LeaveType.Wait; return(true); }, null, null, GameMenu.MenuAndOptionType.WaitMenuHideProgressAndHoursOption ); starter.AddGameMenuOption( "player_camp_menu_wait", "wait_leave", "{=UqDNAZqM}Stop waiting", Utils.positiveLeaveType(GameMenuOption.LeaveType.Leave), _ => GameMenu.ActivateGameMenu(PlayerCampMenu) ); }
public void Leave(MenuCallbackArgs args) { PlayerEncounter.LeaveSettlement(); PlayerEncounter.Finish(true); }
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); } }
private void game_menu_steal_wait_on_consequence(MenuCallbackArgs args) { PlayerEncounter.Finish(true); }
protected override void OnMenuOptionClicked(MenuCallbackArgs args) { PlayerEncounter.LeaveSettlement(); PlayerEncounter.Finish(); }