public SettlementBuilding mod_UpgradeBuilding(SettlementBuilding building) { if (!KingmakerPatchSettings.CurrencyFallback.Enabled) { return(this.source_UpgradeBuilding(building)); } if (!building.IsFinished || !this.alias_m_Buildings.HasFact(building) || !building.Blueprint.UpgradesTo) { return(null); } if (!KingdomCurrencyFallback.CanSpend(this.GetActualCost(building.Blueprint.UpgradesTo))) { UberDebug.LogWarning("Cannot upgrade " + building.Blueprint + ": not enough BP"); return(null); } KingdomCurrencyFallback.SpendPoints(this.GetActualCost(building.Blueprint)); SettlementBuilding result = this.alias_m_Buildings.Upgrade(building); this.Update(); EventBus.RaiseEvent((ISettlementBuildUpdate h) => h.OnBuildUpdate(building)); return(result); }
public SettlementBuilding mod_Build(BlueprintSettlementBuilding building, SettlementGridTopology.Slot slot, bool force = false) { if (!KingmakerPatchSettings.CurrencyFallback.Enabled) { return(this.source_Build(building, slot, force)); } var removedBuilding = true; if (!force) { if (!this.CanBuild(building)) { return(null); } BuildingSlot slotObject = slot.GetSlotObject(); if (slotObject?.CanBuildHere(building) != true) { return(null); } KingdomCurrencyFallback.SpendPoints(this.GetActualCost(building)); removedBuilding = this.FreeBuildings.Remove(building) || KingdomState.Instance.FreeBuildings.Remove(building); } SettlementBuilding settlementBuilding = this.alias_m_Buildings.Build(building); settlementBuilding.BuildOnSlot(slot); if (building.SpecialSlot == SpecialSlotType.None) { this.alias_m_SlotsLeft -= building.SlotCount; } if (!force && !removedBuilding || this.alias_SellDiscountedBuilding != building) { this.alias_SellDiscountedBuilding = null; } this.Update(); EventBus.RaiseEvent((ISettlementBuildingHandler h) => h.OnBuildingStarted(this, settlementBuilding)); return(settlementBuilding); }
public void mod_Initialize(BlueprintSettlementBuilding building, SettlementBuilding settlementBuilding, SettlementState settlement) { if (!KingmakerPatchSettings.CurrencyFallback.Enabled) { this.source_Initialize(building, settlementBuilding, settlement); return; } string costFormat = LocalizationManagerNew.LoadString("9191fbc8-23ac-4bd4-8167-28de8d418122"); string costSplitFormat = LocalizationManagerNew.LoadString("da676fed-170f-4099-8b09-ba516d632dd7"); this.alias_Slots.sprite = KingdomUIRoot.Instance.Settlement.GetSlotSprite(building.SlotCount); if (settlementBuilding == null) { int actualCost = settlement.GetActualCost(building, out bool isDiscounted); this.alias_DiscountLayer.gameObject.SetActive(actualCost == 0 || isDiscounted); if (actualCost == 0) { this.alias_Cost.text = string.Format(costFormat, KingdomUIRoot.Instance.Texts.BuildFreeCost); } else { Tuple <int, int> costSplit = KingdomCurrencyFallback.SplitCost(actualCost); LocalizedString format = isDiscounted ? KingdomUIRoot.Instance.Texts.BuildPointsDiscountFormat : KingdomUIRoot.Instance.Texts.BuildPointsFormat; if (costSplit.Item2 == 0) { this.alias_Cost.text = string.Format(costFormat, string.Format(format, costSplit.Item1)); } else { this.alias_Cost.text = string.Format(costSplitFormat, string.Format(format, costSplit.Item1), costSplit.Item2); } } } else { this.alias_DiscountLayer.gameObject.SetActive(false); this.alias_Cost.text = string.Format(costFormat, string.Format(KingdomUIRoot.Instance.Texts.BuildPointsFormat, settlementBuilding.Owner.GetSellPrice(building))); } this.alias_SetColor(building, settlementBuilding, settlement); }
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(object __instance, BlueprintSettlementBuilding building, SettlementBuilding settlementBuilding, SettlementState settlement, Image ___Slots, TextMeshProUGUI ___Cost, Image ___DiscountLayer) { try { if (!Main.enabled) { return(true); } if (!Main.settings.currencyFallback) { return(true); } string costFormat = KingdomCurrencyFallback.costFormat; string costSplitFormat = KingdomCurrencyFallback.costSplitFormat; ___Slots.sprite = KingdomUIRoot.Instance.Settlement.GetSlotSprite(building.SlotCount); if (settlementBuilding == null) { int actualCost = settlement.GetActualCost(building, out bool isDiscounted); ___DiscountLayer?.gameObject?.SetActive(actualCost == 0 || isDiscounted); if (actualCost == 0) { ___Cost.text = string.Format(costFormat, KingdomUIRoot.Instance.Texts.BuildFreeCost); } else { Tuple <int, int> costSplit = KingdomCurrencyFallback.SplitCost(actualCost); LocalizedString format = isDiscounted ? KingdomUIRoot.Instance.Texts.BuildPointsDiscountFormat : KingdomUIRoot.Instance.Texts.BuildPointsFormat; if (costSplit.Item2 == 0) { ___Cost.text = string.Format(costFormat, string.Format(format, costSplit.Item1)); } else { ___Cost.text = string.Format(costSplitFormat, string.Format(format, costSplit.Item1), costSplit.Item2); } } } else { try { ___DiscountLayer.gameObject.SetActive(false); } catch (NullReferenceException) { //accessing ___DiscountLayer.gameObject after the gameObject has been destroyed causes the getter to throw an exception } ___Cost.text = string.Format(costFormat, string.Format(KingdomUIRoot.Instance.Texts.BuildPointsFormat, settlementBuilding.Owner.GetSellPrice(building))); } SetColor(__instance, building, settlementBuilding, settlement); return(false); } catch (Exception ex) { Main.Error(ex); return(true); } }
public SettlementBuilding source_UpgradeBuilding(SettlementBuilding building) { throw new DeadEndException("source_UpgradeBuilding"); }
private void alias_SetColor(BlueprintSettlementBuilding building, SettlementBuilding settlementBuilding, SettlementState settlement) { throw new DeadEndException("source_SetColor"); }
public void source_Initialize(BlueprintSettlementBuilding building, SettlementBuilding settlementBuilding, SettlementState settlement) { throw new DeadEndException("source_Initialize"); }
public static BlueprintScriptableObject[] Tooltip() { TooltipData contextTooltipData = Game.Instance.UI.TooltipsController.ContextTooltipData; if (contextTooltipData == null) { return((BlueprintScriptableObject[])null); } ItemEntity itemEntity = contextTooltipData.Item; if (itemEntity != null) { return new BlueprintScriptableObject[1] { (BlueprintScriptableObject)itemEntity.Blueprint } } ; BlueprintFeatureBase feature = contextTooltipData.Feature; if (feature != null) { return new BlueprintScriptableObject[1] { (BlueprintScriptableObject)feature } } ; Ability ability = contextTooltipData.Ability; if (ability != null) { return new BlueprintScriptableObject[1] { (BlueprintScriptableObject)ability.Blueprint } } ; BlueprintFeatureSelection featureSelection = contextTooltipData.FeatureSelection; if (featureSelection != null) { return new BlueprintScriptableObject[1] { (BlueprintScriptableObject)featureSelection } } ; AbilityData abilityData = contextTooltipData.AbilityData; if (abilityData != (AbilityData)null) { return new BlueprintScriptableObject[1] { (BlueprintScriptableObject)abilityData.Blueprint } } ; ActivatableAbility activatableAbility = contextTooltipData.ActivatableAbility; if (activatableAbility != null) { return new BlueprintScriptableObject[1] { (BlueprintScriptableObject)activatableAbility.Blueprint } } ; Buff buff = contextTooltipData.Buff; if (buff != null) { return new BlueprintScriptableObject[1] { (BlueprintScriptableObject)buff.Blueprint } } ; BlueprintAbility blueprintAbility = contextTooltipData.BlueprintAbility; if (blueprintAbility != null) { return new BlueprintScriptableObject[1] { (BlueprintScriptableObject)blueprintAbility } } ; BlueprintCookingRecipe recipe = contextTooltipData.Recipe; if (recipe != (UnityEngine.Object)null) { return new BlueprintScriptableObject[1] { (BlueprintScriptableObject)recipe } } ; KingdomBuff kingdomBuff = contextTooltipData.KingdomBuff; if (kingdomBuff != null) { return new BlueprintScriptableObject[1] { (BlueprintScriptableObject)kingdomBuff.Blueprint } } ; UnitEntityData unit = contextTooltipData.Unit; if (unit != null) { return new BlueprintScriptableObject[1] { (BlueprintScriptableObject)unit.Blueprint } } ; BlueprintCharacterClass blueprintCharacterClass = contextTooltipData.Class; if (blueprintCharacterClass != null) { return new BlueprintScriptableObject[1] { (BlueprintScriptableObject)blueprintCharacterClass } } ; BlueprintRace race = contextTooltipData.Race; if (race != null) { return new BlueprintScriptableObject[1] { (BlueprintScriptableObject)race } } ; BlueprintSettlementBuilding settlementBuildingBp = contextTooltipData.SettlementBuildingBp; if (settlementBuildingBp != null) { return new BlueprintScriptableObject[1] { (BlueprintScriptableObject)settlementBuildingBp } } ; SettlementBuilding settlementBuilding = contextTooltipData.SettlementBuilding; if (settlementBuilding == null) { return((BlueprintScriptableObject[])contextTooltipData.TutorialPage ?? (BlueprintScriptableObject[])null); } return(new BlueprintScriptableObject[1] { (BlueprintScriptableObject)settlementBuilding.Blueprint }); } } }