COE Buff not rotating menu

User Tag List

Results 1 to 3 of 3
  1. #1
    MLPFUN's Avatar Member
    Reputation
    4
    Join Date
    Aug 2017
    Posts
    10
    Thanks G/R
    2/3
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    COE Buff not rotating

    Greetings,

    I want the players COE buff to be static, the strongest element should always be on the right (alignment of all the elements to the right would be superb since classes have different count of elements). To indicate the current active element I want to have a marker:

    COE Buff not rotating-static_coe-png

    I've looked at ConventionOfElementsBuffListPlugin.cs, but unfortunately i'm way to bad at programming. Your help is appreciated!!

    COE Buff not rotating
  2. #2
    MLPFUN's Avatar Member
    Reputation
    4
    Join Date
    Aug 2017
    Posts
    10
    Thanks G/R
    2/3
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Greetings,

    after some attempts I made it work modifying the default COE Bufflist Plugin. However, there is one issue I can't figure out now:
    - The best solution would be, that the strongest elemental bonus is always the rightmost one
    ; I have no quick idea how to determine how many shifts need to be done in the PaintInfoList. Fortunately, the current strongest element for Wiz is the last one, so it works fine for me. A generic solution would be nice for that. Here you can find the updates Versions for PlayerBuffs and ProtraitBuffs. Enjoy!

    ../plugins/User/COEBuffListPlugin.cs (personal BuffPainter on top of your char)
    Code:
    using System.Collections.Generic;
    using System.Linq;
    using System;
    using Turbo.Plugins.Default;
       
    namespace Turbo.Plugins.User
    {
        public class COEBuffListPlugin : BasePlugin, IInGameTopPainter
        {
            public bool HideWhenUiIsHidden { get; set; }
            public BuffPainter BuffPainter { get; set; }
    
            private BuffRuleCalculator _ruleCalculator;
    	private float IconSize = 0.7f;
    	private float YPositionOffset = 0.18f;
    
            public COEBuffListPlugin()
            {
                Enabled = true;
            }
     
            public override void Load(IController hud)
            {
                base.Load(hud);
     
                HideWhenUiIsHidden = false;
                BuffPainter = new BuffPainter(Hud, true)
                {
                    Opacity = 0.7f,
                    TimeLeftFont = Hud.Render.CreateFont("tahoma", 8, 255, 255, 255, 255, true, false, 255, 0, 0, 0, true),
                };
     
                _ruleCalculator = new BuffRuleCalculator(Hud);
    	    _ruleCalculator.SizeMultiplier = IconSize;
     
                _ruleCalculator.Rules.Add(new BuffRule(430674) { IconIndex = 1, MinimumIconCount = 0, DisableName = true }); // Arcane
                _ruleCalculator.Rules.Add(new BuffRule(430674) { IconIndex = 2, MinimumIconCount = 0, DisableName = true }); // Cold
                _ruleCalculator.Rules.Add(new BuffRule(430674) { IconIndex = 3, MinimumIconCount = 0, DisableName = true }); // Fire
                _ruleCalculator.Rules.Add(new BuffRule(430674) { IconIndex = 4, MinimumIconCount = 0, DisableName = true }); // Holy
                _ruleCalculator.Rules.Add(new BuffRule(430674) { IconIndex = 5, MinimumIconCount = 0, DisableName = true }); // Lightning
                _ruleCalculator.Rules.Add(new BuffRule(430674) { IconIndex = 6, MinimumIconCount = 0, DisableName = true }); // Physical
                _ruleCalculator.Rules.Add(new BuffRule(430674) { IconIndex = 7, MinimumIconCount = 0, DisableName = true }); // Poison
            }
     
            private IEnumerable<BuffRule> GetCurrentRules(HeroClass heroClass)
            {
                for (int i = 1; i <= 7; i++)
                {
                    switch (heroClass)
                    {
                        case HeroClass.Barbarian: if (i == 1 || i == 4 || i == 7) continue; break;   		//2356
                        case HeroClass.Crusader: if (i == 1 || i == 2 || i == 7) continue; break;			//3456
                        case HeroClass.DemonHunter: if (i == 1 || i == 4 || i == 7) continue; break;		//2356
                        case HeroClass.Monk: if (i == 1 || i == 7) continue; break;					//23456
                        case HeroClass.WitchDoctor: if (i == 1 || i == 4 || i == 5) continue; break;		//2367
                        case HeroClass.Wizard: if (i == 4 || i == 6 || i == 7) continue; break;			//1235
    			case HeroClass.Necromancer: if (i == 1 || i == 3 || i == 4 || i == 5) continue; break;	//267
                    }
                    yield return _ruleCalculator.Rules[i - 1];
                }
            }
    
            public void PaintTopInGame(ClipState clipState)
            {
                if (clipState != ClipState.BeforeClip) return;
                if (HideWhenUiIsHidden && Hud.Render.UiHidden) return;
    
                 foreach (var player in Hud.Game.Players)
                 {
            if (player.IsMe)
            {
                        var buff = player.Powers.GetBuff(430674);
                        if ((buff == null) || (buff.IconCounts[0] <= 0)) break;    
                        var classSpecificRules = GetCurrentRules(player.HeroClassDefinition.HeroClass);
    
                        _ruleCalculator.CalculatePaintInfo(player, classSpecificRules);
     
                        if (_ruleCalculator.PaintInfoList.Count == 0) return;
     
                        var highestElementalBonus = player.Offense.HighestElementalDamageBonus;
     
                        for (int orderIndex = 0; orderIndex < _ruleCalculator.PaintInfoList.Count; orderIndex++)
                        {
                                var info = _ruleCalculator.PaintInfoList[orderIndex];
                                var best = false;
     
                                switch (info.Rule.IconIndex)
                                {
                                    case 1: best = player.Offense.BonusToArcane == highestElementalBonus; break;
                                    case 2: best = player.Offense.BonusToCold == highestElementalBonus; break;
                                    case 3: best = player.Offense.BonusToFire == highestElementalBonus; break;
                                    case 4: best = player.Offense.BonusToHoly == highestElementalBonus; break;
                                    case 5: best = player.Offense.BonusToLightning == highestElementalBonus; break;
                                    case 6: best = player.Offense.BonusToPhysical == highestElementalBonus; break;
                                    case 7: best = player.Offense.BonusToPoison == highestElementalBonus; break;
                                }              
                    	if (best) info.Size *= 1.00f;
                        }
    		    var y = Hud.Window.Size.Height * 0.5f - Hud.Window.Size.Height * YPositionOffset;
    		    BuffPainter.PaintHorizontalCenter(_ruleCalculator.PaintInfoList, 0, y, Hud.Window.Size.Width, _ruleCalculator.StandardIconSize, 0);
                break;
            }
            } // end foreach
            } // end PaintTopInGame
        } // end class
    }
    ../plugins/Default/BuffLists/ConventionOfElementsBuffListPlugin.cs (portrait BuffPainter for all players in party)

    Code:
    using System.Collections.Generic;
    using System.Linq;
    
    namespace Turbo.Plugins.Default
    {
        public class ConventionOfElementsBuffListPlugin : BasePlugin, IInGameTopPainter
        {
    
            public bool HideWhenUiIsHidden { get; set; }
            public BuffPainter BuffPainter { get; set; }
    
            private BuffRuleCalculator _ruleCalculator;
    
            public ConventionOfElementsBuffListPlugin()
            {
                Enabled = true;
            }
    
            public override void Load(IController hud)
            {
                base.Load(hud);
    
                HideWhenUiIsHidden = false;
    
                BuffPainter = new BuffPainter(Hud, true)
                {
                    Opacity = 1.0f,
                    TimeLeftFont = Hud.Render.CreateFont("tahoma", 8, 255, 255, 255, 255, true, false, 255, 0, 0, 0, true),
                };
    
                _ruleCalculator = new BuffRuleCalculator(Hud);
                _ruleCalculator.SizeMultiplier = 0.55f;
    
                _ruleCalculator.Rules.Add(new BuffRule(430674) { IconIndex = 1, MinimumIconCount = 0, DisableName = true }); // Arcane
                _ruleCalculator.Rules.Add(new BuffRule(430674) { IconIndex = 2, MinimumIconCount = 0, DisableName = true }); // Cold
                _ruleCalculator.Rules.Add(new BuffRule(430674) { IconIndex = 3, MinimumIconCount = 0, DisableName = true }); // Fire
                _ruleCalculator.Rules.Add(new BuffRule(430674) { IconIndex = 4, MinimumIconCount = 0, DisableName = true }); // Holy
                _ruleCalculator.Rules.Add(new BuffRule(430674) { IconIndex = 5, MinimumIconCount = 0, DisableName = true }); // Lightning
                _ruleCalculator.Rules.Add(new BuffRule(430674) { IconIndex = 6, MinimumIconCount = 0, DisableName = true }); // Physical
                _ruleCalculator.Rules.Add(new BuffRule(430674) { IconIndex = 7, MinimumIconCount = 0, DisableName = true }); // Poison
            }
    
            private IEnumerable<BuffRule> GetCurrentRules(HeroClass heroClass)
            {
                for (int i = 1; i <= 7; i++)
                {
                    switch (heroClass)
                    {
                        case HeroClass.Barbarian: if (i == 1 || i == 4 || i == 7) continue; break;
                        case HeroClass.Crusader: if (i == 1 || i == 2 || i == 7) continue; break;
                        case HeroClass.DemonHunter: if (i == 1 || i == 4 || i == 7) continue; break;
                        case HeroClass.Monk: if (i == 1 || i == 7) continue; break;
                        case HeroClass.Necromancer: if (i == 1 || i == 3 || i == 4 || i == 5) continue; break;
                        case HeroClass.WitchDoctor: if (i == 1 || i == 4 || i == 5) continue; break;
                        case HeroClass.Wizard: if (i == 4 || i == 6 || i == 7) continue; break;
                    }
                    yield return _ruleCalculator.Rules[i - 1];
                }
            }
    
            public void PaintTopInGame(ClipState clipState)
            {
                if (clipState != ClipState.BeforeClip) return;
                if (HideWhenUiIsHidden && Hud.Render.UiHidden) return;
    
                foreach (var player in Hud.Game.Players)
                {
                    if (player.ActorId == 0) continue;
    
                    var buff = player.Powers.GetBuff(430674);
                    if ((buff == null) || (buff.IconCounts[0] <= 0)) continue;
    
                    var classSpecificRules = GetCurrentRules(player.HeroClassDefinition.HeroClass);
    
                    _ruleCalculator.CalculatePaintInfo(player, classSpecificRules);
    
                    if (_ruleCalculator.PaintInfoList.Count == 0) return;
                    if (!_ruleCalculator.PaintInfoList.Any(info => info.TimeLeft > 0)) return;
    
                    var highestElementalBonus = player.Offense.HighestElementalDamageBonus;
    
                    for (int orderIndex = 0; orderIndex < _ruleCalculator.PaintInfoList.Count; orderIndex++) 
                    {
                        var info = _ruleCalculator.PaintInfoList[orderIndex];
                        var best = false; 						
                        switch (info.Rule.IconIndex)
                        {
                            case 1: best = player.Offense.BonusToArcane == highestElementalBonus; break;
                            case 2: best = player.Offense.BonusToCold == highestElementalBonus; break;
                            case 3: best = player.Offense.BonusToFire == highestElementalBonus; break;
                            case 4: best = player.Offense.BonusToHoly == highestElementalBonus; break;
                            case 5: best = player.Offense.BonusToLightning == highestElementalBonus; break;
                            case 6: best = player.Offense.BonusToPhysical == highestElementalBonus; break;
                            case 7: best = player.Offense.BonusToPoison == highestElementalBonus; break;
                        }
                        if (best) info.Size *= 1.35f;
                    }
    
                    var portraitRect = player.PortraitUiElement.Rectangle;
    
                    var x = portraitRect.Right;
                    var y = portraitRect.Top + portraitRect.Height * 0.51f;
    
                    BuffPainter.PaintHorizontal(_ruleCalculator.PaintInfoList, x, y, _ruleCalculator.StandardIconSize, 0);
                }
            }
    
        }
    
    }
    All the best. See you ingame!

    - MLPFUN

  3. #3
    s4000's Avatar Contributor
    Reputation
    285
    Join Date
    Oct 2018
    Posts
    489
    Thanks G/R
    18/272
    Trade Feedback
    0 (0%)
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)
    Here is the code I use, hope it's what u need

    Code:
    using System.Collections.Generic;
    using System.Linq;
    
    namespace Turbo.Plugins.Default
    {
    
    	public class ConventionOfElementsBuffListPlugin : BasePlugin, IInGameTopPainter
    	{
    		public bool HideWhenUiIsHidden { get; set; }
    		public BuffPainter BuffPainter { get; set; }
    
    		private BuffRuleCalculator _ruleCalculator;
    		
    		public ConventionOfElementsBuffListPlugin()
    		{
    			Enabled = true;
    		}
    
    		public override void Load(IController hud)
    		{
    			base.Load(hud);
    			HideWhenUiIsHidden = false;
    
    			BuffPainter = new BuffPainter(Hud, true)
    			{
    				Opacity = 1.0f,
    				TimeLeftFont = Hud.Render.CreateFont("tahoma", 8, 255, 255, 255, 255, true, false, 255, 0, 0, 0, true),
    			};
    
    			_ruleCalculator = new BuffRuleCalculator(Hud);
    			_ruleCalculator.SizeMultiplier = 0.55f;
    
    			_ruleCalculator.Rules.Add(new BuffRule(430674) { IconIndex = 1, MinimumIconCount = 0, DisableName = true }); // Arcane
    			_ruleCalculator.Rules.Add(new BuffRule(430674) { IconIndex = 2, MinimumIconCount = 0, DisableName = true }); // Cold
    			_ruleCalculator.Rules.Add(new BuffRule(430674) { IconIndex = 3, MinimumIconCount = 0, DisableName = true }); // Fire
    			_ruleCalculator.Rules.Add(new BuffRule(430674) { IconIndex = 4, MinimumIconCount = 0, DisableName = true }); // Holy
    			_ruleCalculator.Rules.Add(new BuffRule(430674) { IconIndex = 5, MinimumIconCount = 0, DisableName = true }); // Lightning
    			_ruleCalculator.Rules.Add(new BuffRule(430674) { IconIndex = 6, MinimumIconCount = 0, DisableName = true }); // Physical
    			_ruleCalculator.Rules.Add(new BuffRule(430674) { IconIndex = 7, MinimumIconCount = 0, DisableName = true }); // Poison
    		}
    
    		private IEnumerable<BuffRule> GetCurrentRules(HeroClass heroClass)
    		{
    			for (int i = 1; i <= 7; i++)
    			{
    				switch (heroClass)
    				{
    					case HeroClass.Barbarian: if (i == 1 || i == 4 || i == 7) continue; break;
    					case HeroClass.Crusader: if (i == 1 || i == 2 || i == 7) continue; break;
    					case HeroClass.DemonHunter: if (i == 1 || i == 4 || i == 7) continue; break;
    					case HeroClass.Monk: if (i == 1 || i == 7) continue; break;
    					case HeroClass.Necromancer: if (i == 1 || i == 3 || i == 4 || i == 5) continue; break;
    					case HeroClass.WitchDoctor: if (i == 1 || i == 4 || i == 5) continue; break;
    					case HeroClass.Wizard: if (i == 4 || i == 6 || i == 7) continue; break;
    				}
    				yield return _ruleCalculator.Rules[i - 1];
    			}
    		}
    
    		public void PaintTopInGame(ClipState clipState)
    		{
    			if (clipState != ClipState.BeforeClip) return;
    			if (HideWhenUiIsHidden && Hud.Render.UiHidden) return;
    
    			foreach (var player in Hud.Game.Players)
    			{
    				//if (player.ActorId == 0) continue;
    
    				var buff = player.Powers.GetBuff(430674);
    				if ((buff == null) || (buff.IconCounts[0] <= 0)) continue;
    
    				var classSpecificRules = GetCurrentRules(player.HeroClassDefinition.HeroClass);
    
    				_ruleCalculator.CalculatePaintInfo(player, classSpecificRules);
    
    				if (_ruleCalculator.PaintInfoList.Count == 0) return;
    				if (!_ruleCalculator.PaintInfoList.Any(info => info.TimeLeft > 0)) return;
    
    				var highestElementalBonus = player.Offense.HighestElementalDamageBonus;
    
    				// Testing
    				var maxindex = 0;
    				var numelement = _ruleCalculator.PaintInfoList.Count - 1;
    				for (int i = 0; i <= numelement; i++) //_ruleCalculator.PaintInfoList.Count
    				{
    					var info = _ruleCalculator.PaintInfoList[i];	
    					var best = false;					
    					switch (info.Rule.IconIndex)
    					{
    						case 1: best = player.Offense.BonusToArcane == highestElementalBonus; break;
    						case 2: best = player.Offense.BonusToCold == highestElementalBonus; break;
    						case 3: best = player.Offense.BonusToFire == highestElementalBonus; break;
    						case 4: best = player.Offense.BonusToHoly == highestElementalBonus; break;
    						case 5: best = player.Offense.BonusToLightning == highestElementalBonus; break;
    						case 6: best = player.Offense.BonusToPhysical == highestElementalBonus; break;
    						case 7: best = player.Offense.BonusToPoison == highestElementalBonus; break;
    					}
    					
    					if (best){
    						maxindex = i + 1;
    						break;
    					}	
    				}
    				
    				for (int i = 0; i < maxindex; i++)
    				{
    					var info = _ruleCalculator.PaintInfoList[0];
    					
    					_ruleCalculator.PaintInfoList.RemoveAt(0);
    					_ruleCalculator.PaintInfoList.Add(info);
    				}
    
    				for (int orderIndex = 0; orderIndex <= numelement ; orderIndex++) //_ruleCalculator.PaintInfoList.Count
    				{
    					var info = _ruleCalculator.PaintInfoList[orderIndex];
    					var best = false; 						
    					switch (info.Rule.IconIndex)
    					{
    						case 1: best = player.Offense.BonusToArcane == highestElementalBonus; break;
    						case 2: best = player.Offense.BonusToCold == highestElementalBonus; break;
    						case 3: best = player.Offense.BonusToFire == highestElementalBonus; break;
    						case 4: best = player.Offense.BonusToHoly == highestElementalBonus; break;
    						case 5: best = player.Offense.BonusToLightning == highestElementalBonus; break;
    						case 6: best = player.Offense.BonusToPhysical == highestElementalBonus; break;
    						case 7: best = player.Offense.BonusToPoison == highestElementalBonus; break;
    					}
    					if (best) info.Size *= 1.35f;
    					
    					if (info.TimeLeft > 0.0f)
    						_ruleCalculator.PaintInfoList[numelement].TimeLeft = (numelement - orderIndex ) * 4 + _ruleCalculator.PaintInfoList[orderIndex].TimeLeft;
    
    				}
    
    				var portraitRect = player.PortraitUiElement.Rectangle;
    				var x = portraitRect.Right;
    				var y = portraitRect.Top + portraitRect.Height * 0.51f;
    
    				BuffPainter.PaintHorizontal(_ruleCalculator.PaintInfoList, x, y, _ruleCalculator.StandardIconSize, 0);
    				if (player.IsMe)
    					BuffPainter.PaintHorizontalCenter(_ruleCalculator.PaintInfoList, 0, Hud.Window.Size.Height * 0.75f, Hud.Window.Size.Width, _ruleCalculator.StandardIconSize, 0);
    			}
    		}
    	}
    }

Similar Threads

  1. [Request] CoE Buff
    By antmeyerx in forum TurboHUD Discussions
    Replies: 4
    Last Post: 04-13-2017, 05:31 PM
  2. COE Buff
    By FredDurst in forum TurboHUD Discussions
    Replies: 2
    Last Post: 04-10-2017, 07:53 PM
  3. Replies: 18
    Last Post: 10-24-2009, 07:56 PM
  4. Raid buffs from BGs does not fade
    By hotarn in forum World of Warcraft Exploits
    Replies: 2
    Last Post: 06-08-2009, 05:36 AM
  5. Instantly changing direction (rotation) == ban or not?
    By ShoniShilent in forum WoW Memory Editing
    Replies: 24
    Last Post: 12-03-2008, 01:50 AM
All times are GMT -5. The time now is 04:05 PM. Powered by vBulletin® Version 4.2.3
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. User Alert System provided by Advanced User Tagging (Pro) - vBulletin Mods & Addons Copyright © 2024 DragonByte Technologies Ltd.
Digital Point modules: Sphinx-based search