Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using Turbo.Plugins.Default;
- using System.Linq;
- using System.Collections.Generic;
- namespace Turbo.Plugins.RNN
- {
- public class BossSupportBuffs : BasePlugin, IInGameTopPainter, ICustomizer
- {
- private IBrush EnabledBrush { get; set; }
- private IFont FontYellow { get; set; }
- public float Xpor { get; set; }
- public float Ypor { get; set; }
- public float Opacity { get; set; }
- private float _SizeMultiplier { get; set; }
- public float SizeMultiplier
- {
- get { return _SizeMultiplier; }
- set
- {
- if (_SizeMultiplier != value)
- {
- _SizeMultiplier = value;
- FontYellow = Hud.Render.CreateFont("tahoma", 14.0f * _SizeMultiplier, 255, 255, 255, 0, true, false, 255, 0, 0, 0, true);
- }
- }
- }
- public bool AddJesseth { get; set; }
- public bool AddStacksSiphon { get; set; }
- public bool MarkedForDeath_All_Runes { get; set; }
- public bool Entangling_All_Runes { get; set; }
- private delegate bool CheckRunesFunc(IMonster m);
- private CheckRunesFunc CheckRunesEntangling { get; set; }
- private delegate bool ReqFuncMonster(IMonster m, IPlayer p);
- private Dictionary<ReqFuncMonster, int> BuffTextureMonster { get; set; } = new Dictionary<ReqFuncMonster, int>();
- private ITexture[] IconTextures { get; set; }
- private ITexture TextureIcon { get; set; } = null;
- private float OffsetIcons { get; set; } = 0;
- public BossSupportBuffs()
- {
- Enabled = true;
- }
- public override void Load(IController hud)
- {
- base.Load(hud);
- Order = 90002;
- Xpor = 0.50f; // Valid values: from 0f to 1f . To set the x coordinate of the center
- Ypor = 0.001f; // Valid values: from 0f to 1f . To set the y coordinate of the center
- Opacity = 0.85f; // 0f..1f Opacity for icon texture
- SizeMultiplier = 0.55f; // Size multiplier for icons
- AddJesseth = false; // Icon for set Jesseth (Skeletons Commanded => 400% Damage)
- AddStacksSiphon = false; // Icon for Siphon stacks, only rune Power Shift (10 stacks => 200% damage)
- MarkedForDeath_All_Runes = true; // Consider all runes or only Valley of Death
- Entangling_All_Runes = true; // Consider all runes or only Chain Gang
- EnabledBrush = Hud.Render.CreateBrush(255, 0, 255, 0, -1);
- IconTextures = new ITexture[]
- {
- null, // 0 - for space
- Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.P74_Unique_Scythe1H_01), // 1 - Funerary Pick
- Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.P6_Unique_Shield_01), // 2 - Jesset
- Hud.Texture.GetTexture(679490773), // 3 - Siphon
- Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.P6_Unique_Ring_03), // 4 - Krysbin
- Hud.Texture.GetTexture(439848148), // 5 - Companion
- Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.P69_Unique_Bow_102), // 6 - Odyssey´s End Bow
- Hud.Texture.GetTexture(746746961), // 7 - Marked for Death
- Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Unique_Bracer_007_x1), // 8 - Strongarm
- Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Unique_Gem_005_x1), // 9 - Gem Toxin
- Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Unique_Gem_021_x1), // 10 - Gem IceBLink
- };
- CheckRunesEntangling = (m) => (
- m.GetAttributeValue(Hud.Sno.Attributes.Power_Buff_0_Visual_Effect_B, 361936) == 1 || // rune Chain Gang (1)
- m.GetAttributeValue(Hud.Sno.Attributes.Power_Buff_0_Visual_Effect_C, 361936) == 1 || // rune Shock Collar (2)
- m.GetAttributeValue(Hud.Sno.Attributes.Power_Buff_0_Visual_Effect_A, 361936) == 1 || // rune Heavy Burden (3)
- m.GetAttributeValue(Hud.Sno.Attributes.Power_Buff_0_Visual_Effect_D, 361936) == 1 || // rune Justice is Served (4)
- m.GetAttributeValue(Hud.Sno.Attributes.Power_Buff_0_Visual_Effect_E, 361936) == 1 // rune Bounty Hunter (5)
- );
- }
- public void Customize()
- {
- BuffTextureMonster.Add((m, bk) => m.GetAttributeValue(Hud.Sno.Attributes.Power_Buff_9_Visual_Effect_D, 453563) == 1, 1); // Funerary Pick (Siphon, Power Shift) (600%/300% Damage)
- if (AddJesseth)
- BuffTextureMonster.Add((m, bk) => bk.Powers.BuffIsActive(476048, 1), 2); // Jesseth Set (400% Damage)
- if (AddStacksSiphon)
- BuffTextureMonster.Add((m, bk) => bk.Powers.GetBuff(453563)?.IconCounts[10] == 10, 3); // 10 stacks Siphon (200% Damage)
- BuffTextureMonster.Add((m, bk) => /*(m.Slow || m.Chilled) ||*/ (m.Frozen || m.Stunned || m.Blind), 4); // Krysbin (300% Damage)
- BuffTextureMonster.Add((m, bk) => false, 0); // --------------------- Space --------------------
- BuffTextureMonster.Add((m, bk) => bk.Powers.BuffIsActive(365311,2), 5); // Companion (Wolf) (15% Damage)
- if (Entangling_All_Runes)
- BuffTextureMonster.Add((m, bk) => CheckRunesEntangling(m),6); // Odyssey´s End Bow (Entangling shoot, all runes) (150% Damage)
- else
- BuffTextureMonster.Add((m, bk) => m.GetAttributeValue(Hud.Sno.Attributes.Power_Buff_0_Visual_Effect_B, 361936) == 1, 6); // Odyssey´s End Bow (Entangling shoot, rune Chain Gang)
- if (MarkedForDeath_All_Runes)
- BuffTextureMonster.Add((m, bk) => m.MarkedForDeath, 7); // Marked for Death (all runes)
- else
- BuffTextureMonster.Add((m, bk) => m.GetAttributeValue(Hud.Sno.Attributes.Power_Buff_0_Visual_Effect_C, 130738) == 1, 7); // Marked for Death (rune Valley of Death) (15% Damage)
- BuffTextureMonster.Add((m, bk) => false, 0); // -------------------- Space ------------------------
- BuffTextureMonster.Add((m, bk) => m.GetAttributeValue(Hud.Sno.Attributes.Power_Buff_2_Visual_Effect_None, 318772) == 1, 8); // StrongArm (30% Damage)
- BuffTextureMonster.Add((m, bk) => m.GetAttributeValue(Hud.Sno.Attributes.Power_Buff_2_Visual_Effect_None, 403461) == 1, 9); // Gem Toxin (10% Damage)
- BuffTextureMonster.Add((m, bk) => m.GetAttributeValue(Hud.Sno.Attributes.Power_Buff_1_Visual_Effect_None, 428354) == 1, 10); // Gem IceBLink (10% Crit Chance)
- }
- public void PaintTopInGame(ClipState clipState)
- {
- if (clipState != ClipState.BeforeClip || !Hud.Game.IsInGame || Hud.Game.Me.InGreaterRiftRank == 0 || Hud.Game.RiftPercentage != 100 || Hud.Game.NumberOfPlayersInGame == 1) return;
- if (Hud.Game.Players.Any(p => p.Powers.BuffIsActive(428354) || p.Powers.BuffIsActive(403556) )) // Toxin or IceBLink => support present
- {
- IMonster Boss = Hud.Game.AliveMonsters.FirstOrDefault(m => m.Rarity == ActorRarity.Boss && m.SummonerAcdDynamicId == 0 );
- if (Boss != null)
- {
- IPlayer BossKiller = Hud.Game.Players.FirstOrDefault(p => p.Powers.BuffIsActive(472274) || p.Powers.BuffIsActive(467465)) ?? Hud.Game.Players.FirstOrDefault(p => p.Powers.BuffIsActive(Hud.Sno.SnoPowers.BaneOfTheStrickenPrimary.Sno, 0));
- if (BossKiller != null)
- {
- var SizeIconWidth = Hud.Texture.BuffFrameTexture.Width * Hud.Window.Size.Height/1200.0f * SizeMultiplier;
- var SizeIconHeight = Hud.Texture.BuffFrameTexture.Height * Hud.Window.Size.Height/1200.0f * SizeMultiplier;
- var x = Hud.Window.Size.Width * Xpor - OffsetIcons/2.0f; var x0 = x;
- var y = Hud.Window.Size.Height * Ypor;
- foreach(var dataBuff in BuffTextureMonster)
- {
- TextureIcon = IconTextures[dataBuff.Value];
- if (TextureIcon == null)
- {
- if (x != x0) x += (SizeIconWidth + 1)/ 2.0f;
- }
- else
- {
- if (dataBuff.Value < 5)
- {
- if (BossKiller.HeroClassDefinition.HeroClass != HeroClass.Necromancer) continue;
- }
- var r = (TextureIcon.Width == TextureIcon.Height)? 1.0f : 0.6f; // var r = TextureIcon.Width/TextureIcon.Height; // 0.5f really // Textures 1, 2, 6, 8
- TextureIcon.Draw(x + SizeIconWidth * (1 - r) / 2.0f, y, SizeIconWidth * r, SizeIconHeight, Opacity);
- if (dataBuff.Value == 3)
- {
- if (BossKiller.Powers.GetBuff(453563) != null)
- {
- var layout = FontYellow.GetTextLayout((BossKiller.Powers.GetBuff(453563).IconCounts[10]).ToString());
- FontYellow.DrawText(layout, x + (SizeIconWidth - layout.Metrics.Width)/2.0f, y + (SizeIconWidth - layout.Metrics.Height)/2.0f );
- }
- }
- Hud.Texture.BuffFrameTexture.Draw(x, y, SizeIconWidth, SizeIconHeight, Opacity);
- if (dataBuff.Key(Boss, BossKiller))
- EnabledBrush.DrawRectangle(x, y, SizeIconWidth, SizeIconHeight);
- x += SizeIconWidth + 1;
- }
- }
- OffsetIcons = x - x0;
- }
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment