Exemple #1
0
        internal bool UpdateGlobalMapLocation()
        {
            if (this.mapLocation == null)
            {
                this.mapLocation = GlobalMapLocation.Instances.FirstOrDefault(map => map.Blueprint.AssetGuid == this.AssetGuid);
                if (this.mapLocation == null)
                {
                    Log.Error($"Cannot find GlobalMapLocation for assetGuid=[{this.AssetGuid}]");
                    return(false);
                }
            }
            if (this.Name == null)
            {
                this.Name = mapLocation.Blueprint.GetName(false);
            }

            this.mapLocation.HoverColor   = this.IsVisible ? this.Color : this.mapLocation.CurrentColor;
            this.mapLocation.OverrideHCol = this.IsVisible;

            // Don't have a direct way to set a highlight color on the map icon,
            // so fake it by marking customized locations as being hovered.
            Helpers.SetField(this.mapLocation, "m_Hover", this.IsVisible);

            this.mapLocation.UpdateHighlight();
            return(true);
        }
        public void mod_ClaimResource()
        {
            if (!KingmakerPatchSettings.CurrencyFallback.Enabled)
            {
                this.source_ClaimResource();
                return;
            }

            if (this.Resource != ResourceStateType.CanClaim)
            {
                return;
            }

            KingdomCurrencyFallback.SpendPoints(KingdomRoot.Instance.DefaultMapResourceCost);

            KingdomState.Instance.Resources.Add(this.Blueprint);

            this.Blueprint.ResourceStats.Apply();

            if (GlobalMapRules.Instance && GlobalMapRules.Instance.ClaimedResourceVisual)
            {
                GlobalMapLocation locationObject = GlobalMapRules.Instance.GetLocationObject(this.Blueprint);

                if (locationObject)
                {
                    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);
            }
        }
Exemple #3
0
 internal static void PostHandleHoverchange(GlobalMapLocation location, bool isHover)
 {
     // The hover ring is our highlight so reinstate it when the mouse moves out of the location
     if (!isHover)
     {
         ModGlobalMapLocation.FindByAssetGuid(location.Blueprint.AssetGuid)?.UpdateGlobalMapLocation();
     }
 }
Exemple #4
0
 private static bool Prefix(GlobalMapLocation __instance)
 {
     if (IsShiftPressed)
     {
         CustomGlobalMapLocations.CustomizeGlobalMapLocation(__instance);
     }
     // Don't pass the click through to the map if control or shift are pressed
     return(!(IsControlPressed || IsShiftPressed));
 }
Exemple #5
0
        private ModGlobalMapLocation(GlobalMapLocation location)
        {
            this.mapLocation = location;
            this.AssetGuid   = location.Blueprint.AssetGuid;

            this.Name      = mapLocation.Blueprint.GetName(false);
            this.Notes     = $"Custom location #{StateManager.CurrentState.MarkerNumber++}";
            this.Color     = Color.green;
            this.IsVisible = true;

            GlobalMapLocations.Add(this);
        }
Exemple #6
0
        internal static void CustomizeGlobalMapLocation(GlobalMapLocation location)
        {
            ModGlobalMapLocation mapLocation = ModGlobalMapLocation.FindOrCreateByAssetGuid(location.Blueprint.AssetGuid);

            if (mapLocation != null)
            {
                mapLocation.UpdateGlobalMapLocation();
                Game.Instance.UI.Common.UISound.Play(UISoundType.ButtonClick);
            }
            else
            {
                Log.Error($"Could not findOrCreate location name=[{location.Blueprint.GetName(false)}] guid=[{location.Blueprint.AssetGuid}]");
            }
        }
            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);
                }
            }
