s4000

DAV_SetPowerPlugin

Jun 27th, 2019
1,648
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 8.28 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using Turbo.Plugins.Default;
  4.  
  5. namespace Turbo.Plugins.DAV
  6. {
  7.     public class DAV_SetPowerPlugin : BasePlugin, IInGameTopPainter {
  8.         public float IconSize_Ext { get; set; } = 25f;
  9.         public float offsetX { get; set; } = 5f;
  10.         public float offsetY1 { get; set; } = 0f; // for Nemesis Bracers
  11.         public float offsetY2 { get; set; } = 0f; // for Flavor of Time
  12.         public float offsetY3 { get; set; } = 0f; // for Set Powers
  13.         public bool showExtend { get; set; } = true; // show 4 customize power
  14.         public bool showXpBonus { get; set; } = true; // show bonus pool
  15.         public ITexture[] Icon_PowerExtend { get; set; } = new ITexture[4];
  16.         public Func<IPlayer, bool>[] Func_PowerExtend { get; set; } = new Func<IPlayer, bool>[4];
  17.         public ITexture Texture_BG { get; set; }
  18.         public ITexture Texture_ZDPS { get; set; }
  19.         public ITexture Texture_XpBonus { get; set; }
  20.         public IFont poolFont { get; set; }
  21.         public float offsetPool { get; set; } = 3;
  22.         public float BGopacity { get; set; } = 0.9f;
  23.  
  24.         private ITexture[] Texture_Power { get; set; } = new ITexture[4];
  25.         private Dictionary<HeroClass, Dictionary<uint, ITexture>> HeroPowerSet { get; set; }
  26.  
  27.         public DAV_SetPowerPlugin() {
  28.             Enabled = true;
  29.         }
  30.  
  31.         public override void Load(IController hud) {
  32.             base.Load(hud);
  33.  
  34.             poolFont = Hud.Render.CreateFont("Arial", 6.5f, 255, 51, 255, 51, false, false, 255, 51, 51, 51, true);
  35.             Texture_BG = Hud.Texture.InventorySetBackgroundLarge;
  36.             Texture_ZDPS = Hud.Texture.GetTexture(3012169026); // Hud.Sno.SnoItems.Unique_Shield_009_x1
  37.             Texture_XpBonus = Hud.Texture.GetTexture(2631068636);
  38.  
  39.             Func_PowerExtend[0] = (p) => { return p.Offense.AreaDamageBonus > 0; }; // Area Damage
  40.             Icon_PowerExtend[0] = Hud.Texture.GetTexture(415710583);
  41.             Func_PowerExtend[1] = (p) => { return p.Powers.BuffIsActive(428348); }; // Bane of the Stricken 殤擊之殃
  42.             Icon_PowerExtend[1] = Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Unique_Gem_018_x1);
  43.             Func_PowerExtend[2] = (p) => { return p.Powers.BuffIsActive(359560); }; // Death's Breath Set
  44.             Icon_PowerExtend[2] = Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Crafting_Looted_Reagent_01);
  45.             Func_PowerExtend[3] = (p) => { return p.Powers.BuffIsActive(483516); }; // The Executioner 劊子手
  46.             Icon_PowerExtend[3] = Hud.Texture.GetTexture(1736325614);
  47.  
  48.             Texture_Power[0] = Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Unique_Bracer_106_x1); // Nemesis Bracers 死敵護腕
  49.             Texture_Power[1] = Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Unique_Amulet_001_x1); // Flavor of Time 逝水年華
  50.             Texture_Power[2] = Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Unique_Gem_023_x1); // Legacy of Dreams 夢魘遺產
  51.             Texture_Power[3] = Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Unique_Ring_014_x1); // Legacy of Nightmares 夢魘者的遺禮
  52.  
  53.             HeroPowerSet = new Dictionary<HeroClass, Dictionary<uint, ITexture>> {
  54.                 { HeroClass.DemonHunter, new Dictionary<uint, ITexture>() },
  55.                 { HeroClass.Barbarian, new Dictionary<uint, ITexture>() },
  56.                 { HeroClass.Wizard, new Dictionary<uint, ITexture>() },
  57.                 { HeroClass.WitchDoctor, new Dictionary<uint, ITexture>() },
  58.                 { HeroClass.Monk, new Dictionary<uint, ITexture>() },
  59.                 { HeroClass.Crusader, new Dictionary<uint, ITexture>() },
  60.                 { HeroClass.Necromancer, new Dictionary<uint, ITexture>() },
  61.             };
  62.  
  63.             HeroPowerSet[HeroClass.DemonHunter].Add(484291, Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.P69_Unique_Helm_Set_06)); // Gears of Dreadlands 恐懼戰裝
  64.             HeroPowerSet[HeroClass.DemonHunter].Add(444522, Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Unique_Helm_Set_14_x1)); // The Shadow's Mantle 暗影裝束
  65.             HeroPowerSet[HeroClass.DemonHunter].Add(423228, Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Unique_Helm_Set_03_p2)); // Unhallowed Essence 邪瀆精華
  66.             HeroPowerSet[HeroClass.DemonHunter].Add(318832, Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Unique_Helm_Set_07_x1)); // Embodiment of the Marauder 掠奪者的化身
  67.             HeroPowerSet[HeroClass.DemonHunter].Add(434964, Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Unique_Helm_009_x1)); // Natalya's Vengeance 娜塔亞的復仇
  68.  
  69.             HeroPowerSet[HeroClass.Barbarian].Add(484146, Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.P68_Unique_Helm_Set_05)); // Horde of the Ninety Savages 九十蠻夷
  70.             HeroPowerSet[HeroClass.Barbarian].Add(423226, Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Unique_Helm_Set_01_p2)); // Wrath of the Wastes 荒野之怒
  71.             HeroPowerSet[HeroClass.Barbarian].Add(444521, Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Unique_Helm_Set_15_x1)); // Might of the Earth 地之力量
  72.             HeroPowerSet[HeroClass.Barbarian].Add(430684, Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Unique_Helm_008_x1)); // Immortal King's Call 不朽之王的呼喚
  73.             HeroPowerSet[HeroClass.Barbarian].Add(429673, Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Unique_Helm_Set_05_x1)); // The Legacy of Raekor 蕾蔻爾的傳奇
  74.  
  75.             HeroPowerSet[HeroClass.Wizard].Add(484122, Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.P68_Unique_Helm_Set_03)); // The Typhon's Veil 堤豐罩衣
  76.             HeroPowerSet[HeroClass.Wizard].Add(437843, Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Unique_Helm_Set_13_x1)); // Vyr's Amazing Arcana 維爾的神妙奧秘
  77.             HeroPowerSet[HeroClass.Wizard].Add(445814, Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Unique_Helm_Set_06_x1)); // Firebird's Finery 不死鳥的華服
  78.             HeroPowerSet[HeroClass.Wizard].Add(423236, Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Unique_Helm_Set_02_p2)); // Delsere's Magnum Opus 德瑟雷的至高傑作
  79.             HeroPowerSet[HeroClass.Wizard].Add(429855, Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Unique_Helm_010_x1)); // Tal Rasha's Elements 塔拉夏的法理
  80.  
  81.             HeroPowerSet[HeroClass.WitchDoctor].Add(484130, Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.P68_Unique_Helm_Set_04)); // Mundunugu's Regalia 蒙杜奴古戰裝
  82.             HeroPowerSet[HeroClass.WitchDoctor].Add(429857, Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Unique_VoodooMask_007_x1)); // Zunimassa's Haunt 祖妮瑪莎的縈繞
  83.             HeroPowerSet[HeroClass.WitchDoctor].Add(437711, Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Unique_Helm_Set_16_x1)); // Helltooth Harness 獄牙戰裝
  84.             HeroPowerSet[HeroClass.WitchDoctor].Add(359573, Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Unique_Helm_Set_09_x1)); // Raiment of the Jade Harvester 玉魂師的戰甲
  85.             HeroPowerSet[HeroClass.WitchDoctor].Add(439309, Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Unique_Helm_Set_02_p3)); // Spirit of Arachyr 厄拉祈爾之魂
  86.  
  87.             HeroPowerSet[HeroClass.Monk].Add(483664, Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.P67_Unique_Helm_Set_02)); // Patterns of Justice 正義楷模
  88.             HeroPowerSet[HeroClass.Monk].Add(449252, Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Unique_SpiritStone_009_x1)); // Inna's Mantra 殷娜的真言
  89.             HeroPowerSet[HeroClass.Monk].Add(478511, Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Unique_Helm_Set_11_x1)); // Monkey King's Garb 猴王戰服
  90.             HeroPowerSet[HeroClass.Monk].Add(430228, Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Unique_Helm_Set_08_x1)); // Raiment of a Thousand Storms 千颶戰甲
  91.             HeroPowerSet[HeroClass.Monk].Add(439312, Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Unique_Helm_Set_01_p3)); // Uliana's Stratagem 烏蓮娜的策略
  92.  
  93.             HeroPowerSet[HeroClass.Crusader].Add(483639, Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.P67_Unique_Helm_Set_01));  // Aegis of Valor 英勇聖禦
  94.             HeroPowerSet[HeroClass.Crusader].Add(446511, Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Unique_Helm_Set_12_x1)); // Thorns of the Invoker 召魔者的棘刺
  95.             HeroPowerSet[HeroClass.Crusader].Add(445942, Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Unique_Helm_Set_10_x1)); // Armor of Akkhan 阿克漢的戰鎧
  96.             HeroPowerSet[HeroClass.Crusader].Add(409428, Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Unique_Helm_Set_01_p1)); // Roland's Legacy 羅蘭的遺產
  97.             HeroPowerSet[HeroClass.Crusader].Add(436427, Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.Unique_Helm_Set_03_p3)); // Seeker of the Light 聖光追尋者
  98.  
  99.             HeroPowerSet[HeroClass.Necromancer].Add(484303, Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.P69_Necro_Set_5_Helm)); // Masquerade of Burning Carnival 烈焰祭典的面具
  100.             HeroPowerSet[HeroClass.Necromancer].Add(467465, Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.P6_Necro_Set_1_Helm)); // Bones of Rathma 拉斯瑪的骨骸
  101.             HeroPowerSet[HeroClass.Necromancer].Add(472274, Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.P6_Necro_Set_4_Helm)); // Pestilence Master's Shroud 惡疫之王的裹尸布
  102.             HeroPowerSet[HeroClass.Necromancer].Add(472268, Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.P6_Necro_Set_2_Helm)); // Trag'Oul's Avatar 塔格奧的化身
  103.             HeroPowerSet[HeroClass.Necromancer].Add(472271, Hud.Texture.GetItemTexture(Hud.Sno.SnoItems.P6_Necro_Set_3_Helm)); // Grace of Inarius 伊納瑞斯的恩澤
  104.         }
  105.  
  106.         public void PaintTopInGame(ClipState clipState) {
  107.             if (clipState != ClipState.BeforeClip) return;
  108.  
  109.             foreach (var player in Hud.Game.Players) {
  110.                 var portrait = player.PortraitUiElement.Rectangle;
  111.                 var width = portrait.Height / 4.5f;
  112.  
  113.                 // Nemesis Bracers 死敵護腕
  114.                 if (player.Powers.BuffIsActive(318820))
  115.                     Texture_Power[0].Draw(offsetX, portrait.Top + offsetY1, width, 2*width);
  116.  
  117.                 // Flavor of Time 逝水年華
  118.                 if (player.Powers.BuffIsActive(483515))
  119.                     Texture_Power[1].Draw(offsetX, portrait.Top + 1.5f*width + offsetY2, width, width);
  120.  
  121.                 if (showExtend) {
  122.                     for (var i = 0; i < 4; i++)
  123.                         if (Func_PowerExtend[i] != null && Func_PowerExtend[i](player))
  124.                             Icon_PowerExtend[i]?.Draw(portrait.Right - IconSize_Ext, portrait.Bottom - (4 - i) * IconSize_Ext, IconSize_Ext, IconSize_Ext);
  125.                 }
  126.  
  127.                 if (Hud.Window.CursorInsideRect(portrait.X, portrait.Y, portrait.Width, portrait.Height)) {
  128.                     var grLvl = player.GetAttributeValueAsInt(Hud.Sno.Attributes.Highest_Unlocked_Rift_Level, 2147483647, 0);
  129.                     var grIcon = Hud.Texture.GetTexture((uint)grLvl + 23 * (uint)(grLvl / 10) + (uint)(grLvl < 100 ? 795145286 : 469991469));
  130.                     grIcon?.Draw(portrait.X + (portrait.Width - width) / 2f, portrait.Y + 0.16f * portrait.Height, width, width);
  131.                 }
  132.  
  133.                 if (showXpBonus) {
  134.                     var xref = portrait.X + (portrait.Width - width) / 2f;
  135.                     var yref = portrait.Bottom - 2 * width;
  136.                     var bonus = ((float)player.BonusPoolRemaining / player.ParagonExpToNextLevel) * 10f;
  137.                     Texture_XpBonus?.Draw(xref, yref, width, width);
  138.  
  139.                     if (bonus > 0.06f) {
  140.                         var layout = poolFont.GetTextLayout(bonus.ToString("0.#"));
  141.                         poolFont.DrawText(layout, xref + (width - layout.Metrics.Width) / 2f, yref + width - layout.Metrics.Height - offsetPool);
  142.                     }
  143.                 }
  144.  
  145.                 Texture_BG?.Draw(offsetX, portrait.Top + 2.5f * width + offsetY3, width, 2 * width, BGopacity);
  146.                 // Legacy of Dreams 夢魘遺產
  147.                 if (player.Powers.BuffIsActive(483319)) {
  148.                     Texture_Power[2].Draw(offsetX, portrait.Top + 3f * width + offsetY3, width, width);
  149.                     continue;
  150.                 }
  151.  
  152.                 // Legacy of Nightmares 夢魘者的遺禮
  153.                 if (player.Powers.BuffIsActive(445798)) {
  154.                     Texture_Power[3].Draw(offsetX, portrait.Top + 3f * width + offsetY3, width, width);
  155.                     continue;
  156.                 }
  157.  
  158.                 var ZDPS = true;
  159.                 var classSet = HeroPowerSet[player.HeroClassDefinition.HeroClass];
  160.                 foreach (KeyValuePair<uint, ITexture> mainSet in classSet) {
  161.                     if (player.Powers.BuffIsActive(mainSet.Key, 0)) {
  162.                         mainSet.Value.Draw(offsetX, portrait.Top + 2.5f * width + offsetY3, width, 2 * width);
  163.                         ZDPS = false;
  164.                         break;
  165.                     }
  166.                 }
  167.  
  168.                 if (ZDPS)
  169.                     Texture_ZDPS?.Draw(offsetX, portrait.Top + 2.5f * width + offsetY3, width, 2 * width);
  170.             }
  171.         }
  172.     }
  173. }
Advertisement
Add Comment
Please, Sign In to add comment