feat(class): add CoA custom-class stat-summary defaults via CoAClassPrimaryStats
release / release (push) Successful in 2s
release / release (push) Successful in 2s
Copy CoAClassSpecData.lua into the addon folder and load it before RatingBuster.lua in the .toc. After the vanilla if/elseif ladder in applyClassProfileDefaults(), a new CoA branch checks CoAClassPrimaryStats[cls]: if the player's token is a CoA custom class, enable the stat-summary keys that match the class's union of primary stats (Agility→physical melee block, Strength→physical melee block, Intellect→spell block, Spirit→healing/mp5 block, Stamina→health/sta). Vanilla classes and unrelated settings are not touched.
This commit is contained in:
@@ -0,0 +1,143 @@
|
||||
-- CoAClassSpecData.lua — GENERATED by coa-db/tools/gen_coa_class_spec_lua.py
|
||||
-- Source of truth: coa-db/data/class_spec_meta.json (class.file_string tokens + wiki specs).
|
||||
-- Do not hand-edit; regenerate from coa-db. Neutral stat keys; each addon maps them.
|
||||
-- Keyed by the in-game class token (2nd return of UnitClass), e.g. Templar=MONK.
|
||||
CoAClassSpec = {
|
||||
["BARBARIAN"] = { name="Barbarian", classId=12, specs={
|
||||
{ name="Headhunting", roles={"RANGED"}, primaryStat="Agility", weights={ Agility=1, RangedAttackPower=0.5, CritRating=0.55, HitRating=0.6, HasteRating=0.5 } },
|
||||
{ name="Brutality", roles={"MELEE"}, primaryStat="Agility", weights={ Agility=1, AttackPower=0.5, CritRating=0.55, HitRating=0.6, HasteRating=0.5, ArmorPenetration=0.5 } },
|
||||
{ name="Ancestry", roles={"MELEE","SUPPORT"}, primaryStat="Agility", weights={ Agility=1, AttackPower=0.5, CritRating=0.55, HitRating=0.6, HasteRating=0.5, ArmorPenetration=0.5 } },
|
||||
}},
|
||||
["WITCHDOCTOR"] = { name="Witch Doctor", classId=13, specs={
|
||||
{ name="Shadowhunting", roles={"RANGED"}, primaryStat="Agility", weights={ Agility=1, RangedAttackPower=0.5, CritRating=0.55, HitRating=0.6, HasteRating=0.5 } },
|
||||
{ name="Voodoo", roles={"CASTER"}, primaryStat="Intellect", weights={ Intellect=1, SpellPower=0.8, HitRating=0.7, CritRating=0.55, HasteRating=0.55 } },
|
||||
{ name="Brewing", roles={"HEALER"}, primaryStat="Spirit", weights={ Spirit=1, SpellPower=0.8, CritRating=0.5, HasteRating=0.5, Mp5=0.5, Intellect=0.55 } },
|
||||
}},
|
||||
["DEMONHUNTER"] = { name="Felsworn", classId=14, specs={
|
||||
{ name="Slayer", roles={"MELEE"}, primaryStat="Agility", weights={ Agility=1, AttackPower=0.5, CritRating=0.55, HitRating=0.6, HasteRating=0.5, ArmorPenetration=0.5 } },
|
||||
{ name="Infernal", roles={"CASTER"}, primaryStat="Intellect", weights={ Intellect=1, SpellPower=0.8, HitRating=0.7, CritRating=0.55, HasteRating=0.55 } },
|
||||
{ name="Tyrant", roles={"TANK"}, primaryStat="Agility", weights={ Stamina=1, Armor=0.6, Dodge=0.55, Parry=0.55, Defense=0.6, Agility=0.4 } },
|
||||
}},
|
||||
["WITCHHUNTER"] = { name="Witch Hunter", classId=15, specs={
|
||||
{ name="Boltslinger", roles={"RANGED"}, primaryStat="Agility", weights={ Agility=1, RangedAttackPower=0.5, CritRating=0.55, HitRating=0.6, HasteRating=0.5 } },
|
||||
{ name="Darkness", roles={"RANGED"}, primaryStat="Agility", weights={ Agility=1, RangedAttackPower=0.5, CritRating=0.55, HitRating=0.6, HasteRating=0.5 } },
|
||||
{ name="Inquisition", roles={"MELEE"}, primaryStat="Agility", weights={ Agility=1, AttackPower=0.5, CritRating=0.55, HitRating=0.6, HasteRating=0.5, ArmorPenetration=0.5 } },
|
||||
{ name="Black Knight", roles={"TANK"}, primaryStat="Agility", weights={ Stamina=1, Armor=0.6, Dodge=0.55, Parry=0.55, Defense=0.6, Agility=0.4 } },
|
||||
}},
|
||||
["STORMBRINGER"] = { name="Stormbringer", classId=16, specs={
|
||||
{ name="Maelstrom", roles={"CASTER"}, primaryStat="Intellect", weights={ Intellect=1, SpellPower=0.8, HitRating=0.7, CritRating=0.55, HasteRating=0.55 } },
|
||||
{ name="Lightning", roles={"CASTER"}, primaryStat="Intellect", weights={ Intellect=1, SpellPower=0.8, HitRating=0.7, CritRating=0.55, HasteRating=0.55 } },
|
||||
{ name="Wind", roles={"CASTER","SUPPORT"}, primaryStat="Intellect", weights={ Intellect=1, SpellPower=0.8, HitRating=0.7, CritRating=0.55, HasteRating=0.55 } },
|
||||
}},
|
||||
["FLESHWARDEN"] = { name="Knight of Xoroth", classId=17, specs={
|
||||
{ name="Hellfire", roles={"MELEE"}, primaryStat="Strength", weights={ Strength=1, AttackPower=0.5, CritRating=0.55, HitRating=0.6, HasteRating=0.5, ArmorPenetration=0.5 } },
|
||||
{ name="Defiance", roles={"TANK"}, primaryStat="Strength", weights={ Stamina=1, Armor=0.6, Dodge=0.55, Parry=0.55, Defense=0.6, Strength=0.4 } },
|
||||
{ name="War", roles={"MELEE"}, primaryStat="Strength", weights={ Strength=1, AttackPower=0.5, CritRating=0.55, HitRating=0.6, HasteRating=0.5, ArmorPenetration=0.5 } },
|
||||
}},
|
||||
["GUARDIAN"] = { name="Guardian", classId=18, specs={
|
||||
{ name="Gladiator", roles={"MELEE"}, primaryStat="Strength", weights={ Strength=1, AttackPower=0.5, CritRating=0.55, HitRating=0.6, HasteRating=0.5, ArmorPenetration=0.5 } },
|
||||
{ name="Inspiration", roles={"MELEE","SUPPORT"}, primaryStat="Strength", weights={ Strength=1, AttackPower=0.5, CritRating=0.55, HitRating=0.6, HasteRating=0.5, ArmorPenetration=0.5 } },
|
||||
{ name="Vanguard", roles={"TANK"}, primaryStat="Strength", weights={ Stamina=1, Armor=0.6, Dodge=0.55, Parry=0.55, Defense=0.6, Strength=0.4 } },
|
||||
}},
|
||||
["MONK"] = { name="Templar", classId=19, specs={
|
||||
{ name="Oathkeeper", roles={"TANK"}, primaryStat="Agility", weights={ Stamina=1, Armor=0.6, Dodge=0.55, Parry=0.55, Defense=0.6, Agility=0.4 } },
|
||||
{ name="Zealot", roles={"MELEE"}, primaryStat="Agility", weights={ Agility=1, AttackPower=0.5, CritRating=0.55, HitRating=0.6, HasteRating=0.5, ArmorPenetration=0.5 } },
|
||||
{ name="Crusader", roles={"MELEE"}, primaryStat="Agility", weights={ Agility=1, AttackPower=0.5, CritRating=0.55, HitRating=0.6, HasteRating=0.5, ArmorPenetration=0.5 } },
|
||||
}},
|
||||
["SONOFARUGAL"] = { name="Bloodmage", classId=20, specs={
|
||||
{ name="Fleshweaver", roles={"SUPPORT"}, primaryStat="Spirit", weights={ Spirit=1, SpellPower=0.8, HitRating=0.7, CritRating=0.55, HasteRating=0.55 } },
|
||||
{ name="Sanguine", roles={"CASTER"}, primaryStat="Spirit", weights={ Spirit=1, SpellPower=0.8, HitRating=0.7, CritRating=0.55, HasteRating=0.55 } },
|
||||
{ name="Accursed", roles={"MELEE","CASTER"}, primaryStat="Agility", weights={ Agility=1, AttackPower=0.5, CritRating=0.55, HitRating=0.6, HasteRating=0.5, ArmorPenetration=0.5 } },
|
||||
{ name="Eternal", roles={"TANK"}, primaryStat="Agility", weights={ Stamina=1, Armor=0.6, Dodge=0.55, Parry=0.55, Defense=0.6, Agility=0.4 } },
|
||||
}},
|
||||
["RANGER"] = { name="Ranger", classId=21, specs={
|
||||
{ name="Archery", roles={"RANGED"}, primaryStat="Agility", weights={ Agility=1, RangedAttackPower=0.5, CritRating=0.55, HitRating=0.6, HasteRating=0.5 } },
|
||||
{ name="Farstrider", roles={"RANGED","SUPPORT"}, primaryStat="Agility", weights={ Agility=1, RangedAttackPower=0.5, CritRating=0.55, HitRating=0.6, HasteRating=0.5 } },
|
||||
{ name="Brigand", roles={"MELEE"}, primaryStat="Agility", weights={ Agility=1, AttackPower=0.5, CritRating=0.55, HitRating=0.6, HasteRating=0.5, ArmorPenetration=0.5 } },
|
||||
}},
|
||||
["CHRONOMANCER"] = { name="Chronomancer", classId=22, specs={
|
||||
{ name="Infinite", roles={"CASTER"}, primaryStat="Spirit", weights={ Spirit=1, SpellPower=0.8, HitRating=0.7, CritRating=0.55, HasteRating=0.55 } },
|
||||
{ name="Time", roles={"HEALER"}, primaryStat="Spirit", weights={ Spirit=1, SpellPower=0.8, CritRating=0.5, HasteRating=0.5, Mp5=0.5, Intellect=0.55 } },
|
||||
{ name="Artificer", roles={"RANGED"}, primaryStat="Spirit", weights={ Spirit=1, RangedAttackPower=0.5, CritRating=0.55, HitRating=0.6, HasteRating=0.5 } },
|
||||
}},
|
||||
["NECROMANCER"] = { name="Necromancer", classId=23, specs={
|
||||
{ name="Death", roles={"CASTER"}, primaryStat="Intellect", weights={ Intellect=1, SpellPower=0.8, HitRating=0.7, CritRating=0.55, HasteRating=0.55 } },
|
||||
{ name="Animation", roles={"CASTER"}, primaryStat="Intellect", weights={ Intellect=1, SpellPower=0.8, HitRating=0.7, CritRating=0.55, HasteRating=0.55 } },
|
||||
{ name="Rime", roles={"CASTER"}, primaryStat="Intellect", weights={ Intellect=1, SpellPower=0.8, HitRating=0.7, CritRating=0.55, HasteRating=0.55 } },
|
||||
}},
|
||||
["PYROMANCER"] = { name="Pyromancer", classId=24, specs={
|
||||
{ name="Incineration", roles={"CASTER"}, primaryStat="Intellect", weights={ Intellect=1, SpellPower=0.8, HitRating=0.7, CritRating=0.55, HasteRating=0.55 } },
|
||||
{ name="Flameweaving", roles={"HEALER"}, primaryStat="Spirit", weights={ Spirit=1, SpellPower=0.8, CritRating=0.5, HasteRating=0.5, Mp5=0.5, Intellect=0.55 } },
|
||||
{ name="Draconic", roles={"CASTER"}, primaryStat="Intellect", weights={ Intellect=1, SpellPower=0.8, HitRating=0.7, CritRating=0.55, HasteRating=0.55 } },
|
||||
}},
|
||||
["CULTIST"] = { name="Cultist", classId=25, specs={
|
||||
{ name="Heretic", roles={"HEALER"}, primaryStat="Intellect", weights={ Intellect=1, SpellPower=0.8, CritRating=0.5, HasteRating=0.5, Mp5=0.5, Spirit=0.55 } },
|
||||
{ name="Corruption", roles={"CASTER"}, primaryStat="Intellect", weights={ Intellect=1, SpellPower=0.8, HitRating=0.7, CritRating=0.55, HasteRating=0.55 } },
|
||||
{ name="Godblade", roles={"MELEE"}, primaryStat="Strength", weights={ Strength=1, AttackPower=0.5, CritRating=0.55, HitRating=0.6, HasteRating=0.5, ArmorPenetration=0.5 } },
|
||||
{ name="Dreadnought", roles={"TANK"}, primaryStat="Strength", weights={ Stamina=1, Armor=0.6, Dodge=0.55, Parry=0.55, Defense=0.6, Strength=0.4 } },
|
||||
}},
|
||||
["STARCALLER"] = { name="Starcaller", classId=26, specs={
|
||||
{ name="Sentinel", roles={"RANGED"}, primaryStat="Intellect", weights={ Intellect=1, SpellPower=0.8, HitRating=0.7, CritRating=0.55, HasteRating=0.55 } },
|
||||
{ name="Warden", roles={"MELEE"}, primaryStat="Intellect", weights={ Intellect=1, AttackPower=0.5, CritRating=0.55, HitRating=0.6, HasteRating=0.5, ArmorPenetration=0.5 } },
|
||||
{ name="Moon Priest", roles={"HEALER"}, primaryStat="Intellect", weights={ Intellect=1, SpellPower=0.8, CritRating=0.5, HasteRating=0.5, Mp5=0.5, Spirit=0.55 } },
|
||||
{ name="Moon Guard", roles={"TANK"}, primaryStat="Intellect", weights={ Stamina=1, Armor=0.6, Dodge=0.55, Parry=0.55, Defense=0.6, Intellect=0.4 } },
|
||||
}},
|
||||
["SUNCLERIC"] = { name="Sun Cleric", classId=27, specs={
|
||||
{ name="Piety", roles={"CASTER"}, primaryStat="Intellect", weights={ Intellect=1, SpellPower=0.8, HitRating=0.7, CritRating=0.55, HasteRating=0.55 } },
|
||||
{ name="Valkyrie", roles={"MELEE"}, primaryStat="Strength", weights={ Strength=1, AttackPower=0.5, CritRating=0.55, HitRating=0.6, HasteRating=0.5, ArmorPenetration=0.5 } },
|
||||
{ name="Seraphim", roles={"TANK"}, primaryStat="Strength", weights={ Stamina=1, Armor=0.6, Dodge=0.55, Parry=0.55, Defense=0.6, Strength=0.4 } },
|
||||
{ name="Blessings", roles={"HEALER"}, primaryStat="Intellect", weights={ Intellect=1, SpellPower=0.8, CritRating=0.5, HasteRating=0.5, Mp5=0.5, Spirit=0.55 } },
|
||||
}},
|
||||
["TINKER"] = { name="Tinker", classId=28, specs={
|
||||
{ name="Demolition", roles={"RANGED"}, primaryStat="Agility", weights={ Agility=1, RangedAttackPower=0.5, CritRating=0.55, HitRating=0.6, HasteRating=0.5 } },
|
||||
{ name="Mechanics", roles={"MELEE"}, primaryStat="Agility", weights={ Agility=1, AttackPower=0.5, CritRating=0.55, HitRating=0.6, HasteRating=0.5, ArmorPenetration=0.5 } },
|
||||
{ name="Invention", roles={"HEALER"}, primaryStat="Intellect", weights={ Intellect=1, SpellPower=0.8, CritRating=0.5, HasteRating=0.5, Mp5=0.5, Spirit=0.55 } },
|
||||
}},
|
||||
["PROPHET"] = { name="Venomancer", classId=29, specs={
|
||||
{ name="Fortitude", roles={"TANK"}, primaryStat="Intellect", weights={ Stamina=1, Armor=0.6, Dodge=0.55, Parry=0.55, Defense=0.6, Intellect=0.4 } },
|
||||
{ name="Stalking", roles={"MELEE"}, primaryStat="Intellect", weights={ Intellect=1, AttackPower=0.5, CritRating=0.55, HitRating=0.6, HasteRating=0.5, ArmorPenetration=0.5 } },
|
||||
{ name="Rot", roles={"CASTER"}, primaryStat="Intellect", weights={ Intellect=1, SpellPower=0.8, HitRating=0.7, CritRating=0.55, HasteRating=0.55 } },
|
||||
{ name="Vizier", roles={"HEALER"}, primaryStat="Intellect", weights={ Intellect=1, SpellPower=0.8, CritRating=0.5, HasteRating=0.5, Mp5=0.5, Spirit=0.55 } },
|
||||
}},
|
||||
["REAPER"] = { name="Reaper", classId=30, specs={
|
||||
{ name="Soul", roles={"MELEE"}, primaryStat="Strength", weights={ Strength=1, AttackPower=0.5, CritRating=0.55, HitRating=0.6, HasteRating=0.5, ArmorPenetration=0.5 } },
|
||||
{ name="Harvest", roles={"MELEE"}, primaryStat="Strength", weights={ Strength=1, AttackPower=0.5, CritRating=0.55, HitRating=0.6, HasteRating=0.5, ArmorPenetration=0.5 } },
|
||||
{ name="Domination", roles={"TANK"}, primaryStat="Strength", weights={ Stamina=1, Armor=0.6, Dodge=0.55, Parry=0.55, Defense=0.6, Strength=0.4 } },
|
||||
}},
|
||||
["WILDWALKER"] = { name="Primalist", classId=31, specs={
|
||||
{ name="Grovekeeper", roles={"SUPPORT"}, primaryStat="Strength", weights={ Strength=1, AttackPower=0.5, CritRating=0.55, HitRating=0.6, HasteRating=0.5, ArmorPenetration=0.5 } },
|
||||
{ name="Wildwalker", roles={"MELEE"}, primaryStat="Strength", weights={ Strength=1, AttackPower=0.5, CritRating=0.55, HitRating=0.6, HasteRating=0.5, ArmorPenetration=0.5 } },
|
||||
{ name="Mountain King", roles={"TANK"}, primaryStat="Strength", weights={ Stamina=1, Armor=0.6, Dodge=0.55, Parry=0.55, Defense=0.6, Strength=0.4 } },
|
||||
{ name="Geomancy", roles={"CASTER"}, primaryStat="Intellect", weights={ Intellect=1, SpellPower=0.8, HitRating=0.7, CritRating=0.55, HasteRating=0.55 } },
|
||||
}},
|
||||
["SPIRITMAGE"] = { name="Runemaster", classId=32, specs={
|
||||
{ name="Engravement", roles={"MELEE"}, primaryStat="Agility", weights={ Agility=1, AttackPower=0.5, CritRating=0.55, HitRating=0.6, HasteRating=0.5, ArmorPenetration=0.5 } },
|
||||
{ name="Glyphic", roles={"CASTER"}, primaryStat="Spirit", weights={ Spirit=1, SpellPower=0.8, HitRating=0.7, CritRating=0.55, HasteRating=0.55 } },
|
||||
{ name="Riftblade", roles={"MELEE"}, primaryStat="Agility", weights={ Agility=1, AttackPower=0.5, CritRating=0.55, HitRating=0.6, HasteRating=0.5, ArmorPenetration=0.5 } },
|
||||
}},
|
||||
}
|
||||
|
||||
CoAClassPrimaryStats = {
|
||||
["BARBARIAN"] = { "Agility" },
|
||||
["WITCHDOCTOR"] = { "Agility", "Intellect", "Spirit" },
|
||||
["DEMONHUNTER"] = { "Agility", "Intellect", "Stamina" },
|
||||
["WITCHHUNTER"] = { "Agility", "Intellect", "Stamina" },
|
||||
["STORMBRINGER"] = { "Intellect" },
|
||||
["FLESHWARDEN"] = { "Strength", "Intellect", "Stamina" },
|
||||
["GUARDIAN"] = { "Strength", "Stamina" },
|
||||
["MONK"] = { "Agility", "Stamina" },
|
||||
["SONOFARUGAL"] = { "Spirit", "Stamina", "Agility" },
|
||||
["RANGER"] = { "Agility" },
|
||||
["CHRONOMANCER"] = { "Spirit" },
|
||||
["NECROMANCER"] = { "Intellect" },
|
||||
["PYROMANCER"] = { "Intellect", "Spirit" },
|
||||
["CULTIST"] = { "Intellect", "Strength", "Stamina" },
|
||||
["STARCALLER"] = { "Intellect", "Stamina" },
|
||||
["SUNCLERIC"] = { "Intellect", "Strength", "Stamina" },
|
||||
["TINKER"] = { "Agility", "Intellect" },
|
||||
["PROPHET"] = { "Intellect", "Stamina" },
|
||||
["REAPER"] = { "Strength", "Stamina" },
|
||||
["WILDWALKER"] = { "Strength", "Intellect", "Stamina" },
|
||||
["SPIRITMAGE"] = { "Agility", "Spirit" },
|
||||
}
|
||||
|
||||
@@ -558,6 +558,68 @@ elseif cls == "DEATHKNIGHT" then
|
||||
profileDefault.showAPFromArmor = true
|
||||
profileDefault.sumIgnorePlate = false
|
||||
end
|
||||
|
||||
-- CoA custom classes: enable stat-summary defaults based on primary stats.
|
||||
-- CoAClassPrimaryStats is defined in CoAClassSpecData.lua (loaded before this file).
|
||||
if CoAClassPrimaryStats and CoAClassPrimaryStats[cls] then
|
||||
local stats = CoAClassPrimaryStats[cls]
|
||||
local hasAgi, hasStr, hasInt, hasSpi, hasSta = false, false, false, false, false
|
||||
for _, stat in ipairs(stats) do
|
||||
if stat == "Agility" then hasAgi = true end
|
||||
if stat == "Strength" then hasStr = true end
|
||||
if stat == "Intellect" then hasInt = true end
|
||||
if stat == "Spirit" then hasSpi = true end
|
||||
if stat == "Stamina" then hasSta = true end
|
||||
end
|
||||
-- Always: HP and resilience
|
||||
profileDefault.sumHP = true
|
||||
profileDefault.sumResilience = true
|
||||
if hasAgi then
|
||||
profileDefault.ratingPhysical = true
|
||||
profileDefault.sumAgi = true
|
||||
profileDefault.sumAP = true
|
||||
profileDefault.sumHit = true
|
||||
profileDefault.sumCrit = true
|
||||
profileDefault.sumHaste = true
|
||||
profileDefault.sumExpertise = true
|
||||
profileDefault.sumArmorPenetration = true
|
||||
end
|
||||
if hasStr then
|
||||
profileDefault.ratingPhysical = true
|
||||
profileDefault.sumStr = true
|
||||
profileDefault.sumAP = true
|
||||
profileDefault.sumHit = true
|
||||
profileDefault.sumCrit = true
|
||||
profileDefault.sumHaste = true
|
||||
profileDefault.sumExpertise = true
|
||||
profileDefault.sumArmorPenetration = true
|
||||
end
|
||||
if hasInt then
|
||||
profileDefault.ratingSpell = true
|
||||
profileDefault.sumMP = true
|
||||
profileDefault.sumInt = true
|
||||
profileDefault.sumSpellDmg = true
|
||||
profileDefault.sumSpellHit = true
|
||||
profileDefault.sumSpellCrit = true
|
||||
profileDefault.sumSpellHaste = true
|
||||
profileDefault.sumHealing = true
|
||||
profileDefault.sumMP5 = true
|
||||
profileDefault.showSpellDmgFromInt = true
|
||||
profileDefault.showMP5FromInt = true
|
||||
end
|
||||
if hasSpi then
|
||||
profileDefault.ratingSpell = true
|
||||
profileDefault.sumMP = true
|
||||
profileDefault.sumSpi = true
|
||||
profileDefault.sumHealing = true
|
||||
profileDefault.sumMP5 = true
|
||||
profileDefault.showMP5FromSpi = true
|
||||
profileDefault.showHealingFromSpi = true
|
||||
end
|
||||
if hasSta then
|
||||
profileDefault.sumSta = true
|
||||
end
|
||||
end
|
||||
end -- applyClassProfileDefaults
|
||||
|
||||
local defaults = {}
|
||||
|
||||
@@ -36,5 +36,8 @@ RatingBuster-Locale-frFR.lua
|
||||
RatingBuster-Locale-koKR.lua
|
||||
RatingBuster-Locale-esES.lua
|
||||
|
||||
# CoA class/spec data (must load before RatingBuster.lua) #
|
||||
CoAClassSpecData.lua
|
||||
|
||||
# Core #
|
||||
RatingBuster.lua
|
||||
Reference in New Issue
Block a user