Advertisement
Guest User

COE

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