Advertisement
alexus91

COEBuffListPlugin.cs

Jun 3rd, 2019
806
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 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.Necromancer: if (i == 1 || i == 3 || i == 4 || i == 5) continue; break;
  56.                     case HeroClass.WitchDoctor: if (i == 1 || i == 4 || i == 5) continue; break;
  57.                     case HeroClass.Wizard: if (i == 4 || i == 6 || i == 7) 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