LibStatLogic-1.1

This project is abandoned.

Whether this project is out of date or its author marked it as abandoned, this project is no longer maintained.

If you wish to take this project over, please report it and state your intentions.

StatLogic 1.1 now uses LibStub instead of AceLibrary. StatLogic 1.1 will remain 3.0 compatible(China is still in wotlk), use StatLogic 1.2 for 4.0.

API Documentation

:BuildGemmedTooltip(item , red , yellow , blue , meta)

Arguments

item
number or string or table - tooltip or itemId or "itemString" or "itemName" or "itemLink"
red
number or string - gemID to replace a red socket
yellow
number or string - gemID to replace a yellow socket
blue
number or string - gemID to replace a blue socket
meta
number or string - gemID to replace a meta socket

Notes

  • Returns a modified link with all empty sockets replaced with the specified gems, sockets already gemmed will remain.
  • item:
tooltip
table - The tooltip showing the item
itemId
number - The numeric ID of the item. ie. 12345
"itemString"
string - The full item ID in string format, e.g. "item:12345:0:0:0:0:0:0:0".
Also supports partial itemStrings, by filling up any missing ":x" value with ":0", e.g. "item:12345:0:0:0"
"itemName"
string - The Name of the Item, ex: "Hearthstone"
The item must have been equiped, in your bags or in your bank once in this session for this to work.
"itemLink"
string - The itemLink, when Shift-Clicking items.

Returns

link
string - modified item link

Example

local link = StatLogic:BuildGemmedTooltip(28619, 3119, 3119, 3119, 3119)
StatLogic:SetTip("item:28619")
StatLogic:SetTip(StatLogic:BuildGemmedTooltip(28619, 3119, 3119, 3119, 3119))

string or number

:GetAPFromAgi(agi [, class])

Arguments

agi
number - Agility
class
string or number - ClassID or "ClassName". Default: PlayerClass
See :GetClassIdOrName(class) for valid class values.

Notes

  • Calculates the attack power from agility for given class.

Returns

ap
number - Attack power
statid
string - "AP"

Example

local ap = StatLogic:GetAPFromAgi(1) -- GetAPPerAgi
local ap = StatLogic:GetAPFromAgi(10)
local ap = StatLogic:GetAPFromAgi(10, "WARRIOR")

string or number

:GetAPFromStr(str [, class])

Arguments

str
number - Strength
class
string or number - ClassID or "ClassName". Default: PlayerClass
See :GetClassIdOrName(class) for valid class values.

Returns

ap
number - Attack power
statid
string - "AP"

Examples: local ap = StatLogic:GetAPFromStr(1) -- GetAPPerStr local ap = StatLogic:GetAPFromStr(10) local ap = StatLogic:GetAPFromStr(10, "WARRIOR")


string or number

:GetAPPerAgi([class])

Arguments

class
string or number - ClassID or "ClassName". Default: PlayerClass
See :GetClassIdOrName(class) for valid class values.

Notes

  • Gets the attack power per agility for given class.
  • Player level does not effect attack power per agility.
  • Will check for Cat Form.

Returns

ap
number - Attack power per agility
statid
string - "AP"

Example

local apPerAgi = StatLogic:GetAPPerAgi()
local apPerAgi = StatLogic:GetAPPerAgi("ROGUE")

string or number

:GetAPPerStr([class])

Arguments

class
string or number - ClassID or "ClassName". Default: PlayerClass
See :GetClassIdOrName(class) for valid class values.

Notes

  • Returns the attack power per strength for given class.
  • Player level does not effect attack power per strength.

Returns

ap
number - Attack power per strength
statid
string - "AP"

Example

local ap = StatLogic:GetAPPerStr()
local ap = StatLogic:GetAPPerStr("WARRIOR")

string or number

:GetAvoidanceAfterDR("avoidanceType" , avoidanceBeforeDR [, class])

Arguments

"avoidanceType"
string - "DODGE", "PARRY", "MELEE_HIT_AVOID"(NYI)
avoidanceBeforeDR
number - amount of avoidance before diminishing returns in percentages.
class
string or number - ClassID or "ClassName". Default: PlayerClass
See :GetClassIdOrName(class) for valid class values.

