static bool Prefix(KingdomTask __instance, bool raiseEvent) { try { if (!Main.enabled) { return(true); } if (!Main.settings.currencyFallback) { return(true); } IsStartedSetter(__instance, true); StartedOnSetter(__instance, KingdomState.Instance.CurrentDay); KingdomCurrencyFallback.SpendPoints(__instance.OneTimeBPCost); if (raiseEvent) { OnTaskChanged(__instance); } EventBus.RaiseEvent((IKingdomTaskEventsHandler h) => h.OnTaskStarted(__instance)); if (__instance.SkipPlayerTime <= 0) { return(false); } Kingmaker.Game.Instance.AdvanceGameTime(TimeSpan.FromDays(__instance.SkipPlayerTime)); foreach (UnitEntityData unitEntityData in Kingmaker.Game.Instance.Player.AllCharacters) { RestController.ApplyRest(unitEntityData.Descriptor); } new KingdomTimelineManager().UpdateTimeline(); return(false); } catch (Exception ex) { Main.Error(ex); return(true); } }
static bool Prefix(LocationData __instance) { try { if (!Main.enabled) { return(true); } if (!Main.settings.currencyFallback) { return(true); } if (__instance.Resource != ResourceStateType.CanClaim) { return(false); } KingdomCurrencyFallback.SpendPoints(KingdomRoot.Instance.DefaultMapResourceCost); KingdomState.Instance.Resources.Add(__instance.Blueprint); __instance.Blueprint.ResourceStats.Apply(); if (GlobalMapRules.Instance && GlobalMapRules.Instance.ClaimedResourceVisual) { GlobalMapLocation locationObject = GlobalMapRules.Instance.GetLocationObject(__instance.Blueprint); if (locationObject) { UnityEngine.Object.Instantiate(GlobalMapRules.Instance.ClaimedResourceVisual, locationObject.transform, false); } } if (KingdomRoot.Instance.Locations.Count(l => l.HasKingdomResource) == KingdomState.Instance.Resources.Count) { Kingmaker.Game.Instance.Player.Achievements.Unlock(AchievementType.IntensiveDevelopment); } return(false); } catch (Exception ex) { Main.Error(ex); return(true); } }
static bool Prefix(SettlementState __instance, SettlementBuilding building, ref SettlementBuilding __result, BuildingsCollection ___m_Buildings) { try { if (!Main.enabled) { return(true); } if (!Main.settings.currencyFallback) { return(true); } if (!building.IsFinished || !___m_Buildings.HasFact(building) || !building.Blueprint.UpgradesTo) { return(false); } if (!KingdomCurrencyFallback.CanSpend(__instance.GetActualCost(building.Blueprint.UpgradesTo))) { UberDebug.LogWarning("Cannot upgrade " + building.Blueprint + ": not enough BP"); return(false); } KingdomCurrencyFallback.SpendPoints(__instance.GetActualCost(building.Blueprint)); SettlementBuilding result = ___m_Buildings.Upgrade(building); __instance.Update(); EventBus.RaiseEvent((ISettlementBuildUpdate h) => h.OnBuildUpdate(building)); __result = result; return(false); } catch (Exception ex) { Main.Error(ex); return(true); } }
static bool Prefix(SettlementState __instance, ref SettlementBuilding __result, BlueprintSettlementBuilding building, SettlementGridTopology.Slot slot, bool force, ref int ___m_SlotsLeft, BuildingsCollection ___m_Buildings) { try { if (!Main.enabled) { return(true); } if (!Main.settings.currencyFallback) { return(true); } var removedBuilding = true; if (!force) { if (!__instance.CanBuild(building)) { __result = null; return(false); } BuildingSlot slotObject = slot.GetSlotObject(); if (slotObject?.CanBuildHere(building) != true) { return(false); } KingdomCurrencyFallback.SpendPoints(__instance.GetActualCost(building)); removedBuilding = __instance.FreeBuildings.Remove(building) || KingdomState.Instance.FreeBuildings.Remove(building); } SettlementBuilding settlementBuilding = ___m_Buildings.Build(building); settlementBuilding.BuildOnSlot(slot); if (building.SpecialSlot == SpecialSlotType.None) { ___m_SlotsLeft -= building.SlotCount; } if (!force && !removedBuilding || SellDiscountedBuildingGetter(__instance) != building) { SellDiscountedBuildingSetter(__instance, null); } __instance.Update(); EventBus.RaiseEvent((ISettlementBuildingHandler h) => h.OnBuildingStarted(__instance, settlementBuilding)); __result = settlementBuilding; return(false); } catch (Exception ex) { Main.Error(ex); return(true); } }
static bool Prefix(RegionState __instance, RegionSettlementLocation settlementLocation, string name) { try { if (!Main.enabled) { return(true); } if (!Main.settings.currencyFallback) { return(true); } if (!__instance.Blueprint.SettlementBuildArea) { UberDebug.LogError("Cannot found a settlement in {0}: no building area set up", settlementLocation); return(false); } if (__instance.Settlement != null) { UberDebug.LogError("Cannot found a settlement in {0}: already built", settlementLocation); return(false); } if (settlementLocation != null && settlementLocation.AssociatedLocation == null) { UberDebug.LogError("Cannot found a settlement in {0}: no globalmap location associated", settlementLocation); return(false); } if (settlementLocation == null && __instance.Blueprint.SettlementGlobalmapLocations.Length == 0) { UberDebug.LogError("Cannot found a settlement in {0}: no location specified and no default found", __instance.Blueprint); return(false); } KingdomCurrencyFallback.SpendPoints(KingdomRoot.Instance.SettlementBPCost); var settlementState = new SettlementState(SettlementState.LevelType.Village) { Region = __instance }; SettlementState settlementState2 = settlementState; settlementState2.HasWaterSlot = settlementLocation?.HasWaterSlot == true; settlementState.Name = name ?? __instance.Blueprint.DefaultSettlementName; settlementState.Location = settlementLocation?.AssociatedLocation ?? __instance.Blueprint.SettlementGlobalmapLocations.FirstOrDefault(); settlementState.SettlementLocation = settlementLocation; __instance.Settlement = settlementState; __instance.SetSettlementUIMarkers(); EventBus.RaiseEvent((ISettlementFoundingHandler h) => h.OnSettlementFounded(__instance.Settlement)); return(false); } catch (Exception ex) { Main.Error(ex); return(true); } }