RhadaTip DPS/HPS Tooltip

[2.1.1] RhadaTip Enhanced Tooltip

RhadaTip Dps/Hps Tooltip Enhancer 2.1.5b (3.0.0 coming soon)

  • What does RhadaTip do?
  1. Item V.S. Item comparisons (to know how much dps this new badge item will grant to you, how many dkp you should bid on this newly dropped raid loot, etc).
    1. Item V.S. Item comes with an auto filling socket mechanism
    2. RhadaTip support trinkets comparisons.
  2. Full gear evaluation, and projected full gear value (as the result of swapping the tooltipped item with the currently equipped item).
    1. This means that the item comparison is always accurate. Limiting the scope of the comparison only to the two items themselves will produce highly inaccurate results (as a consequence of passing the hit cap, breaking a tier set bonus etc)
    2. Thus, RhadaTip supports the hit cap and tier set bonuses.
  3. One-button-optimizer for the whole gear. Clicking this button, RhadaTip will scan your equipped items plus all the items in your bags, compute which combination will result in the highest gear xPS value, and equip it.
  4. The comparison between items and setups can go n items ahead of your current gear, up to the best in slot configuration if you want, by using the combination of RhadaTip and WoWEquip.
    1. This is extremely useful. An item that is a small dps gain at the moment, might be a good dps gain (or a dps loss, for that matter) after having changed another item. As an example, an item drops (ie. a new pair of bracers). It is a small dps gain for you at the moment. You are only two emblems away from getting a new pair of legs. Before passing or bidding dkp, you might be interested in knowing what kind of dps gain those bracers would net to you also factoring in the new pair of leggings that you are about to get. Using RhadaTip and WoWEquip, that is possible.
    2. This is also much more useful for the average raider than a simple BiS list. The best in slot list is actually quite useless considering that those items are only the highest dps items when you combine them all together, and less than 0.00001% of the raiders will ever get them before the next tier is released.
    3. Easy, on the fly comparisons between your full gear set and that one of other players.
  5. RhadaTip links your current setups to your currently active talent tree. Swapping the active talent tree will automatically swap all values within RhadaTip. This (for example) means no overhead for a RhadaTip user changing from restoration to balance before a raid.
  6. RhadaTip comes with a gem optimizer. The gem optimizer's use is twofold.
    1. On the left handside it shows the best gem of each colour, based on your currently set scaling values.
    2. On the right handide, it will compute for you the optimal gemming of any item, be it an item that you already own (and therefore might be already gemmed), or an item that you don't already own. It will also show what gain you will get by regemming, so that you can better evaluate if it is worth going for it.
  7. It comes with a collection of pre defined scaling values accessible by the /rt pv slash command. These values are mostly taken from SimulationCraft for maximum reliability and actuality.
    1. When you log in with RhadaTip for the first time, it will compare your talents against those of the pre-set scaling values, and automatically load a template if there is a match.
  8. By using RhadaTip in combo with Auc-Searcher-RhadaTip, you can easily scan the auction house to find upgrades for you.
  • How does it work?
    To make the "xPS gain = n" show meaningful numbers, type /rt sv to open the input frame. Type in your scaling values. Once you have saved them with the button, they will be saved for future game sessions.
    If you don't have your scaling values, use /rt pv and select the closest set of scaling values to you (based on your gear level and talents).
    If you have spent your talent in a way that matches one of the RhadaTip saved templates, the scaling values will be automatically set (but I still suggest to review them).
    To make the "Total gear xPS = n" show even more meaningful numbers, type /rt hc to open the input frame. Type in your desired hit percentage that you want to achieve from gear only. As an example, if your hit cap versus a boss is at 17% hit, and you plan to receive +4% hit from raid buffs or racials, you have to put 13 in this frame (mind not putting the % symbol in here too). Here you can also set a "some casting time" value used to compute trinket procs, and the default filling gems for each empty socket bonus. Once you have saved them with the button, it will be saved for future game sessions.
    Where to get your correct scaling values? I'd suggest that you run your own SimulationCraft, if you really can't, you will probably be able to find them on some failjerks webside.
  • Why should I update from 2.1.4 to 2.1.5?
    - Rings and trinkets comparisons should now be always accurate, regardless of hit rings currently worn by the player.
    - Added tier9 pre-saved scaling values.
    - Fixed a bug caused by One-Hand weapons that sometimes prevented the gear optimizer from working.
    - Added the following gems: Sovereign Dreadstone and Nightmare Tear.
    - Added the 3 Darkmoon Fairie: Greatness cards that had been left out of the previous releases.
    - Added russian localized tier set names (fixing the 2.1.4 known bug with the ruRU locale).
    - Added a message that shows how many gear combinations the gear optimizer is about to test (as a reference, on my pc 14400 combinations took 182 seconds to be fully evaluated).
    - Fixed a bug that was sometimes causing the gear optimizer to equip the wrong rings or trinkets.
    - The gear optimizer now factors in the 12 hit ratings from the enchantment Icewalker toward the evaluation of the excessive hit over the user specified gear hit cap.
    - The gear optimizer now supports shields properly.
    - Fixed an issue caused by mana per 5 socketbonuses in the deDE locale.
    - Rewritten many core functions to speed the addon up and make future additions (ie the expertise cap) easier to implement.
    - Updated the french locale.
  • Why should I update from 2.1.5b to 3.0.0?
    - Entirely rewritten code makes the addon extremely lightweight. You won't notice a single fps drop when mousehovering items. It will also be at least 35% faster in computing the best gear combination. It will make a workaround to the issue with Autobar possible, so the two mods will finally be able to work together.
    - The gear optimizer will properly work if the best solution has 2x of the same One-Handed weapons as the weapons of choice.
    - Added all left out Trial of the Crusade Trinkets, Darkmoon Card: Greatness, and Battlemaster Ruination.
    - You can now choose a minimum itemLevel value. All items in your bags below this itemLevel will be skipped by the gear optimizer. This means that you can now fire it with fishing poles, mining picks and lvl 70 items in your bags, without having them slowing it down significantly.
    - Fixed the Sundial of the Exiled proc chance.
    - Fixed the tier9 localized names.
    - The gear optimizer will print out the items needed to achieve the best gear possible, in case there is some problem with their auto-equipment (Binds when Equipped items, too many Dragon's Eyes).
    - Fixed an offhand evaluation bug.
  • What other commands are there?
    Quite a few. You can access the complete list of available options by typing /rt in game. In here, I'll only spend a couple words on the following:
    /rt sv -> Opens up the scaling values' input frame.
    /rt hc -> Opens up the frame with useful functionalities like the hit cap, the average casting time, the auto filling gems, turn on/off the WoWEquip support etc.
    /rt og -> Opens up the Gem Optimizer frame.
    /rt ogear -> Opens up the Gear Optimizer frame.
    /rt pv -> Opens up the frame containing pre-set values for different specs and gear levels.
  • What assumptions does the mod make?
    - If the item diplayed in your tooltip has an empty socket slot, and you haven't picked up a default filling gem for that socket colour, the mod assumes that it is filled with a 19 spellpower fictitious gem. This gem will not count toward activating the socketbonus.
    - The hit cap is only taken into account when computing the "total gear dps = n" line, it is not taken into account when computing the "dps gain = n", as the scope of this latter line is local to the two compared items only.
    - Enchantments and prismatic sockets are ignored and in no way contribute to the xPS gains.
    - Trinkets like Illustration of the Dragon Soul are modeled as static gains. Keeping the stacks up is generally possible, and most classes can even stack the charges up before pulling.
    - The tooltip will read "DPS gain" if you have 81 or more hit rating, otherwise it will read "HPS gain". This is just the tooltip wording, so if you are leveling up a dk and have less than 80 hit rating, don't be scared, you are still seeing dps values.
    - The hit cap is considered an hard cap. After the cap, all the hit rating is worth nothing. If you have a soft hit cap, just change the hit scaling value once you are past it.
    - The Avg Casting Time field in /rt hc is TIMEPERIOD (say 60 seconds) / NUMBER OF CASTS (that can proc trinkets).
    - Clicking a pre-set value button will only save scaling values, you will still have to configure the /rt hc frame for accurate values.
    - There are always two available slash commands for RhadaTip. One is /RhadaTip, the other is either /rt or /rtip, based on whether you have RaidTracker loaded or not.
  • What doesn't work in 2.1.5b?
    - The gear optimizer will not choose the proper combination of weapons, in case this combination is made up by 2x of the same One-Hand weapon.
    - A few Trial of the Crusade trinkets and one Darkmoon Card: Greatness were left out.
    - Sundial of the Exiled has a 15% proc chance rather than a 10% one.
    - Tier9 deDE, frFR and esES names are incorrect.
    - There is an offhand evaluation bug.
  • Which classes does it support?
    It was developed with warlocks in mind, but it should work out fine for every dps and healing class.
  • What is the difference between this mod and RatingBuster?
    This mod has xPS in its mind. RatingBuster is used to convert ratings into percentages, and to obtain a breakdown of the sum of all the stats on the tooltipped item. In no way it delivers actual xPS informations. Thus, none of the key features of RhadaTip listed in these f.a.q. is present in RatingBuster.
  • What is the difference between this mod and Pawn?
    Taken from the answers to the question "What does RhadaTip do" at the beginning of this f.a.q., the following RhadaTip features aren't found (or are radically different) in Pawn:
    • 1.2 (Trinkets)
    • 2 (Full gear evaluation...)
    • 2.1 (... leading to always accurate comparisons)
    • 2.2 (Tier set bonuses and hit cap)
    • 3 (the 1-click gear optimizer)
    • 4, 4.1 and 4.2 (the ability to go n items ahead of your current gear, to compare not just two items but n items, etc)
    • 4.3 (compare your gear to that of other playes)
    • 5 (support to dual specs)
    • 6, 6.1 and 6.2 (the gem optimizer)
    • 7, 7.1 (pre-set scaling values and auto-loading of the best scaling value template on login)
  • What is coming up next?
    - Expertise cap.
    - Tank support.
    - Asian localization.
  • How can I contribute?
    - Help me with pre-saved scaling values, especially for the healing classes/specs.
    - Test the localizations.
    - Help me with a couple trinket models.
  • Compatibility issues.
    There is a compatibility issue with Autobar, I hope that with the help of its author we'll be able to fix it.
  • Special Thanks to...
    I'd like to thank:
    Gotai of <Order of the Turtle>, The Sha'tar EU, for his support and patience in helping me overcome some difficulties.
    Dedmonwakeen of <Wicked Legion>, Llane US, for helping me solve the melee weapon issue.
    Mephaïste of <Les Larmes de Mathystra>, Throk'Feroth EU, for making the frFR locale a reality.
    Nightdragon (forum user), for helping me fix the deDE localization.
    Xinhuan, for making the interaction between RhadaTip and WoWEquip possible.
    StingerSoft, for localizing the mod in Russian.
    Troffel of <Ein Herz für Hühnchen>, Der Rat von Dalaran EU, for helping me to optimize the Gear Optimization tool.
    Barfolomeu and Vhaarr for the incredible help in optimizing the performances of the code.

You must login to post a comment. Don't have an account? Register to get one!

  • Avatar of tylerdurden2 tylerdurden2 Tue, 10 Nov 2009 09:58:33

    Some early thoughts.

    • Itemlinks are sometimes making me go crazy. For example yesterday I was using them and the dual wielding thing. Two non enchanted one hands. Turns out that their itemlink was different, because of the field uniqueId, part of the itemString
    item:itemId:enchantId:jewelId1:jewelId2:jewelId3:jewelId4:suffixId:uniqueId:linkLevel
    

    I hope that this won't cause more issues. what I would need most though would be to always use a substring of that, or to always first replace from suffixId till the end of the string with 0...

    • I like your idea, but maybe I could tweak it a bit. This is what I was thinking.

    in the cachedItems store something like "itemDps|itemHit" instead of the whole text to add to the tooltip

    onToolTipSetItem doesn't do the cache thingy, it simply always calls the function getItemSlotValue

    getItemSlotValue on the other hand does something like this:

    local item, link = passedTooltip:GetItem()
    if cachedItems[link] == nil then
           -- do the current code to compute the item value and hit value
           -- once they have been computed, store them
          cachedItems[link] = "itemDps|itemHit"
          return itemDps, itemHit
    else
          -- it isnt nil, therefore a cached value for the passed item exists
          -- using string.split for readability, will replace it with a select
          return cachedItems[link].split("|")
    end
    

    I can imagine that this will greatly speed up the gear optimizing function.

  • Avatar of Barfolomeu Barfolomeu Mon, 09 Nov 2009 20:31:00
    Quote:

    Can you elaborate on this a bit? How do I cache it exactly? I need a way that, if for example I change a gem of choise in the rhadatip gem tab, will not use the cached value but recompute it. Same if I gem the item and so on so forth.

    I didn't look too far into your code but I imagine something like this:

    This is regarding hovers on items in your bags or character sheet. The Blizzard UI updates these tooltips on every update event to account for cooldowns. My suggestion was that you would cache the text that you would be applying to the tooltip, since this should never change once the tooltip is up. I would think something like this would be in order:

    • Store the link of the item for the tooltip at first event. The first event is when you first hover over the item in your character sheet or bag.
    • Compute the text that you're adding to the tooltip at first event. Cache it in a global table and do what would normally be done to the tooltip.
    • On the next event, check if the tooltip is for the same item as before (the mouse continues to hover over the item), simply display this cached value instead of computing it again...and again, etc.

    NOTE! The code has changed since the original post to account for the use of link as a unique identifier instead of item

    Some sample code:

    -- Globally declare lastLink: local lastLink = ""
    -- Globally declare a table to hold the cached items: local cachedItems = {}
    -- Then in your onToolTipSetItem handler, do this:
    -- It's likely the next two variables are already sent to the handler. I add this code here for the sake of completeness
    local item, link = GameTooltip:GetItem()
    -- We use the link here because link is unique. Say you dual wield the same weapons, but they're gemmed and enchanted differently
    if lastLink ~= link then
      -- If the text is not already cached...
      if cachedItems[link] == nil then
        -- populate cachedItems[link] with the text you want to cache...
        cachedItems[link] = bla...
      end
      -- Save the link so we can compare it with the next iteration
      lastLink = link
    end
    -- ...and always use cachedItems[link] at this point
    

    The beauty of this is that hovering over already cached items will read from the cache instead of computing again. If some scaling factor changes though, you could just easily clear the cache.

    The helpful people in #wowace on irc.freenode.net have again helped with the above code.

    Barf

    Last edited on 10 Nov 2009 by Barfolomeu
  • Avatar of tylerdurden2 tylerdurden2 Mon, 09 Nov 2009 00:45:52

    To keep you updated, I have now rewritten getItemSlotValue with the following:

    • All lua functions are now first declared file local (ie local find = find)
    • All splits have been replaced with selects
    • The tooltip parsing is now only used for the gem management, I get all the item stats from GetItemStats. This includes the inner tooltip parse used to compute the amount of sockets on an item, that has now been removed.

    The frame drop seems gone, but on my pc it was marginal before too. I ran the optimizer, it tested 720 combinations in 14 seconds pre changes, and 9 seconds post changes.

  • Avatar of tylerdurden2 tylerdurden2 Sun, 08 Nov 2009 17:56:01

    No harm done, I welcome constructive criticism. I'll surely poke you, in the meantime I have the following questions/comments:

    Quote:

    Create local copies of functions. This is a known caveat of lua. For example: local fnd = string.find (and replace all occurrences of string.find with fnd)

    Nice, didn't know that. I'm not 100% sure of the scope though. Do you mean "file" local functions?

    Quote:

    Instead of using strsplit, which is an expensive operation:

    if (string.find(text, "^%+%d+ Ausdauer") ~= nil and r+b ~= 0) then
      stamina, token1 = strsplit(" ", text, 2)
      trash, stamina = strsplit("+", stamina, 2)
    end
    

    Do this instead:

    stamina = select(3, fnd(text, "^%+(%d+) Ausdauer"))
    

    Better yet, use GetItemStats(item). There's no need to parse the text of each item's tooltip, and per locale no less, to get what you want.

    I understand the first part, but I must say I'm curious about where the GetItemStats came from. It's not on my book, nor on wowwiki, is it very recent? I also imagine two scenarios by swapping to it. Will it include the enchantment stats? If yes, I might have to model all enchantments and remove their contribution, which will be pretty bad. I also imagine that I'll need to keep the way gem scanning works now to be able to keep using the "virtual" fillers. The repeated function in the different locales was because I not only had the issue of what to string.find or string.split, but also because in one language I might have needed to do a select(2 ....) and in another select(4 ... ) since the number I wanted could be placed in a different position based on the locale. That would have generated an enormous amount of if - else in the "general" function.

    Quote:

    Finally, cache the text you add to the tooltip on the first iteration so that you only generate it once, then use that cached text on each iteration of ontooltipsetitem.

    Can you elaborate on this a bit? How do I cache it exactly? I need a way that, if for example I change a gem of choise in the rhadatip gem tab, will not use the cached value but recompute it. Same if I gem the item and so on so forth.

    Thanks for the help, Rhad

    EDIT: I was just able to log, apparently GetItemStats ignores gems and enchantments completely, even if the passed itemlink is gemmed and enchanted. I guess that means that I can use it without the hassle of the enchantments.

    Last edited on 08 Nov 2009 by tylerdurden2
  • Avatar of Barfolomeu Barfolomeu Sat, 07 Nov 2009 02:21:05

    I love the concept of your addon, but I must say, after having looked at the code, there's only one word that describes it: horrible.

    Sorry to be so blunt, but the truth hurts some times. The addon causes massive performance issues for me. Here are a few suggestions to make your addon better:

    Create local copies of functions. This is a known caveat of lua. For example:

    local fnd = string.find (and replace all occurrences of string.find with fnd)

    Use locale files strictly for locale variables. L["foo"] = "foozen", and make that huge function exist in only one place, using locale variables.

    Instead of using strsplit, which is an expensive operation:

    if (string.find(text, "^%+%d+ Ausdauer") ~= nil and r+b ~= 0) then
      stamina, token1 = strsplit(" ", text, 2)
      trash, stamina = strsplit("+", stamina, 2)
    end
    

    Do this instead:

    stamina = select(3, fnd(text, "^%+(%d+) Ausdauer"))
    

    Better yet, use GetItemStats(item). There's no need to parse the text of each item's tooltip, and per locale no less, to get what you want.

    Finally, cache the text you add to the tooltip on the first iteration so that you only generate it once, then use that cached text on each iteration of ontooltipsetitem. Yes, the blizzard UI iterates over the tooltip in your character sheet and bags for every onUpdate event, to account for cooldowns.

    If you'd like some specific help with the issues I've mentioned, I'd be glad to help. Send me a message on the site and we can set something up.

    BTW, the great vhaarr from #wowace on irc.freenode.net is the one that suggested all this and I just parrotted what he wrote, but my offer of help still stands.

    Barf

    Last edited on 07 Nov 2009 by Barfolomeu
  • Avatar of tylerdurden2 tylerdurden2 Wed, 26 Aug 2009 08:24:27

    True. The problem is, autobar has been discontinued as far as I could read around.

    I've posted the issue in the wowace forum, autobar thread, but there is no news yet.

    Last edited on 25 Sep 2009 by tylerdurden2
  • Avatar of slickwalker slickwalker Wed, 26 Aug 2009 01:10:33

    Causes weird things to happen with autobar. Bars dont appear for some reason.

  • Avatar of tylerdurden2 tylerdurden2 Sun, 02 Aug 2009 22:51:54

    Thanks for the kind words. I promise that once I'm done fixing 3.2 stuff (and tonight I added all the gems, so basically it's only trinkets missing, but those still have "colosseum 5 men" kind of names on wowhead) I'll get myself into localization. It isn't that easy since tooltip parsing is strictly based on wordings, which are of course heavily dependant of the language. Do you think that I could contact you in a while to be the french supporter of the localization? :p

  • Avatar of Gennoken Gennoken Sat, 01 Aug 2009 22:16:59

    Best Gear DPS addon but i still can't use it :( it's not working with french client :(

  • Avatar of tylerdurden2 tylerdurden2 Fri, 10 Jul 2009 15:39:06

    Version 2.0.8 is incomplete but solves the auctionator bug. PM me if you want to use it.

Facts

Date created
14 Jun 2009
Categories
Last update
22 Oct 2009
Development stage
Release
Language
  • deDE
  • enUS
  • esES
  • frFR
  • ruRU
License
GNU General Public License version 3 (GPLv3)
Curse link
RhadaTip DPS/HPS Tooltip
Reverse relationships
1
Recent files

Authors