Notes

  • Avoidance DR formula and k, C_p, C_d constants derived by Whitetooth (hotdogee [at] gmail [dot] com)
  • avoidanceBeforeDR is the part that is affected by diminishing returns.
  • See :GetClassIdOrName(class) for valid class values.
  • Calculates the avoidance after diminishing returns, this includes:
    1. Dodge from Dodge Rating, Defense, Agility.
    2. Parry from Parry Rating, Defense.
    3. Chance to be missed from Defense.
  • The DR formula: 1/x' = 1/c+k/x
    • x' is the diminished stat before converting to IEEE754.
    • x is the stat before diminishing returns.
    • c is the cap of the stat, and changes with class.
    • k is is a value that changes with class.
  • Formula details:
    1. DR for Dodge, Parry, Missed are calculated separately.
    2. Base avoidances are not affected by DR, (ex: Dodge from base Agility)
    3. Death Knight's Parry from base Strength is affected by DR, base for parry is 5%.
    4. Direct avoidance gains from talents and spells(ex: Evasion) are not affected by DR.
    5. Indirect avoidance gains from talents and spells(ex: +Agility from Kings) are affected by DR
    6. c and k values depend on class but does not change with level.
kC_p1/C_pC_d1/C_d
Warrior0.956047.0035250.02127588.1290210.011347
Paladin0.956047.0035250.02127588.1290210.011347
Hunter0.9880145.5604080.006870145.5604080.006870
Rogue0.9880145.5604080.006870145.5604080.006870
Priest0.953000150.3759400.006650
Deathknight0.956047.0035250.02127588.1290210.011347
Shaman0.9880145.5604080.006870145.5604080.006870
Mage0.953000150.3759400.006650
Warlock0.953000150.3759400.006650
Druid0.972000116.8907070.008555

Returns

avoidanceAfterDR
number - avoidance after diminishing returns in percentages.

Example

local modParry, drFreeParry = StatLogic:GetParryChanceBeforeDR()
local modParryAfterDR = StatLogic:GetAvoidanceAfterDR("PARRY", modParry)
local parry = modParryAfterDR + drFreeParry
local modParryAfterDR = StatLogic:GetAvoidanceAfterDR("PARRY", modParry, "WARRIOR")
local parry = modParryAfterDR + drFreeParry

:GetAvoidanceGainAfterDR("avoidanceType" , gainBeforeDR)

Arguments

"avoidanceType"
string - "DODGE", "PARRY", "MELEE_HIT_AVOID"(NYI)
gainBeforeDR
number - Avoidance gain before diminishing returns in percentages.

Notes

  • Calculates the avoidance gain after diminishing returns with player's current stats.

Returns

gainAfterDR
number - Avoidance gain after diminishing returns in percentages.

Example

-- How much dodge will I gain with +30 Agi after DR?
local gainAfterDR = StatLogic:GetAvoidanceGainAfterDR("DODGE", 30*StatLogic:GetDodgePerAgi())
-- How much dodge will I gain with +20 Parry Rating after DR?
local gainAfterDR = StatLogic:GetAvoidanceGainAfterDR("PARRY", StatLogic:GetEffectFromRating(20, CR_PARRY))

string or number

:GetBaseDodge([class])

Arguments

class
string or number - ClassID or "ClassName". Default: PlayerClass
See :GetClassIdOrName(class) for valid class values.

Notes

  • BaseDodge values derived by Whitetooth (hotdogee [at] gmail [dot] com)
  • Gets the base dodge percentage for given class.
  • Base dodge is the amount of dodge you have with 0 Agility, independent of level.

Returns

dodge
number - Base dodge in percentages
statid
string - "DODGE"

Example

local baseDodge = StatLogic:GetBaseDodge()
local baseDodge = StatLogic:GetBaseDodge("WARRIOR")

string or number

:GetBlockValueFromStr(str [, class])

Arguments

str
number - Strength
class
string or number - ClassID or "ClassName". Default: PlayerClass
See :GetClassIdOrName(class) for valid class values.

Notes

  • Calculates the block value from strength for given class.
  • Player level does not effect block value per strength.

Returns

blockValue
number - Block value
statid
string - "BLOCK_VALUE"

Example

local bv = StatLogic:GetBlockValueFromStr(1) -- GetBlockValuePerStr
local bv = StatLogic:GetBlockValueFromStr(10)
local bv = StatLogic:GetBlockValueFromStr(10, "WARRIOR")

string or number

:GetBlockValuePerStr([class])

Arguments

class
string or number - ClassID or "ClassName". Default: PlayerClass
See :GetClassIdOrName(class) for valid class values.

Notes

  • Gets the block value per strength for given class.
  • Player level does not effect block value per strength.

Returns

blockValue
number - Block value per strength
statid
string - "BLOCK_VALUE"

Example

local blockPerStr = StatLogic:GetBlockValuePerStr()
local blockPerStr = StatLogic:GetBlockValuePerStr("WARRIOR")

:GetClassIdOrName(class)

Arguments

class
number or string - ClassID or "ClassName"

Notes

  • Converts ClassID to and from "ClassName"
  • class:
ClassID"ClassName"
1"WARRIOR"
2"PALADIN"
3"HUNTER"
4"ROGUE"
5"PRIEST"
6"DEATHKNIGHT"
7"SHAMAN"
8"MAGE"
9"WARLOCK"
10"DRUID"

