WoW:API GetCritChance

From AddOn Studio
Revision as of 20:36, 23 August 2006 by WoWWiki>CaptainQ
Jump to navigation Jump to search

Since there are functions incorporated in the WoW API to return parry, dodge and block chances but none to return critical hit chance, here is a GetCritChance() function that will do so.

GetCritChance()

Function code

 function GetCritChance()
   local critChance, iCritInfo, critNum;
   local id = 1;
   -- This may vary depending on WoW localizations.
   local atkName = "Attack";
   local attackSpell = GetSpellName(id,BOOKTYPE_SPELL);
   if (attackSpell ~= atkName) then
     name, texture, offset, numSpells = GetSpellTabInfo(1);
     for i=1, numSpells do
       if (GetSpellName(i,BOOKTYPE_SPELL) == atkName) then
         id = i;
       end
     end
   end
   GameTooltip:SetOwner(WorldFrame,"ANCHOR_NONE");
   GameTooltip:SetSpell(id, BOOKTYPE_SPELL);
   local spellName = GameTooltipTextLeft2:GetText();
   GameTooltip:Hide();
   iCritInfo = string.find(spellName, "%s");
   critNum = string.sub(spellName,0,(iCritInfo -2));
   critChance = math.ceil(critNum);
   return critChance;
 end

Returns

Player's critical hit chance, in percentage (without the % symbol).
Note: Sometimes, the percentage returned would include a lot of decimals, hence the usage of math.ceil()] here to round up the number to the nearest decimal.

Examples

Simply call the function and display it, like this:

 -- Will display your critical hit chance in your default chat frame.
 DEFAULT_CHAT_FRAME:AddMessage("Your crit chance is: "..GetCritChance().."%");

You can also use this code for a more thorough display:

 -- Will send a "SAY" message (/s) with your crit, dodge, parry and block chances in percentage.
 SendChatMessage("My crit chance is: "..GetCritChance().."%","SAY");
 SendChatMessage(UnitName('player').."'s chances to...","SAY");
 SendChatMessage("Crit: "..GetCritChance().."%","SAY");
 SendChatMessage("Dodge: "..GetDodgeChance().."%","SAY");
 SendChatMessage("Parry: "..GetParryChance().."%","SAY");
 SendChatMessage("Block: "..GetBlockChance().."%","SAY");

How it works

This function simply loops through your spellbook (BOOKTYPE_SPELL) for your regular melee attack skill and then grabs the text from the skill's tooltip using GameTooltip functions (the tooltip of the regular melee attack is the only place where the crit chance is displayed).

Credits

Much of this GetCritChance() function was taken and (slightly) modified from mercdev's Combat Info (alt) for Titan Panel. Thanks to him.


Template:WoW API