You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
403 lines
27 KiB
403 lines
27 KiB
-- Pawn by Vger-Azjol-Nerub
|
|
-- www.vgermods.com
|
|
-- © 2006-2022 Travis Spomer. This mod is released under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 license.
|
|
-- See Readme.htm for more information.
|
|
--
|
|
-- Tooltip parsing strings
|
|
------------------------------------------------------------
|
|
|
|
-- For conciseness
|
|
local L = PawnLocal.TooltipParsing
|
|
|
|
if PawnLocal.ThousandsSeparator == "NBSP" then PawnLocal.ThousandsSeparator = "\194\160" end
|
|
local Key, Value
|
|
for Key, Value in pairs(L) do
|
|
L[Key] = gsub(Value, "#", "(-?[%%d%%., ]+)")
|
|
end
|
|
|
|
------------------------------------------------------------
|
|
-- Tooltip parsing expressions
|
|
------------------------------------------------------------
|
|
|
|
-- These strings indicate that a given line might contain multiple stats, such as complex enchantments
|
|
-- (ZG, AQ) and gems. These are sorted in priority order. If a string earlier in the table is present, any
|
|
-- string later in the table can be ignored.
|
|
PawnSeparators =
|
|
{
|
|
", ",
|
|
"/",
|
|
" & ",
|
|
" " .. L.MultiStatSeparator1 .. " ", -- and
|
|
}
|
|
|
|
-- Lines that match any of the following patterns will cause all further tooltip parsing to stop.
|
|
PawnKillLines =
|
|
{
|
|
"^ \n$", -- The blank line before set items before WoW 2.3
|
|
" %(%d+/%d+%)$", -- The (1/8) on set items for all versions of WoW
|
|
}
|
|
-- MobInfo-2 compatibility
|
|
if MI_LightBlue and MI_TXT_DROPPED_BY then
|
|
tinsert(PawnKillLines, "^" .. MI_LightBlue .. MI_TXT_DROPPED_BY)
|
|
end
|
|
|
|
-- Lines that begin with any of the following strings will not be searched for separator strings.
|
|
PawnSeparatorIgnorePrefixes =
|
|
{
|
|
'"', -- double quote
|
|
L.Equip,
|
|
L.Use,
|
|
L.ChanceOnHit,
|
|
}
|
|
|
|
-- This is a list of regular expression substitutions that Pawn performs to normalize stat names before running
|
|
-- them through the normal gauntlet of expressions.
|
|
PawnNormalizationRegexes =
|
|
{
|
|
{"^|c........(.+)$", "%1"}, -- "|cFF 0FF 0Heroic" --> "Heroic"
|
|
{"^([%w%s%.]+) %+(%d+)%%?$", "+%2 %1"}, -- "Stamina +5" --> "+5 Stamina"
|
|
{L.NormalizationEnchant, "%1"}, -- "Enchanted: +50 Strength" --> "+50 Strength" (ENCHANTED_TOOLTIP_LINE)
|
|
}
|
|
|
|
-- These regular expressions are used to parse item tooltips.
|
|
-- The first string is the regular expression to match. Stat values should be denoted with "(%d+)".
|
|
-- Subsequent strings follow this pattern: Stat, Number, Source
|
|
-- Stat is the name of a statistic.
|
|
-- Number is either the amount of that stat to include, or the 1-based index into the matches array produced by the regex.
|
|
-- If it's an index, it can also be negative to mean that the stat should be subtracted instead of added. If nil, defaults to 1.
|
|
-- Source is either PawnMultipleStatsFixed if Number is the amount of the stat, or PawnSingleStatMultiplier if Number is an
|
|
-- amount of the stat to multiply by the extracted number, or PawnMultipleStatsExtract or nil if Number is the matches array index.
|
|
-- Note that certain strings don't need to be translated: for example, the game defines
|
|
-- ITEM_BIND_ON_PICKUP to be "Binds when picked up" in English, and the correct string
|
|
-- in other languages automatically.
|
|
PawnRegexes =
|
|
{
|
|
-- ========================================
|
|
-- Common strings that are ignored (rare ones are at the bottom of the file)
|
|
-- ========================================
|
|
{L.HaventCollectedAppearance}, -- You haven't collected this appearance.
|
|
{PawnGameConstant(ITEM_QUALITY0_DESC)}, -- Poor
|
|
{PawnGameConstant(ITEM_QUALITY1_DESC)}, -- Common
|
|
{PawnGameConstant(ITEM_QUALITY2_DESC)}, -- Uncommon
|
|
{PawnGameConstant(ITEM_QUALITY3_DESC)}, -- Rare
|
|
{PawnGameConstant(ITEM_QUALITY4_DESC)}, -- Epic
|
|
{PawnGameConstant(ITEM_QUALITY5_DESC)}, -- Legendary
|
|
{PawnGameConstant(ITEM_QUALITY7_DESC)}, -- Heirloom
|
|
{L.RaidFinder}, -- Raid Finder
|
|
{L.Flexible}, -- Flexible raids
|
|
{L.Heroic}, -- Items from heroic dungeons
|
|
{L.Elite}, -- one version of Regail's Band of the Endless (http://www.wowhead.com/item=90517)
|
|
{L.HeroicElite}, -- one version of Regail's Band of the Endless (http://www.wowhead.com/item=90503)
|
|
{L.Thunderforged}, -- one version of Shoulders of the Crackling Protector (http://ptr.wowhead.com/item=96329)
|
|
{L.HeroicThunderforged}, -- one version of Shoulders of the Crackling Protector (http://ptr.wowhead.com/item=97073)
|
|
{L.Timeless}, -- level 535 version of Ordon Legend-Keeper Spaulders (http://ptr.wowhead.com/item=101925)
|
|
{L.Titanforged}, -- Legion items upgraded 15 item levels or more
|
|
{L.Warforged}, -- level 559 Black Blood of Y'Shaarj (http://www.wowhead.com/item=105399)
|
|
{L.HeroicWarforged}, -- level 572 Black Blood of Y'Shaarj (http://www.wowhead.com/item=105648)
|
|
{"^" .. ITEM_LEVEL}, -- Item Level 200
|
|
{L.UpgradeLevel}, -- Upgrade Level 0/2 (ITEM_UPGRADE_TOOLTIP_FORMAT)
|
|
{PawnGameConstantIgnoredPlaceholder(EQUIPMENT_SETS)}, -- String is from the Blizzard UI, but only used by Outfitter
|
|
{PawnGameConstant(ITEM_UNSELLABLE)}, -- No sell price
|
|
{PawnGameConstant(ITEM_SOULBOUND)}, -- Soulbound
|
|
{PawnGameConstant(ITEM_BIND_ON_EQUIP)}, -- Binds when equipped
|
|
{PawnGameConstant(ITEM_BIND_ON_PICKUP)}, -- Binds when picked up
|
|
{PawnGameConstant(ITEM_BIND_ON_USE)}, -- Binds when used
|
|
{PawnGameConstant(ITEM_BIND_TO_ACCOUNT)}, -- Binds to account
|
|
{PawnGameConstant(ITEM_ACCOUNTBOUND)}, -- Account Bound
|
|
{PawnGameConstant(ITEM_BIND_TO_BNETACCOUNT)}, -- Binds to Battle.net account (Polished Spaulders of Valor)
|
|
{PawnGameConstant(ITEM_BNETACCOUNTBOUND)}, -- Battle.net Account Bound (Polished Spaulders of Valor)
|
|
{"^" .. PawnGameConstantUnwrapped(ITEM_UNIQUE)}, -- Unique; leave off the $ for Unique (20)
|
|
{"^" .. PawnGameConstantUnwrapped(ITEM_UNIQUE_EQUIPPABLE)}, -- Unique-Equipped; leave off the $ for Unique-Equipped: Curios of the Shado-Pan Assault (1)
|
|
{"^" .. PawnGameConstantUnwrapped(ITEM_BIND_QUEST)}, -- Leave off the $ for MonkeyQuest mod compatibility
|
|
{PawnGameConstant(ITEM_STARTS_QUEST)}, -- This Item Begins a Quest
|
|
{L.MultiStatHeading}, -- Multiple stats (Zen Wild Jade)
|
|
{PawnGameConstant(PROFESSIONS_USED_IN_COOKING)}, -- Crafting Reagent
|
|
{PawnGameConstant(ITEM_CONJURED)}, -- Conjured Item
|
|
{PawnGameConstant(ITEM_PROSPECTABLE)}, -- Prospectable
|
|
{PawnGameConstant(ITEM_MILLABLE)}, -- Millable
|
|
{PawnGameConstant(ITEM_DISENCHANT_ANY_SKILL)}, -- Enchantable
|
|
{PawnGameConstant(ITEM_DISENCHANT_NOT_DISENCHANTABLE)}, -- Cannot be disenchanted
|
|
{PawnGameConstantIgnoredPlaceholder(ITEM_PROPOSED_ENCHANT)}, -- Appears in the trade window when an item is about to be enchanted ("Will receive +8 Stamina")
|
|
{L.DisenchantingRequires}, -- Appears on item tooltips when the Disenchant ability is specified ("Disenchanting requires Enchanting (25)")
|
|
{PawnGameConstant(ITEM_ENCHANT_DISCLAIMER)}, -- Item will not be traded!
|
|
{L.Charges}, -- Brilliant Mana Oil
|
|
{PawnGameConstant(LOCKED)}, -- Locked
|
|
{PawnGameConstant(ENCRYPTED)}, -- Encrypted (does not seem to exist in the game yet)
|
|
{PawnGameConstant(ITEM_SPELL_KNOWN)}, -- Already Known
|
|
{PawnGameConstant(INVTYPE_HEAD)}, -- Head
|
|
{PawnGameConstant(INVTYPE_NECK)}, -- Neck
|
|
{PawnGameConstant(INVTYPE_SHOULDER)}, -- Shoulder
|
|
{PawnGameConstant(INVTYPE_CLOAK)}, -- Back
|
|
{PawnGameConstant(INVTYPE_ROBE)}, -- Chest
|
|
{PawnGameConstant(INVTYPE_BODY)}, -- Shirt
|
|
{PawnGameConstant(INVTYPE_TABARD)}, -- Tabard
|
|
{PawnGameConstant(INVTYPE_WRIST)}, -- Wrist
|
|
{PawnGameConstant(INVTYPE_HAND)}, -- Hands
|
|
{PawnGameConstant(INVTYPE_WAIST)}, -- Waist
|
|
{PawnGameConstant(INVTYPE_FEET)}, -- Feet
|
|
{PawnGameConstant(INVTYPE_LEGS)}, -- Legs
|
|
{PawnGameConstant(INVTYPE_FINGER)}, -- Finger
|
|
{PawnGameConstant(INVTYPE_TRINKET)}, -- Trinket
|
|
{PawnGameConstant(MOUNT)}, -- Cenarion War Hippogryph
|
|
{PawnGameConstantIgnoredPlaceholder(ITEM_CLASSES_ALLOWED)}, -- Classes:
|
|
{PawnGameConstantIgnoredPlaceholder(ITEM_RACES_ALLOWED)}, -- Races:
|
|
{PawnGameConstantIgnoredNumberPlaceholder(DURABILITY_TEMPLATE)}, -- Durability X / Y
|
|
{L.Duration},
|
|
{L.CooldownRemaining},
|
|
{"<.+>"}, -- Made by, Right-click to read, etc. (No ^$; can be prefixed by a color)
|
|
{PawnGameConstantIgnoredPlaceholder(ITEM_WRITTEN_BY)}, -- Written by
|
|
{L.BagSlots}, -- Bags of all kinds
|
|
{L.TemporaryBuffSeconds}, -- Temporary item buff
|
|
{L.TemporaryBuffMinutes}, -- Temporary item buff
|
|
{PawnGameConstantIgnoredPlaceholder(ENCHANT_ITEM_REQ_SKILL)}, -- Seen on the enchanter-only ring enchantments when you're not an enchanter, and socketed jewelcrafter-only BoP gems
|
|
{L.Corruption}, -- /pawn compare item:172198::::::::120:262::3:1:3524
|
|
|
|
-- ========================================
|
|
-- Strings that represent statistics that Pawn cares about
|
|
-- ========================================
|
|
{L.HeirloomLevelRange, "MaxScalingLevel"}, -- Scaling heirloom items
|
|
{L.HeirloomXpBoost, "XpBoost", 1, PawnMultipleStatsFixed}, -- Experience-granting heirloom items
|
|
{L.HeirloomXpBoost2, "XpBoost", 1, PawnMultipleStatsFixed}, -- unused in English
|
|
{PawnGameConstant(INVTYPE_RANGED), "IsRanged", 1, PawnMultipleStatsFixed}, -- Ranged
|
|
{PawnGameConstant(INVTYPE_RANGEDRIGHT), "IsRanged", 1, PawnMultipleStatsFixed}, -- Ranged (but the translation is different in Russian)
|
|
{PawnGameConstant(INVTYPE_WEAPON), "IsOneHand", 1, PawnMultipleStatsFixed}, -- One-Hand
|
|
{PawnGameConstant(INVTYPE_2HWEAPON), "IsTwoHand", 1, PawnMultipleStatsFixed}, -- Two-Hand
|
|
{PawnGameConstant(INVTYPE_WEAPONMAINHAND), "IsMainHand", 1, PawnMultipleStatsFixed}, -- Main Hand
|
|
{PawnGameConstant(INVTYPE_WEAPONOFFHAND), "IsOffHand", 1, PawnMultipleStatsFixed}, -- Off Hand
|
|
{PawnGameConstant(INVTYPE_HOLDABLE), "IsFrill", 1, PawnMultipleStatsFixed}, -- Held In Off-Hand
|
|
{L.WeaponDamage, "MinDamage", 1, PawnMultipleStatsExtract, "MaxDamage", 2, PawnMultipleStatsExtract}, -- Standard weapon (heirlooms can have decimal points in their damage values)
|
|
{L.WeaponDamageExact, "MinDamage", 1, PawnMultipleStatsExtract, "MaxDamage", 1, PawnMultipleStatsExtract}, -- Weapons with no damage range: Crossbow of the Albatross or Fine Light Crossbow, /pawn compare 15808
|
|
{L.WeaponDamageFire, "MinDamage", 1, PawnMultipleStatsExtract, "MaxDamage", 2, PawnMultipleStatsExtract}, -- /pawn compare 19367
|
|
{L.WeaponDamageFireExact, "MinDamage", 1, PawnMultipleStatsExtract, "MaxDamage", 1, PawnMultipleStatsExtract}, -- Wand
|
|
{L.WeaponDamageShadow, "MinDamage", 1, PawnMultipleStatsExtract, "MaxDamage", 2, PawnMultipleStatsExtract}, -- /pawn compare 18301
|
|
{L.WeaponDamageShadowExact, "MinDamage", 1, PawnMultipleStatsExtract, "MaxDamage", 1, PawnMultipleStatsExtract}, -- Battle Medic's Wand
|
|
{L.WeaponDamageNature, "MinDamage", 1, PawnMultipleStatsExtract, "MaxDamage", 2, PawnMultipleStatsExtract}, -- /pawn compare 16997
|
|
{L.WeaponDamageNatureExact, "MinDamage", 1, PawnMultipleStatsExtract, "MaxDamage", 1, PawnMultipleStatsExtract}, -- Wand
|
|
{L.WeaponDamageArcane, "MinDamage", 1, PawnMultipleStatsExtract, "MaxDamage", 2, PawnMultipleStatsExtract}, -- /pawn compare 13938
|
|
{L.WeaponDamageArcaneExact, "MinDamage", 1, PawnMultipleStatsExtract, "MaxDamage", 1, PawnMultipleStatsExtract}, -- Wand
|
|
{L.WeaponDamageFrost, "MinDamage", 1, PawnMultipleStatsExtract, "MaxDamage", 2, PawnMultipleStatsExtract}, -- /pawn compare 19108
|
|
{L.WeaponDamageFrostExact, "MinDamage", 1, PawnMultipleStatsExtract, "MaxDamage", 1, PawnMultipleStatsExtract}, -- Wand
|
|
{L.WeaponDamageHoly, "MinDamage", 1, PawnMultipleStatsExtract, "MaxDamage", 2, PawnMultipleStatsExtract}, -- /pawn compare 22254
|
|
{L.WeaponDamageHolyExact, "MinDamage", 1, PawnMultipleStatsExtract, "MaxDamage", 1, PawnMultipleStatsExtract}, -- Wand
|
|
{L.WeaponDamageEnchantment, "MinDamage", 1, PawnMultipleStatsExtract, "MaxDamage", 1, PawnMultipleStatsExtract}, -- Weapon enchantments
|
|
{L.WeaponDamageEquip, "MinDamage", 1, PawnMultipleStatsExtract, "MaxDamage", 1, PawnMultipleStatsExtract}, -- Braided Eternium Chain (it's an item, not an enchantment)
|
|
{L.Scope, "MinDamage", 1, PawnMultipleStatsExtract, "MaxDamage", 1, PawnMultipleStatsExtract}, -- Ranged weapon scopes
|
|
{L.AllStats, "Strength", 1, PawnMultipleStatsExtract, "Agility", 1, PawnMultipleStatsExtract, "Stamina", 1, PawnMultipleStatsExtract, "Intellect", 1, PawnMultipleStatsExtract, "Spirit", 1, PawnMultipleStatsExtract}, -- Enchanted Pearl, Enchanted Tear, chest enchantments
|
|
{L.Strength, "Strength"},
|
|
{L.Agility, "Agility"},
|
|
{L.Stamina, "Stamina"},
|
|
{L.Intellect, "Intellect"}, -- negative Intellect: Kreeg's Mug
|
|
{L.Spirit, "Spirit"},
|
|
{L.EnchantmentTitaniumWeaponChain, "HasteRating", 28, PawnMultipleStatsFixed}, -- Weapon enchantment; also reduces disarm duration (may be obsolete?)
|
|
{L.EnchantmentPyriumWeaponChain, "HasteRating", 8, PawnMultipleStatsFixed}, -- Weapon enchantment; also reduces disarm duration
|
|
{L.EnchantmentLivingSteelWeaponChain, "CritRating", 13, PawnMultipleStatsFixed}, -- Weapon enchantment; also reduces disarm duration
|
|
{L.Dodge, "DodgeRating"}, -- /pawn compare item:789::::::1754, or Classic arcanum and enchantment: /pawn compare item:19386:2622 /pawn compare item:21693:2545
|
|
{L.Dodge2, "DodgeRating"}, -- unused in English
|
|
{L.Dodge3, "DodgeRating"}, -- unused in English
|
|
{L.DodgePercent, "DodgeRating"}, -- Classic, /pawn compare 11755
|
|
{L.DodgeRating, "DodgeRating"}, -- Burning Crusade Classic, /pawn compare 11755
|
|
{L.DodgeRating2, "DodgeRating"}, -- Burning Crusade Classic, /pawn compare 29323
|
|
{L.DodgeRatingShort, "DodgeRating"}, -- Burning Crusade Classic, /pawn compare item:789::::::1754
|
|
{L.Parry, "ParryRating"},
|
|
{L.Parry2, "ParryRating"}, -- unused in English
|
|
{L.ParryPercent, "ParryRating"}, -- Classic, /pawn compare 19351
|
|
{L.ParryRating, "ParryRating"}, -- Burning Crusade Classic, /pawn compare 19351
|
|
{L.ParryRatingShort, "ParryRating"}, -- Burning Crusade Classic, /pawn compare 24036
|
|
{L.DefenseRating, "DefenseRating"}, -- Burning Crusade, /pawn compare 19867
|
|
{L.DefenseRating2, "DefenseRating"}, -- Burning Crusade esMX or deDE, /pawn compare 29171
|
|
{L.DefenseRatingSimple, "DefenseRating"}, -- Burning Crusade, /pawn compare item:789::::::89
|
|
{L.DefenseSkill, "DefenseRating"}, -- Classic, /pawn compare 19867
|
|
{L.DefenseSkillSimple, "DefenseRating"}, -- Classic, /pawn compare item:789::::::89
|
|
{L.BlockPercent, "BlockRating"}, -- Classic, /pawn compare 18499
|
|
{L.BlockRating, "BlockRating"}, -- Burning Crusade, /pawn compare 18499
|
|
{L.BlockRating2, "BlockRating"}, -- Burning Crusade, /pawn compare 29323
|
|
{L.Block, "BlockValue"}, -- Classic, /pawn compare 18499
|
|
{L.BlockValue, "BlockValue"}, -- Classic, /pawn compare 18499
|
|
{L.Dps}, -- Ignore this; DPS is calculated manually
|
|
{L.DpsAdd, "Dps"},
|
|
{L.EnchantmentFieryWeapon, "Dps", 4, PawnMultipleStatsFixed}, -- weapon enchantment
|
|
{L.Crit, "CritRating"},
|
|
{L.Crit2, "CritRating"},
|
|
{L.CritPercent, "CritRating"}, -- Classic, /pawn compare 15062
|
|
{L.CritRating, "CritRating"}, -- Burning Crusade, /pawn compare 15062
|
|
{L.CritRating2, "CritRating"}, -- Burning Crusade, /pawn compare 30710
|
|
{L.CritRating3, "CritRating"}, -- Burning Crusade, /pawn compare 28796
|
|
{L.CritRatingShort, "CritRating"}, -- Burning Crusade, /pawn compare item:789::::::78
|
|
{L.ScopeCrit, "CritRating"},
|
|
{L.ScopeRangedCrit, "CritRating"}, -- Heartseeker Scope
|
|
{L.SpellCrit, "SpellCritRating"}, -- Classic, /pawn compare 16947
|
|
{L.SpellCritRating, "SpellCritRating"}, -- Burning Crusade, /pawn compare 16947
|
|
{L.SpellCritRating2, "SpellCritRating"}, -- Burning Crusade, /pawn compare 24256
|
|
{L.SpellCritRatingShort, "SpellCritRating"}, -- Burning Crusade, https://tbc.wowhead.com/item=24050/gleaming-dawnstone
|
|
{L.SpellCritRatingShort2, "SpellCritRating"}, -- Burning Crusade, /pawn compare 29317 (socket bonus)
|
|
{L.Hit, "HitRating"}, -- Classic, /pawn compare 16947
|
|
{L.Hit2, "HitRating"}, -- unused in English
|
|
{L.HitRating, "HitRating"}, -- Burning Crusade, /pawn compare 28182
|
|
{L.HitRating2, "HitRating"}, -- Burning Crusade, /pawn compare 18500
|
|
{L.HitRating3, "HitRating"}, -- Burning Crusade in Spanish, /pawn compare 32570
|
|
{L.HitRatingShort, "HitRating"}, -- Burning Crusade, https://tbc.wowhead.com/item=24051/rigid-dawnstone
|
|
{L.SpellHit, "SpellHitRating"}, -- /pawn compare 16795
|
|
{L.SpellHitRating, "SpellHitRating"}, -- Burning Crusade, /pawn compare 16795
|
|
{L.SpellHitRating2, "SpellHitRating"}, -- Burning Crusade, /pawn compare 24266
|
|
{L.SpellHitRatingShort, "SpellHitRating"}, -- Burning Crusade, https://tbc.wowhead.com/item=31861/great-dawnstone
|
|
{L.ExpertiseRating, "ExpertiseRating"}, -- Burning Crusade, /pawn compare 19351
|
|
{L.ExpertiseRatingShort, "ExpertiseRating"}, -- Wrath, Precise Bloodstone
|
|
{L.ArmorPenetration, "ArmorPenetration"},
|
|
{L.ArmorPenetrationRating, "ArmorPenetration"}, -- Burning Crusade, /pawn compare 34703
|
|
{L.ArmorPenetrationRating2, "ArmorPenetration"}, -- Burning Crusade, /pawn compare 41592 or 42642 depending on locale
|
|
{L.ArmorPenetrationShort, "ArmorPenetration"}, -- Wrath, Fractured Scarlet Ruby
|
|
{L.Resilience, "ResilienceRating"}, -- Mystic Dawnstone
|
|
{L.Resilience2, "ResilienceRating"}, -- unused in English
|
|
{L.ResilienceRating, "ResilienceRating"}, -- /pawn compare 29181
|
|
{L.ResilienceRatingShort, "ResilienceRating"}, -- Burning Crusade, https://tbc.wowhead.com/item=24053/mystic-dawnstone
|
|
{L.PvPPower, "Stamina"}, -- Stormy Chalcedony
|
|
{L.EnchantmentCounterweight, "HasteRating"}, -- won't work on classic since the live string includes the word "haste" and it's worded differently in classic
|
|
{L.Haste, "HasteRating"}, -- Leggings of the Betrayed
|
|
{L.Haste2, "HasteRating"}, -- unused in English
|
|
{L.HasteRating, "HasteRating"}, -- Burning Crusade, /pawn compare 32570
|
|
{L.HasteRating2, "HasteRating"}, -- Burning Crusade esES, /pawn compare 32570
|
|
{L.HasteRatingShort, "HasteRating"}, -- Wrath, Quick Sun Crystal / Burning Crusade, random-stat items only
|
|
{L.SpellHasteRating, "SpellHasteRating"}, -- /pawn compare 34360
|
|
{L.SpellHasteRatingShort, "SpellHasteRating"}, -- https://tbc.wowhead.com/item=35315/quick-dawnstone
|
|
{L.SpellPenetration, "SpellPenetration"}, -- Burning Crusade, /pawn compare 21563
|
|
{L.SpellPenetrationClassic, "SpellPenetration"}, -- Classic (pre-TBC), /pawn compare 21338
|
|
{L.SpellPenetrationShort, "SpellPenetration"}, -- Burning Crusade, https://tbc.wowhead.com/item=24039/stormy-star-of-elune
|
|
{L.Mastery, "MasteryRating"}, -- Zen Dream Emerald
|
|
{L.Mastery2, "MasteryRating"}, -- unused in English
|
|
{L.Versatility, "Versatility"}, -- http://wod.wowhead.com/item=100945
|
|
{L.Leech, "Leech"}, -- http://wod.wowhead.com/item=100945
|
|
{L.Avoidance, "Avoidance"}, -- http://wod.wowhead.com/item=100945
|
|
{PawnGameConstant(STAT_STURDINESS), "Indestructible", 1, PawnMultipleStatsFixed}, -- http://wod.wowhead.com/item=100945
|
|
{L.MovementSpeed, "MovementSpeed"}, -- http://wod.wowhead.com/item=100945
|
|
{L.Ap, "Ap"}, -- /pawn compare item:789::::::1547
|
|
{L.Ap2, "Ap"}, -- /pawn compare 15062
|
|
{L.Ap3, "Ap"}, -- /pawn compare 18821
|
|
{L.Rap, "Rap"}, -- Classic, /pawn compare 18473
|
|
{L.Rap2, "Rap"}, -- Burning Crusade and Wrath Classic, /pawn compare 18713
|
|
{L.FeralAp, "FeralAp"}, -- Classic, /pawn compare 22988
|
|
{L.FeralApMoonkin, "FeralAp"}, -- Burning Crusade, /pawn compare 22988
|
|
{L.FeralApWrath}, -- Wrath, /pawn compare 22988 (in Wrath it only appears on druid items and is not a real stat, but it shouldn't get an orange diamond)
|
|
{L.Mp5, "Mp5"}, -- /pawn compare 22988
|
|
{L.Mp52, "Mp5"}, -- /pawn compare item:789::::::2074
|
|
{L.Mp53, "Mp5"}, -- Burning Crusade, socket bonus on /pawn compare 34360
|
|
{L.Mp54, "Mp5"}, -- Burning Crusade, /script PawnUIGetAllTextForItem("item:24057") and /pawn compare 28522
|
|
{L.Mp55, "Mp5"}, -- Burning Crusade, /pawn compare 28304
|
|
{L.Hp5, "Hp5"}, -- (on live, we used to count 1 HP5 = 3 Stamina)
|
|
{L.Hp52, "Hp5"}, -- Demon's Blood
|
|
{L.Hp53, "Hp5"}, -- Aquamarine Signet of Regeneration or /pawn compare item:789::::::2110
|
|
{L.Hp54, "Hp5"}, -- Lifestone
|
|
{L.Hp55, "Hp5"}, -- /pawn compare item:789::::::-28
|
|
{L.EnchantmentHealth, "Stamina", 1/12.5, PawnSingleStatMultiplier}, -- +100 health head/leg enchantment (counting 1 HP = 1/12.5 Stamina)
|
|
{L.EnchantmentHealth2, "Stamina", 1/12.5, PawnSingleStatMultiplier}, -- +150 health enchantment (counting 1 HP = 1/12.5 Stamina)
|
|
{L.Armor, "Armor"}, -- normal armor and cloak armor enchantments
|
|
{L.Armor2, "Armor"}, -- unused in English
|
|
{L.EnchantmentArmorKit, "Armor"}, -- armor kits
|
|
{L.FireResist, "FireResist"}, -- /pawn compare 12609
|
|
{L.NatureResist, "NatureResist"}, -- /pawn compare 12609
|
|
{L.FrostResist, "FrostResist"}, -- /pawn compare 12609
|
|
{L.ShadowResist, "ShadowResist"}, -- /pawn compare 12609
|
|
{L.ArcaneResist, "ArcaneResist"}, -- /pawn compare 12609
|
|
{L.SpellDamage, "SpellDamage", 1, PawnMultipleStatsExtract, "Healing", 1, PawnMultipleStatsExtract}, -- /pawn compare item:20686::::::2159 ("of Sorcery" on Classic)
|
|
{L.SpellDamage2, "SpellDamage", 1, PawnMultipleStatsExtract, "Healing", 1, PawnMultipleStatsExtract}, -- /pawn compare 16947
|
|
{L.SpellDamage3, "SpellDamage", 1, PawnMultipleStatsExtract, "Healing", 1, PawnMultipleStatsExtract}, -- French on Classic uses two different wordings: /pawn compare 20641 vs. /pawn compare 10041
|
|
{L.SpellDamage4, "SpellDamage", 1, PawnMultipleStatsExtract, "Healing", 1, PawnMultipleStatsExtract}, -- Simplified Chinese on Classic uses many different wordings: /pawn compare 16923 vs. /pawn compare 18608
|
|
{L.SpellDamage5, "SpellDamage", 1, PawnMultipleStatsExtract, "Healing", 1, PawnMultipleStatsExtract}, -- Burning Crusade, /pawn compare item:789::::::-36
|
|
{L.SpellDamage6, "SpellDamage", 1, PawnMultipleStatsExtract, "Healing", 1, PawnMultipleStatsExtract}, -- Burning Crusade, /pawn compare 33467
|
|
{L.SpellDamageAndHealing, "Healing", 1, PawnMultipleStatsExtract, "SpellDamage", 2, PawnMultipleStatsExtract}, -- Burning Crusade, /pawn compare 34360
|
|
{L.SpellDamageAndHealing2, "Healing", 1, PawnMultipleStatsExtract, "SpellDamage", 2, PawnMultipleStatsExtract}, -- Burning Crusade, /pawn compare 28304
|
|
{L.SpellDamageAndHealingEnchant, "Healing", 1, PawnMultipleStatsExtract, "SpellDamage", 2, PawnMultipleStatsExtract}, -- Burning Crusade, /script PawnUIGetAllTextForItem("item:16943:2566") (matches Short in some locales; don't double-dip)
|
|
{L.SpellDamageAndHealingShort, "Healing", 1, PawnMultipleStatsExtract, "SpellDamage", 2, PawnMultipleStatsExtract}, -- Burning Crusade, /pawn compare item:789::::::2041
|
|
{L.SpellDamageAndHealingShort2, "Healing", 1, PawnMultipleStatsExtract, "SpellDamage", 2, PawnMultipleStatsExtract}, -- Burning Crusade, /script PawnUIGetAllTextForItem("item:24060")
|
|
{L.FireSpellDamage, "FireSpellDamage"}, -- /pawn compare item:789::::::1878
|
|
{L.FireSpellDamage2, "FireSpellDamage"}, -- /pawn compare 944
|
|
{L.FireSpellDamage3, "FireSpellDamage"}, -- /pawn compare item:789::::::-22
|
|
{L.ShadowSpellDamage, "ShadowSpellDamage"}, -- /pawn compare item:789::::::1841
|
|
{L.ShadowSpellDamage2, "ShadowSpellDamage"}, -- /pawn compare 1980
|
|
{L.ShadowSpellDamage3, "ShadowSpellDamage"}, -- /pawn compare 19133, zhCN Classic only
|
|
{L.ShadowSpellDamage4, "ShadowSpellDamage"}, -- /pawn compare item:789::::::-25
|
|
{L.NatureSpellDamage, "NatureSpellDamage"}, -- /pawn compare item:789::::::1997
|
|
{L.NatureSpellDamage2, "NatureSpellDamage"}, -- /pawn compare 18829
|
|
{L.NatureSpellDamage3, "NatureSpellDamage"}, -- /pawn compare item:789::::::-24
|
|
{L.ArcaneSpellDamage, "ArcaneSpellDamage"}, -- /pawn compare item:789::::::1801
|
|
{L.ArcaneSpellDamage2, "ArcaneSpellDamage"}, -- /pawn compare 19308
|
|
{L.ArcaneSpellDamage3, "ArcaneSpellDamage"}, -- /pawn compare item:789::::::-21
|
|
{L.FrostSpellDamage, "FrostSpellDamage"}, -- /pawn compare item:789::::::1954
|
|
{L.FrostSpellDamage2, "FrostSpellDamage"}, -- /pawn compare 944
|
|
{L.FrostSpellDamage3, "FrostSpellDamage"}, -- /pawn compare item:789::::::-23
|
|
{L.HolySpellDamage, "HolySpellDamage"},
|
|
{L.HolySpellDamage2, "HolySpellDamage"}, -- /pawn compare 20504
|
|
{L.HolySpellDamage3, "HolySpellDamage"}, -- /pawn compare 30642
|
|
{L.Healing, "Healing"}, -- /pawn compare item:789::::::2028
|
|
{L.Healing2, "Healing"}, -- /pawn compare 16947
|
|
{L.Healing3, "Healing"}, -- Burning Crusade, /pawn compare item:789::::::-38
|
|
{L.SpellPower, "SpellPower"}, -- /pawn tooltip 39998
|
|
{L.SpellPower2, "SpellPower"}, -- /pawn compare 40585
|
|
{L.SpellPower3, "SpellPower"}, -- /pawn compare item:20686::::::2159
|
|
{PawnGameConstant(EMPTY_SOCKET_RED), "RedSocket", 1, PawnMultipleStatsFixed},
|
|
{PawnGameConstant(EMPTY_SOCKET_YELLOW), "YellowSocket", 1, PawnMultipleStatsFixed},
|
|
{PawnGameConstant(EMPTY_SOCKET_BLUE), "BlueSocket", 1, PawnMultipleStatsFixed},
|
|
{PawnGameConstant(EMPTY_SOCKET_META), "MetaSocket", 1, PawnMultipleStatsFixed},
|
|
{PawnGameConstant(EMPTY_SOCKET_COGWHEEL), "CogwheelSocket", 1, PawnMultipleStatsFixed},
|
|
{PawnGameConstant(EMPTY_SOCKET_PRISMATIC), "PrismaticSocket", 1, PawnMultipleStatsFixed},
|
|
{PawnGameConstant(EMPTY_SOCKET_DOMINATION or "UNUSED")}, -- domination sockets are now ignored
|
|
|
|
-- In WoW Classic, crossbows, guns, and wands don't show "Ranged" and instead show the weapon type on the left.
|
|
{L.Bow, "IsBow", 1, PawnMultipleStatsFixed, "IsRanged", 1, PawnMultipleStatsFixed},
|
|
{L.Crossbow, "IsCrossbow", 1, PawnMultipleStatsFixed, "IsRanged", 1, PawnMultipleStatsFixed},
|
|
{L.Gun, "IsGun", 1, PawnMultipleStatsFixed, "IsRanged", 1, PawnMultipleStatsFixed},
|
|
{L.Wand, "IsWand", 1, PawnMultipleStatsFixed, "IsRanged", 1, PawnMultipleStatsFixed},
|
|
{L.Thrown, "IsThrown", 1, PawnMultipleStatsFixed, "IsRanged", 1, PawnMultipleStatsFixed},
|
|
|
|
-- ========================================
|
|
-- Rare strings that are ignored (common ones are at the top of the file)
|
|
-- ========================================
|
|
{'^"'}, -- Flavor text
|
|
{PawnGameConstantIgnoredPlaceholder(ITEM_MIN_LEVEL)}, -- "Requires Level XX"... but "Requires level XX to YY" we DO care about.
|
|
{PawnGameConstantIgnoredPlaceholder(ITEM_REQ_SKILL)}, -- "Requires SKILL (XX)"
|
|
{L.Requires2}, -- unused in English
|
|
}
|
|
|
|
-- These regexes work exactly the same as PawnRegexes, but they're used to parse the right side of tooltips.
|
|
-- Unrecognized stats on the right side are always ignored.
|
|
-- Two-handed Axes, Maces, and Swords will have their stats converted to the 2H version later.
|
|
PawnRightHandRegexes =
|
|
{
|
|
{L.Speed, "Speed"},
|
|
{L.Speed2, "Speed"}, -- unused in English
|
|
{L.Axe, "IsAxe", 1, PawnMultipleStatsFixed},
|
|
{L.Bow, "IsBow", 1, PawnMultipleStatsFixed},
|
|
{L.Crossbow, "IsCrossbow", 1, PawnMultipleStatsFixed},
|
|
{L.Dagger, "IsDagger", 1, PawnMultipleStatsFixed},
|
|
{L.FistWeapon, "IsFist", 1, PawnMultipleStatsFixed},
|
|
{L.Gun, "IsGun", 1, PawnMultipleStatsFixed},
|
|
{L.Mace, "IsMace", 1, PawnMultipleStatsFixed},
|
|
{L.Polearm, "IsPolearm", 1, PawnMultipleStatsFixed},
|
|
{L.Staff, "IsStaff", 1, PawnMultipleStatsFixed},
|
|
{L.Sword, "IsSword", 1, PawnMultipleStatsFixed},
|
|
{L.Warglaives, "IsWarglaive", 1, PawnMultipleStatsFixed},
|
|
{L.Wand, "IsWand", 1, PawnMultipleStatsFixed},
|
|
{L.Cloth, "IsCloth", 1, PawnMultipleStatsFixed},
|
|
{L.Leather, "IsLeather", 1, PawnMultipleStatsFixed},
|
|
{L.Mail, "IsMail", 1, PawnMultipleStatsFixed},
|
|
{L.Plate, "IsPlate", 1, PawnMultipleStatsFixed},
|
|
{L.Shield, "IsShield", 1, PawnMultipleStatsFixed},
|
|
}
|
|
|
|
-- Each language has some regexes that aren't necessary for that particular language. For performance, let's remove those from the table right now.
|
|
-- TODO: For even more of a performance boost, filter out every regex that produces a stat that doesn't exist on the current version of the game.
|
|
local FilteredRegexes = {}
|
|
local _, Regex, LastRegex
|
|
local KeptCount, RemovedCount = 0, 0
|
|
for _, Regex in pairs(PawnRegexes) do
|
|
if Regex[1] == "" or Regex[1] == "^UNUSED$" then
|
|
RemovedCount = RemovedCount + 1
|
|
elseif Regex[1] == nil then
|
|
VgerCore.Fail("Localization error in regex table for " .. tostring(Regex[2]) .. " AFTER \"" .. VgerCore.Color.Blue .. PawnEscapeString(tostring(LastRegex)) .. "|r\".")
|
|
else
|
|
tinsert(FilteredRegexes, Regex)
|
|
KeptCount = KeptCount + 1
|
|
LastRegex = Regex[1]
|
|
end
|
|
end
|
|
PawnRegexes = FilteredRegexes
|
|
--VgerCore.Message("Performance boost: removed " .. RemovedCount .. " regexes (" .. floor(100 * RemovedCount / (RemovedCount + KeptCount)) .. "%)")
|
|
|