Skip to main content
Framework Menu Movable

Menu Plugin System (+RunStats)

Menu Plugin System is a framework for showing and hiding Labels as interactive hover menu displays.  With it, you can toggle plugins on and off in-game, pin and drag data all over the screen. And the settings are automatically saved, no need to copy over or edit config files.

Menus appear in variety of docking areas that border the screen. Hovering over them reveals menu panels that can be pinned open and repositioned by dragging (via integration with the Movable Plugin System's Edit Mode). To help prevent obscuring combat with accidental hovers, when you are in combat outside of town, unpinned hover menu panels will remain hidden unless you click on its label to open it.

When you click the pin icon, the title bar with pin icon will disappear to help prevent accidental unpinnings, but will reappear if you hover over the panel for at least 1.5 seconds (configurable via MenuPlugin.HoverDelay property). You can also access an overview of all the menu addons and can pin/unpin menus in addition to enabling/disabling them from there:

Once a menu panel is pinned, it can be dragged when in the Edit Mode (default hotkey F12) of the Movable Plugin System. Menu labels can also be dragged to other docks or even reordered within the same dock while in Edit Mode.

Note: The save button is there just in case you want to manually trigger a config save. All of your changes should be saved automatically, and you should never have to click it. If you didn't like your changes, click the red X to delete the config file that was generated with your changes.

Included with the distribution is:

  • a plugin management menu addon to allow you to enable or disable plugins on-the-fly in-game
  • a plugin management menu addon to allow you to enable or disable menu addons on-the-fly in-game
  • a basic volume control menu addon
  • RunStats

RunStats is now a suite of menu addons that offers data displays and statistics related to various aspects of playing the game. Currently, this includes:

  • MenuAttackSpeed - shows your attacks per second for yourself and your pets, and if you have Pain Enhancer equipped, it attempts to determine your current stack count
  • MenuBounties - shows your current status on bounty completion when in Adventure Mode
  • MenuCrowdControl - shows icons and durations of crowd control effects applied on you and elite monsters and bosses

  • MenuDamageDone - records the values of some damage stats made available by TH and adds them to the menu bar, visualizing the data in a line graph, shows 30 seconds at time, but you can page backwards and forwards to see the last 20+ minutes of data. Logging to file feature can be toggled on or off to auto-save data every 5 seconds.
  • MenuDamageReduction - graphs your current damage reduction value history; similar to MenuDamageDone, you can page backwards and forwards to see the last 20+ minutes of data and logging to file feature can be toggled on or off to auto-save data every 5 seconds.
  • MenuDamageTypes - substitute for Default\DamageBonusPlugin.cs
  • MenuGreaterRift - shows nephalem rift history
  • MenuNephalemRift - shows nephalem rift history
  • MenuHealth - shows health change history
  • MenuLoot - shows loot history
  • MenuMapShrines - shows a list of pylons, shrines, and pool count seen in the current map
  • MenuMaterial (Blood Shard, Deaths Breath, Greater Rift Keystones, Gold)
  • MenuMoveSpeed - shows your current run speed bonus and its panel shows the buffs currently active on your character (work in progress, still filling in the speed buff data)
  • MenuParagon - substitute for Default\TopExperienceStatistics.cs, and allows you to change which stat tracker is used to calculate the time-to-level
  • MenuPools - shows pool count of your characters, your party, and history of pools found in the current game
  • MenuSpiritBarrage - Spirit Barrage inspector
  • MenuUptime - shows your in-combat uptime for a few different effects, and it will only appear if it is relevant to your character
  • MenuXP - shows xp stats from various built-in stat trackers

Other plugins I've included:

  • BountyDropTracker - shows on screen alerts and remembers the location if a horadric cache is dropped to the ground (for example, if someone turns in a bounty reward quest while your inventory is full) (required by MenuBounties)
  • GreaterRiftHints - shows gem upgrade status for the party under Urshi's and Orek's feet, and shows Greater Rift levels unlocked and shard caps for each party member in the obelisk menu, marks monsters that are still alive in a Greater Rift after completion (these were features in older versions of RunStats' Greater Rift Helper plugin, but were cut for feature bloat, so I included them in a separate plugin so that older version users didn't feel like it was a downgrade)
  • ImmunityHelper - shows countdown bars - and a visual indicator on yourself - when you and party members are immune to damage (required by MenuDamageReduction)
  • ItemMapMarkers - Remembers and marks on the minimap items that match customizable rules. (this was a feature in older versions of RunStats' LootHelper plugin)
  • PartyProcTracker - shows countdown bars for cheat death effects and announces them with audio or TTS cues (required by MenuDamageReduction and MenuHealth)
  • SpiritBarrageHelper - shows countdown bars and ground indicators for spirit barrage phantasms and keep tracks of snapshot/buff status for each phantasm for the Spirit Barrage Inspector (MenuSpiritBarrage)

Note: These additional plugin files must be installed if you are using RunStats so that TurboHUD's compiler knows about them, but you can toggle the plugins off if you don't want to use them.

Customization

The following ICustomizer files are automatically generated in your TurboHUD \ plugins \ User folder when you configure menu plugins through the in-game interface. You can delete any of them at any time if you want to return to the default settings:

  • DefaultPluginEnablerOrDisabler.cs
  • CustomPluginEnablerOrDisabler.cs
  • LightningModPluginEnablerOrDisabler.cs
  • MenuPluginConfig.cs
  • MovablePluginConfig.cs

History

RunStats? LiveStats? Why is all this stuff so similar?

I wrote RunStats back in June 2019 in response to KillerJohn's (the author of TurboHUD) open challenge to rework his run stats box as a plugin. While I was taking a break from Diablo (and computing in general) for personal reasons, API updates to TH broke RunStats. 

Another mod author, hakache decided to fork RunStats into a project that he named LiveStats and wrote in some cool features of his own. While LiveStats was actively maintained, I decided that I didn't need to release new versions of RunStats to the public so that I could focus on building out other ideas. 

So, I have been privately evolving RunStats as a labor of love as a side project for a while. This project includes the third rewrite of RunStats and showcases a lot of new stuff I've figured out how to do since I wrote the first version.

Changelog

February 17, 2022

  • Label\LabelController - converted my mouse click detection and blocking implementation to use the new TurboHUD functions
  • Label\LabelAlignedDecorator - reevaluates label size before drawing to fix the incorrect positioning of horizontal sequences of labels
  • Menu\MenuPlugin - converted my mouse click detection and blocking implementation to use the new TurboHUD functions
  • Menu\MenuManifests - removed IPluginManifest dependency declaration for Razor.Click.*
  • Menu\MenuToggleAddons - changed addon name compound text label from LabelRowDecorator (explicitly defined widths) to LabelAlignedDecorator (fit to size)
  • Plugin\MenuTogglePlugins - no longer causes compilation errors when declared dependencies are not found
  • Plugin\MenuTogglePlugins - removed IPluginManifest dependency declaration for Razor.Click.*
  • Plugin\MenuTogglePlugins - changed addon name compound text label from LabelRowDecorator (explicitly defined widths) to LabelAlignedDecorator (fit to size)

January 7, 2022

  • Label\LabelGraphDecorator - removed the debug TTS callout "pause"

December 10, 2021

  • RunStats\MenuNephalemRift - now also keeps track of a running average for the completion time, separate from the the average of the displayed history events (shown only once the total completions exceeds the history shown count)
  • RunStats\MenuGreaterRift - now also keeps track of a running average for the completion time, separate from the the average of the displayed history events (shown only once the total completions exceeds the history shown count)
  • Util\UIOverlapHelper - added the quest reward dialog (which includes rift completion) to the list of blocking ui elements

November 28, 2021

  • RunStats\MenuXP - implemented the ability to click any of the statistics in the hover panel to set it as the display in the menu bar
  • Label\LabelTextDecorator - fixed the jittery text when text labels are updated within tables

October 4, 2021

  • Label\LabelTableDecorator - fixed "flickering" when multi-column row widths result in MaxRowWidth value that changes the next iteration's value
  • Plugin\MenuTogglePlugins - fixed Page Forward arrow button being allowed to advance to a blank page

September 30, 2021

  • Menu\MenuPlugin - updated to use the path value passed by ITextLogger.Log()

September 27, 2021

  • Menu\MenuPlugin - fixed MovableArea not being disposed when panel is unpinned

September 25, 2021

  • Plugin\MenuTogglePlugins - fixed toggling plugins on overflow pages
  • RunStats\MenuPools - fixed the position math for repositioned party pool count indicators
  • Menu\MenuManifests - added manifest entry for MenuPools

September 24, 2021

  • Menu\MenuManifests - implemented IPluginManifest and added more plugin descriptions and dependencies
  • Menu\MenuDocksConfig - implemented IPluginManifest

September 23, 2021

  • ItemMapMarkers - new supplemental plugin to restore and improve upon RunStats LootHelper functionality that was removed: remembers and marks on the minimap items that match customizable filters
  • Plugin\MenuTogglePlugins - updated category filters to separate LightningMod plugins into their own category (thanks to MGun for the info)
  • Plugin\MenuTogglePlugins - added exclusion list for hiding plugins (especially for those required by Menu Plugin System so that they don't get disabled accidentally)
  • Plugin\MenuTogglePlugins - fixed showing RequiresUI list with manifests that are defined separately from the plugin
  • Plugin\MenuTogglePlugins - changed execution order flow for saving a snapshot of plugin toggle states to be more compatible with old config files
  • Label\LabelTableDecorator - fixed column calculations when total data size resulted in data being pushed left off the screen

September 21, 2021

  • Log\TextLogger - added detection of relative plugins directory, which is passed along to a revised Log function signature
  • Movable\MovableController - updated Log() signature
  • Movable\MovableController - implemented the Log-provided relative plugins path
  • Menu\MenuPlugin - updated Log() signature
  • Menu\MenuPlugin - implemented the Log-provided relative plugins path
  • Plugin\MenuTogglePlugins - updated Log() signature
  • Plugin\MenuTogglePlugins - fixed ConfigFilePath property not being used, and implemented the Log-provided relative plugins path
  • Plugin\MenuTogglePlugins - optimized config file generation to only create toggle calls for plugins with Enabled states that differ from their value after loading and customization

September 19, 2021

  • RunStats\MenuPools - added a PortraitAnchor movable area to shift the pool display for all party members relative to your portrait

September 18, 2021

  • Plugin\MenuTogglePlugins - fixed edge case/race condition where only the last config changed is written to file if more than one config is updated within the update delay window

September 17, 2021

  • Plugin\MenuTogglePlugins - only generate category filter tab for filters that have plugins to show

September 15, 2021

  • Menu\MenuPlugin - added TooltipFontSize property
  • Plugin\MenuTogglePlugins - combined Manifest, Required By, and Performance data into one tooltip
  • Plugin\MenuTogglePlugins - fixed category paging arrow display
  • Plugin\MenuTogglePlugins - fixed tooltip being blank for the first entry in any category

September 14, 2021

  • RunStats\MenuBounties - removed the extra left and right padding in the hover panel
  • Plugin\MenuTogglePlugins - implemented PluginManifest handling
  • Plugin\PluginManifest - new class for defining manifest data without modifying the plugins themselves
  • Menu\MenuManifests - new file with some manifest definitions for Menu Plugin System addons and supporting files

September 12, 2021

  • Menu\HorizontalMenuDock - fixed NullPointerException thrown when TH is first loaded in menus and then you enter a game (bug introduced by docks config initialization change)
  • Menu\VerticalMenuDock - fixed NullPointerException thrown when TH is first loaded in menus and then you enter a game (bug introduced by docks config initialization change)
  • ..\User\ - added the User folder to the download instead of assuming it already exists

September 8, 2021

  • Menu\MenuPlugin - fixed click to open
  • Menu\HorizontalMenuDock - fixed click to open
  • Menu\VerticalMenuDock - fixed click to open
  • Menu\VerticalMenuDock - fixed label hover background coloring
  • Label\LabelCanvasDecorator - added label hover registration to fix click to open
  • Plugin\MenuTogglePlugins - displays dependency information provided by plugins that have IPluginManifest implemented
  • Menu\MenuDocksConfig - defined a default label hover color for each dock except for the minimap ones

September 7, 2021

  • Menu\MenuPlugin - added IPluginManifest data
  • Plugin\MenuTogglePlugins - added paging for plugin categories that have so many plugins that they don't fit on one screen
  • Plugin\IPluginManifest - new interface: an optional, basic plugin metadata definition scheme

September 5, 2021

  • Menu\MenuTogglePlugins - moved to Plugin\MenuTogglePlugins
  • Plugin\MenuTogglePlugins - optimized max plugin count checking to only occur once
  • Menu\MenuPlugin - separated dock definitions into its own customization file (Menu\MenuDocksConfig)
  • Menu\MenuDocksConfig - new customizer file to configure dock positions, alignment, orientation
  • Label\LabelController - implemented a psuedo 3rd dimension to label drawing so that nested labels can be layered above its parent
  • Label\LabelDecorator - added the LabelDecorator.Queue(Action) to bridge LabelController layering with ILabelDecorator
  • Label\LabelExpandDecorator - implemented drawing above its containing label 

August 2, 2021

  • Menu\MenuPlugin - added a brush setting for hovered label backgrounds
  • Menu\HorizontalMenuDock - removed town check in the default HoverCondition
  • Menu\VerticalMenuDock - removed town check in the default HoverCondition
  • Proc\PartyProcTracker - shifted the default starting position down slightly to avoid overlap with a minimap IMenuDock
  • ImmunityHelper - fixed the shield indicator from shifting during movement (player.FloorCoordinate.ToScreenCoordinate() is not the same thing as player.ScreenCoordinate, apparently)
  • ImmunityHelper - implemented ShowCountdownOthers (off by default)
  • GreaterRiftHints - attempt to fix duplicate entries from being displayed
  • RunStats\MenuPools - fixed duplicate entries being displayed
  • RunStats\MenuPools - fixed filtering of heroes list
  • RunStats\MenuLoot - fixed the alignment of the 'type' labels (left instead of center)
  • RunStats\MenuLoot - fixed the Primal tooltip showing Legendary drop rate instead of Primal drop rate
  • Label\LabelStringDecorator - added FontSize property for scaling the displayed font dynamically
  • Click\ClickEventHandler - now uses MethodInvoker to add listeners to the hook thread so that the thread can be shared by multiple plugins
  • Click\ClickExtensions - adds Hud.Input.GetThread() factory method as an extension

July 23, 2021

  • GreaterRiftHints - (re)added in the quest check to prevent Post Greater Rift Monsters marking feature from from marking all monsters in Challenge Rifts
  • Menu\MenuPlugin - added IMenuDock.Enabled check before rendering it
  • Menu\HorizontalMenuDock - implemented new IMenuDock properties, HoverCondition includes a check for idle state when outside of town to help prevent accidental menu openings
  • Menu\VerticalMenuDock - implemented new IMenuDock properties, HoverCondition includes a check for idle state when outside of town to help prevent accidental menu openings
  • Menu\IMenuDock - added Enabled and HoverCondition properties
  • RunStats\MenuLatency - workaround for the current broken IP address data, Region tags scan for a match end to beginning instead of the other way around, and it is now cached for efficiency

July 22, 2021

  • Drawing\Decorators\GroundFixedTimerDecorator - optimized the clock face drawing code (thanks to Kyle for giving me the idea to use arcs for efficiency)
  • Menu\MenuTogglePlugins - added the "Enhanced" plugin namespace to the Default plugins filter

July 21, 2021

  • ImmunityHelper - Added follower Cheat Death immunity checks (thanks to Jembo for the buff data and testing)
  • Label\LabelColumnDecorator - fixed issue with Height factoring in non-visible labels (thanks to Jembo for the heads up about MenuGreaterRift hiding behind the dock while a GR is active)
  • RunStats\MenuLoot - added Ethereals to the display
  • RunStats\MenuLoot - added loot per hour statistic to the tooltip of each loot type count
  • Seasonal\EtherealExtensions - adds IItem.IsEthereal()
  • Menu\MenuPlugin - shifted BottomLeft dock over to the right a little to make space for the "Unleashed" text

July 19, 2021

  • Menu\MenuVolume - implemented Reset button to clear custom settings
  • Menu\MenuVolume - implemented settings persistence with IMenuAddon.Config
  • Razor\ImmunityHelper - fixed ShowIndicator = false resulting in not showing Countdown as well 

July 18, 2021

  • RunStats\MenuPools - added filter to Hero display to only show if it is of the same classification of the currently used character (hardcore, seasonal)
  • GreaterRiftHints - added post greater rift monster marking option (on by default)
  • Log\TextLogger - added two ways to delay the ITextLogger.Log() call
  • Menu\MenuPlugin - added a 3s delay to the ITextLogger.Log() call so that quick successive changes can be written together (e.g. fast clicking to toggle a lot of addons or change addon settings)
  • Menu\MenuTogglePlugins - now implements ITextLogger to add a 3s delay to file write so that quick successive changes can be written together (e.g. fast clicking to toggle a lot of plugins)
  • Menu\BaseMenuAddon - fixed BasePlugin inheritance (added base() call to constructor)

July 17, 2021

  • RunStats\MenuPools - shifted the pool count portrait display up closer to the top of the portrait to not overlap with the PartyUnitFrames plugin
  • RunStats\MenuPools - now it won't show the label if the character has 0 pools
  • RunStats\MenuPools - added loading and saving Hero pool data from file for persistence (via IMenuAddon.Config string)
  • RunStats\MenuPools - added a button to each table row for the option to delete individual saved Hero data

July 15, 2021

  • Util\UtilExtensions - changed the CapStyle used by GetHeroBrush for usage in the PartyTracker suite of plugins
  • Util\UIOverlapHelper - added UIGroup.Custom category and the ability to define custom blocking regions via UIOverlapHelper.CustomBlockingAreas for overlap checks
  • Movable\MovableController - removed UIGroup.Tooltip from overlap checks of MovableArea
  • Movable\MovableController - added UIGroup.Custom to overlap checks of MovableArea

July 14, 2021

  • SpiritBarrageHelper - fixed the inconsistent rendering of the background shading of countdown bars
  • Util\UIOverlapHelper - added the portrait context menu to UIGroup.Clip
  • Click\ILeftBlockHandler - now inherits IPlugin so that doesn't need to be cast to check the Enabled flag
  • Click\ClickEventHandler - no longer casts IBlockLeftHandler to IPlugin to check the Enabled flag

July 12, 2021

  • Initial release

Installation

Download MenuPlugin_Feb-17-2022.zip

The Menu Plugin System should play nice with most other plugins, but please archive (remove, but feel free to save a backup!) the following plugins first if you have them installed:

  • plugins \ LiveStats \ (draws data in the same areas of the screen)
  • plugins \ Razor \ ImmunityIndicator.cs (has been updated and renamed to ImmunityHelper.cs)
  • plugins \ Razor \ PartyProcTracker.cs (has been updated and moved to its own Proc\ subfolder)
  • plugins \ Razor \ RunStats \ (has been rewritten)
  • plugins \ Razor \ VolumeControls.cs (has been converted to a menu addon)
  • plugins \ Razor \ Decorators \ GroundFixedTimerDecorator.cs (has been moved to plugins \ Razor \ Drawing \ Decorators)
  • plugins \ Razor \ Decorators \ ClockwiseRotationTransformator.cs (has been moved to the plugins \ Razor \ Drawing\ RotationTransformators \ subfolder)

If you are updating from a version of MenuPlugin from before Oct 04, 2021, please delete \ Razor \ Menu \ MenuTogglePlugins.cs (it has been moved to Razor\Plugin\).

If you are updating from a version of MenuPlugin from before February 17, 2022, please delete the \ Razor \ Click \ folder (it has been phased out).

You want to overwrite everything in the Razor folder that it asks you to because this download should include the latest versions of my supporting files. The files and folders should go in the following places:

TurboHUD \ plugins \ Razor \ Drawing \
TurboHUD \ plugins \ Razor \ Hotkey \
TurboHUD \ plugins \ Razor \ Label \
TurboHUD \ plugins \ Razor \ Log \
TurboHUD \ plugins \ Razor \ Menu \
TurboHUD \ plugins \ Razor \ Movable \
TurboHUD \ plugins \ Razor \ Plugin \
TurboHUD \ plugins \ Razor \ Proc \
TurboHUD \ plugins \ Razor \ RunStats \
TurboHUD \ plugins \ Razor \ Seasonal \
TurboHUD \ plugins \ Razor \ Util \
TurboHUD \ plugins \ Razor \ BountyDropTracker.cs
TurboHUD \ plugins \ Razor \ GreaterRiftHints.cs
TurboHUD \ plugins \ Razor \ ImmunityHelper.cs
TurboHUD \ plugins \ Razor \ ItemMapMarkers.cs
TurboHUD \ plugins \ Razor \ SpiritBarrageHelper.cs
TurboHUD \ plugins \ User \
TurboHUD \ sound \ ProcYou.wav

Then (re)start TurboHUD.

Works with Diablo 3 patch 2.7.2.79575, TurboHUD v21.12.8.0, API v9.2

Comments

  1. Hey razor i tried turnning the arcs around your character during the immunity effects off by changing it to 0 but it didnt work??? and for some reason the code is all over the place and not in lines to eaily read.

    ReplyDelete
    Replies
    1. ShowIndicator is now a boolean, so you can set it to false instead of 0. Also, I found a bug while checking out your problem, and I just pushed out an update to plugins\Razor\ImmunityHelper.cs to fix it. It's in the new download dated July 19th.

      Delete
    2. Yeah, i saw that and i did set it to false... BUT the countdown timer doesn't work when that's false =(.... I can live without it i guess haha.

      Delete
    3. Did the July 19th update work for you? The countdown timer not showing up when ShowIndicator is false is the error I tried to fix with it.

      Delete
  2. OH no it didnt work for me.... i have the 7/19 plugin changed, ShowIndicator = false and ( ) are gone with the timer.

    ReplyDelete
    Replies
    1. Hmm, could you check line 145? should be right below the PaintArea(...) signature, does it say !ShowCountdown or !ShowCountdownBar (either one works) instead of !ShowIndicator?

      Delete
    2. it does, idk if that's line 145 tho.....

      if (!ShowCountdown || !IsImmune)
      return;




      P>S i just check the post and it is line 145,

      Delete
  3. It's a cool plugin. Thank you for your hard work and enthusiasm.

    ReplyDelete
  4. MenuToggleAddons / MenuTogglePlugins Can't these two be displayed by clicking on them instead of hovering over them? Even when the mouse touches while playing the game, it covers the entire screen, so turning it on and off unintentionally is pressed.

    ReplyDelete
    Replies
    1. I'll see what I can do about that in the next update before season starts. The bigger plan is to add some in-game configuration options for menu docks that will allow you to tailor the behavior to your liking, but I can probably add in some idle animation check when outside of town or something simple in the meantime.

      Delete
    2. Just updated the download with a potential solution to your request. Details in the Changelog section.

      Delete
  5. BTW razor..... idk how or why, but the timer works when i added it to the new hud

    ReplyDelete
    Replies
    1. Always good to hear that the problem resolved itself! Maybe it was a caching issue... I saw someone mention in RB's chat room mention that one of the recent releases of TH had a caching issue, which may have meant that it wasn't compiling new versions of plugin files.

      Delete
  6. Anyway to disable the little black backgrounds behind everything, also MinimapLeft Buffs dont seem to grow up or down they grow in each direction anyway to change it so the buffs only grow down ?

    ReplyDelete
    Replies
    1. At the moment, only two ways by modifying the code in TurboHUD\plugins\Razor\Menu\MenuPlugin.cs, (1) where the docks are defined (starts at line 487), each dock definition has a LabelBrush = BgBrush, which can be commented out in order to remove the background, OR (2) setting BgBrush's alpha transparency to 0 on line 113 (or in a customization file).

      Minimap buff list grow around a center point along the side of the minimap, and that is the behavior of a default TurboHUD plugin, this plugin doesn't change that.

      Delete
    2. Alright thank you very much <3

      Delete
  7. i get this expections with the lastest update



    2021.08.10 06:50:35.060 21.7.22.20 StatTracker file is damaged: C:\Users\Krazy\Desktop\Dhud\turbohud_21.7.22.20_free\stat_tracker\133262256_total_t16_20210809.xml (System.Xml.XmlException: Root element is missing.
    at System.Xml.XmlTextReaderImpl.Throw(Exception e)
    at System.Xml.XmlTextReaderImpl.ParseDocumentContent()
    at System.Xml.XmlReader.ReadToFollowing(String name)
    at Class96.vmethod_2(XmlReader xmlReader_0)
    at Class96.method_69(String string_1)
    at Class340.method_23(String string_3))

    ReplyDelete
    Replies
    1. NVVMMMMMM ROFL>............ solved it sorry razor<3

      Delete
  8. How do I scroll the list of plugins if the menu overflows?

    ReplyDelete
    Replies
    1. I was hoping that this case would be rare, as it doesn't currently handle having so many plugins that they don't fit on screen. I'll see what I can do about it in a future update.

      Delete
  9. Hi Razor.

    i love your addon! truly amazing! but i encounter some weird stuff. im new and i hope its not a dumb "user-error" :) : I cant click anything, my chars walk instead. i can do f12 and move stuff. i can hover over buttons to see the popupwindow (menü, dmg, network, everything i can see) but i cant click anything on it (like pin it). what did i wrong? :/

    ReplyDelete
    Replies
    1. When you move stuff with F12, does your character move around too? Did you disable any of the plugins that came in this download?

      Delete
    2. hi, thanks for the fast response

      if i use f12 i can move the plugin elements without charaktermovement.
      i disabled a couple thinks like spiritbarage helper (from you), playerbottombuff (from default). i also thought i did a misstake by setting
      Hud.TryTogglePlugin("Enhanced.UiElementClickBlockerPlugin", false);
      to true. but i changed it back to false in code and still same problem. i dont know if it helps, but it all startet as i played with the cc-plugin. i pinned it down to see what i can get for informations in grifts... after 1 grift it annoyed me that it is over that chat window. so i moved the cc-window to the right. after a couple runs i decided that i dont need it. thats where i encountered the problem. i couldnt close the window cause my carakter moves instead of clicking the hud-ui-element-what-ever-it-is-called xD
      then i wanted to deactivate it over your menü (top right). same thing. charakter walks instead of doing a click. so i deactivated the cc-list in the scriptfiles.

      Delete
    3. https://gyazo.com/531d97bc68e828c44675d4cf46d6d3ac with f12
      https://gyazo.com/87e91d5f9855219edbe81976d29ee05a my problem :)

      Delete
    4. only cc deactivated: https://gyazo.com/22a0e303256c5a9010cbcb4d6950e5c0
      customplugins: https://gyazo.com/7d52c95728a9b7c5d99d505b174f0816
      default i cant click ingame, so heres the file: https://pastebin.com/PNw0dHps

      Delete
    5. Your custom plugins picture shows that Razor.Label.LabelController is disabled - that is the plugin that manages all of the menu click events.

      Delete
    6. oh my god. u are a amazing. sorry for bothering you. maybe you remove the option to deactivate it from you menu? or make big ass tooltip when u hover it? so dumb ppl like me accidendly dont deactivate it by playing around :(

      love u and keep going with this amazing plugin!

      Delete
  10. This comment has been removed by the author.

    ReplyDelete
  11. @Razor doesn't this rifthelp show legendary names on mini map? i have one that does ground only but not on minimap

    ReplyDelete
    Replies
    1. LootHelper from the old RunStats used to show ancient and primal legendary markers on the minimap, but I removed it due to feature bloat (or rather, I forgot to add it into the new version since I got lost in the sea of work on the other addons) and the previous questions from users about how to disable it.

      I can probably add the feature back in as an optional plugin in the next update to Menu Plugin System, which should be pretty soon (almost done with this round of bugfixing and feature creep).

      Delete
    2. YEah that would be COOL !!! I like it in t16 zooming pass shit and hate going back to see what the item is..... LOL.... BTW I couldnt get this plugin to work inside C HUD???? i tried so many things.... all ended in errors....

      Delete
    3. Since I don't run TurboHUD CN/Lightning, I would need to see the error log to be sure what is going on there. Meanwhile, I helped a with a TurboHUD CN/Lightning user with a similar issue in my Movable plugin thread at Ownedcore the other day. His error log revealed that TurboHUD CN does not have a plugins\User folder, which is where my plugins are trying to write config files. The solution was a to create a new "User" folder in the "plugins" folder.

      Delete
  12. Certain values are shown outside the screen for the MenuPools plugin (eg. 8.49, with 8 being printed halfway outside)

    ReplyDelete
    Replies
    1. Hmm, I wasn't able to reproduce that problem, even when setting the pool plugin to print 8.49 specifically. What screen resolution are you running the plugin in? Is your monitor curved? Do you have a screenshot (at least the part of the screen that shows the problem) that I could look at?

      Delete
    2. Sorry, it was not 8.49 but 7.49 and 7.67. I tested it in Windowed (Fullscreen) in 1920x1080 and Windowed 1280x720. Both had the same issue with the first digit being printed halfway outside the game window.
      I have no curved monitor.
      I have 2 screenshots depicting the issue: https://imgur.com/a/0IzO5E6

      Delete
    3. What are those white bands along the left edge of the screenshots? They look like they're from some other plugin that is drawing on top of mine.

      Delete
    4. It's the white background of Windows Explorer, it got caught in the screenshot capture when D3 was in windowed mode.

      Delete
    5. This latest update to MenuPools allows you to move the pool counter anchor for your portrait around on your screen, and all party members' pools will be shifted accordingly

      Delete
  13. @razor
    SO i think i see the problem with this plugin and Chud.... this is the error im getting

    2021.09.19 06:24:58.043 21.9.1.0 OnCollectFinishedUnSafe exception (System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\Krazy\Desktop\TurboHUD_LightningMOD\plugins\User\MovablePluginConfig.cs'.
    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
    at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
    at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
    at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost)
    at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost)
    at System.IO.File.InternalWriteAllText(String path, String contents, Encoding encoding, Boolean checkHost)
    at Turbo.Plugins.Razor.Movable.MovableController.Log()
    at Turbo.Plugins.Razor.Log.DelayedLogQueue.Queue(ITextLogController TextLog, ITextLogger plugin, Single delay)
    at Turbo.Plugins.Razor.Movable.MovableController.AfterCollect()
    at ‌‫‌‪‮‪‌‬‮‌‭‍‬‪‪‪​‍​‌‎​‎‬‮.‬‫‭‬‏‮‍‮‪​‫‭‌​​‭​‪‭‍‮‏​‎‏‮.‫‪‭‮‭‭‌‎‌‬‪‭‬‍‭‪‪‌‪‫‎‏‌‏‮()
    at ‌‫‌‪‮‪‌‬‮‌‭‍‬‪‪‪​‍​‌‎​‎‬‮.‎‭‮​‫‍‌‪‏‮‬‏‬‫‌‪‫‫‌‪‍‍‮(IPlugin , String , Action )
    at ‌‫‌‪‮‪‌‬‮‌‭‍‬‪‪‪​‍​‌‎​‎‬‮.‏‫‎‭​‭‬‭‌‬‍‭‍‫‮‭​‍‫‍‪‫‬‪‏​‮‮(Object , EventArgs )
    at ​‎​‌‍‪‍‬‪‌‎‌‭‫​‪‮‌‭‮‎‭‪​‭‌‪‮.‏‎‭‌‍‍‫‌‌‬‫‌‭‪‭‮‫‪‫‌‎‌‬‭‭‍‪‮(Boolean ))


    The path isn't right to the user folder on C-hud the path would be TurboHUD_LightningMOD\TurboHUD\plugins\User

    but the error says its going TurboHUD_LightningMOD\plugins\User

    how can i make it go to TurboHUD_LightningMOD\TurboHUD\plugins\User

    ReplyDelete
    Replies
    1. WELL ATM I cheated...... i just made a folder "plugins" added user folder to that path and it worked...... But yeah so the pathing to the user folder on Chud is different if anyone ask about the above error!!!!!!! =)

      Delete
    2. NOw i cant save tho.... It doesn't auto save and when i try saving. By clicking the button at the top right... i get this error OVER and over


      2021.09.19 08:07:35.761 21.9.1.0 OnCollectFinishedUnSafe exception (System.NullReferenceException: Object reference not set to an instance of an object.
      at Turbo.Plugins.Razor.Menu.MenuTogglePlugins.Log()
      at Turbo.Plugins.Razor.Log.DelayedLogQueue.NotifyLogQueue(ITextLogController TextLog)
      at ‌‫‌‪‮‪‌‬‮‌‭‍‬‪‪‪​‍​‌‎​‎‬‮.‬‫‭‬‏‮‍‮‪​‫‭‌​​‭​‪‭‍‮‏​‎‏‮.‫‪‭‮‭‭‌‎‌‬‪‭‬‍‭‪‪‌‪‫‎‏‌‏‮()
      at ‌‫‌‪‮‪‌‬‮‌‭‍‬‪‪‪​‍​‌‎​‎‬‮.‎‭‮​‫‍‌‪‏‮‬‏‬‫‌‪‫‫‌‪‍‍‮(IPlugin , String , Action )
      at ‌‫‌‪‮‪‌‬‮‌‭‍‬‪‪‪​‍​‌‎​‎‬‮.‏‫‎‭​‭‬‭‌‬‍‭‍‫‮‭​‍‫‍‪‫‬‪‏​‮‮(Object , EventArgs )
      at ​‎​‌‍‪‍‬‪‌‎‌‭‫​‪‮‌‭‮‎‭‪​‭‌‪‮.‏‎‭‌‍‍‫‌‌‬‫‌‭‪‭‮‫‪‫‌‎‌‬‭‭‍‪‮(Boolean ))

      Delete
    3. You could try changing the ConfigFilePath property near the top of the MenuTogglePlugins file. The default value is "plugins\User\" but changing it to "TurboHUD\plugins\User\" might get CN TH to find the right location.

      Delete
    4. WORKED! i started to just copy pass like the old days in runstat ROFL... but no, changing the location worked great.

      Delete
  14. @Razor how do i move the toggle plugins over more to the right??? Yours up above shows them far to the right, but mine are far to the left???

    ReplyDelete
  15. If you click on page 2, the plugin settings on page 1 will be changed.

    ReplyDelete
    Replies
    1. Thanks for letting me know about the issue. It looks like I forgot to update the toggling function to factor in paging. I'll have it fixed in the next update, but meanwhile, you can fix it yourself in Razor\Plugin\MenuTogglePlugins.cs on line 627 - change SelectedFilter.Plugins[Table.HoveredRow] to SelectedFilter.Plugins[Table.HoveredRow + SelectedFilter.Skip]

      Delete
    2. Thank you. It works after the change.

      Delete
  16. So this Plugin was working perfectly up until today, where it's randomly started giving errors, it looks like it's trying to find the files in System32 instead of the actual folder?

    OnCollectFinishedUnSafe exception (System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Windows\System32\User\MovablePluginConfig.cs'.
    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
    at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
    at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
    at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost)
    at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost)
    at System.IO.File.InternalWriteAllText(String path, String contents, Encoding encoding, Boolean checkHost)
    at Turbo.Plugins.Razor.Movable.MovableController.Log(String path)
    at Turbo.Plugins.Razor.Log.DelayedLogQueue.Queue(ITextLogController TextLog, ITextLogger plugin, Single delay)
    at Turbo.Plugins.Razor.Movable.MovableController.AfterCollect()
    at ​‪‪‬‎‎‍‫‎‎​‌‌‍‪‬‮‮‏‮‫‪​‫‎‌‮.‏‬‌‬‮‬‌‬‍‭‬‬‫‬​​‎‎‏​‪‭‌‍‏‮‮.‪‎‬‮‌‬‏‌‌‪‎‍‍‪‫‍‏‬‌‮‮()
    at ​‪‪‬‎‎‍‫‎‎​‌‌‍‪‬‮‮‏‮‫‪​‫‎‌‮.‫‍​‎‎‫‮​‍‌‪‭‪‎‬‭‌‮‍‍‮‎‮‍‫‎‏‮(IPlugin , String , Action )
    at ​‪‪‬‎‎‍‫‎‎​‌‌‍‪‬‮‮‏‮‫‪​‫‎‌‮.‫‫‌‏‪‬‎‮‏‫‭‌‍‫‪‏‍‬‬‮‫‮(Object , EventArgs )
    at ‪‏‬​‎‬‍‎​​‍‏‎‏‪‍‭​‮​‍​​‮‎‪‭‫‮.‪‮‮‭‏‬‬​‫‮‎‭‏‫‌‏‌‌‬‭‪‏‫‏‮‫‎‪‭‮(Boolean ))

    ReplyDelete
    Replies
    1. Hmm, I couldn't reproduce this error. TurboHUD\plugins\Razor\Log\TextLogger.cs attempts to determine the current path data with System.IO.Directory.GetCurrentDirectory() on line 127. Maybe some runtime conditions or Windows update might cause that to return C:\Windows\System32 or an empty value (either way, finding out what that function is returning and what the RelativePath value is would be key). You could try changing the return value on line 139 to a string path that you know is correct instead of having the function try to figure it out on its own.

      Delete
  17. Hello, Razor, Is it possible to track custom debuffs on champions/rare(elite) monsters like it's doing MenuCrowdControl? For example to see icon of Entangling shot from dh support or cyclone debuff from binding of lesser gods bracers, or any other debuff.

    ReplyDelete
    Replies
    1. It's not quite as straightforward as checking (de)buffs on players. I would point you towards configuring Monster Markers, and possibly check the Monster Counter code to see some ways that monster statuses are checked.
      https://turbohud.razorfish.dev/2021/08/monster-markers.html
      https://turbohud.razorfish.dev/2021/05/monster-counter.html

      Delete
  18. Hey Razor :)

    This Plugin is like a WOrk of a MASTER ( wu-tang-style) !
    Thank you for this :)

    But i have One question ;


    Under the Monsters, there shows me , what skills they have ( Acrane,Illusionist,Mortar,Vortex, etcetcetc )

    ---> My question ;;; How can i deactivate this ? <---

    I use another Plugin, that shows me already, what skills the elite-monsters have

    Kind regards , bazzzz

    ReplyDelete
    Replies
    1. You're welcome! To answer your question, I think you can accomplish this by disabling the EliteMonsterAffixPlugin in the Default plugins section of the Toggle Plugins menu.

      Delete
    2. Yeeeezzz, it was thaat:))
      Thx man ! :))

      Delete
  19. One question moore pls :D

    ;;;

    For example, i fight with Elites/enemies , who have Poison-dmg ( on the Floor, i have round Poison-areas ) , the Plugin shows me a Round Circle, where the Poison on the Floor IS ..

    How can i deavtivate this Circles ? i dont find the name of this plugin :/

    kind regards , bazzzz

    ReplyDelete
    Replies
    1. That feature is from another default plugin, EliteMonsterSkillPlugin.
      https://www.ownedcore.com/forums/diablo-3/turbohud/turbohud-discussions/647651-how-disable-plagued-circles.html

      Delete
  20. How to change font and font size is something I want to know. I have issues with small fonts.

    ReplyDelete
    Replies
    1. in TurboHUD\plugins\Razor\Menu\MenuPlugin.cs, on or around lines 36-37 are the public properties FontSize and TooltipFontSize. You can also change those values in a separate ICustomizer file. Each plugin addon handles its own creation of the font resources themselves using these shared properties.

      Delete
  21. ClickExtensions.cs(3,8) : error CS0246: The type or namespace name 'Gma' could not be found (are you missing a using directive or an assembly reference?)
    2022.02.21 23:37:01.492 22.1.5.0 GlobalHookThread.cs(15,8) : error CS0246: The type or namespace name 'Gma' could not be found (are you missing a using directive or an assembly reference?)
    2022.02.21 23:37:01.492 22.1.5.0 ClickExtensions.cs(8,18) : error CS0246: The type or namespace name 'IKeyboardMouseEvents' could not be found (are you missing a using directive or an assembly reference?)
    2022.02.21 23:37:01.492 22.1.5.0 GlobalHookThread.cs(19,10) : error CS0246: The type or namespace name 'IKeyboardMouseEvents' could not be found (are you missing a using directive or an assembly reference?)

    I am getting these errors, how do I get rid of them?

    ReplyDelete
    Replies
    1. Delete your TurboHUD\plugins\Razor\Click folder, I phased it out in the latest version.

      Delete
    2. Actually, on second thought, it sounds as though that is what you did that you maybe have my "Action" plugins folder installed. You can go ahead and delete the Razor\Action folder as well.

      Delete
    3. It's working now, thank you!

      When was the last update to TurboHUD that caused several plugins to stop working?

      Delete
  22. hello~

    Are you thinking of making a menu system like EliteBarPlugin(gigi)?

    ReplyDelete
    Replies
    1. The quickest option for me was to convert s4000's (DAV) EliteInfoPlugin (which is a combo of several elite monster related plugins) into a Movable plugin. It worked well enough to allow me to move the bars around on the screen or hide them that I didn't think it needed to be converted into a menu plugin. This is the original plugin code posted by s4000 (not movable):
      https://pastebin.com/Gazfy6t2

      Unfortunately, my modified version includes some changes that require another plugin I wrote that I never released publicly, so I would have to sort that out before posting it...

      Delete
    2. How can I convert Eliteinfo to Movable plugin?
      (on the s4000 EliteInfoPlugin in the upper left corner)

      I am always grateful to be able to use your system.^^

      Delete
    3. Sorry for the delayed response! I just uploaded a the original plugin by s4000 with some quick modifications to use the Movable Plugin System at the following link, but I didn't get a chance to test it out since I don't have this computer set up to play D3 atm:
      https://www.dropbox.com/s/n29xb8mk4xxt4z2/DAV_EliteInfoPlugin_Movable.cs?dl=0

      Delete
    4. not moving^^
      Thank you for your hard work.~

      Delete
    5. Oh, I forgot the most important thing, the position changes for the drawing code! Well, I added them now, you should be able to find the updated code in the same download link: https://www.dropbox.com/s/n29xb8mk4xxt4z2/DAV_EliteInfoPlugin_Movable.cs?dl=0

      Delete
    6. Just to verify, does the plugin you installed have the following code on line 114?
      float x = area.Rectangle.X + deltaX;

      Delete
    7. have the following code on line 114 // -> float x = area.Rectangle.X + deltaX;
      exception.txt :
      DAV_EliteInfoPlugin_Movable.cs(110,44) : error CS0136: A local or parameter named 'x' cannot be declared in this scope because that name is used in an enclosing local scope to define a local or parameter

      Delete
    8. Ah, I've updated the code again to hopefully fix that error. Changed the variable usage at line 110 from "x => x.MonsterAlive" to "mp => mp.MonstersAlive".
      Same download link:
      https://www.dropbox.com/s/n29xb8mk4xxt4z2/DAV_EliteInfoPlugin_Movable.cs?dl=0

      Delete
    9. It works fine.^^
      Thank you so much for your work

      Delete
  23. Any major changes lately? We are now heading into the holiday season and at least one plugin on my copy of the suite still lists Ethereal drops from S24! So last year. Is there a download link to the most recent version of the suite with a changelog?

    ReplyDelete
    Replies
    1. I haven't worked on any plugins in a while, though I had an update for the menu system that I didn't get around to pushing out before I stopped...

      Delete
  24. Would it be possible to update the suite? I've noticed a slight mistake in the MaterialsGold.cs that changes the calculation to the correct value. It has always been off. In the Spent section, the value needs to be negative. Ex: -78k/hr. (Poor example, but you should get the idea.)

    ReplyDelete
  25. Been getting an error with the latest HUD update for MenuPlugin, LabelController, PartyCOE and MovableController. Any advice on which lines to change?

    error CS0246: The type or namespace name 'IMouseClickHandler' could not be found (are you missing a using directive or an assembly reference?)
    error CS0246: The type or namespace name 'IMouseClickBlocker' could not be found (are you missing a using directive or an assembly reference?)

    ReplyDelete
    Replies
    1. The functionality provided by IMouseClickHandler and IMouseClickBlocker are required for those plugins to work - they handle mouse input for interactions with the game screen. Do IMouseClickHandler.cs and IMouseClickBlocker.cs exist in your TurboHUD\interfaces\input folder? I am not familiar with the latest update to TH, but an earlier S29 PTR version I saw floating around still has those files (they are only there for informational purposes for plugin writers, but that means those interfaces are present in the API).

      I have my own implementation of mouse input processing that I wrote before TH added it to their core API, but I phased it out because it would not work as smoothly as something handled by TurboHUD natively.

      Delete
    2. The latest update from LighningMod removed that function and i would verry much appreciate it if you could help me fining a work around for it

      Delete
    3. This comment has been removed by the author.

      Delete
    4. Both plugins used to exist in the TurboHUD\interfaces\input folder but the LightningMod dev had removed the implementation. Any ideas on how to restore the functionality? Every time I start it up, they will be deleted automatically, and pasting them back doesn't work either.

      Delete
  26. IMouseClickHandler.cs and IMouseClickBlocker.cs
    These files were deleted in lightningmode because of this it stopped working. Can I fix it somehow?
    If you put these files in the Click folder, the error disappears but movement and everything else does not work

    ReplyDelete
    Replies
    1. Sorry, I made a mistake, you should put it in interfaces\input. Previously there was a mention in Turbo.Plugins.dll, but it looks like these plugins were removed from there

      Delete
    2. i was writing with te developer of lightningmod and he said he removed it cause he does not use it.

      Delete
    3. If you have a version outside of this, you can use it. See my post below. If you have a plugin suite from the English version, it is possible to transfer said plugins to this version. If you don't, you can always redownload them thru Ownedcore, provided the plugin authors are still around.

      Delete
  27. The Chinese version is still kicking around after the NA/EU version got 86ed. It's called Lightning Mod. I'm still kicking it around, as well. I've transferred most of the plugins I used for the English version to the Chinese version with very little exceptions.

    ReplyDelete
  28. Any possibility for an update to MenuPlugin to have it work with LightningMod?

    ReplyDelete
    Replies
    1. Oh, it works quite well, if you have a copy of it from the original TH.

      Delete
    2. I just wrote an implementation of IMouseClickHandler and IMouseClickBlocker as a plugin to recreate the functionality removed by the developer of LightningMod. Now figuring out how I should package it so that I don't have to maintain two versions of my plugins, one for TurboHUD Free and one for LightningMod... It want it to just be an extra download for LM users.

      Delete
    3. Also probably need some LM users interested in testing it out for me, I don't use it or have any friends who use it.

      Delete

Post a Comment