Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
            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);
                }
            }
Beispiel #7
0
 public SettlementBuilding source_UpgradeBuilding(SettlementBuilding building)
 {
     throw new DeadEndException("source_UpgradeBuilding");
 }
Beispiel #8
0
 private void alias_SetColor(BlueprintSettlementBuilding building, SettlementBuilding settlementBuilding, SettlementState settlement)
 {
     throw new DeadEndException("source_SetColor");
 }
Beispiel #9
0
 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
            });
        }
    }
}