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 }); } } } }
private string GetDisplayName() { return(Localization.instance.Localize(AdventureDataManager.GetBountyName(BountyInfo))); }