Returns None

Example

StatLogic:GetClassIdOrName("WARRIOR") -- 1
StatLogic:GetClassIdOrName(10) -- "DRUID"

string or number number

:GetCritFromAgi(agi [, class] [, level])

Arguments

agi
number - Agility
class
string or number - ClassID or "ClassName". Default: PlayerClass
See :GetClassIdOrName(class) for valid class values.
level
number - Level used in calculations. Default: player's level

Notes

  • CritPerAgi values reverse engineered by Whitetooth (hotdogee [at] gmail [dot] com)
  • Calculates the melee/ranged crit chance from agility for given class and level.

Returns

crit
number - Melee/ranged crit percentage
statid
string - "MELEE_CRIT"

Example

local crit = StatLogic:GetCritFromAgi(1) -- GetCritPerAgi
local crit = StatLogic:GetCritFromAgi(10)
local crit = StatLogic:GetCritFromAgi(10, "WARRIOR")
local crit = StatLogic:GetCritFromAgi(10, nil, 70)
local crit = StatLogic:GetCritFromAgi(10, "WARRIOR", 70)

:GetDiff(item , diff1 , diff2 , ignoreEnchant , ignoreGem , red , yellow , blue , meta)

Arguments

item
number or string or table - tooltip or itemId or "itemString" or "itemName" or "itemLink"
diff1
table - Stat difference of item and equipped item 1 are writen to this table if provided
diff2
table - Stat difference of item and equipped item 2 are writen to this table if provided
ignoreEnchant
boolean - Ignore enchants when calculating stat diffrences
ignoreGem
boolean - Ignore gems when calculating stat diffrences
red
number or string - gemID to replace a red socket
yellow
number or string - gemID to replace a yellow socket
blue
number or string - gemID to replace a blue socket
meta
number or string - gemID to replace a meta socket

Notes

  • Calculates the stat diffrence from the specified item and your currently equipped items.
  • item:
tooltip
table - The tooltip showing the item
itemId
number - The numeric ID of the item. ie. 12345
"itemString"
string - The full item ID in string format, e.g. "item:12345:0:0:0:0:0:0:0".
Also supports partial itemStrings, by filling up any missing ":x" value with ":0", e.g. "item:12345:0:0:0"
"itemName"
string - The Name of the Item, ex: "Hearthstone"
The item must have been equiped, in your bags or in your bank once in this session for this to work.
"itemLink"
string - The itemLink, when Shift-Clicking items.

Returns

diff1
table - The table with stat diff values for item 1
{
["STAT_ID1"] = value,
["STAT_ID2"] = value,
}
diff2
table - The table with stat diff values for item 2
{
["STAT_ID1"] = value,
["STAT_ID2"] = value,
}

Example

StatLogic:GetDiff(21417, {}) -- Ring of Unspoken Names
StatLogic:GetDiff(21452) -- Staff of the Ruins

:GetDiffID(item , ignoreEnchant , ignoreGem , red , yellow , blue , meta)

Arguments

item
number or string or table - tooltip or itemId or "itemString" or "itemName" or "itemLink"
ignoreEnchant
boolean - Ignore enchants when calculating the id if true
ignoreGem
boolean - Ignore gems when calculating the id if true
red
number or string - gemID to replace a red socket
yellow
number or string - gemID to replace a yellow socket
blue
number or string - gemID to replace a blue socket
meta
number or string - gemID to replace a meta socket

Notes

  • Returns a unique identification string of the diff calculation, the identification string is made up of links concatenated together, can be used for cache indexing
  • item:
tooltip
table - The tooltip showing the item
itemId
number - The numeric ID of the item. ie. 12345
"itemString"
string - The full item ID in string format, e.g. "item:12345:0:0:0:0:0:0:0".
Also supports partial itemStrings, by filling up any missing ":x" value with ":0", e.g. "item:12345:0:0:0"
"itemName"
string - The Name of the Item, ex: "Hearthstone"
The item must have been equiped, in your bags or in your bank once in this session for this to work.
"itemLink"
string - The itemLink, when Shift-Clicking items.

Returns

id
string - a unique identification string of the diff calculation, for use as cache key
link
string - link of main item
linkDiff1
string - link of compare item 1
linkDiff2
string - link of compare item 2

Example

StatLogic:GetDiffID(21417) -- Ring of Unspoken Names
StatLogic:GetDiffID("item:18832:2564:0:0:0:0:0:0", true, true) -- Brutality Blade with +15 agi enchant
http://www.wowwiki.com/EnchantId

:GetDodgeChanceBeforeDR()

