public void PaintWorld(WorldLayer layer) { if ((Hud.Game.MapMode == MapMode.WaypointMap) || (Hud.Game.MapMode == MapMode.ActMap) || (Hud.Game.MapMode == MapMode.Map)) { return; } var inRift = Hud.Game.SpecialArea == SpecialArea.Rift || Hud.Game.SpecialArea == SpecialArea.GreaterRift; var monsters = Hud.Game.AliveMonsters; foreach (var monster in monsters) { bool illusionist = false; if (monster.SummonerAcdDynamicId == 0) { illusionist = false; } else { illusionist = true; } // trash if (!monster.Invisible && !monster.IsElite && (monster.SnoMonster.Priority != MonsterPriority.goblin) && (monster.SnoMonster.Priority != MonsterPriority.boss) && (monster.SnoMonster.Priority != MonsterPriority.keywarden)) { TrashDecorator.Paint(layer, monster, monster.FloorCoordinate, monster.SnoMonster.NameLocalized); } if (monster.Rarity == ActorRarity.Unique) { UniqueDecorator.Paint(layer, monster, monster.FloorCoordinate, monster.SnoMonster.NameLocalized); } if (monster.SnoMonster.Priority == MonsterPriority.boss) { BossDecorator.Paint(layer, monster, monster.FloorCoordinate, monster.SnoMonster.NameLocalized); } if (monster.Rarity == ActorRarity.Champion && illusionist == false) { ChampionDecorator.Paint(layer, monster, monster.FloorCoordinate, monster.SnoMonster.NameLocalized); } if (monster.Rarity == ActorRarity.RareMinion && illusionist == false) { RareMinionDecorator.Paint(layer, monster, monster.FloorCoordinate, monster.SnoMonster.NameLocalized); } if (monster.Rarity == ActorRarity.Rare && illusionist == false) { RareDecorator.Paint(layer, monster, monster.FloorCoordinate, monster.SnoMonster.NameLocalized); } if ((monster.Rarity == ActorRarity.Unique) && (monster.SnoMonster.Priority < MonsterPriority.keywarden) && illusionist == false) { UniqueDecorator.Paint(layer, monster, monster.FloorCoordinate, monster.SnoMonster.NameLocalized); } if (monster.SnoMonster.Priority == MonsterPriority.boss && illusionist == false) { BossDecorator.Paint(layer, monster, monster.FloorCoordinate, monster.SnoMonster.NameLocalized); } } }
public void PaintWorld(WorldLayer layer) { var monster = Hud.Game.SelectedMonster2 ?? Hud.Game.SelectedMonster1; if (monster == null) { return; } if (monster.SummonerAcdDynamicId != 0 && monster.IsElite) { return; } if (!monster.Invisible && !monster.IsElite && (monster.SnoMonster.Priority != MonsterPriority.goblin) && (monster.SnoMonster.Priority != MonsterPriority.boss) && (monster.SnoMonster.Priority != MonsterPriority.keywarden)) { TrashDecorator.Paint(layer, monster, monster.FloorCoordinate, monster.SnoMonster.NameLocalized); } if (monster.Rarity == ActorRarity.Unique) { UniqueDecorator.Paint(layer, monster, monster.FloorCoordinate, monster.SnoMonster.NameLocalized); } if (monster.SnoMonster.Priority == MonsterPriority.boss) { BossDecorator.Paint(layer, monster, monster.FloorCoordinate, monster.SnoMonster.NameLocalized); } if (monster.Rarity == ActorRarity.Champion) { ChampionDecorator.Paint(layer, monster, monster.FloorCoordinate, monster.SnoMonster.NameLocalized); } if (monster.Rarity == ActorRarity.RareMinion) { RareMinionDecorator.Paint(layer, monster, monster.FloorCoordinate, monster.SnoMonster.NameLocalized); } if (monster.Rarity == ActorRarity.Rare) { RareDecorator.Paint(layer, monster, monster.FloorCoordinate, monster.SnoMonster.NameLocalized); } if ((monster.Rarity == ActorRarity.Unique) && (monster.SnoMonster.Priority < MonsterPriority.keywarden)) { UniqueDecorator.Paint(layer, monster, monster.FloorCoordinate, monster.SnoMonster.NameLocalized); } if (monster.SnoMonster.Priority == MonsterPriority.boss) { BossDecorator.Paint(layer, monster, monster.FloorCoordinate, monster.SnoMonster.NameLocalized); } }
public void PaintWorld(WorldLayer layer) { if (!init_mapping) { init(); } if (Hud.Render.UiHidden) { return; } var itemGroups = Hud.Game.Items.Where(item => item.Location == ItemLocation.Floor).GroupBy(item => item.SnoItem.Sno); if (GroupGems) { itemGroups = Hud.Game.Items.Where(item => item.Location == ItemLocation.Floor && item.SnoItem.MainGroupCode != "gems").GroupBy(item => item.SnoItem.Sno); var gemGroups = Hud.Game.Items.Where(item => item.Location == ItemLocation.Floor && item.SnoItem.MainGroupCode == "gems").GroupBy(item => item.SnoItem.MainGroupCode); foreach (var items in gemGroups) { var orderedItems = items.OrderBy(i => i.NormalizedXyDistanceToMe); var firstItem = orderedItems.FirstOrDefault(); if (firstItem == null) { continue; } if (SnoMapping.ContainsKey(firstItem.SnoItem.Sno)) //2979276674 { var count = orderedItems.Where(i => i.FloorCoordinate.XYDistanceTo(firstItem.FloorCoordinate) <= 40).Sum(i => i.Quantity); if (count > 1) { var Qtt = " (" + count + ")"; SnoMapping[firstItem.SnoItem.Sno].Paint(layer, firstItem, firstItem.FloorCoordinate, "Gems" + Qtt); CountDecorator.Paint(layer, firstItem, firstItem.FloorCoordinate, count.ToString()); } else { SnoMapping[firstItem.SnoItem.Sno].Paint(layer, firstItem, firstItem.FloorCoordinate, firstItem.SnoItem.NameLocalized); } } } } foreach (var items in itemGroups) { var orderedItems = items.OrderBy(i => i.NormalizedXyDistanceToMe); var firstItem = orderedItems.FirstOrDefault(); if (firstItem == null) { continue; } if (SnoMapping.ContainsKey(items.Key)) { var count = orderedItems.Where(i => i.FloorCoordinate.XYDistanceTo(firstItem.FloorCoordinate) <= 40).Sum(i => i.Quantity); if (count > 1) { var Qtt = " (" + count + ")"; SnoMapping[firstItem.SnoItem.Sno].Paint(layer, firstItem, firstItem.FloorCoordinate, firstItem.SnoItem.NameLocalized + Qtt); CountDecorator.Paint(layer, firstItem, firstItem.FloorCoordinate, count.ToString()); } else { SnoMapping[firstItem.SnoItem.Sno].Paint(layer, firstItem, firstItem.FloorCoordinate, firstItem.SnoItem.NameLocalized); } } if (!firstItem.IsLegendary && !NoobGearMode) { continue; } else if (!firstItem.IsLegendary && NoobGearMode && firstItem.Perfection != 0) { if (DisplayItem((byte)firstItem.Quality)) { if (firstItem.IsNormal) { NormalDecorator.Paint(layer, firstItem, firstItem.FloorCoordinate, "\u2605"); } else if (firstItem.IsMagic) { MagicDecorator.Paint(layer, firstItem, firstItem.FloorCoordinate, "\u2605"); } else if (firstItem.IsRare) { RareDecorator.Paint(layer, firstItem, firstItem.FloorCoordinate, "\u2605"); } } } foreach (var item in items) { var inKanaiCube = Hud.Game.Me.IsCubed(item.SnoItem); var canKanaiCube = !inKanaiCube && item.SnoItem.CanKanaiCube; if (canKanaiCube) { var cubeTexture = Hud.Texture.KanaiCubeTexture; float radius; Hud.Render.GetMinimapCoordinates(item.FloorCoordinate.X, item.FloorCoordinate.Y, out float mapX, out float mapY); var RadiusTransformator = new StandardPingRadiusTransformator(Hud, 500) { RadiusMinimumMultiplier = 0.8f, }; radius = 0.9f * Hud.Render.MinimapScale; if (RadiusTransformator != null) { radius = RadiusTransformator.TransformRadius(radius); } var width = cubeTexture.Width * radius; var height = cubeTexture.Height * radius; cubeTexture.Draw(mapX - width / 2, mapY - height / 2, width, height); } if (SameAsEquipped(item, false) && Equipped) { EquippedDecorator.Paint(layer, item, item.FloorCoordinate, "E"); } else if (SameAsArmory(item) && Equipped) { EquippedDecorator.Paint(layer, item, item.FloorCoordinate, "\u2694"); } if (item.AncientRank < 1 || !ShowAncientRank) { continue; } var ancientRankText = item.AncientRank == 1 ? "Ancient -> <- Ancient" : "Primal -> <- Primal"; if (item.SetSno != uint.MaxValue) { ancientRankSetDecorator.Paint(layer, item, item.FloorCoordinate, ancientRankText); // set color } else { ancientRankDecorator.Paint(layer, item, item.FloorCoordinate, ancientRankText); // legendary color } } } /// Slain farmer if (SlainFarmers) { var SlainFarmer = Hud.Game.Actors.Where(x => !x.IsDisabled && !x.IsOperated && x.SnoActor.Sno >= ActorSnoEnum._loottype2_tristramvillager_male_a_corpse_01_farmer /*434676*/ && x.SnoActor.Sno <= ActorSnoEnum._tristramvillager_female_c_corpse_01_farmer /*434679*/); foreach (var actor in SlainFarmer) { SlainFarmerDecorator.Paint(layer, actor, actor.FloorCoordinate, actor.SnoActor.NameLocalized); } } /// Horadric Cache if (HoradricCaches) { var HoradricCache = Hud.Game.Items.Where(item => item.Location == ItemLocation.Floor && item.SnoItem.MainGroupCode == "horadriccache"); foreach (var cache in HoradricCache) { HoradricCacheDecorator.Paint(layer, cache, cache.FloorCoordinate, cache.SnoItem.NameLocalized); string HoradricCacheText = "Cache -> <- Cache"; ancientRankDecorator.Paint(layer, cache, cache.FloorCoordinate, HoradricCacheText); HoradricTimer = NextHoradricSound - Hud.Game.CurrentRealTimeMilliseconds; if (HoradricTimer < 0) { HoradricTimer = 0; } if (cache.NormalizedXyDistanceToMe <= 50 && HoradricTimer == 0) { if (!Hud.Sound.IsIngameSoundEnabled) { continue; } var soundPlayer = Hud.Sound.LoadSoundPlayer("Horadric-Cache-By-Resu.wav"); ThreadPool.QueueUserWorkItem(state => { try { soundPlayer.PlaySync(); } catch (Exception) { } }); NextHoradricSound = Hud.Game.CurrentRealTimeMilliseconds + 20000; } } } if (LoreChestsDisplay) { var loreChests = Hud.Game.Actors.Where(x => !x.IsDisabled && !x.IsOperated && x.GizmoType == GizmoType.LoreChest); foreach (var actor in loreChests) { var LoreTexture = Hud.Texture.GetTexture(3651511087); if (!Hud.Game.Me.IsInTown) { LoreTexture.Draw(actor.FloorCoordinate.X, actor.FloorCoordinate.Y, 31.5f, 49.5f, 1f); } } } var Glow = Hud.Texture.GetTexture(1981524232); if (NormalChestsDisplay) { var normalChests = Hud.Game.Actors.Where(x => !x.IsDisabled && !x.IsOperated && x.SnoActor.Kind == ActorKind.ChestNormal); foreach (var actor in normalChests) { var NormalTexture = Hud.Texture.GetTexture(4061587565); Hud.Render.GetMinimapCoordinates(actor.FloorCoordinate.X, actor.FloorCoordinate.Y, out float textureX, out float textureY); Glow.Draw(textureX - 11, textureY - 13, 28f, 33f, 1f); NormalTexture.Draw(textureX - 11, textureY - 13, 22.77f, 27.06f, 1f); } } if (ResplendentChestsDisplay) { var resplendentChests = Hud.Game.Actors.Where(x => !x.IsDisabled && !x.IsOperated && x.SnoActor.Kind == ActorKind.Chest); foreach (var actor in resplendentChests) { var RespendentTexture = Hud.Texture.GetTexture(4029005773); Hud.Render.GetMinimapCoordinates(actor.FloorCoordinate.X, actor.FloorCoordinate.Y, out float textureX, out float textureY); Glow.Draw(textureX - 11, textureY - 13, 31f, 36f, 1f); RespendentTexture.Draw(textureX - 11, textureY - 13, 22.77f, 27.06f, 1f); } } }
public void PaintWorld(WorldLayer layer) { var monsters = Hud.Game.AliveMonsters; var goblins = Hud.Game.AliveMonsters.Where(x => x.SnoMonster.Priority == MonsterPriority.goblin); foreach (var monster in goblins) { GoblinDecorator.Paint(layer, monster, monster.FloorCoordinate, null); } List <IMonster> monstersElite = new List <IMonster>(); foreach (var monster in monsters) { if (monster.Rarity == ActorRarity.Champion || monster.Rarity == ActorRarity.Rare) { monstersElite.Add(monster); } if (monster.Rarity == ActorRarity.RareMinion) { // RareMinionDecorator.Paint(layer, monster, monster.FloorCoordinate, monster.SnoMonster.NameLocalized); } if (monster.Rarity == ActorRarity.Unique) { UniqueDecorator.Paint(layer, monster, monster.FloorCoordinate, monster.SnoMonster.NameLocalized); } if (monster.Rarity == ActorRarity.Boss) { BossDecorator.Paint(layer, monster, monster.FloorCoordinate, monster.SnoMonster.NameLocalized); } } foreach (var monster in monstersElite) { if (monster.SummonerAcdDynamicId == 0) { bool flag = true; foreach (var snoMonsterAffix in monster.AffixSnoList) { string affixName = null; if (CustomAffixNames.ContainsKey(snoMonsterAffix.Affix)) { affixName = CustomAffixNames[snoMonsterAffix.Affix]; } else { affixName = snoMonsterAffix.NameLocalized; } if (snoMonsterAffix.Affix == MonsterAffix.Juggernaut) { flag = false; } WorldDecoratorCollection decorator; if (!AffixDecorators.TryGetValue(snoMonsterAffix.Affix, out decorator)) { continue; } decorator.Paint(layer, monster, monster.FloorCoordinate, affixName); } if (monster.Rarity == ActorRarity.Rare) { if (flag) { RareDecorator.Paint(layer, monster, monster.FloorCoordinate, monster.SnoMonster.NameLocalized); } else { JuggernautDecorator.Paint(layer, monster, monster.FloorCoordinate, monster.SnoMonster.NameLocalized); } } if (monster.Rarity == ActorRarity.Champion) { ChampionDecorator.Paint(layer, monster, monster.FloorCoordinate, monster.SnoMonster.NameLocalized); } } } monstersElite.Clear(); }
public void DrawEliteCirclePlugin(WorldLayer layer) { bool flagNeedShowSteadyAimYard = false; if (Hud.Game.Me.HeroClassDefinition.HeroClass == HeroClass.DemonHunter) { var dhSteadyAimBuff = Hud.Game.Me.Powers.GetBuff(Hud.Sno.SnoPowers.DemonHunter_Passive_SteadyAim.Sno); if (dhSteadyAimBuff != null) { flagNeedShowSteadyAimYard = true; } //?? } var alivemonsters = Hud.Game.AliveMonsters; var goblins = Hud.Game.AliveMonsters.Where(x => x.SnoMonster.Priority == MonsterPriority.goblin); foreach (var monster in goblins) { GoblinDecorator.Paint(layer, monster, monster.FloorCoordinate, null); } List <IMonster> monstersElite = new List <IMonster>(); foreach (var monster in alivemonsters) { if (monster.Rarity == ActorRarity.Champion || monster.Rarity == ActorRarity.Rare) { monstersElite.Add(monster); } if (monster.Rarity == ActorRarity.Unique) { UniqueDecorator.Paint(layer, monster, monster.FloorCoordinate, monster.SnoMonster.NameLocalized); } if (monster.Rarity == ActorRarity.Boss) { BossDecorator.Paint(layer, monster, monster.FloorCoordinate, monster.SnoMonster.NameLocalized); } } foreach (var monster in monstersElite) { if (monster.SummonerAcdDynamicId == 0) { var currentMonsterHealthPercent = monster.CurHealth * 100.0 / monster.MaxHealth; bool flagIsNotJuggernaut = true; foreach (var snoMonsterAffix in monster.AffixSnoList) { string affixName = null; affixName = snoMonsterAffix.NameLocalized; if (snoMonsterAffix.Affix == MonsterAffix.Juggernaut) { flagIsNotJuggernaut = false; } } if (monster.Rarity == ActorRarity.Rare) { if (flagIsNotJuggernaut) { RareDecorator.Paint(layer, monster, monster.FloorCoordinate, monster.SnoMonster.NameLocalized); } else { JuggernautDecorator.Paint(layer, monster, monster.FloorCoordinate, monster.SnoMonster.NameLocalized); } } if (monster.Rarity == ActorRarity.Champion) { ChampionDecorator.Paint(layer, monster, monster.FloorCoordinate, monster.SnoMonster.NameLocalized); } var monsterScreenCoordinate = monster.FloorCoordinate.ToScreenCoordinate(); if (IsGuardianAlive()) { if (flagNeedShowSteadyAimYard) { string yardStr = monster.NormalizedXyDistanceToMe.ToString("0") + "Yard"; EliteHealthDecorator.TextFunc = () => yardStr; EliteHealthDecorator.Paint(monsterScreenCoordinate.X, monsterScreenCoordinate.Y - EliteHealthBlockSize, EliteHealthBlockSize, EliteHealthBlockSize, HorizontalAlign.Center); } } else { if (currentMonsterHealthPercent < 40.0) { string monsterHealthPercentStr = "HP:" + currentMonsterHealthPercent.ToString("0.0") + "%"; EliteHealthDecorator.TextFunc = () => monsterHealthPercentStr; EliteHealthDecorator.Paint(monsterScreenCoordinate.X, monsterScreenCoordinate.Y - EliteHealthBlockSize, EliteHealthBlockSize, EliteHealthBlockSize, HorizontalAlign.Center); } } if (currentMonsterHealthPercent < 20.0) { Hud.Render.CreateBrush(192, 255, 255, 55, -1).DrawLine(monsterScreenCoordinate.X, monsterScreenCoordinate.Y, Hud.Game.Me.ScreenCoordinate.X, Hud.Game.Me.ScreenCoordinate.Y + 60, 1.0f); } } } bool StrickenActive = false; foreach (var StrickenLocation in Hud.Game.Items.Where(x => x.Location == ItemLocation.LeftRing || x.Location == ItemLocation.RightRing || x.Location == ItemLocation.Neck)) { if (StrickenLocation.SocketCount != 1 || StrickenLocation.ItemsInSocket == null) { continue; } var Stricken = StrickenLocation.ItemsInSocket.FirstOrDefault(); if (Stricken == null) { continue; } if (Stricken.SnoItem.Sno == 3249948847) { StrickenActive = true; break; } else { continue; } } if (StrickenActive) { var Texture = Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Unique_Gem_018_x1); foreach (var monster in monstersElite) { if (monster.IsAlive) { var monsterScreenCoordinate = monster.FloorCoordinate.ToScreenCoordinate(); Tuple <double, int> valuesOut; if (StrickenMonsterStatus.TryGetValue(monster.AcdId, out valuesOut)) { double monHealth = monster.CurHealth; double prevHealth = valuesOut.Item1; int prevStacks = valuesOut.Item2; if (prevHealth > monHealth && Hud.Game.Me.Powers.BuffIsActive(Hud.Sno.SnoPowers.BaneOfTheStrickenPrimary.Sno, 2) && StrickenMonsterCount == 0 && !StrickenInCooldown) { int Stacks = (int)(prevStacks + 1); Tuple <double, int> updateValues = new Tuple <double, int>(monster.CurHealth, Stacks); StrickenMonsterStatus[monster.AcdId] = updateValues; StrickenMonsterCount++; StrickenInCooldown = true; } else if (!Hud.Game.Me.Powers.BuffIsActive(Hud.Sno.SnoPowers.BaneOfTheStrickenPrimary.Sno, 2) && StrickenInCooldown) { StrickenInCooldown = false; StrickenMonsterCount = 0; if (prevHealth > monHealth) { int Stacks = (int)(prevStacks); Tuple <double, int> updateValues = new Tuple <double, int>(monster.CurHealth, Stacks); StrickenMonsterStatus[monster.AcdId] = updateValues; } } if (prevStacks > 0) { Texture.Draw(monsterScreenCoordinate.X, monsterScreenCoordinate.Y, StrickenPropSquare, StrickenPropSquare); StrickenStackDecorator.TextFunc = () => prevStacks.ToString(); StrickenStackDecorator.Paint(monsterScreenCoordinate.X, monsterScreenCoordinate.Y, StrickenPropSquare, StrickenPropSquare, HorizontalAlign.Center); } } else { Tuple <double, int> valuesIn = new Tuple <double, int>(monster.CurHealth, (int)(0)); StrickenMonsterStatus.Add(monster.AcdId, valuesIn); } } else { StrickenMonsterStatus.Remove(monster.AcdId); } } } var shrines = Hud.Game.Shrines.Where(s => (s.Type == ShrineType.PoolOfReflection || s.Type == ShrineType.BanditShrine)); foreach (var shrine in shrines) { if (shrine.IsDisabled == false && shrine.IsOperated == false) { var monsterScreenCoordinate = shrine.FloorCoordinate.ToScreenCoordinate(); Hud.Render.CreateBrush(192, 255, 255, 55, -1).DrawLine(monsterScreenCoordinate.X, monsterScreenCoordinate.Y, Hud.Game.Me.ScreenCoordinate.X, Hud.Game.Me.ScreenCoordinate.Y + 60, 1.0f); } } double minDistanceToMe = 999999.0; var oculusActors = Hud.Game.Actors.Where(x => x.SnoActor.Sno == ActorSnoEnum._generic_proxy && x.GetAttributeValueAsInt(Hud.Sno.Attributes.Power_Buff_1_Visual_Effect_None, Hud.Sno.SnoPowers.OculusRing.Sno) == 1); foreach (var actor in oculusActors) { if (minDistanceToMe > actor.NormalizedXyDistanceToMe) { minDistanceToMe = actor.NormalizedXyDistanceToMe; } } foreach (var actor in oculusActors) { if (minDistanceToMe == actor.NormalizedXyDistanceToMe && actor.NormalizedXyDistanceToMe < 100) { var actorScreenCoordinate = actor.FloorCoordinate.ToScreenCoordinate(); Hud.Render.CreateBrush(192, 234, 60, 83, -1).DrawLine(actorScreenCoordinate.X, actorScreenCoordinate.Y, Hud.Game.Me.ScreenCoordinate.X, Hud.Game.Me.ScreenCoordinate.Y + 60, 1.0f); // StrickenStackDecorator.TextFunc = () => ("(" + (int)(actorScreenCoordinate.X) + "," + (int)(actorScreenCoordinate.Y) + ")"); // StrickenStackDecorator.Paint(actorScreenCoordinate.X, actorScreenCoordinate.Y, StrickenPropSquare, StrickenPropSquare, HorizontalAlign.Center); } } foreach (var actor in Hud.Game.Actors) { switch (actor.SnoActor.Sno) { case ActorSnoEnum._x1_monsteraffix_teleportmines: if (actor.NormalizedXyDistanceToMe <= 6) { WormholeWarningDecorator.Paint(layer, actor, actor.FloorCoordinate, "Wormhole!"); } else { WormholeDecorator.Paint(layer, actor, actor.FloorCoordinate, "Wormhole"); } break; } } monstersElite.Clear(); }