// can potentially go back in time but some parts of the game don't expect it public static void KingdomTimelineAdvanceDays(int days) { var kingdom = KingdomState.Instance; var timelineManager = kingdom.TimelineManager; // from KingdomState.SkipTime foreach (var kingdomTask in kingdom.ActiveTasks) { if (!kingdomTask.IsFinished && !kingdomTask.IsStarted && !kingdomTask.NeedsCommit && kingdomTask.HasAssignedLeader) { kingdomTask.Start(true); } } // from KingdomTimelineManager.Advance if (!KingdomTimelineManager.CanAdvanceTime()) { return; } Game.Instance.AdvanceGameTime(TimeSpan.FromDays(days)); if (Game.Instance.IsModeActive(GameModeType.Kingdom)) { foreach (var unitEntityData in Game.Instance.Player.AllCharacters) { RestController.ApplyRest(unitEntityData.Descriptor); } } timelineManager.UpdateTimeline(); }
static bool Prefix(KingdomUIEventWindowFooter __instance, ref bool __result, KingdomEventUIView kingdomEventView, ref bool enable) { try { if (!Main.enabled) { return(true); } if (!Main.settings.currencyFallback) { return(true); } enable = false; if (kingdomEventView.Task == null) { __result = false; return(false); } if (kingdomEventView.Task.IsStarted) { __result = false; return(false); } enable = (kingdomEventView.Task.AssignedLeader != null); if (enable && kingdomEventView.CostInBP > 0) { enable = KingdomCurrencyFallback.CanSpend(kingdomEventView.CostInBP); } if (enable && !KingdomTimelineManager.CanAdvanceTime()) { enable = !IsSpendRulerTimeDays(__instance); } __result = true; return(false); } catch (Exception ex) { Main.Error(ex); return(true); } }
static bool Prefix(KingdomTimelineManager __instance) { try { if (!Main.enabled) { return(true); } if (!Main.settings.pauseKingdomTimeline) { return(true); } //Unpause kingdom timeline if there is ever a game over triggered if (KingdomState.Instance.ActiveEvents.Any(e => Util.CausesGameOver(e.EventBlueprint))) { Main.settings.pauseKingdomTimeline = false; return(true); } int delta = (int)Game.Instance.TimeController.GameTime.TotalDays - KingdomState.Instance.CurrentDay - KingdomState.Instance.StartDay; KingdomState.Instance.StartDay = (int)Game.Instance.TimeController.GameTime.TotalDays - KingdomState.Instance.CurrentDay; bool changed = false; for (int i = 0; i < delta; i++) { FixTimeline(1); changed = changed || UpdateTimelineOneDay(__instance); } EventBus.RaiseEvent(delegate(IKingdomTimeChanged h) { h.OnTimeChanged(changed); }); } catch (Exception ex) { Main.Error(ex); } return(true); }