JackCeparou

BuffWatchPlugin

Feb 11th, 2017
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.32 KB | None | 0 0
  1. // based on the original work of LegendOfBerrett v6 xml
  2. namespace Turbo.Plugins.JackCeparouCompass
  3. {
  4.     using System;
  5.     using System.Collections.Generic;
  6.     using System.Linq;
  7.     using Turbo.Plugins.Default;
  8.  
  9.     public class BuffWatchPlugin : BasePlugin
  10.     {
  11.         public IFont WarningFont { get; set; }
  12.         private List<string> warnings;
  13.         private Dictionary<HeroClass, Action> warningsChecks;
  14.         private HeroClass currentHeroClass { get { return Hud.Game.Me.HeroClassDefinition.HeroClass; } }
  15.  
  16.         public BuffWatchPlugin()
  17.         {
  18.             Enabled = true;
  19.             warnings = new List<string>();
  20.             warningsChecks = new Dictionary<HeroClass, Action>();
  21.         }
  22.  
  23.         public override void Load(IController hud)
  24.         {
  25.             base.Load(hud);
  26.  
  27.             WarningFont = Hud.Render.CreateFont("tahoma", 11, 255, 244, 30, 30, true, false, false);
  28.             WarningFont.HeavyShadow = true;
  29.             WarningFont.SetShadowBrush(244, 0, 0, 0, true);
  30.  
  31.             warningsChecks.Add(HeroClass.Barbarian, Barbarian);
  32.             warningsChecks.Add(HeroClass.Crusader, Crusader);
  33.             warningsChecks.Add(HeroClass.DemonHunter, DemonHunter);
  34.             warningsChecks.Add(HeroClass.Monk, Monk);
  35.             warningsChecks.Add(HeroClass.WitchDoctor, WitchDoctor);
  36.             warningsChecks.Add(HeroClass.Wizard, Wizard);
  37.         }
  38.  
  39.         public override void PaintTopInGame(ClipState clipState)
  40.         {
  41.             if (clipState != ClipState.BeforeClip) return;
  42.             if (Hud.Game.Me.IsDead) return;
  43.             //if (Hud.InTown) return;
  44.             if (currentHeroClass == HeroClass.None) return;
  45.             if (!warningsChecks.ContainsKey(currentHeroClass)) return;
  46.  
  47.             warnings.Clear();
  48.             warningsChecks[currentHeroClass].Invoke();
  49.  
  50.             /*
  51.             ItemLocation[] ItemsLocations = new ItemLocation[]
  52.             {
  53.                 ItemLocation.Head,
  54.                 ItemLocation.Torso,
  55.                 ItemLocation.RightHand,
  56.                 ItemLocation.LeftHand,
  57.                 ItemLocation.Hands,
  58.                 ItemLocation.Waist,
  59.                 ItemLocation.Feet,
  60.                 ItemLocation.Shoulders,
  61.                 ItemLocation.Legs,
  62.                 ItemLocation.Bracers,
  63.                 ItemLocation.LeftRing,
  64.                 ItemLocation.RightRing,
  65.                 ItemLocation.Neck,
  66.             };
  67.             foreach (var item in Hud.Collections.GetItems().Where(i => ItemsLocations.Contains(i.Location)).First().SnoItemInfo.GroupCodes)//.Where(i => i.SnoItemInfo.))
  68.             {
  69.                 //warnings.Add(string.Format("{0} {1} {2}", item.Location, item.SnoItemInfo, item.SnoItemInfo.GroupCodes.Length));
  70.                 warnings.Add(item);
  71.             }/**/
  72.             /*
  73.             foreach (var skill in Hud.Collections.Me.SkillSlots)
  74.             {
  75.                 warnings.Add(string.Format("{0} {1} {2} {3}", skill.SnoPower.Sno, skill.SnoPower.Name, skill.Rune, skill.RuneName));
  76.             }/**/
  77.             /*
  78.             foreach (var actor in Hud.Collections.GetActors().Where(a => a.SummonerAcdDynamicId == Hud.Collections.Me.SummonerId))
  79.             {
  80.                 warnings.Add(string.Format("{0} {1}", actor.SnoActor.Sno, actor.SnoActor.Name));
  81.             }/**/
  82.  
  83.             var x = Hud.Window.Size.Width * 0.5f;
  84.             var y = Hud.Window.Size.Height * 0.3f;
  85.             foreach (var warning in warnings)
  86.             {
  87.                 var layout = WarningFont.GetTextLayout(warning);
  88.  
  89.                 WarningFont.DrawText(layout, x - layout.Metrics.Width/2, y);
  90.  
  91.                 y += layout.Metrics.Height * 1.2f;
  92.             }
  93.         }
  94.  
  95.         private uint[] ancientsIds = new uint[] {90443, 90535, 90536};
  96.         private void Barbarian()
  97.         {
  98.             if (HasSkillUsable(375483))
  99.             {
  100.                 AddMissingWarning("War Cry");
  101.             }
  102.             if (HasSkillUsable(79076))
  103.             {
  104.                 AddMissingWarning("Battle Rage");
  105.             }
  106.             if (HasSkillUsable(79528))
  107.             {
  108.                 AddMissingWarning("Ignore Pain");
  109.             }
  110.             // only when wearing IK 4pc
  111.             if (HasSkill(80049) && HasBuff(318760) && !HasPets(ancientsIds))
  112.             {
  113.                 AddMissingWarning("Call of Ancients");
  114.             }
  115.         }
  116.  
  117.         private void Crusader()
  118.         {
  119.             // Only when wearing akkhan 6pc
  120.             if (HasSkill(269032) && HasBuff(359585))
  121.             {
  122.                 AddMissingWarning("Akarat's Champion");
  123.             }
  124.         }
  125.  
  126.         private void DemonHunter()
  127.         {
  128.         }
  129.  
  130.         private void Monk()
  131.         {
  132.             if (HasSkillUsable(96090))
  133.             {
  134.                 AddMissingWarning("Sweeping Wind");
  135.             }
  136.  
  137.             if (HasBuff(246562, 1))
  138.             {
  139.                 warnings.Add("Flying Dragon");
  140.             }
  141.         }
  142.  
  143.         private uint[] gargantuansIds = new uint[] { 432690, 432691, 432692, 432693, 432694, 122305, 179776, 171491, 179778, 171501, 171502, 179780, 179779, 179772 };
  144.         private uint[] zombiesDogsIds = new uint[] { 51353, 108536, 103215, 108543, 104079, 105763, 108560, 110959, 105772, 103235, 108550, 103217, 108556, 105606 };
  145.         private void WitchDoctor()
  146.         {
  147.             if (HasSkill(30624) && !HasPets(gargantuansIds))
  148.             {
  149.                 AddMissingWarning("Gargantuans");
  150.             }
  151.             if (HasSkill(102573) && !HasPets(zombiesDogsIds))
  152.             {
  153.                 AddMissingWarning("Zombie Dogs");
  154.             }
  155.         }
  156.  
  157.         private void Wizard()
  158.         {
  159.             if (HasSkillUsable(86991) && !HasBuff(74499) && !HasBuff(73223))
  160.             {
  161.                 AddMissingWarning("Energy Armor");
  162.             }
  163.             if (HasSkillUsable(74499) && !HasBuff(86991) && !HasBuff(73223))
  164.             {
  165.                 AddMissingWarning("Storm Armor");
  166.             }
  167.             if (HasSkillUsable(73223) && !HasBuff(74499) && !HasBuff(86991))
  168.             {
  169.                 AddMissingWarning("Ice Armor");
  170.             }
  171.  
  172.             if (HasSkillUsable(76108))
  173.             {
  174.                 AddMissingWarning("Magic Weapon");
  175.             }
  176.             if (HasSkillUsable(99120))
  177.             {
  178.                 AddMissingWarning("Familiar");
  179.             }
  180.         }
  181.  
  182.         private void AddMissingWarning(string message)
  183.         {
  184.             warnings.Add(string.Format("!! Missing {0} !!", message));
  185.         }
  186.  
  187.         private bool HasSkill(uint id, bool checkCooldown = true)
  188.         {
  189.             return Hud.Game.Me.Powers.SkillSlots.Any(s => s.SnoPower.Sno == id && (!s.IsOnCooldown || !checkCooldown));
  190.         }
  191.  
  192.         private bool HasSkillUsable(uint id, bool checkCooldown = true)
  193.         {
  194.             return HasSkill(id, checkCooldown) && !HasBuff(id);
  195.         }
  196.  
  197.         private bool HasPets(uint[] ids)
  198.         {
  199.             return Hud.Game.Actors.Any(a => a.SummonerAcdDynamicId == Hud.Game.Me.SummonerId && ids.Contains(a.SnoActor.Sno));
  200.         }
  201.  
  202.         private bool HasBuff(uint id, int? icon = null)
  203.         {
  204.             if (icon.HasValue)
  205.                 return Hud.Game.Me.Powers.BuffIsActive(id, icon.Value);
  206.  
  207.             return Hud.Game.Me.Powers.BuffIsActive(id);
  208.         }
  209.     }
  210. }
Add Comment
Please, Sign In to add comment