private static void NoblePatch(BannerInvestigationQuestBehavior __instance) { if (CSCharCreationOption.CSGameOption == 1) { __instance.GetType().GetField("_allNoblesDead", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(__instance, true); } if (CSCharCreationOption.CSGameOption == 2) { CampaignEvents.RemoveListeners(__instance); } }
private static bool Prefix(MainStoryLine __instance, bool isSkipped) { __instance.TutorialPhase.GetType().GetMethod("CompleteTutorial", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(__instance.TutorialPhase, new object[] { isSkipped }); CSOnStoryModeEnded(); __instance.GetType().GetProperty("FirstPhase").SetValue(__instance, new FirstPhase()); //Combining multiple cleanup/complete logics that do not get called if you dont leave tutorial manually. CampaignEvents.RemoveListeners(Campaign.Current.GetCampaignBehavior <TutorialPhaseCampaignBehavior>()); StoryModeEvents.RemoveListeners(Campaign.Current.GetCampaignBehavior <TutorialPhaseCampaignBehavior>()); //if(StoryMode.StoryModeObjects.StoryModeHeroes. != null ){ //StoryMode.StoryMode.Current.MainStoryLine.Brother.ChangeState(Hero.CharacterStates.Disabled); //} return(false); }
private void OnHourlyTick() { foreach (Hero hero in Hero.All) { if (!hero.IsTemplate && hero.IsAlive && hero.Mother != null && hero.Father != null && !hero.CharacterObject.IsOriginalCharacter) { FixAdoptBastard(hero); FixBastardOccupation(hero); } } CampaignEvents.RemoveListeners(this); }
public override void StartEvent() { if (Settings.GeneralSettings.DebugMode) { InformationManager.DisplayMessage(new InformationMessage($"Starting {this.RandomEventData.EventType}", RandomEventsSubmodule.textColor)); } List <InquiryElement> inquiryElements = new List <InquiryElement>(); inquiryElements.Add(new InquiryElement("a", "Order the men to gather some food.", null)); inquiryElements.Add(new InquiryElement("b", "There's no time.", null)); MultiSelectionInquiryData msid = new MultiSelectionInquiryData( eventTitle, // Title "While traveling you come across a large meadow with grazing deer surrounded by grape vines. If you have some spare time, perhaps you could collect some food.", // Description inquiryElements, // Options false, // Can close menu without selecting an option. Should always be false. 1, // Force a single option to be selected. Should usually be true "Okay", // The text on the button that continues the event null, // The text to display on the "cancel" button, shouldn't ever need it. (elements) => // How to handle the selected option. Will only ever be a single element unless force single option is off. { if ((string)elements[0].Identifier == "a") { Campaign.Current.TimeControlMode = CampaignTimeControlMode.UnstoppableFastForwardForPartyWaitTime; MobileParty.MainParty.IsActive = false; waitPos = MobileParty.MainParty.Position2D; //hourlyTickEvent = CampaignEvents.CreatePeriodicEvent(1f, 0f); hourlyTickEvent = CampaignEvents.CreatePeriodicEvent(CampaignTime.HoursFromNow(1f), CampaignTime.Zero); hourlyTickEvent.AddHandler(new MBCampaignEvent.CampaignEventDelegate(HourlyTick)); } else if ((string)elements[0].Identifier == "b") { StopEvent(); } else { MessageBox.Show($"Error while selecting option for \"{this.RandomEventData.EventType}\""); } }, null); // What to do on the "cancel" button, shouldn't ever need it. InformationManager.ShowMultiSelectionInquiry(msid, true); }
public static bool DisperseArmy(ref CampaignEvents __instance, ref MbEvent <QuestBase> ____onQuestStartedEvent, QuestBase quest) { try { if (____onQuestStartedEvent != null) { ____onQuestStartedEvent.Invoke(quest); } } catch (Exception ex) { InformationManager.DisplayMessage(new InformationMessage($"GCO prevented quest crash with error {ex.Message}")); } return(false); }
private TaskStatus NHLBehavior <AddType, RemoveType>(Campaign campaign, TaskMode mode) where RemoveType : CampaignBehaviorBase where AddType : CampaignBehaviorBase, new() { CampaignBehaviorManager cbm = (CampaignBehaviorManager)campaign.CampaignBehaviorManager; if (mode != TaskMode.Add) { var cgb = campaign.GetCampaignBehavior <RemoveType>(); CampaignEvents.RemoveListeners(cgb); cbm.RemoveBehavior <RemoveType>(); } if (mode != TaskMode.Remove) { cbm.AddBehavior(new AddType()); } return(TaskStatus.Completed); }
public void OnClose() { Events.RemoveListeners(this); CampaignEvents.RemoveListeners(this); }
private void OnChangeClanLeader(float dt) { MobileParty leaderParty = leader.PartyBelongedTo; MobileParty newLeaderParty = newLeader.PartyBelongedTo; Utils.Print($"[OnChangeClanLeader] current leader {leader.Name} new leader {newLeader.Name}"); if (leader == null || newLeader == null || leaderParty == null || newLeaderParty == null) { return; } if (newLeader.GovernorOf != null) { ChangeGovernorAction.ApplyByGiveUpCurrent(newLeader); } if (leader.GovernorOf != null) { ChangeGovernorAction.ApplyByGiveUpCurrent(leader); } string evt; while ((evt = newLeader.GetHeroOccupiedEvents().FirstOrDefault()) != default) { newLeader.RemoveEventFromOccupiedHero(evt); } while ((evt = leader.GetHeroOccupiedEvents().FirstOrDefault()) != default) { leader.RemoveEventFromOccupiedHero(evt); } GiveGoldAction.ApplyBetweenCharacters(leader, newLeader, leader.Gold, true); leader.Clan.SetLeader(newLeader); Settlement currentSettlement = newLeaderParty.CurrentSettlement; ChangePlayerCharacterAction.Apply(newLeader); if (newLeaderParty != leaderParty) { if (newLeaderParty.CurrentSettlement == null) { EnterSettlementAction.ApplyForParty(newLeaderParty, currentSettlement); } foreach (var troop in leaderParty.MemberRoster.GetTroopRoster()) { if (troop.Character == leader.CharacterObject) { continue; } leaderParty.MemberRoster.AddToCounts(troop.Character, -troop.Number); newLeaderParty.MemberRoster.AddToCounts(troop.Character, troop.Number); } foreach (var troop in leaderParty.PrisonRoster.GetTroopRoster()) { if (troop.Character == leader.CharacterObject) { continue; } leaderParty.PrisonRoster.AddToCounts(troop.Character, -troop.Number); newLeaderParty.PrisonRoster.AddToCounts(troop.Character, troop.Number); } ItemRosterElement i; while (leaderParty.ItemRoster.Count() > 0) { i = leaderParty.ItemRoster.First(); leaderParty.ItemRoster.AddToCounts(i.EquipmentElement, -i.Amount); newLeaderParty.ItemRoster.AddToCounts(i.EquipmentElement, i.Amount); } leaderParty.RemoveParty(); AddHeroToPartyAction.Apply(leader, newLeaderParty); } else { leaderParty.Party.Owner = newLeader; var partyList = leaderParty.Party.MemberRoster; partyList.RemoveTroop(newLeader.CharacterObject); partyList.AddToCounts(newLeader.CharacterObject, 1, true); var newPartyName = new TextObject("{=shL0WElC}{TROOP.NAME}'s Party"); newPartyName.SetCharacterProperties("TROOP", newLeader.CharacterObject); leaderParty.SetCustomName(newPartyName); } leader.HasMet = true; newLeader.Clan.Influence = Math.Max(0, newLeader.Clan.Influence - 100); HeroFixHelper.FixHeroStats(newLeader); HeroFixHelper.FixEquipment(newLeader); newLeaderParty.Party.Visuals.SetMapIconAsDirty(); CampaignEventDispatcher.Instance.OnArmyOverlaySetDirty(); newLeader = null; leader = null; CampaignEvents.RemoveListeners(this); Utils.Print($"[OnChangeClanLeader] changed over"); }
private void OnChangeClanLeader(float dt) { MobileParty leaderParty = leader.PartyBelongedTo; MobileParty newLeaderParty = newLeader.PartyBelongedTo; if (leader == null || newLeader == null || leaderParty == null || newLeaderParty == null || leaderParty == newLeaderParty) { return; } if (newLeader.GovernorOf != null) { ChangeGovernorAction.ApplyByGiveUpCurrent(newLeader); } if (leader.GovernorOf != null) { ChangeGovernorAction.ApplyByGiveUpCurrent(leader); } var qm = Campaign.Current.QuestManager; if (qm != null) { QuestBase q; while ((q = qm.Quests.FirstOrDefault(s => !s.IsSpecialQuest)) != null) { q.CompleteQuestWithFail(); } } string evt; while ((evt = newLeader.GetHeroOccupiedEvents().FirstOrDefault()) != default) { newLeader.RemoveEventFromOccupiedHero(evt); } while ((evt = leader.GetHeroOccupiedEvents().FirstOrDefault()) != default) { leader.RemoveEventFromOccupiedHero(evt); } GiveGoldAction.ApplyBetweenCharacters(leader, newLeader, leader.Gold, true); leader.Clan.SetLeader(newLeader); ChangePlayerCharacterAction.Apply(newLeader); TroopRosterElement t; while (leaderParty.MemberRoster.Count(x => x.Character != leader.CharacterObject) > 0) { t = leaderParty.MemberRoster.First(x => x.Character != leader.CharacterObject); leaderParty.MemberRoster.AddToCounts(t.Character, -t.Number); newLeaderParty.MemberRoster.AddToCounts(t.Character, t.Number); } while (leaderParty.PrisonRoster.Count() > 0) { t = leaderParty.PrisonRoster.First(); leaderParty.PrisonRoster.AddToCounts(t.Character, -t.Number); newLeaderParty.PrisonRoster.AddToCounts(t.Character, t.Number); } ItemRosterElement i; while (leaderParty.ItemRoster.Count() > 0) { i = leaderParty.ItemRoster.First(); leaderParty.ItemRoster.AddToCounts(i.EquipmentElement, -i.Amount); newLeaderParty.ItemRoster.AddToCounts(i.EquipmentElement, i.Amount); } leaderParty.RemoveParty(); AddHeroToPartyAction.Apply(leader, newLeaderParty); newLeader.Clan.Influence = Math.Max(0, newLeader.Clan.Influence - 100); HeroFixHelper.FixHeroStats(newLeader); HeroFixHelper.FixEquipment(newLeader); newLeader = null; leader = null; CampaignEvents.RemoveListeners(this); }
public override void OnGameInitializationFinished(Game game) { base.OnGameInitializationFinished(game); CampaignEvents.RemoveListeners((object)Campaign.Current.GetCampaignBehavior <DesertionCampaignBehavior>()); }