Well I don't see them anymore, no bottom, top or left/right buffs.
Not sure what happened ^^
Well I don't see them anymore, no bottom, top or left/right buffs.
Not sure what happened ^^
No, I don't have it anymore
Hello @Razorfish
MovableBuffList.cs
is not in the file - > MenuPlugin_July-23-2021.zip
I did not find this one
...plugins\Razor\Override
MovableBuffList.cs
Code:namespace Turbo.Plugins.Razor.Override { using System; using System.Drawing; using System.Collections.Generic; using Turbo.Plugins.Default; using Turbo.Plugins.Razor.Movable; public class BuffListInfo { public string Name { get; set; } public BuffPainter Painter { get; set; } public BuffRuleCalculator RuleCalculator { get; set; } public bool EnabledAtStart { get; set; } public RectangleF Rectangle { get; set; } public bool Horizontal { get; set; } = true; public float TimeFontRatio { get; set; } //calculated dynamically public float StackFontRatio { get; set; } //calculated dynamically } public class MovableBuffList : BasePlugin, IMovable { public BuffPainter BuffPainter { get; set; } public BuffRuleCalculator RuleCalculator { get; private set; } public float PositionOffsetX { get; set; } = -0.14f; public float PositionOffsetH { get; set; } = 0.875f; public Dictionary<string, BuffListInfo> BuffLists = new Dictionary<string, BuffListInfo>(); private IFont DebugFont; public MovableBuffList() { Enabled = true; } public override void Load(IController hud) { base.Load(hud); //font size ratio 6:10.8, 10:18 DebugFont = Hud.Render.CreateFont("tahoma", 6, 255, 255, 255, 255, false, false, 255, 0, 0, 0, true); } public void OnRegister(MovableController mover) { Hud.RunOnPlugin<PlayerBottomBuffListPlugin>(plugin => { /*int maxCount = plugin.RuleCalculator.Rules.Count; if (maxCount < 1) maxCount = 1; float width = plugin.RuleCalculator.StandardIconSize*maxCount + plugin.RuleCalculator.StandardIconSpacing*(maxCount-1); //plugin.RuleCalculator.StandardIconSize;*/ string name = plugin.GetType().Name; float tRatio = 0; if (plugin.BuffPainter.TimeLeftFont is object) { var layout = plugin.BuffPainter.TimeLeftFont.GetTextLayout(name); var fontSize = (float)layout.GetFontSize(0); tRatio = plugin.RuleCalculator.StandardIconSize / fontSize; } float sRatio = 0; if (plugin.BuffPainter.StackFont is object) { var layout = plugin.BuffPainter.StackFont.GetTextLayout(name); var fontSize = (float)layout.GetFontSize(0); sRatio = plugin.RuleCalculator.StandardIconSize / fontSize; } BuffLists.Add( name, new BuffListInfo() { Name = name, Painter = plugin.BuffPainter, RuleCalculator = plugin.RuleCalculator, EnabledAtStart = plugin.Enabled, Rectangle = new RectangleF(Hud.Window.Size.Width*0.5f - plugin.RuleCalculator.StandardIconSize*0.5f, Hud.Window.Size.Height*0.5f + Hud.Window.Size.Height*plugin.PositionOffset, plugin.RuleCalculator.StandardIconSize, plugin.RuleCalculator.StandardIconSize), Horizontal = true, TimeFontRatio = tRatio, StackFontRatio = sRatio, } ); if (plugin.Enabled) plugin.Enabled = false; }); Hud.RunOnPlugin<PlayerTopBuffListPlugin>(plugin => { /*int maxCount = plugin.RuleCalculator.Rules.Count; if (maxCount < 1) maxCount = 1; float width = plugin.RuleCalculator.StandardIconSize*maxCount + plugin.RuleCalculator.StandardIconSpacing*(maxCount-1);*/ string name = plugin.GetType().Name; float tRatio = 0; if (plugin.BuffPainter.TimeLeftFont is object) { var layout = plugin.BuffPainter.TimeLeftFont.GetTextLayout(name); var fontSize = (float)layout.GetFontSize(0); tRatio = plugin.RuleCalculator.StandardIconSize / fontSize; } float sRatio = 0; if (plugin.BuffPainter.StackFont is object) { var layout = plugin.BuffPainter.StackFont.GetTextLayout(name); var fontSize = (float)layout.GetFontSize(0); sRatio = plugin.RuleCalculator.StandardIconSize / fontSize; } BuffLists.Add( name, new BuffListInfo() { Name = name, Painter = plugin.BuffPainter, RuleCalculator = plugin.RuleCalculator, EnabledAtStart = plugin.Enabled, Rectangle = new RectangleF(Hud.Window.Size.Width*0.5f - plugin.RuleCalculator.StandardIconSize*0.5f, Hud.Window.Size.Height*0.5f + Hud.Window.Size.Height*plugin.PositionOffset, plugin.RuleCalculator.StandardIconSize, plugin.RuleCalculator.StandardIconSize), Horizontal = true, TimeFontRatio = tRatio, StackFontRatio = sRatio, } ); if (plugin.Enabled) plugin.Enabled = false; }); Hud.RunOnPlugin<PlayerLeftBuffListPlugin>(plugin => { /*int maxCount = plugin.RuleCalculator.Rules.Count; if (maxCount < 1) maxCount = 1; float height = plugin.RuleCalculator.StandardIconSize*maxCount + plugin.RuleCalculator.StandardIconSpacing*(maxCount-1);*/ string name = plugin.GetType().Name; float tRatio = 0; if (plugin.BuffPainter.TimeLeftFont is object) { var layout = plugin.BuffPainter.TimeLeftFont.GetTextLayout(name); var fontSize = (float)layout.GetFontSize(0); tRatio = plugin.RuleCalculator.StandardIconSize / fontSize; } float sRatio = 0; if (plugin.BuffPainter.StackFont is object) { var layout = plugin.BuffPainter.StackFont.GetTextLayout(name); var fontSize = (float)layout.GetFontSize(0); sRatio = plugin.RuleCalculator.StandardIconSize / fontSize; } BuffLists.Add( name, new BuffListInfo() { Name = name, Painter = plugin.BuffPainter, RuleCalculator = plugin.RuleCalculator, EnabledAtStart = plugin.Enabled, Rectangle = new RectangleF(Hud.Window.Size.Width*0.5f + Hud.Window.Size.Height*plugin.PositionOffsetX - plugin.RuleCalculator.StandardIconSize*0.5f, Hud.Window.Size.Height * plugin.PositionOffsetH, plugin.RuleCalculator.StandardIconSize, plugin.RuleCalculator.StandardIconSize), //height Horizontal = false, TimeFontRatio = tRatio, StackFontRatio = sRatio, } ); if (plugin.Enabled) plugin.Enabled = false; }); Hud.RunOnPlugin<PlayerRightBuffListPlugin>(plugin => { /*int maxCount = plugin.RuleCalculator.Rules.Count; if (maxCount < 1) maxCount = 1; float height = plugin.RuleCalculator.StandardIconSize*maxCount + plugin.RuleCalculator.StandardIconSpacing*(maxCount-1);*/ string name = plugin.GetType().Name; float tRatio = 0; if (plugin.BuffPainter.TimeLeftFont is object) { var layout = plugin.BuffPainter.TimeLeftFont.GetTextLayout(name); var fontSize = (float)layout.GetFontSize(0); tRatio = plugin.RuleCalculator.StandardIconSize / fontSize; } float sRatio = 0; if (plugin.BuffPainter.StackFont is object) { var layout = plugin.BuffPainter.StackFont.GetTextLayout(name); var fontSize = (float)layout.GetFontSize(0); sRatio = plugin.RuleCalculator.StandardIconSize / fontSize; } BuffLists.Add( name, new BuffListInfo() { Name = name, Painter = plugin.BuffPainter, RuleCalculator = plugin.RuleCalculator, EnabledAtStart = plugin.Enabled, Rectangle = new RectangleF(Hud.Window.Size.Width*0.5f + Hud.Window.Size.Height*plugin.PositionOffsetX - plugin.RuleCalculator.StandardIconSize*0.5f, Hud.Window.Size.Height * plugin.PositionOffsetH, plugin.RuleCalculator.StandardIconSize, plugin.RuleCalculator.StandardIconSize), //height Horizontal = false, TimeFontRatio = tRatio, StackFontRatio = sRatio, } ); if (plugin.Enabled) plugin.Enabled = false; }); var uiMinimapRect = Hud.Render.MinimapUiElement.Rectangle; Hud.RunOnPlugin<MiniMapLeftBuffListPlugin>(plugin => { string name = plugin.GetType().Name; float tRatio = 0; if (plugin.BuffPainter.TimeLeftFont is object) { var layout = plugin.BuffPainter.TimeLeftFont.GetTextLayout(name); var fontSize = (float)layout.GetFontSize(0); tRatio = plugin.RuleCalculator.StandardIconSize / fontSize; } float sRatio = 0; if (plugin.BuffPainter.StackFont is object) { var layout = plugin.BuffPainter.StackFont.GetTextLayout(name); var fontSize = (float)layout.GetFontSize(0); sRatio = plugin.RuleCalculator.StandardIconSize / fontSize; } BuffLists.Add( name, new BuffListInfo() { Name = name, Painter = plugin.BuffPainter, RuleCalculator = plugin.RuleCalculator, EnabledAtStart = plugin.Enabled, Rectangle = new RectangleF(uiMinimapRect.Left - plugin.RuleCalculator.StandardIconSize*0.5f, uiMinimapRect.Top + uiMinimapRect.Height*0.5f - plugin.RuleCalculator.StandardIconSize*0.5f, plugin.RuleCalculator.StandardIconSize, plugin.RuleCalculator.StandardIconSize), Horizontal = false, TimeFontRatio = tRatio, StackFontRatio = sRatio, } ); if (plugin.Enabled) plugin.Enabled = false; }); Hud.RunOnPlugin<MiniMapRightBuffListPlugin>(plugin => { string name = plugin.GetType().Name; float tRatio = 0; if (plugin.BuffPainter.TimeLeftFont is object) { var layout = plugin.BuffPainter.TimeLeftFont.GetTextLayout(name); var fontSize = (float)layout.GetFontSize(0); tRatio = plugin.RuleCalculator.StandardIconSize / fontSize; } float sRatio = 0; if (plugin.BuffPainter.StackFont is object) { var layout = plugin.BuffPainter.StackFont.GetTextLayout(name); var fontSize = (float)layout.GetFontSize(0); sRatio = plugin.RuleCalculator.StandardIconSize / fontSize; } BuffLists.Add( name, new BuffListInfo() { Name = name, Painter = plugin.BuffPainter, RuleCalculator = plugin.RuleCalculator, EnabledAtStart = plugin.Enabled, Rectangle = new RectangleF(uiMinimapRect.Right - plugin.RuleCalculator.StandardIconSize*0.5f, uiMinimapRect.Top + uiMinimapRect.Height*0.5f - plugin.RuleCalculator.StandardIconSize*0.5f, plugin.RuleCalculator.StandardIconSize, plugin.RuleCalculator.StandardIconSize), Horizontal = false, TimeFontRatio = tRatio, StackFontRatio = sRatio, } ); if (plugin.Enabled) plugin.Enabled = false; }); //initialize position and dimension elements foreach (BuffListInfo info in BuffLists.Values) { mover.CreateArea( this, info.Name, //area name info.Rectangle, //position + dimensions info.EnabledAtStart, //enabled at start? true, //save to config file? ResizeMode.FixedRatio //resizable ); } } public void PaintArea(MovableController mover, MovableArea area, float deltaX = 0, float deltaY = 0) { //debug //string fields = string.Empty; //foreach (var field in DebugFont.GetType().GetFields()) // fields += field.Name + "\n"; //TextLayout test = DebugFont.GetTextLayout("test"); //test.SetFontSize(18, new TextRange(1, 3)); //change font of all but the first letter from 6f to 10f //test = DebugFont.GetTextLayout("test: " + test.GetFontWeight(0).GetType().Name); //GetFontFamilyName(0) //GetFontSize(0) //test.Metrics.Width + " x " + test.Metrics.Height //DebugFont.DrawText(test, Hud.Window.CursorX, Hud.Window.CursorY - test.Metrics.Height); if (BuffLists.ContainsKey(area.Name)) { var x = area.Rectangle.X + deltaX; var y = area.Rectangle.Y + deltaY; BuffListInfo info = BuffLists[area.Name]; float iconSize = (info.Horizontal ? area.Rectangle.Height : area.Rectangle.Width); float ratio = info.RuleCalculator.StandardIconSize / info.RuleCalculator.SizeMultiplier; float multiplier = iconSize / ratio; //change the multiplier before painting so that spacing scales accordingly too //float tmp = info.RuleCalculator.SizeMultiplier; if (info.RuleCalculator.SizeMultiplier != multiplier) info.RuleCalculator.SizeMultiplier = multiplier; //calculate paint values info.RuleCalculator.CalculatePaintInfo(Hud.Game.Me); if (info.RuleCalculator.PaintInfoList.Count == 0) return; //modify font sizes //draw it if (info.Horizontal) info.Painter.PaintHorizontalCenter(info.RuleCalculator.PaintInfoList, x, y, iconSize, iconSize, info.RuleCalculator.StandardIconSpacing, info.TimeFontRatio, info.StackFontRatio); else info.Painter.PaintVerticalCenter(info.RuleCalculator.PaintInfoList, x, y, iconSize, iconSize, info.RuleCalculator.StandardIconSpacing, info.TimeFontRatio, info.StackFontRatio); } } } }
look here
It's not supposed to be in the Menus download. It's a separate thing, and the updated version is being rolled out shortly.
Here you go:
Movable Buff Lists
I have exception when I put in this plugin.
*())Code:2021.08.08 13:14:02.427 21.7.22.20 overlay paint error (System.NullReferenceException: Refer?ncia de objeto n?o definida para uma inst?ncia de um objeto. em Turbo.Plugins.Razor.MovableBuffList.PaintRulesHorizontal(BuffPainter painter, List`1 rules, Single x, Single y, Single width, Single size, Single spacing, Single timeFontRatio, Single stackFontRatio) em Turbo.Plugins.Razor.MovableBuffList.PaintArea(MovableController mover, MovableArea area, Single deltaX, Single deltaY) em Turbo.Plugins.Razor.Movable.MovableController.PaintTopInGame(ClipState clipState) em **********.*******.**************() em **********.**************(IPlugin , String , Action ) em **********.***************(Object , EventArgs ) em *********.**********
Hmm, I think that the error might be saying that one of the object parameters that is passed into PaintRulesHorizontal is null when it is not expected to be. There are two objects in that function's parameter list: painter and rules. Painter could be null if the underlying buff list plugin does not have a buff painter set. Rules would be null if the underlying buff list plugin does not have a rule calculator set. I'm not sure if there are any situations where an individual rule would be null... Are any of your Default \ BuffLists plugins customized or modified?
By that, I meant, did you have any customization files that alter data from the BuffLists, such as adding or removing buffs that are shown by them, or altering the drawing properties of the buff lists?
EDIT: I have updated the MovableBuffList download with a few changes, let me know if it resolves your issue or if it is still happening. We haven't pinpointed what settings might be causing your issue, but it's a first step.
Last edited by Razorfish; 08-09-2021 at 02:22 AM.
I did a fresh clean thud install and it worked good, now I have to check which one of my plugins has this drawing issue, gonna put in 1 by 1 and check.
EDIT: Well, I commented this whole block on PluginEnablerorDisabler.cs and it WORKED !
But don't ask me which line has conflict with your plugin hahah
Code:// Default PLUGIN CUSTOMIZATION: PlayerTopBuffListPlugin /*Hud.RunOnPlugin<PlayerTopBuffListPlugin>(plugin => { plugin.PositionOffset = -0.20f; plugin.BuffPainter = new BuffPainter(Hud, true) { Opacity = 1.00f, ShowTimeLeftNumbers = true, ShowTooltips = false, TimeLeftFont = Hud.Render.CreateFont("tahoma", 15, 255, 255, 255, 255, false, false, 255, 0, 0, 0, true), // 12 size default Timeleft font, you can adjust it StackFont = Hud.Render.CreateFont("tahoma", 9, 255, 255, 255, 255, false, false, 255, 0, 0, 0, true), // 9 size default Stacks font, you can adjust it }; plugin.RuleCalculator.SizeMultiplier = 1.00f; plugin.RuleCalculator.Rules.Add(new BuffRule(445266) { IconIndex = null, MinimumIconCount = 1, ShowStacks = false, ShowTimeLeft = true, DisableName = true }); // DemonHunter, After using Impale, Vault costs no resource for 2 seconds. }); var feetBuffs = Hud.GetPlugin<PlayerBottomBuffListPlugin>().RuleCalculator.Rules; if (feetBuffs != null) { feetBuffs.Add(new BuffRule(449064) { IconIndex = 1, MinimumIconCount = 1, ShowStacks = false, ShowTimeLeft = false }); // Aquila Quirass feetBuffs.Add(new BuffRule(483518) { IconIndex = 1, MinimumIconCount = 1, ShowStacks = true, ShowTimeLeft = true }); // Echoing Furry feetBuffs.Add(new BuffRule(318875) { IconIndex = 1, MinimumIconCount = 1, ShowStacks = false, ShowTimeLeft = true }); // Goldwrap feetBuffs.Add(new BuffRule(483552) { IconIndex = 5, MinimumIconCount = 1, ShowStacks = true, ShowTimeLeft = false }); // Squirt's Necklace feetBuffs.Add(new BuffRule(483521) { IconIndex = 1, MinimumIconCount = 1, ShowStacks = true, ShowTimeLeft = true }); // Stone Gauntlets feetBuffs.Add(new BuffRule(403471) { IconIndex = null, MinimumIconCount = 1, ShowStacks = true, ShowTimeLeft = true }); // Gem, Taeguk feetBuffs.Add(new BuffRule(383014) { IconIndex = null, MinimumIconCount = 1, ShowStacks = false, ShowTimeLeft = true }); // Gem, Bane of the Powerful feetBuffs.Add(new BuffRule(403464) { IconIndex = 1, MinimumIconCount = 1, ShowStacks = true, ShowTimeLeft = true }); // Gem, Gogok of Swiftness feetBuffs.Add(new BuffRule(263029) { IconIndex = null, MinimumIconCount = 1, ShowTimeLeft = true }); // Pylon, Conduit - Normal Rift feetBuffs.Add(new BuffRule(403404) { IconIndex = null, MinimumIconCount = 1, ShowTimeLeft = true }); // Pylon, Conduit - Greater Rift feetBuffs.Add(new BuffRule(262935) { IconIndex = null, MinimumIconCount = 1, ShowTimeLeft = true }); // Pylon, Power feetBuffs.Add(new BuffRule(266258) { IconIndex = null, MinimumIconCount = 1, ShowTimeLeft = true }); // Pylon, Channeling feetBuffs.Add(new BuffRule(266254) { IconIndex = null, MinimumIconCount = 1, ShowTimeLeft = true }); // Pylon, Shield feetBuffs.Add(new BuffRule(484289) { IconIndex = 10, MinimumIconCount = 1, ShowStacks = false, ShowTimeLeft = true, IconSizeMultiplier = 1.0f }); // Gears of Dreadland / 2pc: Momentum 20sec Cap feetBuffs.Add(new BuffRule(134030) { IconIndex = 8, MinimumIconCount = 1, ShowStacks = false, ShowTimeLeft = true, IconSizeMultiplier = 1.0f }); // Gears of Dreadland / 4pc: 60% DmgReduction, 5sec feetBuffs.Add(new BuffRule(429673) { IconIndex = null, MinimumIconCount = 1, ShowStacks = true }); // Set, Raekor - 6Pcs feetBuffs.Add(new BuffRule(429855) { IconIndex = 5, MinimumIconCount = 1, ShowTimeLeft = true, ShowStacks = true }); // Set, Tal Rasha - 6Pcs feetBuffs.Add(new BuffRule(402458) { IconIndex = 1, MinimumIconCount = 1, ShowTimeLeft = true }); // Legendary, In-Geom //feetBuffs.Add(new BuffRule(430674) { IconIndex = null, MinimumIconCount = 1, ShowTimeLeft = true }); // Legendary, Convention of Elements feetBuffs.Add(new BuffRule(79607) { IconIndex = null, MinimumIconCount = 1, ShowTimeLeft = true }); // Barbarian, Wrath of the Berserker feetBuffs.Add(new BuffRule(205187) { IconIndex = 1, MinimumIconCount = 1, ShowTimeLeft = false }); // Barbarian, Berserker Rage feetBuffs.Add(new BuffRule(205133) { IconIndex = 1, MinimumIconCount = 1, ShowTimeLeft = false }); // Barbarian, Brawler feetBuffs.Add(new BuffRule(79528) { IconIndex = null, MinimumIconCount = 1, ShowTimeLeft = true }); // Barbarian, Ignore Pain feetBuffs.Add(new BuffRule(134872) { IconIndex = 2, MinimumIconCount = 1, ShowTimeLeft = true, ShowStacks = true }); // Archon Stacks feetBuffs.Add(new BuffRule(134872) { IconIndex = 5, MinimumIconCount = 0, ShowTimeLeft = true, ShowStacks = true }); // Swami Archon Stacks }*/
Last edited by Saico; 08-09-2021 at 01:16 PM.
Thanks for locating the problem area. After testing with your customizations definitions, I found that the error is being caused by the Stone Gauntlets definition. Your rule is
...but the actual sno for the buff is 483519, so my code was unable to find the correct power and proceeded to execute some drawing functions assuming that the power was successfully retrieved even though it was not. (a good reason to use Hud.Sno.SnoPowers.StoneGauntlets.Sno instead of a hardcoded number, in case the power sno ever changes due to rebalances)Code:new BuffRule(483521) { IconIndex = 1, MinimumIconCount = 1, ShowStacks = true, ShowTimeLeft = true }
Updated MovableBuffList to handle invalid snos in the latest download on its project page.
Hey,
Where can I change the color of SpiritBarrageHelper.cs (goundeffect)? Also can you choose another color for your last (3rd) SpiritBarrage?
I like your Plugin collection
Edit: Is it "GroundRippleDecorator"?
Amazing. Thanks for sharing this. <3