Esempio n. 1
0
        // 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);
 }