Exemple #8
0
        internal static ModGlobalMapLocation FindOrCreateByAssetGuid(string assetGuid)
        {
            var modLocation = GlobalMapLocations.FirstOrDefault(location => location.AssetGuid == assetGuid);

            if (modLocation == null)
            {
                GlobalMapLocation mapLocation = GlobalMapLocation.Instances.FirstOrDefault(map => map.Blueprint.AssetGuid == assetGuid);
                if (mapLocation != null)
                {
                    modLocation = new ModGlobalMapLocation(mapLocation);
                }
                else
                {
                    Log.Write($"Cannot find GlobalMapLocation for assetGuid=[{assetGuid}]");
                }
            }
            return(modLocation);
        }
 static void Postfix(TextMeshProUGUI ___m_DescText, GlobalMapLocation ___m_Location,
                     GameObject ___m_StandartControllers, GameObject ___m_OkControllers)
 {
     try
     {
         if (!Main.enabled)
         {
             return;
         }
         if (!Main.settings.currencyFallback)
         {
             return;
         }
         LocationData.ResourceStateType resource = ___m_Location.Data.Resource;
         if (resource == ResourceStateType.CantClaimWrongRegion)
         {
             return;
         }
         if (resource != ResourceStateType.CanClaim)
         {
             return;
         }
         if (!KingdomCurrencyFallback.CanSpend(KingdomRoot.Instance.DefaultMapResourceCost))
         {
             return;
         }
         string           resourceCostSplitFormat = KingdomCurrencyFallback.resourceCostSplitFormat;
         UITextGlobalMap  globalMap = Game.Instance.BlueprintRoot.LocalizedTexts.UserInterfacesText.GlobalMap;
         Tuple <int, int> costSplit = KingdomCurrencyFallback.SplitCost(KingdomRoot.Instance.DefaultMapResourceCost);
         if (costSplit.Item2 == 0)
         {
             return;
         }
         var bpText = string.Format(resourceCostSplitFormat, costSplit.Item1, costSplit.Item2);
         ___m_DescText.text = string.Format(globalMap.ResourceAvailable, bpText, KingdomState.Instance.BuildPoints);
         ___m_StandartControllers.SetActive(true);
         ___m_OkControllers.SetActive(false);
     }
     catch (Exception ex)
     {
         Main.Error(ex);
     }
 }
Exemple #10
0
        public void mod_Tick()
        {
            if (!KingmakerPatchSettings.Cheats.Abracadabra)
            {
                this.source_Tick();
                return;
            }

            GlobalMapState globalMap = Kingmaker.Game.Instance.Player.GlobalMap;

            Dictionary <BlueprintLocation, LocationData> .ValueCollection locations = globalMap.Locations.Values;

            // don't run foreach on tick if we don't have to
            // this will return true until all locations, except hidden locations and waypoints, are revealed
            bool canRevealLocations = locations.Any(l => !l.IsRevealed && !IsHiddenOrWaypoint(l));

            if (!canRevealLocations)
            {
                return;
            }

            // removed distance checks
            foreach (LocationData locationData in locations)
            {
                if (locationData.IsRevealed)
                {
                    continue;
                }

                GlobalMapLocation locationObject = GlobalMapRules.Instance.GetLocationObject(locationData.Blueprint);

                if (!locationObject)
                {
                    continue;
                }

                ConditionsChecker possibleToRevealCondition = locationData.Blueprint.PossibleToRevealCondition;

                LocationType type = locationData.Blueprint.Type;

                switch (type)
                {
                case LocationType.Location:
                case LocationType.Landmark:
                    if (!possibleToRevealCondition.HasConditions || possibleToRevealCondition.Check())
                    {
                        GlobalMapRules.Instance.RevealLocation(locationObject);
                    }

                    break;

                default:
                    if (type != LocationType.HiddenLocation)
                    {
                        continue;
                    }

                    if (possibleToRevealCondition.HasConditions && !possibleToRevealCondition.Check())
                    {
                        continue;
                    }

                    GlobalMapRules.Instance.RevealLocation(locationObject);
                    break;
                }
            }
        }
Exemple #11
0
 private static void Postfix(GlobalMapLocation __instance, bool isHover)
 {
     CustomGlobalMapLocations.PostHandleHoverchange(__instance, isHover);
 }