Guest User

Untitled

a guest
Apr 9th, 2017
1,119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.82 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. }
  58. yield return _ruleCalculator.Rules[i - 1];
  59. }
  60. }
  61.  
  62. public void PaintTopInGame(ClipState clipState)
  63. {
  64. if (clipState != ClipState.BeforeClip) return;
  65. if (HideWhenUiIsHidden && Hud.Render.UiHidden) return;
  66.  
  67. foreach (var player in Hud.Game.Players)
  68. {
  69. if (player.IsMe)
  70. {
  71. var buff = player.Powers.GetBuff(430674);
  72.  
  73. if ((buff == null) || (buff.IconCounts[0] <= 0)) break;
  74.  
  75. var classSpecificRules = GetCurrentRules(player.HeroClassDefinition.HeroClass);
  76.  
  77. _ruleCalculator.CalculatePaintInfo(player, classSpecificRules);
  78.  
  79. if (_ruleCalculator.PaintInfoList.Count == 0) return;
  80. if (!_ruleCalculator.PaintInfoList.Any(info => info.TimeLeft > 0)) return;
  81.  
  82. var highestElementalBonus = player.Offense.HighestElementalDamageBonus;
  83.  
  84. for (int i = 0; i < _ruleCalculator.PaintInfoList.Count; i++)
  85. {
  86. var info = _ruleCalculator.PaintInfoList[0];
  87.  
  88. if (info.TimeLeft <= 0)
  89. {
  90. _ruleCalculator.PaintInfoList.RemoveAt(0);
  91. _ruleCalculator.PaintInfoList.Add(info);
  92. }
  93. else break;
  94. }
  95.  
  96. for (int orderIndex = 0; orderIndex < _ruleCalculator.PaintInfoList.Count; orderIndex++)
  97. {
  98. var info = _ruleCalculator.PaintInfoList[orderIndex];
  99. var best = false;
  100.  
  101. switch (info.Rule.IconIndex)
  102. {
  103. case 1: best = player.Offense.BonusToArcane == highestElementalBonus; break;
  104. case 2: best = player.Offense.BonusToCold == highestElementalBonus; break;
  105. case 3: best = player.Offense.BonusToFire == highestElementalBonus; break;
  106. case 4: best = player.Offense.BonusToHoly == highestElementalBonus; break;
  107. case 5: best = player.Offense.BonusToLightning == highestElementalBonus; break;
  108. case 6: best = player.Offense.BonusToPhysical == highestElementalBonus; break;
  109. case 7: best = player.Offense.BonusToPoison == highestElementalBonus; break;
  110. }
  111.  
  112. if (best) info.Size *= 1.35f;
  113.  
  114. if (best && orderIndex > 0)
  115. {
  116. info.TimeLeft = (orderIndex - 1) * 4 + _ruleCalculator.PaintInfoList[0].TimeLeft;
  117. }
  118. else info.TimeLeftNumbersOverride = false;
  119. }
  120.  
  121. var portraitRect = player.PortraitUiElement.Rectangle;
  122.  
  123. var x = portraitRect.Right * 8.05f;
  124. var y = portraitRect.Top + portraitRect.Height * 2.05f;
  125.  
  126. BuffPainter.PaintHorizontal(_ruleCalculator.PaintInfoList, x, y, _ruleCalculator.StandardIconSize, 0);
  127.  
  128. break;
  129. }
  130. } // end foreach
  131. } // end PaintTopInGame
  132. } // end class
  133. }
Advertisement
Add Comment
Please, Sign In to add comment