Advertisement
Guest User

TurboHUD COE

a guest
Jul 16th, 2017
558
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.19 KB | None | 0 0
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using System;
  4. using Turbo.Plugins.Default;
  5.  
  6. namespace Turbo.Plugins.User
  7. {
  8.  
  9. public class COEBuffListPlugin : BasePlugin, IInGameTopPainter
  10. {
  11.  
  12. public bool HideWhenUiIsHidden { get; set; }
  13. public BuffPainter BuffPainter { get; set; }
  14.  
  15. private BuffRuleCalculator _ruleCalculator;
  16.  
  17. public COEBuffListPlugin()
  18. {
  19. Enabled = true;
  20. }
  21.  
  22. public override void Load(IController hud)
  23. {
  24. base.Load(hud);
  25.  
  26. HideWhenUiIsHidden = false;
  27. BuffPainter = new BuffPainter(Hud, true)
  28. {
  29. Opacity = 0.6f,
  30. TimeLeftFont = Hud.Render.CreateFont("tahoma", 8, 255, 255, 255, 255, true, false, 255, 0, 0, 0, true),
  31. };
  32.  
  33. _ruleCalculator = new BuffRuleCalculator(Hud);
  34. _ruleCalculator.SizeMultiplier = 0.7f;
  35.  
  36. _ruleCalculator.Rules.Add(new BuffRule(430674) { IconIndex = 1, MinimumIconCount = 0, DisableName = true }); // Arcane
  37. _ruleCalculator.Rules.Add(new BuffRule(430674) { IconIndex = 2, MinimumIconCount = 0, DisableName = true }); // Cold
  38. _ruleCalculator.Rules.Add(new BuffRule(430674) { IconIndex = 3, MinimumIconCount = 0, DisableName = true }); // Fire
  39. _ruleCalculator.Rules.Add(new BuffRule(430674) { IconIndex = 4, MinimumIconCount = 0, DisableName = true }); // Holy
  40. _ruleCalculator.Rules.Add(new BuffRule(430674) { IconIndex = 5, MinimumIconCount = 0, DisableName = true }); // Lightning
  41. _ruleCalculator.Rules.Add(new BuffRule(430674) { IconIndex = 6, MinimumIconCount = 0, DisableName = true }); // Physical
  42. _ruleCalculator.Rules.Add(new BuffRule(430674) { IconIndex = 7, MinimumIconCount = 0, DisableName = true }); // Poison
  43. }
  44.  
  45. private IEnumerable<BuffRule> GetCurrentRules(HeroClass heroClass)
  46. {
  47. for (int i = 1; i <= 7; i++)
  48. {
  49. switch (heroClass)
  50. {
  51. case HeroClass.Barbarian: if (i == 1 || i == 4 || i == 7) continue; break;
  52. case HeroClass.Crusader: if (i == 1 || i == 2 || i == 7) continue; break;
  53. case HeroClass.DemonHunter: if (i == 1 || i == 4 || i == 7) continue; break;
  54. case HeroClass.Monk: if (i == 1 || i == 7) continue; break;
  55. case HeroClass.WitchDoctor: if (i == 1 || i == 4 || i == 5) continue; break;
  56. case HeroClass.Wizard: if (i == 4 || i == 6 || i == 7) continue; break;
  57. case HeroClass.Necromancer: if (i == 1 || i == 3 || i == 4 || i == 5) continue; break;
  58. }
  59. yield return _ruleCalculator.Rules[i - 1];
  60. }
  61. }
  62.  
  63. public void PaintTopInGame(ClipState clipState)
  64. {
  65. if (clipState != ClipState.BeforeClip) return;
  66. if (HideWhenUiIsHidden && Hud.Render.UiHidden) return;
  67.  
  68. foreach (var player in Hud.Game.Players)
  69. {
  70. if (player.IsMe)
  71. {
  72. var buff = player.Powers.GetBuff(430674);
  73.  
  74. if ((buff == null) || (buff.IconCounts[0] <= 0)) break;
  75.  
  76. var classSpecificRules = GetCurrentRules(player.HeroClassDefinition.HeroClass);
  77.  
  78. _ruleCalculator.CalculatePaintInfo(player, classSpecificRules);
  79.  
  80. if (_ruleCalculator.PaintInfoList.Count == 0) return;
  81. if (!_ruleCalculator.PaintInfoList.Any(info => info.TimeLeft > 0)) return;
  82.  
  83. var highestElementalBonus = player.Offense.HighestElementalDamageBonus;
  84.  
  85. for (int i = 0; i < _ruleCalculator.PaintInfoList.Count; i++)
  86. {
  87. var info = _ruleCalculator.PaintInfoList[0];
  88.  
  89. if (info.TimeLeft <= 0)
  90. {
  91. _ruleCalculator.PaintInfoList.RemoveAt(0);
  92. _ruleCalculator.PaintInfoList.Add(info);
  93. }
  94. else break;
  95. }
  96.  
  97. for (int orderIndex = 0; orderIndex < _ruleCalculator.PaintInfoList.Count; orderIndex++)
  98. {
  99. var info = _ruleCalculator.PaintInfoList[orderIndex];
  100. var best = false;
  101.  
  102. switch (info.Rule.IconIndex)
  103. {
  104. case 1: best = player.Offense.BonusToArcane == highestElementalBonus; break;
  105. case 2: best = player.Offense.BonusToCold == highestElementalBonus; break;
  106. case 3: best = player.Offense.BonusToFire == highestElementalBonus; break;
  107. case 4: best = player.Offense.BonusToHoly == highestElementalBonus; break;
  108. case 5: best = player.Offense.BonusToLightning == highestElementalBonus; break;
  109. case 6: best = player.Offense.BonusToPhysical == highestElementalBonus; break;
  110. case 7: best = player.Offense.BonusToPoison == highestElementalBonus; break;
  111. }
  112.  
  113. if (best) info.Size *= 1.35f;
  114.  
  115. if (best && orderIndex > 0)
  116. {
  117. info.TimeLeft = (orderIndex - 1) * 4 + _ruleCalculator.PaintInfoList[0].TimeLeft;
  118. }
  119. else info.TimeLeftNumbersOverride = false;
  120. }
  121.  
  122. var portraitRect = player.PortraitUiElement.Rectangle;
  123.  
  124. var x = portraitRect.Right * 8.05f;
  125. var y = portraitRect.Top + portraitRect.Height * 2.05f;
  126.  
  127. BuffPainter.PaintHorizontal(_ruleCalculator.PaintInfoList, x, y, _ruleCalculator.StandardIconSize, 0);
  128.  
  129. break;
  130. }
  131. } // end foreach
  132. } // end PaintTopInGame
  133. } // end class
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement