static bool Prefix(SettlementState __instance, ref bool __result, BlueprintSettlementBuilding building, int ___m_SlotsLeft) { try { if (!Main.enabled) { return(true); } if (!Main.settings.currencyFallback) { return(true); } if (!KingdomCurrencyFallback.CanSpend(__instance.GetActualCost(building))) { UberDebug.LogSystem("[KingdomResolution] SettlementState_CanBuild_Patch: Cannot spend"); __result = false; return(false); } SpecialSlotType specialSlot = building.SpecialSlot; if (specialSlot != SpecialSlotType.None) { if (__instance.IsSpecialSlotFilled(specialSlot)) { return(false); } } else if (___m_SlotsLeft < building.SlotCount) { return(false); } __result = CanBuildByLevel(__instance, building); return(false); } catch (Exception ex) { Main.Error(ex); return(true); } }
static bool Prefix(SettlementState __instance, ref bool __result, BlueprintSettlementBuilding building) { try { if (!Main.enabled) { return(true); } if (!Main.settings.currencyFallback) { return(true); } __result = KingdomCurrencyFallback.CanSpend(__instance.GetActualCost(building)) && building.MinLevel <= __instance.Level && __instance.Buildings.Any(b => b.Blueprint.UpgradesTo == building); 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); } }
public bool source_CanBuildUprgade(BlueprintSettlementBuilding building) { throw new DeadEndException("source_CanBuildUprgade"); }
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_Build(BlueprintSettlementBuilding building, SettlementGridTopology.Slot slot, bool force = false) { throw new DeadEndException("source_Build"); }
private bool alias_CanBuildByLevel(BlueprintSettlementBuilding building) { throw new DeadEndException("source_CanBuildByLevel"); }
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 }); } } }