Advertisement
Guest User

CoEPowerfullPlugin.cs

a guest
Nov 30th, 2017
2,117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 11.29 KB | None | 0 0
  1. using System.Collections.Generic;
  2. using System.Linq;
  3.  
  4. using Turbo.Plugins.Default;
  5.  
  6. namespace Turbo.Plugins.gjuz
  7. {
  8.     public class CoEPowerfullPlugin : BasePlugin, IInGameTopPainter
  9.     {
  10.         public bool HideWhenUiIsHidden { get; set; }
  11.         public BuffPainter BuffPainter { get; set; }
  12.        
  13.         public bool bJustTheBest { get; set; }      //only max Elem
  14.         public bool bJustAtBoss { get; set; }       //only at Boss
  15.         public bool bDrawOnBossFeet { get; set; }   //draw on Bosses Feet if true else draw on Players Feet
  16.         public bool bDrawCentered { get; set; }     //draw Centered
  17.         public bool bDrawKrysbin { get; set; }      //draw KrysbinItem if Boss is "Krysbined"
  18.        
  19.         //position offset
  20.         public float OffsetX { get; set; }
  21.         public float OffsetY { get; set; }
  22.        
  23.         //opacity Multiplier
  24.         public float opacityMultiplier { get; set; }    //opacity Multiplier - single Krysbin (NOT Full Krysbin)
  25.         public float IconSizeMultiplier { get; set; }   //IconSize Multiplier
  26.        
  27.         private bool inGRift { get{ return Hud.Game.SpecialArea == SpecialArea.GreaterRift; } }
  28.         public List<HeroClass> DrawForHeroClass { get; set; }
  29.         public HeroClass WatchThisClass { get; set; }
  30.  
  31.         private BuffRuleCalculator _ruleCalculator;
  32.         private bool _init;
  33.  
  34.         public CoEPowerfullPlugin()
  35.         {
  36.             Enabled = true;
  37.             _init = false;
  38.            
  39.             bJustTheBest = true;
  40.             bJustAtBoss = true;
  41.             bDrawOnBossFeet = true;
  42.             bDrawCentered = true;
  43.             bDrawKrysbin = true;
  44.         }
  45.  
  46.         public override void Load(IController hud)
  47.         {
  48.             base.Load(hud);
  49.  
  50.             HideWhenUiIsHidden = false;
  51.             BuffPainter = new BuffPainter(Hud, true)
  52.             {
  53.                 Opacity = 1.0f,
  54.                 TimeLeftFont = Hud.Render.CreateFont("tahoma", 7, 255, 255, 255, 255, false, false, 255, 0, 0, 0, true),
  55.             };
  56.            
  57.             IconSizeMultiplier = 0.65f;
  58.            
  59.             _ruleCalculator = new BuffRuleCalculator(Hud);
  60.             _ruleCalculator.SizeMultiplier = 0.65f;
  61.  
  62.             _ruleCalculator.Rules.Add(new BuffRule(430674) { IconIndex = 1, MinimumIconCount = 0, DisableName = true }); // Arcane
  63.             _ruleCalculator.Rules.Add(new BuffRule(430674) { IconIndex = 2, MinimumIconCount = 0, DisableName = true }); // Cold
  64.             _ruleCalculator.Rules.Add(new BuffRule(430674) { IconIndex = 3, MinimumIconCount = 0, DisableName = true }); // Fire
  65.             _ruleCalculator.Rules.Add(new BuffRule(430674) { IconIndex = 4, MinimumIconCount = 0, DisableName = true }); // Holy
  66.             _ruleCalculator.Rules.Add(new BuffRule(430674) { IconIndex = 5, MinimumIconCount = 0, DisableName = true }); // Lightning
  67.             _ruleCalculator.Rules.Add(new BuffRule(430674) { IconIndex = 6, MinimumIconCount = 0, DisableName = true }); // Physical
  68.             _ruleCalculator.Rules.Add(new BuffRule(430674) { IconIndex = 7, MinimumIconCount = 0, DisableName = true }); // Poison
  69.            
  70.             OffsetX = 0f;
  71.             OffsetY = 0f;
  72.             opacityMultiplier = 0.35f;
  73.            
  74.             DrawForHeroClass = new List<HeroClass>();
  75.             DrawForHeroClass.Add(HeroClass.Barbarian);
  76.            
  77.             WatchThisClass = HeroClass.Necromancer;
  78.         }
  79.  
  80.         private IEnumerable<BuffRule> GetCurrentRules(HeroClass heroClass)
  81.         {
  82.             for (int i = 1; i <= 7; i++)
  83.             {
  84.                 switch (heroClass)
  85.                 {
  86.                     case HeroClass.Barbarian: if (i == 1 || i == 4 || i == 7) continue; break;
  87.                     case HeroClass.Crusader: if (i == 1 || i == 2 || i == 7) continue; break;
  88.                     case HeroClass.DemonHunter: if (i == 1 || i == 4 || i == 7) continue; break;
  89.                     case HeroClass.Monk: if (i == 1 || i == 7) continue; break;
  90.                     case HeroClass.Necromancer: if (i == 1 || i == 3 || i == 4 || i == 5) continue; break;
  91.                     case HeroClass.WitchDoctor: if (i == 1 || i == 4 || i == 5) continue; break;
  92.                     case HeroClass.Wizard: if (i == 4 || i == 6 || i == 7) continue; break;
  93.                 }
  94.                 yield return _ruleCalculator.Rules[i - 1];
  95.             }
  96.         }
  97.        
  98.         public bool Init()
  99.         {
  100.             _ruleCalculator.SizeMultiplier = IconSizeMultiplier;
  101.            
  102.             return true;
  103.         }
  104.  
  105.         public void PaintTopInGame(ClipState clipState)
  106.         {
  107.             if (!_init) _init = Init();
  108.             if (clipState != ClipState.BeforeClip) return;
  109.             if (HideWhenUiIsHidden && Hud.Render.UiHidden) return;
  110.             if (!inGRift) return;
  111.            
  112.             if (DrawForHeroClass.Any() && !DrawForHeroClass.Contains(Hud.Game.Me.HeroClassDefinition.HeroClass)) return;
  113.            
  114.             var bosses = Hud.Game.AliveMonsters.Where(m => m.Rarity == ActorRarity.Boss);
  115.             if (bJustAtBoss && !bosses.Any()) return;
  116.             IMonster boss = bosses.FirstOrDefault();
  117.  
  118.             foreach (var player in Hud.Game.Players.Where(p => p.HeroClassDefinition.HeroClass == WatchThisClass))
  119.             {
  120.                 if (player.ActorId == 0) continue;
  121.  
  122.                 var buff = player.Powers.GetBuff(430674);
  123.                 if ((buff == null) || (buff.IconCounts[0] <= 0)) continue;
  124.  
  125.                 var classSpecificRules = GetCurrentRules(player.HeroClassDefinition.HeroClass);
  126.  
  127.                 _ruleCalculator.CalculatePaintInfo(player, classSpecificRules);
  128.  
  129.                 if (_ruleCalculator.PaintInfoList.Count == 0) return;
  130.                 if (!_ruleCalculator.PaintInfoList.Any(info => info.TimeLeft > 0)) return;
  131.  
  132.                 var highestElementalBonus = player.Offense.HighestElementalDamageBonus;
  133.  
  134.                 for (int i = 0; i < _ruleCalculator.PaintInfoList.Count; i++)
  135.                 {
  136.                     var info = _ruleCalculator.PaintInfoList[0];
  137.                     if (info.TimeLeft <= 0)
  138.                     {
  139.                         _ruleCalculator.PaintInfoList.RemoveAt(0);
  140.                         _ruleCalculator.PaintInfoList.Add(info);
  141.                     }
  142.                     else break;
  143.                 }
  144.                
  145.                 var _indexBest = 0;
  146.                
  147.                 for (int orderIndex = 0; orderIndex < _ruleCalculator.PaintInfoList.Count; orderIndex++)
  148.                 {
  149.                     var info = _ruleCalculator.PaintInfoList[orderIndex];
  150.                     var best = false;
  151.                     switch (info.Rule.IconIndex)
  152.                     {
  153.                         case 1: best = player.Offense.BonusToArcane == highestElementalBonus; break;
  154.                         case 2: best = player.Offense.BonusToCold == highestElementalBonus; break;
  155.                         case 3: best = player.Offense.BonusToFire == highestElementalBonus; break;
  156.                         case 4: best = player.Offense.BonusToHoly == highestElementalBonus; break;
  157.                         case 5: best = player.Offense.BonusToLightning == highestElementalBonus; break;
  158.                         case 6: best = player.Offense.BonusToPhysical == highestElementalBonus; break;
  159.                         case 7: best = player.Offense.BonusToPoison == highestElementalBonus; break;
  160.                     }
  161.                     if (best && !bJustTheBest) info.Size *= 1.35f;
  162.                     if (best && orderIndex > 0)
  163.                     {
  164.                         _indexBest = orderIndex;
  165.                         info.TimeLeft = (orderIndex - 1) * 4 + _ruleCalculator.PaintInfoList[0].TimeLeft;
  166.                     }
  167.                     else info.TimeLeftNumbersOverride = false;
  168.                 }
  169.                
  170.                 //remove all but best
  171.                 if (bJustTheBest)
  172.                 {
  173.                     var _tmp = _ruleCalculator.PaintInfoList[_indexBest];
  174.                     _ruleCalculator.PaintInfoList.Clear();
  175.                     _ruleCalculator.PaintInfoList.Add(_tmp);
  176.                 }
  177.                
  178.                 //get drawing Coordinates
  179.                 IScreenCoordinate _sc;
  180.                 if (bDrawOnBossFeet)
  181.                 {
  182.                     if (boss == null) return;
  183.                     _sc = boss.FloorCoordinate.ToScreenCoordinate();
  184.                 }
  185.                 else
  186.                     _sc = player.FloorCoordinate.ToScreenCoordinate();
  187.                
  188.                
  189.                 bool _kDrawn = false;
  190.                 if (bDrawKrysbin)   //paint Krysbin
  191.                     _kDrawn = DrawKrysbinInBossfight(player, boss, _sc);
  192.                
  193.                 //paint CoE
  194.                 if (bDrawCentered)
  195.                     BuffPainter.PaintHorizontalCenter(_ruleCalculator.PaintInfoList, _sc.X - (_kDrawn ? _ruleCalculator.StandardIconSize/2 : 0) + OffsetX, _sc.Y + OffsetY, 0, _ruleCalculator.StandardIconSize, 0);
  196.                 else
  197.                     BuffPainter.PaintHorizontal(_ruleCalculator.PaintInfoList, _sc.X + OffsetX, _sc.Y + OffsetY, _ruleCalculator.StandardIconSize, 0);
  198.                
  199.             }
  200.         }
  201.        
  202.         private bool DrawKrysbinInBossfight(IPlayer player, IMonster boss, IScreenCoordinate sc)
  203.         {
  204.             if (WatchThisClass != HeroClass.Necromancer) return false;      //watch = necro !!
  205.             if (boss == null) return false;                                 //no boss
  206.             var StateKrysbin = isKrysbin(boss);
  207.             if (StateKrysbin == 0) return false;                            //no krysbin_debuff
  208.            
  209.             IBuff _bKrysbin = player.Powers.GetBuff(475241);    //getbuff wegen cube    // Sno: 475241
  210.             if (_bKrysbin == null || !_bKrysbin.Active) return false;       //no krysbin in use
  211.            
  212.             uint itemSno = 1236308205;                          //1236308205 - KrysbinsSentence_ItemSno
  213.             var snoItem = Hud.Inventory.GetSnoItem(itemSno);
  214.            
  215.            
  216.             //buff position
  217.             var _x = sc.X;
  218.             float totalWidth = 0f;
  219.             foreach (var info in _ruleCalculator.PaintInfoList)
  220.                 totalWidth += info.Size;
  221.             if (bDrawCentered)
  222.                 _x += totalWidth / 2 - _ruleCalculator.StandardIconSize/2;
  223.             else
  224.                 _x += totalWidth;
  225.            
  226.             var itemRect = new System.Drawing.RectangleF(_x + OffsetX, sc.Y + OffsetY, _ruleCalculator.StandardIconSize, _ruleCalculator.StandardIconSize);
  227.            
  228.             //buff strenght -> opacity
  229.             float opacity = StateKrysbin == 1 ? opacityMultiplier : 1.0f;
  230.            
  231.             var slotTexture = Hud.Texture.InventorySlotTexture;
  232.             slotTexture.Draw(itemRect.X, itemRect.Y, itemRect.Width, itemRect.Height, opacity);
  233.            
  234.             var backgroundTexture = Hud.Texture.InventoryLegendaryBackgroundSmall;
  235.             backgroundTexture.Draw(itemRect.X, itemRect.Y, itemRect.Width, itemRect.Height, opacity);
  236.            
  237.             var itemTexture = Hud.Texture.GetItemTexture(snoItem);
  238.             if (itemTexture != null)
  239.             {
  240.                 itemTexture.Draw(itemRect.X, itemRect.Y, itemRect.Width, itemRect.Height, opacity);
  241.             }
  242.            
  243.             return true;
  244.         }
  245.        
  246.         private uint isKrysbin(IMonster elite)
  247.         {
  248.             if (elite.Frozen || elite.Stunned || elite.Blind)
  249.                 return 2;
  250.             if (elite.Slow || elite.Chilled)
  251.                 return 1;
  252.            
  253.             return 0;
  254.         }
  255.  
  256.     }
  257.  
  258. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement