public void PaintWorld(WorldLayer layer) { DistYards = 0; bool FirstQuestMarker = true; var Actors = Hud.Game.Actors.Where(a => a.SnoActor.Sno == 432770 || a.SnoActor.Sno == 430733 || a.SnoActor.Sno == 432885 || a.SnoActor.Sno == 433051 || a.SnoActor.Sno == 432259 || a.SnoActor.Sno == 433246 || a.SnoActor.Sno == 433385 || a.SnoActor.Sno == 433295 || a.SnoActor.Sno == 433316 || a.SnoActor.Sno == 434366 || a.SnoActor.Sno == 433124 || a.SnoActor.Sno == 433184 || a.SnoActor.Sno == 433402 || a.SnoActor.Sno == 432331 || a.SnoActor.Sno == 435703); if (!Actors.Any()) { FirstQuestMarker = true; } foreach (var Actor in Actors) { if (Actor == null) { continue; } if (Actor.FloorCoordinate == null) { continue; } if (Actor.IsDisabled || Actor.IsOperated) { continue; } uint ThatQuest = 0; string Name = string.Empty; switch (Actor.SnoActor.Sno) { case 432770: Name = "Royal Cocoon"; ThatQuest = 432784; break; case 430733: Name = "Captured Villager"; ThatQuest = 430723; break; case 432885: Name = "Ancient Device"; ThatQuest = 433025; break; case 433051: Name = "Caldeum Villager"; ThatQuest = 433053; break; case 435703: Name = "Captured Barbarian"; ThatQuest = 436280; break; case 432259: Name = "Triune Monument"; ThatQuest = 432293; break; case 433246: Name = "Death Orb"; ThatQuest = 433256; break; case 433385: Name = "Catapult Winch"; ThatQuest = 433392; break; case 433295: Name = "Demon Gate"; ThatQuest = 433309; break; case 433316: Name = "Death Prison"; ThatQuest = 433339; break; case 434366: Name = "Tortured Wortham Militia"; ThatQuest = 434378; break; case 433184: Name = "Captured Guard"; ThatQuest = 433217; break; case 433124: Name = "Bone Cage"; ThatQuest = 433099; break; case 433402: Name = "Hell Portal"; ThatQuest = 433422; break; case 432331: Name = "Captured Iron Wolf"; ThatQuest = 432334; break; default: Name = string.Empty; break; } var quest = Hud.Game.Bounties.FirstOrDefault(x => x.SnoQuest.Sno == ThatQuest); if ((quest != null) && quest.State != QuestState.completed) { QuestDecorator.Paint(layer, null, Actor.FloorCoordinate, Name); FirstQuestMarker = false; } } // modified Xenthalon's AdvancedMarkerPlugin var markers = Hud.Game.Markers.OrderBy(i => Hud.Game.Me.FloorCoordinate.XYDistanceTo(i.FloorCoordinate)); if (markers != null) { foreach (var marker in markers) { if (marker == null) { continue; } if (marker.FloorCoordinate == null) { continue; } if (marker.Name == null) { continue; } var OnScreen = marker.FloorCoordinate.IsOnScreen(1); QuestDecorator.ToggleDecorators <GroundLabelDecorator>(!OnScreen); // do not display ground labels when the marker is on the screen KeywardenDecorator.ToggleDecorators <GroundLabelDecorator>(!OnScreen); BossDecorator.ToggleDecorators <GroundLabelDecorator>(!OnScreen); if (marker.SnoQuest != null && FirstQuestMarker) { DistYards = (int)(marker.FloorCoordinate.XYDistanceTo(Hud.Game.Me.FloorCoordinate)); QuestDecorator.Paint(layer, null, marker.FloorCoordinate, marker.Name); FirstQuestMarker = false; } else if (marker.SnoActor != null) { if (marker.SnoActor.Code.Contains("_Boss_")) { BossDecorator.Paint(layer, null, marker.FloorCoordinate, marker.Name); } else if (marker.FloorCoordinate.XYDistanceTo(Hud.Game.Me.FloorCoordinate) < 500) { KeywardenDecorator.Paint(layer, null, marker.FloorCoordinate, marker.Name); } } } } if (Hud.Game.NumberOfPlayersInGame == 1) { NameOther3 = string.Empty; Other3 = Hud.Window.CreateWorldCoordinate(Hud.Game.Me.FloorCoordinate); AreaOther3 = string.Empty; StrengthBuff3 = 0; NameOther2 = string.Empty; Other2 = Hud.Window.CreateWorldCoordinate(Hud.Game.Me.FloorCoordinate); AreaOther2 = string.Empty; StrengthBuff2 = 0; NameOther1 = string.Empty; Other1 = Hud.Window.CreateWorldCoordinate(Hud.Game.Me.FloorCoordinate); AreaOther1 = string.Empty; StrengthBuff1 = 0; return; } // Pools of reflection if (Pools) { var PoolsOfReflection = Hud.Game.Shrines.Where(p => !p.IsDisabled && !p.IsOperated && p.Type == ShrineType.PoolOfReflection); //var PoolsOfReflection = Hud.Game.Actors.Where(x => !x.IsDisabled && !x.IsOperated && x.SnoActor.Sno == 373463); foreach (var PoolOfReflection in PoolsOfReflection) { PoolDecorator.Paint(layer, null, PoolOfReflection.FloorCoordinate, PoolOfReflection.SnoActor.NameLocalized); } } // Strengh in numbers buff indicator int StrengthBuff = StrengthBuff1 + StrengthBuff2 + StrengthBuff3; if (StrengthBuff != 0 && !Hud.Game.Me.IsDead) { StrengthBuffText = "+" + StrengthBuff + "%"; var uiRect = Hud.Render.GetUiElement("Root.NormalLayer.minimap_dialog_backgroundScreen.minimap_dialog_pve.BoostWrapper.BoostsDifficultyStackPanel.clock").Rectangle; StrengthBuffDecorator.Paint(uiRect.Left - uiRect.Width * 1.14f, uiRect.Top + uiRect.Height * 1f, uiRect.Width, uiRect.Height, HorizontalAlign.Right); } // Thread between players var players = Hud.Game.Players.Where(player => !player.IsMe).OrderBy(player => player.PortraitIndex); if (players != null) { foreach (var player in players) { if (player == null) { continue; } else if (player.BattleTagAbovePortrait == null) { continue; } else if (player.FloorCoordinate == null) { continue; } else if (player.SnoArea == null) { continue; } else if (player.SnoArea.NameEnglish == null) { continue; } else if (double.IsNaN(player.NormalizedXyDistanceToMe)) { continue; } else if (player.PortraitIndex == 1) { NameOther1 = player.BattleTagAbovePortrait; RealOther1 = player.FloorCoordinate; AreaOther1 = player.SnoArea.NameEnglish; if (Hud.Game.NumberOfPlayersInGame == 2) { NameOther3 = string.Empty; } Other3 = Hud.Window.CreateWorldCoordinate(Hud.Game.Me.FloorCoordinate); AreaOther3 = string.Empty; StrengthBuff3 = 0; NameOther2 = string.Empty; Other2 = Hud.Window.CreateWorldCoordinate(Hud.Game.Me.FloorCoordinate); AreaOther2 = string.Empty; StrengthBuff2 = 0; if (Hud.Game.Me.SnoArea.Sno == player.SnoArea.Sno) { Other1 = player.FloorCoordinate; if (player.NormalizedXyDistanceToMe <= 186 && !player.IsDead) { StrengthBuff1 = 10; } else { StrengthBuff1 = 0; } } else { Other1 = Hud.Window.CreateWorldCoordinate(Hud.Game.Me.FloorCoordinate); StrengthBuff1 = 0; } } else if (player.PortraitIndex == 2) { NameOther2 = player.BattleTagAbovePortrait; RealOther2 = player.FloorCoordinate; AreaOther2 = player.SnoArea.NameEnglish; if (Hud.Game.NumberOfPlayersInGame == 3) { NameOther3 = string.Empty; } Other3 = Hud.Window.CreateWorldCoordinate(Hud.Game.Me.FloorCoordinate); AreaOther3 = string.Empty; StrengthBuff3 = 0; if (Hud.Game.Me.SnoArea.Sno == player.SnoArea.Sno) { Other2 = player.FloorCoordinate; if (player.NormalizedXyDistanceToMe <= 186 && !player.IsDead) { StrengthBuff2 = 10; } else { StrengthBuff2 = 0; } } else { Other2 = Hud.Window.CreateWorldCoordinate(Hud.Game.Me.FloorCoordinate); StrengthBuff2 = 0; } } else if (player.PortraitIndex == 3) { NameOther3 = player.BattleTagAbovePortrait; RealOther3 = player.FloorCoordinate; AreaOther3 = player.SnoArea.NameEnglish; if (Hud.Game.Me.SnoArea.Sno == player.SnoArea.Sno) { Other3 = player.FloorCoordinate; if (player.NormalizedXyDistanceToMe <= 186 && !player.IsDead) { StrengthBuff3 = 10; } else { StrengthBuff3 = 0; } } else { Other3 = Hud.Window.CreateWorldCoordinate(Hud.Game.Me.FloorCoordinate); StrengthBuff3 = 0; } } } } float Other1OnMapX, Other1OnMapY, Other2OnMapX, Other2OnMapY, Other3OnMapX, Other3OnMapY; Hud.Render.GetMinimapCoordinates(Other1.X, Other1.Y, out Other1OnMapX, out Other1OnMapY); Hud.Render.GetMinimapCoordinates(Other2.X, Other2.Y, out Other2OnMapX, out Other2OnMapY); Hud.Render.GetMinimapCoordinates(Other3.X, Other3.Y, out Other3OnMapX, out Other3OnMapY); if (!Hud.Game.IsInTown && ThreadBetweenPlayers) { WhiteBrush.DrawLine(Other1OnMapX, Other1OnMapY, Other2OnMapX, Other2OnMapY); WhiteBrush.DrawLine(Other1OnMapX, Other1OnMapY, Other3OnMapX, Other3OnMapY); WhiteBrush.DrawLine(Other3OnMapX, Other3OnMapY, Other2OnMapX, Other2OnMapY); } // banners var banners = Hud.Game.Banners; if (banners != null) { foreach (var banner in banners) { if (banner == null || banner.FloorCoordinate == null || !banner.FloorCoordinate.IsValid) { continue; } if (!BannersList.ContainsKey(banner.FloorCoordinate)) { BannersList.Add(banner.FloorCoordinate, Hud.Game.CurrentRealTimeMilliseconds); } } } float DistOther1; float DistOther2; float DistOther3; float ZDistOther1; float ZDistOther2; float ZDistOther3; float DistMe; float ZDistMe; if (BannersList != null) { foreach (var ListedBanner in BannersList.Where(b => Hud.Game.CurrentRealTimeMilliseconds < b.Value + 30000).OrderBy(b => b.Value).Take(5)) { var BanCoord = ListedBanner.Key; long Timeleft = ((ListedBanner.Value + (BannerTimeSeconds * 1000) - Hud.Game.CurrentRealTimeMilliseconds) / 1000); string Countdown = " " + Timeleft.ToString("f0") + "s"; var onScreen = BanCoord.IsOnScreen(); if (onScreen) { BannerDecorator.ToggleDecorators <GroundLabelDecorator>(false); } else { BannerDecorator.ToggleDecorators <GroundLabelDecorator>(true); } if (RealOther1 != null && Hud.Game.NumberOfPlayersInGame >= 2) { DistOther1 = RealOther1.XYDistanceTo(BanCoord); ZDistOther1 = RealOther1.ZDiffTo(BanCoord); } else { DistOther1 = float.MaxValue; ZDistOther1 = float.MaxValue; } if (RealOther2 != null && Hud.Game.NumberOfPlayersInGame >= 3) { DistOther2 = RealOther2.XYDistanceTo(BanCoord); ZDistOther2 = RealOther2.ZDiffTo(BanCoord); } else { DistOther2 = float.MaxValue; ZDistOther2 = float.MaxValue; } if (RealOther3 != null && Hud.Game.NumberOfPlayersInGame == 4) { DistOther3 = RealOther3.XYDistanceTo(BanCoord); ZDistOther3 = RealOther3.ZDiffTo(BanCoord); } else { DistOther3 = float.MaxValue; ZDistOther3 = float.MaxValue; } DistMe = Hud.Game.Me.FloorCoordinate.XYDistanceTo(BanCoord); ZDistMe = Hud.Game.Me.FloorCoordinate.ZDiffTo(BanCoord); string NearestPlayer = string.Empty; string BannerArea = string.Empty; if (!BannersAreas.ContainsKey(BanCoord)) { if (DistOther1 < DistOther2 && DistOther1 < DistOther3 && DistOther1 < DistMe && DistOther1 < 200f && ZDistOther1 < 6f && NameOther1 != null) { NearestPlayer = "banner near " + NameOther1; BannerArea = AreaOther1; } else if (DistOther2 < DistOther1 && DistOther2 < DistOther3 && DistOther2 < DistMe && DistOther2 < 200f && ZDistOther2 < 6f && NameOther2 != null) { NearestPlayer = "banner near " + NameOther2; BannerArea = AreaOther2; } else if (DistOther3 < DistOther1 && DistOther3 < DistOther2 && DistOther3 < DistMe && DistOther3 < 200f && ZDistOther3 < 6f && NameOther3 != null) { NearestPlayer = "banner near " + NameOther3; BannerArea = AreaOther3; } else { NearestPlayer = "banner"; BannerArea = Hud.Game.Me.SnoArea.NameEnglish; } } else { if (DistOther1 < DistOther2 && DistOther1 < DistOther3 && DistOther1 < DistMe && DistOther1 < 200f && ZDistOther1 < 6f && BannersAreas[BanCoord] == AreaOther1 && NameOther1 != null) { NearestPlayer = "banner near " + NameOther1; } else if (DistOther2 < DistOther1 && DistOther2 < DistOther3 && DistOther2 < DistMe && DistOther2 < 200f && ZDistOther2 < 6f && BannersAreas[BanCoord] == AreaOther2 && NameOther2 != null) { NearestPlayer = "banner near " + NameOther2; } else if (DistOther3 < DistOther1 && DistOther3 < DistOther2 && DistOther3 < DistMe && DistOther3 < 200f && ZDistOther3 < 6f && BannersAreas[BanCoord] == AreaOther3 && NameOther3 != null) { NearestPlayer = "banner near " + NameOther3; } else { NearestPlayer = "banner"; } } string RealBannerArea = string.Empty; if (!BannersAreas.ContainsKey(BanCoord)) { BannersAreas.Add(BanCoord, BannerArea); } else { RealBannerArea = BannersAreas[BanCoord]; } bool SameArea = false; if (Hud.Game.Me.SnoArea.NameEnglish == RealBannerArea) { SameArea = true; } else { SameArea = false; } if (!SameArea || Hud.Game.Me.IsInTown) { BannerDecorator.ToggleDecorators <MapShapeDecorator>(false); } else if (SameArea) { BannerDecorator.ToggleDecorators <MapShapeDecorator>(true); } if (NearestPlayer == "banner near ") { NearestPlayer = "banner"; } if (RealBannerArea.Contains("[TEMP]")) { RealBannerArea = RealBannerArea.Replace("[TEMP]", string.Empty).Trim(); } if (RealBannerArea.Contains("Loot Run")) { RealBannerArea = RealBannerArea.Replace("Loot Run", "Rift").Trim(); } if (NearestPlayer != null && RealBannerArea != string.Empty) { if (SameArea) { BannerDecorator.Paint(layer, null, BanCoord, NearestPlayer + Countdown); } else if (NearestPlayer != "banner") { BannerDecorator.Paint(layer, null, BanCoord, NearestPlayer + " in " + RealBannerArea + Environment.NewLine + "teleport!" + Countdown); } else { BannerDecorator.Paint(layer, null, BanCoord, NearestPlayer + " in " + RealBannerArea + Countdown); } } } } }
public void PaintWorld(WorldLayer layer) { DistYards = 0; var firstQuestMarker = true; var actors = Hud.Game.Actors.Where(a => _actorList.Contains(a.SnoActor.Sno)); foreach (var Actor in actors) { if (Actor == null) { continue; } if (Actor.FloorCoordinate == null) { continue; } if (Actor.IsDisabled || Actor.IsOperated) { continue; } uint ThatQuest = 0; string Name = string.Empty; switch (Actor.SnoActor.Sno) { case ActorSnoEnum._px_spidercaves_camp_cocoon /*432770*/: Name = "Royal Cocoon"; ThatQuest = 432784; break; case ActorSnoEnum._px_wilderness_camp_templarprisoners /*430733*/: Name = "Captured Villager"; ThatQuest = 430723; break; case ActorSnoEnum._a2dun_zolt_ibstone_a_portalroulette_mini /*432885*/: Name = "Ancient Device"; ThatQuest = 433025; break; case ActorSnoEnum._px_caout_cage_bountycamp /*433051*/: Name = "Caldeum Villager"; ThatQuest = 433053; break; case ActorSnoEnum._px_ruins_frost_camp_cage /*435703*/: Name = "Captured Barbarian"; ThatQuest = 436280; break; case ActorSnoEnum._px_highlands_camp_resurgentcult_totem /*432259*/: Name = "Triune Monument"; ThatQuest = 432293; break; case ActorSnoEnum._px_bounty_death_orb_little /*433246*/: Name = "Death Orb"; ThatQuest = 433256; break; case ActorSnoEnum._px_bounty_ramparts_camp_switch /*433385*/: Name = "Catapult Winch"; ThatQuest = 433392; break; case ActorSnoEnum._px_bounty_camp_azmodan_fight_spawner /*433295*/: Name = "Demon Gate"; ThatQuest = 433309; break; case ActorSnoEnum._x1_westm_necro_jar_of_souls_camp_graveyard /*433316*/: Name = "Death Prison"; ThatQuest = 433339; break; case ActorSnoEnum._px_leorics_camp_worthammilitia_ex /*434366*/: Name = "Tortured Wortham Militia"; ThatQuest = 434378; break; case ActorSnoEnum._px_bridge_camp_lostpatrol /*433184*/: Name = "Captured Guard"; ThatQuest = 433217; break; case ActorSnoEnum._px_bounty_camp_trappedangels /*433124*/: Name = "Bone Cage"; ThatQuest = 433099; break; case ActorSnoEnum._px_bounty_camp_hellportals_frame /*433402*/: Name = "Hell Portal"; ThatQuest = 433422; break; case ActorSnoEnum._px_oasis_camp_ironwolves /*432331*/: Name = "Captured Iron Wolf"; ThatQuest = 432334; break; default: Name = string.Empty; break; } var quest = Hud.Game.Bounties.FirstOrDefault(x => x.SnoQuest.Sno == ThatQuest); if ((quest != null) && quest.State != QuestState.completed) { QuestDecorator.Paint(layer, null, Actor.FloorCoordinate, Name); firstQuestMarker = false; } } // Pools of reflection if (Pools) { var PoolsOfReflection = Hud.Game.Shrines.Where(p => !p.IsDisabled && !p.IsOperated && p.Type == ShrineType.PoolOfReflection); foreach (var PoolOfReflection in PoolsOfReflection) { PoolDecorator.Paint(layer, null, PoolOfReflection.FloorCoordinate, PoolOfReflection.SnoActor.NameLocalized); } } // modified Xenthalon's AdvancedMarkerPlugin var markers = Hud.Game.Markers.OrderBy(i => Hud.Game.Me.FloorCoordinate.XYDistanceTo(i.FloorCoordinate)); if (markers != null) { foreach (var marker in markers) { if (marker == null) { continue; } if (marker.FloorCoordinate == null) { continue; } if (marker.Name == null) { continue; } var OnScreen = marker.FloorCoordinate.IsOnScreen(1); QuestDecorator.ToggleDecorators <GroundLabelDecorator>(!OnScreen); // do not display ground labels when the marker is on the screen KeywardenDecorator.ToggleDecorators <GroundLabelDecorator>(!OnScreen); BossDecorator.ToggleDecorators <GroundLabelDecorator>(!OnScreen); if (marker.SnoQuest != null && firstQuestMarker) { DistYards = (int)(marker.FloorCoordinate.XYDistanceTo(Hud.Game.Me.FloorCoordinate)); QuestDecorator.Paint(layer, null, marker.FloorCoordinate, marker.Name); firstQuestMarker = false; } else if (marker.SnoActor != null) { if (marker.SnoActor.Code.Contains("_Boss_")) { BossDecorator.Paint(layer, null, marker.FloorCoordinate, marker.Name); } else if (marker.FloorCoordinate.XYDistanceTo(Hud.Game.Me.FloorCoordinate) < 500) { KeywardenDecorator.Paint(layer, null, marker.FloorCoordinate, marker.Name); } } } } if (Hud.Game.NumberOfPlayersInGame == 1) { NameOther3 = string.Empty; Other3 = Hud.Window.CreateWorldCoordinate(Hud.Game.Me.FloorCoordinate); AreaOther3 = string.Empty; NameOther2 = string.Empty; Other2 = Hud.Window.CreateWorldCoordinate(Hud.Game.Me.FloorCoordinate); AreaOther2 = string.Empty; NameOther1 = string.Empty; Other1 = Hud.Window.CreateWorldCoordinate(Hud.Game.Me.FloorCoordinate); AreaOther1 = string.Empty; return; } // Strengh in numbers buff indicator var SiNBuff = Hud.Game.Me.Powers.GetBuff(258199); int StrengthBuff = SiNBuff.IconCounts[0] * 10; if (StrengthBuff != 0 && !Hud.Game.Me.IsDead) { StrengthBuffText = "+" + StrengthBuff + "%"; var uiRect = Hud.Render.GetUiElement("Root.NormalLayer.minimap_dialog_backgroundScreen.minimap_dialog_pve.BoostWrapper.BoostsDifficultyStackPanel.clock").Rectangle; if (Hud.Game.Me.Hero.Seasonal) { StrengthBuffDecorator.Paint(uiRect.Left - uiRect.Width * 1.14f, uiRect.Top + uiRect.Height * 1f, uiRect.Width, uiRect.Height, HorizontalAlign.Right); } else { StrengthBuffDecorator.Paint(uiRect.Left - uiRect.Width * 0.96f, uiRect.Top + uiRect.Height * 1f, uiRect.Width, uiRect.Height, HorizontalAlign.Right); } } // Thread between players var players = Hud.Game.Players.Where(player => !player.IsMe).OrderBy(player => player.PortraitIndex); if (players != null) { foreach (var player in players) { if (player == null) { continue; } else if (player.BattleTagAbovePortrait == null) { continue; } else if (player.FloorCoordinate == null) { continue; } else if (player.SnoArea == null) { continue; } else if (player.SnoArea.NameEnglish == null) { continue; } else if (double.IsNaN(player.NormalizedXyDistanceToMe)) { continue; } else if (player.PortraitIndex == 1) { NameOther1 = player.BattleTagAbovePortrait; RealOther1 = player.FloorCoordinate; AreaOther1 = player.SnoArea.NameEnglish; if (Hud.Game.NumberOfPlayersInGame == 2) { NameOther3 = string.Empty; } Other3 = Hud.Window.CreateWorldCoordinate(Hud.Game.Me.FloorCoordinate); AreaOther3 = string.Empty; NameOther2 = string.Empty; Other2 = Hud.Window.CreateWorldCoordinate(Hud.Game.Me.FloorCoordinate); AreaOther2 = string.Empty; if (Hud.Game.Me.SnoArea.Sno == player.SnoArea.Sno && player.CoordinateKnown) { Other1 = player.FloorCoordinate; } else { Other1 = Hud.Window.CreateWorldCoordinate(Hud.Game.Me.FloorCoordinate); } } else if (player.PortraitIndex == 2) { NameOther2 = player.BattleTagAbovePortrait; RealOther2 = player.FloorCoordinate; AreaOther2 = player.SnoArea.NameEnglish; if (Hud.Game.NumberOfPlayersInGame == 3) { NameOther3 = string.Empty; } Other3 = Hud.Window.CreateWorldCoordinate(Hud.Game.Me.FloorCoordinate); AreaOther3 = string.Empty; if (Hud.Game.Me.SnoArea.Sno == player.SnoArea.Sno && player.CoordinateKnown) { Other2 = player.FloorCoordinate; } else { Other2 = Hud.Window.CreateWorldCoordinate(Hud.Game.Me.FloorCoordinate); } } else if (player.PortraitIndex == 3) { NameOther3 = player.BattleTagAbovePortrait; RealOther3 = player.FloorCoordinate; AreaOther3 = player.SnoArea.NameEnglish; if (Hud.Game.Me.SnoArea.Sno == player.SnoArea.Sno && player.CoordinateKnown) { Other3 = player.FloorCoordinate; } else { Other3 = Hud.Window.CreateWorldCoordinate(Hud.Game.Me.FloorCoordinate); } } } } Hud.Render.GetMinimapCoordinates(Other1.X, Other1.Y, out float Other1OnMapX, out float Other1OnMapY); Hud.Render.GetMinimapCoordinates(Other2.X, Other2.Y, out float Other2OnMapX, out float Other2OnMapY); Hud.Render.GetMinimapCoordinates(Other3.X, Other3.Y, out float Other3OnMapX, out float Other3OnMapY); if (!Hud.Game.IsInTown && ThreadBetweenPlayers) { WhiteBrush.DrawLine(Other1OnMapX, Other1OnMapY, Other2OnMapX, Other2OnMapY); WhiteBrush.DrawLine(Other1OnMapX, Other1OnMapY, Other3OnMapX, Other3OnMapY); WhiteBrush.DrawLine(Other3OnMapX, Other3OnMapY, Other2OnMapX, Other2OnMapY); } // banners var banners = Hud.Game.Banners; if (banners != null) { foreach (var banner in banners) { if (banner == null || banner.FloorCoordinate == null || !banner.FloorCoordinate.IsValid) { continue; } if (!BannersList.ContainsKey(banner.FloorCoordinate)) { BannersList.Add(banner.FloorCoordinate, Hud.Game.CurrentRealTimeMilliseconds); } } } float DistOther1; float DistOther2; float DistOther3; float ZDistOther1; float ZDistOther2; float ZDistOther3; float DistMe; float ZDistMe; if (BannersList != null) { foreach (var ListedBanner in BannersList.Where(b => Hud.Game.CurrentRealTimeMilliseconds < b.Value + 30000).OrderBy(b => b.Value).Take(5)) { var BanCoord = ListedBanner.Key; long Timeleft = ((ListedBanner.Value + (BannerTimeSeconds * 1000) - Hud.Game.CurrentRealTimeMilliseconds) / 1000); string Countdown = " " + Timeleft.ToString("f0") + "s"; var onScreen = BanCoord.IsOnScreen(); if (onScreen) { BannerDecorator.ToggleDecorators <GroundLabelDecorator>(false); } else { BannerDecorator.ToggleDecorators <GroundLabelDecorator>(true); } if (RealOther1 != null && Hud.Game.NumberOfPlayersInGame >= 2) { DistOther1 = RealOther1.XYDistanceTo(BanCoord); ZDistOther1 = RealOther1.ZDiffTo(BanCoord); } else { DistOther1 = float.MaxValue; ZDistOther1 = float.MaxValue; } if (RealOther2 != null && Hud.Game.NumberOfPlayersInGame >= 3) { DistOther2 = RealOther2.XYDistanceTo(BanCoord); ZDistOther2 = RealOther2.ZDiffTo(BanCoord); } else { DistOther2 = float.MaxValue; ZDistOther2 = float.MaxValue; } if (RealOther3 != null && Hud.Game.NumberOfPlayersInGame == 4) { DistOther3 = RealOther3.XYDistanceTo(BanCoord); ZDistOther3 = RealOther3.ZDiffTo(BanCoord); } else { DistOther3 = float.MaxValue; ZDistOther3 = float.MaxValue; } DistMe = Hud.Game.Me.FloorCoordinate.XYDistanceTo(BanCoord); ZDistMe = Hud.Game.Me.FloorCoordinate.ZDiffTo(BanCoord); string NearestPlayer = string.Empty; string BannerArea = string.Empty; if (!BannersAreas.ContainsKey(BanCoord)) { if (DistOther1 < DistOther2 && DistOther1 < DistOther3 && DistOther1 < DistMe && DistOther1 < 200f && ZDistOther1 < 6f && NameOther1 != null) { NearestPlayer = "banner near " + NameOther1; BannerArea = AreaOther1; } else if (DistOther2 < DistOther1 && DistOther2 < DistOther3 && DistOther2 < DistMe && DistOther2 < 200f && ZDistOther2 < 6f && NameOther2 != null) { NearestPlayer = "banner near " + NameOther2; BannerArea = AreaOther2; } else if (DistOther3 < DistOther1 && DistOther3 < DistOther2 && DistOther3 < DistMe && DistOther3 < 200f && ZDistOther3 < 6f && NameOther3 != null) { NearestPlayer = "banner near " + NameOther3; BannerArea = AreaOther3; } else { NearestPlayer = "banner"; BannerArea = Hud.Game.Me.SnoArea.NameEnglish; } } else { if (DistOther1 < DistOther2 && DistOther1 < DistOther3 && DistOther1 < DistMe && DistOther1 < 200f && ZDistOther1 < 6f && BannersAreas[BanCoord] == AreaOther1 && NameOther1 != null) { NearestPlayer = "banner near " + NameOther1; } else if (DistOther2 < DistOther1 && DistOther2 < DistOther3 && DistOther2 < DistMe && DistOther2 < 200f && ZDistOther2 < 6f && BannersAreas[BanCoord] == AreaOther2 && NameOther2 != null) { NearestPlayer = "banner near " + NameOther2; } else if (DistOther3 < DistOther1 && DistOther3 < DistOther2 && DistOther3 < DistMe && DistOther3 < 200f && ZDistOther3 < 6f && BannersAreas[BanCoord] == AreaOther3 && NameOther3 != null) { NearestPlayer = "banner near " + NameOther3; } else { NearestPlayer = "banner"; } } string RealBannerArea = string.Empty; if (!BannersAreas.ContainsKey(BanCoord)) { BannersAreas.Add(BanCoord, BannerArea); } else { RealBannerArea = BannersAreas[BanCoord]; } bool SameArea = false; if (Hud.Game.Me.SnoArea.NameEnglish == RealBannerArea) { SameArea = true; } else { SameArea = false; } if (!SameArea || Hud.Game.Me.IsInTown) { BannerDecorator.ToggleDecorators <MapShapeDecorator>(false); } else if (SameArea) { BannerDecorator.ToggleDecorators <MapShapeDecorator>(true); } if (NearestPlayer == "banner near ") { NearestPlayer = "banner"; } if (RealBannerArea.Contains("[TEMP]")) { RealBannerArea = RealBannerArea.Replace("[TEMP]", string.Empty).Trim(); } if (RealBannerArea.Contains("Loot Run")) { RealBannerArea = RealBannerArea.Replace("Loot Run", "Rift").Trim(); } if (NearestPlayer != null && RealBannerArea != string.Empty) { if (SameArea) { BannerDecorator.Paint(layer, null, BanCoord, NearestPlayer + Countdown); } else if (NearestPlayer != "banner") { BannerDecorator.Paint(layer, null, BanCoord, NearestPlayer + " in " + RealBannerArea + Environment.NewLine + "teleport!" + Countdown); } else { BannerDecorator.Paint(layer, null, BanCoord, NearestPlayer + " in " + RealBannerArea + Countdown); } } } } }