Esempio n. 1
0
        public static void UpdateDynamicPins_Postfix(Minimap __instance)
        {
            var player = Player.m_localPlayer;

            if (player == null)
            {
                return;
            }

            var adventureSaveData = player.GetAdventureSaveData();

            if (adventureSaveData == null)
            {
                return;
            }

            var unfoundTreasureChests = adventureSaveData.GetUnfoundTreasureChests();
            var oldPins = TreasureMapPins.Where(pinEntry => !unfoundTreasureChests.Exists(x => x.Interval == pinEntry.Key.Item1 && x.Biome == pinEntry.Key.Item2)).ToList();

            foreach (var pinEntry in oldPins)
            {
                __instance.RemovePin(pinEntry.Value.Pin);
                __instance.RemovePin(pinEntry.Value.Area);
                if (pinEntry.Value.DebugPin != null)
                {
                    __instance.RemovePin(pinEntry.Value.DebugPin);
                }
                TreasureMapPins.Remove(pinEntry.Key);
            }

            foreach (var chestInfo in unfoundTreasureChests)
            {
                var key = new Tuple <int, Heightmap.Biome>(chestInfo.Interval, chestInfo.Biome);
                if (!TreasureMapPins.ContainsKey(key))
                {
                    var position = chestInfo.Position + chestInfo.MinimapCircleOffset;
                    var area     = __instance.AddPin(position, Minimap.PinType.EventArea, string.Empty, false, false);
                    area.m_worldSize = AdventureDataManager.Config.TreasureMap.MinimapAreaRadius * AreaScale;
                    var label = Localization.instance.Localize("$mod_epicloot_treasurechest_minimappin", Localization.instance.Localize($"$biome_{chestInfo.Biome.ToString().ToLowerInvariant()}"), (chestInfo.Interval + 1).ToString());
                    var pin   = __instance.AddPin(position, EpicLoot.TreasureMapPinType, label, false, false);

                    if (DebugMode)
                    {
                        var debugPin = __instance.AddPin(chestInfo.Position, Minimap.PinType.Icon3, $"{chestInfo.Position.x:0.0}, {chestInfo.Position.z:0.0}", false, false);
                        TreasureMapPins.Add(key, new AreaPinInfo()
                        {
                            Pin = pin, Area = area, DebugPin = debugPin
                        });
                    }
                    else
                    {
                        TreasureMapPins.Add(key, new AreaPinInfo()
                        {
                            Pin = pin, Area = area
                        });
                    }
                }
            }

            var currentBounties = adventureSaveData.GetInProgressBounties();
            var oldBountyPins   = BountyPins.Where(pinEntry => !currentBounties.Exists(x => x.ID == pinEntry.Key)).ToList();

            foreach (var pinEntry in oldBountyPins)
            {
                __instance.RemovePin(pinEntry.Value.Pin);
                __instance.RemovePin(pinEntry.Value.Area);
                BountyPins.Remove(pinEntry.Key);
            }

            foreach (var bounty in currentBounties)
            {
                var key = bounty.ID;
                if (!BountyPins.ContainsKey(key))
                {
                    var position = bounty.Position + bounty.MinimapCircleOffset;
                    var area     = __instance.AddPin(position, Minimap.PinType.EventArea, string.Empty, false, false);
                    area.m_worldSize = AdventureDataManager.Config.TreasureMap.MinimapAreaRadius * AreaScale;
                    var label = Localization.instance.Localize("$mod_epicloot_bounties_minimappin", AdventureDataManager.GetBountyName(bounty));
                    var pin   = __instance.AddPin(position, EpicLoot.BountyPinType, label, false, false);

                    if (DebugMode)
                    {
                        var debugPin = __instance.AddPin(bounty.Position, Minimap.PinType.Icon3, $"{bounty.Position.x:0.0}, {bounty.Position.z:0.0}", false, false);
                        BountyPins.Add(key, new AreaPinInfo()
                        {
                            Pin = pin, Area = area, DebugPin = debugPin
                        });
                    }
                    else
                    {
                        BountyPins.Add(key, new AreaPinInfo()
                        {
                            Pin = pin, Area = area
                        });
                    }
                }
            }
        }
Esempio n. 2
0
 private string GetDisplayName()
 {
     return(Localization.instance.Localize(AdventureDataManager.GetBountyName(BountyInfo)));
 }