RNNCode

BossSupportBuffs

Jul 8th, 2025 (edited)
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 8.46 KB | None | 0 0
  1. using System;
  2. using Turbo.Plugins.Default;
  3. using System.Linq;
  4. using System.Collections.Generic;
  5.  
  6. namespace Turbo.Plugins.RNN
  7. {
  8.     public class BossSupportBuffs : BasePlugin, IInGameTopPainter, ICustomizer
  9.     {
  10.         private IBrush EnabledBrush { get; set; }
  11.         private IFont FontYellow { get; set; }
  12.  
  13.         public float Xpor { get; set; }
  14.         public float Ypor { get; set; }
  15.         public float Opacity { get; set; }
  16.  
  17.         private float _SizeMultiplier  { get; set; }
  18.         public float SizeMultiplier
  19.         {
  20.             get { return _SizeMultiplier; }
  21.             set
  22.             {
  23.                 if (_SizeMultiplier != value)
  24.                 {
  25.                     _SizeMultiplier = value;
  26.                     FontYellow = Hud.Render.CreateFont("tahoma", 14.0f * _SizeMultiplier, 255, 255, 255, 0, true, false, 255, 0, 0, 0, true);
  27.                 }
  28.             }
  29.         }
  30.  
  31.         public bool AddJesseth { get; set; }
  32.         public bool AddStacksSiphon { get; set; }
  33.         public bool MarkedForDeath_All_Runes { get; set; }
  34.         public bool Entangling_All_Runes { get; set; }
  35.  
  36.         private delegate bool CheckRunesFunc(IMonster m);
  37.         private CheckRunesFunc CheckRunesEntangling { get; set; }
  38.  
  39.         private delegate bool ReqFuncMonster(IMonster m, IPlayer p);
  40.         private Dictionary<ReqFuncMonster, int> BuffTextureMonster { get; set; } = new Dictionary<ReqFuncMonster, int>();
  41.  
  42.         private ITexture[] IconTextures { get; set; }
  43.         private ITexture TextureIcon { get; set; } = null;
  44.         private float OffsetIcons { get; set; } = 0;
  45.  
  46.         public BossSupportBuffs()
  47.         {
  48.             Enabled = true;
  49.         }
  50.  
  51.         public override void Load(IController hud)
  52.         {
  53.             base.Load(hud);
  54.             Order = 90002;
  55.  
  56.             Xpor = 0.50f;               // Valid values: from 0f to 1f . To set the x coordinate of the center
  57.             Ypor = 0.001f;              // Valid values: from 0f to 1f . To set the y coordinate of the center
  58.             Opacity = 0.85f;            // 0f..1f  Opacity for icon texture
  59.             SizeMultiplier = 0.55f;     // Size multiplier for icons
  60.  
  61.             AddJesseth = false;                 // Icon for set Jesseth (Skeletons Commanded => 400% Damage)
  62.             AddStacksSiphon = false;            // Icon for Siphon stacks, only rune Power Shift (10 stacks => 200% damage)
  63.  
  64.             MarkedForDeath_All_Runes = true;    // Consider all runes or only Valley of Death
  65.             Entangling_All_Runes = true;        // Consider all runes or only Chain Gang
  66.  
  67.             EnabledBrush = Hud.Render.CreateBrush(255, 0, 255, 0, -1);
  68.  
  69.             IconTextures = new ITexture[]
  70.             {
  71.                 null,                                                                       //  0 - for space
  72.                 Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.P74_Unique_Scythe1H_01),        //  1 - Funerary Pick
  73.                 Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.P6_Unique_Shield_01),           //  2 - Jesset
  74.                 Hud.Texture.GetTexture(679490773),                                          //  3 - Siphon
  75.                 Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.P6_Unique_Ring_03),             //  4 - Krysbin
  76.                 Hud.Texture.GetTexture(439848148),                                          //  5 - Companion
  77.                 Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.P69_Unique_Bow_102),            //  6 - Odyssey´s End Bow
  78.                 Hud.Texture.GetTexture(746746961),                                          //  7 - Marked for Death
  79.                 Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Unique_Bracer_007_x1),          //  8 - Strongarm
  80.                 Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Unique_Gem_005_x1),             //  9 - Gem Toxin
  81.                 Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Unique_Gem_021_x1),             // 10 - Gem IceBLink
  82.             };
  83.  
  84.             CheckRunesEntangling = (m) =>   (
  85.                                                 m.GetAttributeValue(Hud.Sno.Attributes.Power_Buff_0_Visual_Effect_B, 361936) == 1 ||    // rune Chain Gang (1)
  86.                                                 m.GetAttributeValue(Hud.Sno.Attributes.Power_Buff_0_Visual_Effect_C, 361936) == 1 ||    // rune Shock Collar (2)
  87.                                                 m.GetAttributeValue(Hud.Sno.Attributes.Power_Buff_0_Visual_Effect_A, 361936) == 1 ||    // rune Heavy Burden (3)
  88.                                                 m.GetAttributeValue(Hud.Sno.Attributes.Power_Buff_0_Visual_Effect_D, 361936) == 1 ||    // rune Justice is Served (4)
  89.                                                 m.GetAttributeValue(Hud.Sno.Attributes.Power_Buff_0_Visual_Effect_E, 361936) == 1       // rune Bounty Hunter (5)
  90.                                             );
  91.         }
  92.  
  93.         public void Customize()
  94.         {
  95.             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)
  96.  
  97.             if (AddJesseth)
  98.                 BuffTextureMonster.Add((m, bk) => bk.Powers.BuffIsActive(476048, 1), 2);                                                    // Jesseth Set (400% Damage)
  99.  
  100.             if (AddStacksSiphon)
  101.                 BuffTextureMonster.Add((m, bk) => bk.Powers.GetBuff(453563)?.IconCounts[10] == 10, 3);                                      // 10 stacks Siphon (200% Damage)
  102.  
  103.             BuffTextureMonster.Add((m, bk) => /*(m.Slow || m.Chilled) ||*/ (m.Frozen || m.Stunned || m.Blind), 4);                          // Krysbin  (300% Damage)
  104.  
  105.             BuffTextureMonster.Add((m, bk) => false, 0);    // --------------------- Space --------------------
  106.  
  107.             BuffTextureMonster.Add((m, bk) => bk.Powers.BuffIsActive(365311,2), 5);                                                         // Companion (Wolf) (15% Damage)
  108.  
  109.             if (Entangling_All_Runes)
  110.                 BuffTextureMonster.Add((m, bk) => CheckRunesEntangling(m),6);                                                               // Odyssey´s End Bow (Entangling shoot, all runes) (150% Damage)
  111.             else
  112.                 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)
  113.  
  114.             if (MarkedForDeath_All_Runes)
  115.                 BuffTextureMonster.Add((m, bk) => m.MarkedForDeath, 7);                                                                     // Marked for Death (all runes)
  116.             else
  117.                 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)
  118.  
  119.             BuffTextureMonster.Add((m, bk) => false, 0);    // -------------------- Space ------------------------
  120.  
  121.             BuffTextureMonster.Add((m, bk) => m.GetAttributeValue(Hud.Sno.Attributes.Power_Buff_2_Visual_Effect_None, 318772) == 1, 8);     // StrongArm (30% Damage)
  122.             BuffTextureMonster.Add((m, bk) => m.GetAttributeValue(Hud.Sno.Attributes.Power_Buff_2_Visual_Effect_None, 403461) == 1, 9);     // Gem Toxin  (10% Damage)
  123.             BuffTextureMonster.Add((m, bk) => m.GetAttributeValue(Hud.Sno.Attributes.Power_Buff_1_Visual_Effect_None, 428354) == 1, 10);    // Gem IceBLink (10% Crit Chance)
  124.         }
  125.  
  126.         public void PaintTopInGame(ClipState clipState)
  127.         {
  128.             if (clipState != ClipState.BeforeClip || !Hud.Game.IsInGame || Hud.Game.Me.InGreaterRiftRank == 0 || Hud.Game.RiftPercentage != 100 || Hud.Game.NumberOfPlayersInGame == 1) return;
  129.             if (Hud.Game.Players.Any(p => p.Powers.BuffIsActive(428354) || p.Powers.BuffIsActive(403556) )) // Toxin or IceBLink => support present
  130.             {
  131.                 IMonster Boss = Hud.Game.AliveMonsters.FirstOrDefault(m => m.Rarity == ActorRarity.Boss && m.SummonerAcdDynamicId == 0 );
  132.                 if (Boss != null)
  133.                 {
  134.                     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));
  135.                     if (BossKiller != null)
  136.                     {
  137.                         var SizeIconWidth = Hud.Texture.BuffFrameTexture.Width   * Hud.Window.Size.Height/1200.0f * SizeMultiplier;
  138.                         var SizeIconHeight = Hud.Texture.BuffFrameTexture.Height * Hud.Window.Size.Height/1200.0f * SizeMultiplier;
  139.                         var x = Hud.Window.Size.Width * Xpor - OffsetIcons/2.0f;    var x0 = x;
  140.                         var y = Hud.Window.Size.Height * Ypor;
  141.                         foreach(var dataBuff in BuffTextureMonster)
  142.                         {
  143.                             TextureIcon = IconTextures[dataBuff.Value];
  144.                             if (TextureIcon == null)
  145.                             {
  146.                                 if (x != x0)    x += (SizeIconWidth + 1)/ 2.0f;
  147.                             }
  148.                             else
  149.                             {
  150.                                 if (dataBuff.Value < 5)
  151.                                 {
  152.                                     if (BossKiller.HeroClassDefinition.HeroClass != HeroClass.Necromancer) continue;
  153.                                 }
  154.                                 var r = (TextureIcon.Width == TextureIcon.Height)? 1.0f : 0.6f; // var r = TextureIcon.Width/TextureIcon.Height; // 0.5f really // Textures 1, 2, 6, 8
  155.                                 TextureIcon.Draw(x + SizeIconWidth * (1 - r) / 2.0f, y, SizeIconWidth * r, SizeIconHeight, Opacity);
  156.                                 if (dataBuff.Value == 3)
  157.                                 {
  158.                                     if (BossKiller.Powers.GetBuff(453563) != null)
  159.                                     {
  160.                                         var layout = FontYellow.GetTextLayout((BossKiller.Powers.GetBuff(453563).IconCounts[10]).ToString());
  161.                                         FontYellow.DrawText(layout, x + (SizeIconWidth - layout.Metrics.Width)/2.0f, y + (SizeIconWidth - layout.Metrics.Height)/2.0f );
  162.                                     }
  163.                                 }
  164.                                 Hud.Texture.BuffFrameTexture.Draw(x, y, SizeIconWidth, SizeIconHeight, Opacity);
  165.                                 if (dataBuff.Key(Boss, BossKiller))
  166.                                     EnabledBrush.DrawRectangle(x, y, SizeIconWidth, SizeIconHeight);
  167.                                 x += SizeIconWidth + 1;
  168.                             }
  169.                         }
  170.                         OffsetIcons = x - x0;
  171.                     }
  172.                 }
  173.             }
  174.         }
  175.     }
  176. }
Advertisement
Add Comment
Please, Sign In to add comment