Notes

  • Calculates your current Dodge% before diminishing returns.
  • Dodge% = modDodge + drFreeDodge
  • drFreeDodge includes:
    • Base dodge
    • Dodge from base agility
    • Dodge modifier from base defense
    • Dodge modifers from talents or spells
  • modDodge includes
    • Dodge from dodge rating
    • Dodge from additional defense
    • Dodge from additional dodge

Returns

modDodge
number - The part that is affected by diminishing returns.
drFreeDodge
number - The part that isn't affected by diminishing returns.

Example

local modDodge, drFreeDodge = StatLogic:GetDodgeChanceBeforeDR()

:GetDodgeFromAgi(agi)

Arguments

agi
number - Agility

Notes

  • Calculates the dodge chance from agility for your current class and level.
  • Only works for your currect class and current level, does not support class and level args.

Returns

dodge
number - Dodge percentage
statid
string - "DODGE"

Example

local dodge = StatLogic:GetDodgeFromAgi(1) -- GetDodgePerAgi
local dodge = StatLogic:GetDodgeFromAgi(10)

:GetDodgePerAgi()

Notes

  • Formula by Whitetooth (hotdogee [at] gmail [dot] com)
  • Calculates the dodge percentage per agility for your current class and level.
  • Only works for your currect class and current level, does not support class and level args.
  • Calculations got a bit more complicated with the introduction of the avoidance DR in WotLK, these are the values we know or can be calculated easily:
    • D'=Total Dodge% after DR
    • D_r=Dodge from Defense and Dodge Rating before DR
    • D_b=Dodge unaffected by DR (BaseDodge + Dodge from talent/buffs + Lower then normal defense correction)
    • A=Total Agility
    • A_b=Base Agility (This is what you have with no gear on)
    • A_g=Total Agility - Base Agility
    • Let d be the Dodge/Agi value we are going to calculate.
  1     1     k 
 --- = --- + --- 
  x'    c     x 

 x'=D'-D_b-A_b*d 
 x=A_g*d+D_r 

 1/(D'-D_b-A_b*d)=1/C_d+k/(A_g*d+D_r)=(A_g*d+D_r+C_d*k)/(C_d*A_g*d+C_d*D_r) 

 C_d*A_g*d+C_d*D_r=[(D'-D_b)-A_b*d]*[Ag*d+(D_r+C_d*k)] 

 After rearranging the terms, we get an equation of type a*d^2+b*d+c where 
 a=-A_g*A_b 
 b=A_g(D'-D_b)-A_b(D_r+C_d*k)-C_dA_g 
 c=(D'-D_b)(D_r+C_d*k)-C_d*D_r 
    • Dodge/Agi=(-b-(b^2-4ac)^0.5)/(2a)

Returns

dodge
number - Dodge percentage per agility
statid
string - "DODGE"

Example

local dodge, statid = StatLogic:GetDodgePerAgi()

string number

:GetEffectFromDefense([defense] [, attackerLevel])

Arguments

defense
string - Total defense value. Default: player's armor value
attackerLevel
number - Attacker level. Default: player's level

Notes

  • Calculates the effective avoidance% from defense (before diminishing returns) for given attacker level

Returns

effect
number - 0.04% per effective defense.

Example

local effect = StatLogic:GetEffectFromDefense(415, 83) -- 0

number

:GetEffectFromRating(rating , id [, level])

Arguments

rating
number - Rating value
id
number - Rating ID as defined in PaperDollFrame.lua
level
number - Level used in calculations. Default: player's level

Notes

  • Combat Rating formula and constants derived by Whitetooth (hotdogee [at] gmail [dot] com)
  • Calculates the stat effects from ratings for any level.
  • id: Rating ID as definded in PaperDollFrame.lua
CR_WEAPON_SKILL = 1
CR_DEFENSE_SKILL = 2
CR_DODGE = 3
CR_PARRY = 4
CR_BLOCK = 5
CR_HIT_MELEE = 6
CR_HIT_RANGED = 7
CR_HIT_SPELL = 8
CR_CRIT_MELEE = 9
CR_CRIT_RANGED = 10
CR_CRIT_SPELL = 11
CR_HIT_TAKEN_MELEE = 12
CR_HIT_TAKEN_RANGED = 13
CR_HIT_TAKEN_SPELL = 14
CR_CRIT_TAKEN_MELEE = 15
CR_CRIT_TAKEN_RANGED = 16
CR_CRIT_TAKEN_SPELL = 17
CR_HASTE_MELEE = 18
CR_HASTE_RANGED = 19
CR_HASTE_SPELL = 20
CR_WEAPON_SKILL_MAINHAND = 21
CR_WEAPON_SKILL_OFFHAND = 22
CR_WEAPON_SKILL_RANGED = 23
CR_EXPERTISE = 24
CR_ARMOR_PENETRATION = 25
  • The Combat Rating formula:
    • Percentage = Rating / RatingBase / H
      • Level 1 to 10: H = 2/52
      • Level 10 to 60: H = (level-8)/52
      • Level 60 to 70: H = 82/(262-3*level)
      • Level 70 to 80: H = (82/52)*(131/63)^((level-70)/10)
RatingIDRatingBase
CR_WEAPON_SKILL2.5
CR_DEFENSE_SKILL1.5
CR_DODGE12
CR_PARRY15
CR_BLOCK5
CR_HIT_MELEE10
CR_HIT_RANGED10
CR_HIT_SPELL8
CR_CRIT_MELEE14
CR_CRIT_RANGED14
CR_CRIT_SPELL14
CR_HIT_TAKEN_MELEE10
CR_HIT_TAKEN_RANGED10
CR_HIT_TAKEN_SPELL8
CR_CRIT_TAKEN_MELEE25
CR_CRIT_TAKEN_RANGED25
CR_CRIT_TAKEN_SPELL25
CR_HASTE_MELEE10
CR_HASTE_RANGED10
CR_HASTE_SPELL10
CR_WEAPON_SKILL_MAINHAND2.5
CR_WEAPON_SKILL_OFFHAND2.5
CR_WEAPON_SKILL_RANGED2.5
CR_EXPERTISE2.5
CR_ARMOR_PENETRATION4.69512176513672
  • Parry Rating, Defense Rating, Block Rating and Resilience: Low-level players will now convert these ratings into their corresponding defensive stats at the same rate as level 34 players.

Returns

effect
number - Effect value
effect name
string - Stat ID of converted effect, ex: "DODGE", "PARRY"

Example

StatLogic:GetEffectFromRating(10, CR_DODGE)
StatLogic:GetEffectFromRating(10, CR_DODGE, 70)

:GetGemID(item)

Arguments

item
number or string or table - tooltip or itemId or "itemString" or "itemName" or "itemLink"

Notes

  • Returns the gemID and gemText of a gem for use in links
  • item:
tooltip
table - The tooltip showing the item
itemId
number - The numeric ID of the item. ie. 12345
"itemString"
string - The full item ID in string format, e.g. "item:12345:0:0:0:0:0:0:0".
Also supports partial itemStrings, by filling up any missing ":x" value with ":0", e.g. "item:12345:0:0:0"
"itemName"
string - The Name of the Item, ex: "Hearthstone"
The item must have been equiped, in your bags or in your bank once in this session for this to work.
"itemLink"
string - The itemLink, when Shift-Clicking items.

Returns

gemID
number - The gemID of this gem
gemText
string - The text shown in the tooltip when socketed in an item

Example

local gemID, gemText = StatLogic:GetGemID(28363)

string or number

:GetHealthRegenFromSpi(spi [, class])

Arguments

spi
number - Spirit
class
string or number - ClassID or "ClassName". Default: PlayerClass
See :GetClassIdOrName(class) for valid class values.

Notes

  • HealthRegenPerSpi values derived by Whitetooth (hotdogee [at] gmail [dot] com)
  • Calculates the health regen per 5 seconds when out of combat from spirit for given class.
  • Player level does not effect health regen per spirit.

Returns

hp5oc
number - Health regen per 5 seconds when out of combat
statid
string - "HEALTH_REG_OUT_OF_COMBAT"

Example

local hp5oc = StatLogic:GetHealthRegenFromSpi(1) -- GetHealthRegenPerSpi
local hp5oc = StatLogic:GetHealthRegenFromSpi(10)
local hp5oc = StatLogic:GetHealthRegenFromSpi(10, "MAGE")

number number

:GetNormalManaRegenFromSpi(spi [, int] [, level])

Arguments

spi
number - Spirit
int
number - Intellect. Default: player's intellect
level
number - Level used in calculations. Default: player's level

Notes

  • Formula and BASE_REGEN values derived by Whitetooth (hotdogee [at] gmail [dot] com)
  • Calculates the mana regen per 5 seconds from spirit when out of 5 second rule for given intellect and level.
  • Player class is no longer a parameter
  • ManaRegen(SPI, INT, LEVEL) = (0.001+SPI*BASE_REGEN[LEVEL]*(INT^0.5))*5

Returns

mp5o5sr
number - Mana regen per 5 seconds when out of 5 second rule
statid
string - "MANA_REG_NOT_CASTING"

Example

	local mp5o5sr = StatLogic:GetNormalManaRegenFromSpi(1) -- GetNormalManaRegenPerSpi
	local mp5o5sr = StatLogic:GetNormalManaRegenFromSpi(10, 15)
	local mp5o5sr = StatLogic:GetNormalManaRegenFromSpi(10, 15, 70)
}

:GetParryChanceBeforeDR()

Notes

  • Calculates your current Parry% before diminishing returns.
  • Parry% = modParry + drFreeParry
  • drFreeParry includes:
    • Base parry
    • Parry from base agility
    • Parry modifier from base defense
    • Parry modifers from talents or spells
  • modParry includes
    • Parry from parry rating
    • Parry from additional defense
    • Parry from additional parry

Returns

modParry
number - The part that is affected by diminishing returns.
drFreeParry
number - The part that isn't affected by diminishing returns.

Example

local modParry, drFreeParry = StatLogic:GetParryChanceBeforeDR()

string or number

:GetRAPFromAgi(agi [, class])

Arguments

agi
number - Agility
class
string or number - ClassID or "ClassName". Default: PlayerClass
See :GetClassIdOrName(class) for valid class values.

Notes

  • Calculates the ranged attack power from agility for given class.

Returns

rap
number - Ranged attack power
statid
string - "RANGED_AP"

Example

local rap = StatLogic:GetRAPFromAgi(1) -- GetRAPPerAgi
local rap = StatLogic:GetRAPFromAgi(10)
local rap = StatLogic:GetRAPFromAgi(10, "WARRIOR")

string or number

:GetRAPPerAgi([class])

Arguments

class
string or number - ClassID or "ClassName". Default: PlayerClass
See :GetClassIdOrName(class) for valid class values.

Notes

  • Gets the ranged attack power per agility for given class.
  • Player level does not effect ranged attack power per agility.

Returns

rap
number - Ranged attack power per agility
statid
string - "RANGED_AP"

Example

local rapPerAgi = StatLogic:GetRAPPerAgi()
local rapPerAgi = StatLogic:GetRAPPerAgi("HUNTER")

:GetRatingIdOrStatId(rating)

Arguments

rating
number or string - RatingID or "StatID"

Notes

  • Converts RatingID to and from "StatID"
  • rating:
RatingID
number - As defined in PaperDollFrame.lua of Blizzard default ui
"StatID"
string - The the key values of the DisplayLocale table in StatLogic
RatingID"StatID"
CR_WEAPON_SKILL"WEAPON_RATING"
CR_DEFENSE_SKILL"DEFENSE_RATING"
CR_DODGE"DODGE_RATING"
CR_PARRY"PARRY_RATING"
CR_BLOCK"BLOCK_RATING"
CR_HIT_MELEE"MELEE_HIT_RATING"
CR_HIT_RANGED"RANGED_HIT_RATING"
CR_HIT_SPELL"SPELL_HIT_RATING"
CR_CRIT_MELEE"MELEE_CRIT_RATING"
CR_CRIT_RANGED"RANGED_CRIT_RATING"
CR_CRIT_SPELL"SPELL_CRIT_RATING"
CR_HIT_TAKEN_MELEE"MELEE_HIT_AVOID_RATING"
CR_HIT_TAKEN_RANGED"RANGED_HIT_AVOID_RATING"
CR_HIT_TAKEN_SPELL"SPELL_HIT_AVOID_RATING"
CR_CRIT_TAKEN_MELEE"MELEE_CRIT_AVOID_RATING"
CR_CRIT_TAKEN_RANGED"RANGED_CRIT_AVOID_RATING"
CR_CRIT_TAKEN_SPELL"SPELL_CRIT_AVOID_RATING"
CR_HASTE_MELEE"MELEE_HASTE_RATING"
CR_HASTE_RANGED"RANGED_HASTE_RATING"
CR_HASTE_SPELL"SPELL_HASTE_RATING"
CR_WEAPON_SKILL_MAINHAND"MAINHAND_WEAPON_RATING"
CR_WEAPON_SKILL_OFFHAND"OFFHAND_WEAPON_RATING"
CR_WEAPON_SKILL_RANGED"RANGED_WEAPON_RATING"
CR_EXPERTISE"EXPERTISE_RATING"
CR_ARMOR_PENETRATION"ARMOR_PENETRATION_RATING"

Returns None

Example

StatLogic:GetRatingIdOrStatId("CR_WEAPON_SKILL") -- 1
StatLogic:GetRatingIdOrStatId("DEFENSE_RATING") -- 2
StatLogic:GetRatingIdOrStatId("DODGE_RATING") -- 3
StatLogic:GetRatingIdOrStatId(CR_PARRY) -- "PARRY_RATING"

string number

:GetReductionFromArmor([armor] [, attackerLevel])

Arguments

armor
string - Armor value. Default: player's armor value
attackerLevel
number - Attacker level. Default: player's level

Notes

  • Calculates the damage reduction from armor for given attacker level.

Returns

damageRecudtion
number - Damage reduction value from 0 to 1. (not percentage)

Example

local damageRecudtion = StatLogic:GetReductionFromArmor(35000, 80) -- 0.69676006569452

string or number number

:GetSpellCritFromInt(int [, class] [, level])

Arguments

int
number - Intellect
class
string or number - ClassID or "ClassName". Default: PlayerClass
See :GetClassIdOrName(class) for valid class values.
level
number - Level used in calculations. Default: player's level

Notes

  • SpellCritPerInt values reverse engineered by Whitetooth (hotdogee [at] gmail [dot] com)
  • Calculates the spell crit chance from intellect for given class and level.

Returns

spellcrit
number - Spell crit percentage
statid
string - "SPELL_CRIT"

Example

local spellCrit = StatLogic:GetSpellCritFromInt(1) -- GetSpellCritPerInt
local spellCrit = StatLogic:GetSpellCritFromInt(10)
local spellCrit = StatLogic:GetSpellCritFromInt(10, "MAGE")
local spellCrit = StatLogic:GetSpellCritFromInt(10, nil, 70)
local spellCrit = StatLogic:GetSpellCritFromInt(10, "MAGE", 70)

string

:GetStatMod("stat" [, school])

Arguments

"stat"
string - The type of stat mod you want to get
school
string - Certain stat mods require an extra school argument

Notes

  • Calculates various stat mod values from talents and buffs.
  • initialValue: sets the initial value for the stat mod.
if initialValue == 0, inter-mod operations are done with addition,
if initialValue == 1, inter-mod operations are done with multiplication,
  • finalAdjust: added to the final result before returning, so we can adjust the return value to be used in addition or multiplication.
for addition: initialValue + finalAdjust = 0
for multiplication: initialValue + finalAdjust = 1
  • stat:
"StatMod"Initial valueFinal adjustschoo required
"ADD_CRIT_TAKEN"00Yes
"ADD_HIT_TAKEN"00Yes
"ADD_DODGE"00No
"ADD_AP_MOD_INT"00No
"ADD_AP_MOD_STA"00No
"ADD_AP_MOD_ARMOR"00No
"ADD_AP_MOD_SPELL_DMG"00No
"ADD_CR_PARRY_MOD_STR"00No
"ADD_MANA_REG_MOD_INT"00No
"ADD_RANGED_AP_MOD_INT"00No
"ADD_ARMOR_MOD_INT"00No
"ADD_SCHOOL_SP_MOD_SPI"00Yes
"ADD_SPELL_DMG_MOD_AP"00No
"ADD_SPELL_DMG_MOD_STA"00No
"ADD_SPELL_DMG_MOD_INT"00No
"ADD_SPELL_DMG_MOD_SPI"00No
"ADD_HEALING_MOD_AP"00No
"ADD_HEALING_MOD_STR"00No
"ADD_HEALING_MOD_AGI"00No
"ADD_HEALING_MOD_STA"00No
"ADD_HEALING_MOD_INT"00No
"ADD_HEALING_MOD_SPI"00No
"ADD_MANA_REG_MOD_NORMAL_MANA_REG"00No
"MOD_CRIT_DAMAGE_TAKEN"01Yes
"MOD_DMG_TAKEN"01Yes
"MOD_CRIT_DAMAGE"01Yes
"MOD_DMG"01Yes
"MOD_ARMOR"10No
"MOD_HEALTH"10No
"MOD_MANA"10No
"MOD_STR"01No
"MOD_AGI"01No
"MOD_STA"01No
"MOD_INT"01No
"MOD_SPI"01No
"MOD_BLOCK_VALUE"01No
"MOD_AP"01No
"MOD_RANGED_AP"01No
"MOD_SPELL_DMG"01No
"MOD_HEALING"01

Returns None

Example

StatLogic:GetClassIdOrName("MOD_STR")
StatLogic:GetClassIdOrName(10)

:GetStatNameFromID("stat")

Arguments

"stat"
string - "StatID". ex: "DODGE", "DODGE_RATING"

Notes

  • Returns localized names for stat

Returns

"longName"
string - The full name for stat.
"shortName"
string - The short name for stat.

Example

local longName, shortName = StatLogic:GetStatNameFromID("FIRE_RES") -- "Fire Resistance", "FR"

:GetSum(item , table)

Arguments

item
number or string or table - tooltip or itemId or "itemString" or "itemName" or "itemLink"
table
table - The sum of stat values are writen to this table if provided

Notes

  • Calculates the sum of all stats for a specified item.
  • item:
tooltip
table - The tooltip showing the item
itemId
number - The numeric ID of the item. ie. 12345
"itemString"
string - The full item ID in string format, e.g. "item:12345:0:0:0:0:0:0:0".
Also supports partial itemStrings, by filling up any missing ":x" value with ":0", e.g. "item:12345:0:0:0"
"itemName"
string - The Name of the Item, ex: "Hearthstone"
The item must have been equiped, in your bags or in your bank once in this session for this to work.
"itemLink"
string - The itemLink, when Shift-Clicking items.

Returns

sumTable
table - The table with stat sum values
{
["itemType"] = itemType,
["STAT_ID1"] = value,
["STAT_ID2"] = value,
}

Example

StatLogic:GetSum(21417) -- [Ring of Unspoken Names]
StatLogic:GetSum("item:28040:2717")
StatLogic:GetSum("item:19019:117") -- TF
StatLogic:GetSum("item:3185:0:0:0:0:0:1957") -- Acrobatic Staff of Frozen Wrath ID:3185:0:0:0:0:0:1957
StatLogic:GetSum(24396)
SetTip("item:3185:0:0:0:0:0:1957")
-- [Deadly Fire Opal] ID:30582 - Attack Power +8 and Critical Rating +5
-- [Gnomeregan Auto-Blocker 600] ID:29387
StatLogic:GetSum("item:30538:3011:2739:2739:2739:0") -- [Midnight Legguards] with enchant and gems
StatLogic:GetSum("item:30538:3011:2739:2739:2739:0") -- [Midnight Legguards] with enchant and gems

number or string number or string number or string number or string number or string

Arguments

"link"
string - "itemlink"
enc
number or string - enchantID to replace the current enchant. Default: no change
gem1
number or string - gemID to replace the first gem. Default: no change
gem2
number or string - gemID to replace the second gem. Default: no change
gem3
number or string - gemID to replace the third gem. Default: no change
gem4
number or string - gemID to replace the fourth gem. Default: no change

Notes

  • Add/Replace item's enchants or gems with given enchants or gems.

Returns

link
number - The modified link

Example

local link = StatLogic:ModEnchantGem("Hitem:31052:0:0:0:0:0:0:0", 1394)

Arguments

"link"
string - "itemlink"

Notes

  • Remove item's enchants.

Returns

link
number - The modified link

Example

local link = StatLogic:RemoveEnchant("Hitem:31052:425:525:525:525:525:0:0")

Arguments

"link"
string - "itemlink"

Notes

  • Remove item's gems and enchants.

Returns

link
number - The modified link

Example

local link = StatLogic:RemoveEnchantGem("Hitem:31052:425:525:525:525:525:0:0")

Arguments

"link"
string - "itemlink"

Notes

  • Remove item's gems.

Returns

link
number - The modified link

Example

local link = StatLogic:RemoveGem("Hitem:31052:425:525:525:525:525:0:0")

:SetTip(item)

Arguments

item
number or string - itemId or "itemString" or "itemName" or "itemLink"

Notes

  • This is a debugging tool for localizers
  • Displays item in ItemRefTooltip
  • item:
itemId
number - The numeric ID of the item. ie. 12345
"itemString"
string - The full item ID in string format, e.g. "item:12345:0:0:0:0:0:0:0".
Also supports partial itemStrings, by filling up any missing ":x" value with ":0", e.g. "item:12345:0:0:0"
"itemName"
string - The Name of the Item, ex: "Hearthstone"
The item must have been equiped, in your bags or in your bank once in this session for this to work.
"itemLink"
string - The itemLink, when Shift-Clicking items.

Returns None

Example

StatLogic:SetTip("item:3185:0:0:0:0:0:1957")

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

  • 1 comment
  • Avatar of AesirRising AesirRising May 18, 2009 at 07:52 UTC - 0 likes

    RatingsBuster uses this lib. Curse Client fails to install it when the option is set to install libraries separately. One work-around, while we await resolution from the Ratings Buster author, is to install the library stand-alone. But you can't install this library through Curse Client at all because it has not been tagged beta or release at least once. r50, and still Alpha. Probably wouldn't be an awful idea to bite the bullet and tag one of these bad boys as beta, since I think four addons use it now in production.

  • 1 comment

Facts

Date created
Dec 30, 2008
Category
Last update
Oct 20, 2010
Development stage
Abandoned
Language
  • deDE
  • enUS
  • esES
  • frFR
  • koKR
  • ruRU
  • zhCN
  • zhTW
License
GNU Lesser General Public License version 3 (LGPLv3)
Reverse relationships
5
Downloads
58,950
Recent files
  • A: r112 for 3.3.5 Oct 20, 2010
  • A: r111 for 3.3.5 Oct 16, 2010
  • A: r110 for 3.3.5 Oct 15, 2010
  • A: r109 for 3.3.5 Oct 09, 2010
  • A: r108 for 3.3.5 Oct 06, 2010

Authors