diff --git a/About RatingBuster.txt b/About RatingBuster.txt new file mode 100644 index 0000000..57228bb --- /dev/null +++ b/About RatingBuster.txt @@ -0,0 +1,846 @@ +RatingBuster - A tool for item comparison + +************************ +** About RatingBuster ** +************************ + +RatingBuster started out as an addon that converts combat ratings in your tooltips into percentages, so that you have more meaningful information when comparing different items. + +The design aim of RatingBuster is to provide detailed, meaningful and customizable information about items so you can easily decide for yourself which item is better. + + +************** +** Features ** +************** + +- Rating Conversion: + Converts combat ratings into percentages. + +- Stat Breakdown: + Breakdown Strength, Agility, Stamina, Intellect and Spirit into base stats. + Supports talents, buffs and racials that give you extra bonuses. + Ex talent: Lunar Guidance - "Increases your spell damage and healing by 8%/16%/25% of your total Intellect." + Ex talent: Heart of the Wild - "Increases your Intellect by 4%/8%/12%/16%/20%. In addition, ......etc" + Ex: +13 Intellect (+234 Mana, +0.18% Spell Crit, +3.9 Dmg) + +- Stat Summary: + Summarizes all the stats from the item itself, enchants and gems, converts them to base stats and displays the total value and/or difference from your current equipped item. + Ex: Crit Chance - Adds up agility and crit rating from the item, enchant and gem. Converts agility and crit rating to crit chance, and displays the total in a single value. + +- Item Level and Item ID: + Item Level is obtained from the WoW API, not a calculated value. + Item ID is useful for advanced users. + +- Supports talents, buffs and racials that modify your stats for all classes. + +- Fully customizable, decide what you need to see and what you don't want. + + +************************************* +** Auto fill gems in empty sockets ** +************************************* +1. You can set the default gems for each type of empty socket using "/rb sum gem " or using the options window. +2. To specify the gem of your choice, you will need to give RatingBuster the ItemLink or the ItemID of the gem. +3. ItemLink example: type "/rb sum gem blue " (last char is a space) and link the gem (from your bags, AH, ItemSync or whatever), then press . +4. What if you can't link the gem? Well thats what ItemID is for. Find your gem on http://www.wowhead.com/ and look at the URL, + for example "http://www.wowhead.com/?item=32193", 32193 is the ItemID for that gem. + Go back in wow, type "/rb sum gem red 32193" and press . + +Note1: If you have "/rb sum ignore gem" on, the auto fill gems won't work. +Note2: Meta gem conditions and SetBonuses work, so if you don't meet the conditions, StatSummary won't count them. +Note3: RatingBuster will only auto fill empty sockets, if the item already has some gems on it, it will remain. +Note4: Empty sockets filled by RatingBuster will keep the "Empty Socket Icon" so you can still easily tell what color socket it is. +Note5: Gem text filled by RatingBuster will be shown in gray color to differentiate from real gems. + + +********************** +** Supported Addons ** +********************** + +EquipCompare, EQCompare, tekKompare. +LinkWrangler, MultiTips, Links. +AtlasLoot, ItemMagic, Sniff. + +will work with all bag mods too! + + +************************ +** GUI Options Window ** +************************ + +Type /rb win + + +******************** +** Slash Commands ** +******************** + +Use: /rb or /ratingbuster + +/rb : Display command help +/rb standby : Toggle disable/enable RatingBuster in game, defaults Enable +/rb level (0-73) : Set the level used in calculations, defaults 0 (0 = your level) +/rb itemlevel : Toggle show/hide ItemLevel, defaults Show +/rb itemid : Toggle show/hide ItemID, defaults Hide +/rb usereqlv : Toggle calculate using the required level if you are below the required level, defaults Off +/rb statmod : Toggle support for talent and buff mods, defaults On + +/rb rating : Options for Rating Conversion +/rb rating show : Toggle show/hide Rating Conversion in tooltips, defaults Show +/rb rating def : Toggle Defense breakdown, Convert Defense into Crit Avoidance, Hit Avoidance, Dodge, Parry and Block, defaults Off +/rb rating wpn : Toggle Weapon Skill breakdown, Convert Weapon Skill into Crit, Hit, Dodge Neglect, Parry Neglect and Block Neglect, defaults Off +/rb rating color enable : Toggle enable/disable colored text, defaults On +/rb rating color pick : Choose a color for the added text, defaults Light Yellow + +/rb stat : Options for Stat Breakdown +/rb stat show : Toggle show/hide Stat Breakdown in tooltips, defaults Show +/rb stat str : Options for Strength breakdown -> AP, Block, Healing(Talent) +/rb stat agi : Options for Agility breakdown -> Crit, Dodge, AP, RAP, Armor +/rb stat sta : Options for Stamina breakdown -> Health, SpellDmg(Talent) +/rb stat int : Options for Intellect breakdown -> Mana, SpellCrit, SpellDmg(Talent), Healing(Talent), MP5(Talent), RAP(Talent), Armor(Talent) +/rb stat spi : Options for Spirit breakdown -> MP5(Talent), MP5NC, HP5, SpellDmg(Talent), Healing(Talent) + +/rb sum : Options for Stat Summary +/rb sum show : Toggle show/hide Stat Summary in tooltips, defaults Show +/rb sum ignore unused : Show stat summary only for armor types you will and can use, and on items with uncommon quality and up, defaults On +/rb sum ignore equipped : Hide stat summary for equipped items, defaults Off +/rb sum ignore enchant : Ignore enchants on items when calculating the stat summary, defaults Off +/rb sum ignore gem : Ignore gems on items when calculating the stat summary, defaults Off +/rb sum diffstyle : Display diff values in the main tooltip or only in compare tooltips, defaults Main +/rb sum space : Add a blank line before stat summary for readability, defaults On +/rb sum showzerostat : Show zero value stats in summary for consistency, defaults Off +/rb sum calcsum : Calculate the total stats for the item, defaults On +/rb sum calcdiff : Calculate the stat difference for the item and equipped items, defaults On +/rb sum stat : Choose which base stats you'd like to see in the summary + - Health - HEALTH, STA + - Mana - MANA, INT + - Attack Power - AP, STR, AGI + - Ranged Attack Power - RANGED_AP, INT, AP, STR, AGI + - Feral Attack Power - FERAL_AP, AP, STR, AGI (Note: Shows Cat AP when in Cat form, and Bear AP in other forms) + - Spell Damage - SPELL_DMG, STA, INT, SPI + - Holy Damage - HOLY_SPELL_DMG, SPELL_DMG, INT, SPI + - Arcane Damage - ARCANE_SPELL_DMG, SPELL_DMG, INT + - Fire Damage - FIRE_SPELL_DMG, SPELL_DMG, STA, INT + - Nature Damage - NATURE_SPELL_DMG, SPELL_DMG, INT + - Frost Damage - FROST_SPELL_DMG, SPELL_DMG, INT + - Shadow Damage - SHADOW_SPELL_DMG, SPELL_DMG, STA, INT, SPI + - Healing - HEAL, STR, INT, SPI + - Hit Chance - MELEE_HIT_RATING, WEAPON_RATING + - Crit Chance - MELEE_CRIT_RATING, WEAPON_RATING, AGI + - Spell Hit Chance - SPELL_HIT_RATING + - Spell Crit Chance - SPELL_CRIT_RATING, INT + - Mana Regen - MANA_REG, SPI + - Health Regen - HEALTH_REG + - Mana Regen Not Casting - MANA_REG, SPI + - Health Regen While Casting - HEALTH_REG, SPI + - Armor - ARMOR, ARMOR_BONUS, AGI, INT + - Block Value - BLOCK_VALUE, STR + - Dodge Chance - DODGE_RATING, DEFENSE_RATING, AGI + - Parry Chance - PARRY_RATING, DEFENSE_RATING + - Block Chance - BLOCK_RATING, DEFENSE_RATING + - Hit Avoidance - DEFENSE_RATING, MELEE_HIT_AVOID_RATING + - Crit Avoidance - DEFENSE_RATING, RESILIENCE_RATING, MELEE_CRIT_AVOID_RATING + - Dodge Neglect - WEAPON_RATING + - Parry Neglect - WEAPON_RATING + - Block Neglect - WEAPON_RATING + - Arcane Resistance - ARCANE_RES + - Fire Resistance - FIRE_RES + - Nature Resistance - NATURE_RES + - Frost Resistance - FROST_RES + - Shadow Resistance - SHADOW_RES + - Weapon Max Damage - MAX_DAMAGE +/rb sum statcomp : Choose which composite stats you'd like to see in the summary + - Strength - STR + - Agility - AGI + - Stamina - STA + - Intellect - INT + - Spirit - SPI + - Defense - DEFENSE_RATING + - Weapon Skill - WEAPON_RATING + + +************************************** +** How I derived the Rating Formula ** +************************************** + +As soon as I saw the blue post on combat ratings system, I began to think about coding this addon. +But Blizzard only gave us level 60 and 70 data about this system, and for an addon like this to work you need exact formula that will work for all levels. +So I need to reverse engineer the Combat Rating formula, and the process of obtaining this formula can be broken up into two simple steps. + +1. Get more data +In order to obtain the exact formula, I will need more data points then just level 60 and 70. So I logged on and started asking random people about their crit% and crit ratings show in the Character frame, the problem was the crit% shown only has 2 two decimal places, which turned out to be insufficient for this matter. + +So I started to dig in the DefaultUI lua files in search for a new API that will give a more precise crit% and I came up with this script /script DEFAULT_CHAT_FRAME:AddMessage(GetCombatRatingBonus(9)). + +Now I need to log on again and ask random people to type that script and tell me that 13 decimal place crit% that it shows. This was not an easy task, as most people are unfamiliar with lua script, there are even people that immediately put me on ignore after I sent him this script lol. + +After hours of work, this is what I got: +A B C D E F G H +Lv Type Rating Percentage =C/D 60base =E/F =1/G +19 crit 2 0.6753247631 2.9615380764 14 0.211538434 4.727273342 +21 crit 2 0.5714285714 3.5000000000 14 0.25 4 +22 crit 2 0.5306122010 3.7692310810 14 0.269230792 3.714285407 +28 crit 2 0.3714286018 5.3846149445 14 0.384615353 2.6 +29 crit 2 0.3537415195 5.6538457870 14 0.403846128 2.476190637 +36 crit 14 1.8557142035 7.5442651532 14 0.538876082 1.855714204 +48 crit 14 1.2999998760 10.7692317963 14 0.769230843 1.3 +50 crit 14 1.2380952140 11.3076925278 14 0.807692323 1.238095214 +60 crit 112 8.0000000000 14.0000000000 14 1 1 +61 crit 56 3.8536582293 14.5316467285 14 1.037974766 0.963414557 +62 hit 50 4.6341464061 10.7894735336 10 1.078947353 0.926829281 +62 crit 56 3.7073167036 15.1052646637 14 1.078947476 0.926829176 +63 crit 31 1.9712541049 15.7260293961 14 1.123287814 0.890243789 +64 crit 17 1.0365853900 16.3999996185 14 1.171428544 0.853658556 +65 crit 56 3.2682925906 17.1343288422 14 1.223880632 0.817073148 +66 crit 168 9.3658536585 17.9375000000 14 1.28125 0.780487805 +66 sp_hit 48 4.6829268293 10.2500000000 8 1.28125 0.780487805 +67 crit 78 4.1445989933 18.8196735382 14 1.344262396 0.743902383 +67 crit 76 4.0383272242 18.8196735382 14 1.344262396 0.743902383 + +2. Think very hard +After some creative thinking, this is what I got: + +Percentage = Rating / F * H +Lv 8 to 60: 1/H = 1/52 * Level - 8/52 +Lv 60 to 70: H = - 3/82 * Level + 131/41 + + F= +Weapon Skill 2.5 +Expertise 2.5 +Defense 1.5 +Dodge 12.0 +Parry 15.0 +Block 5.0 +Hit 10.0 +Crit 14.0 +Haste 10.0 +Spell Hit 8.0 +Spell Crit 14.0 +Spell Haste 10.0 +Resilience 25.0 + +This formula is correct to the 13th decimal place, so I'm 100% sure this is what blizzard uses. + + +**************************************** +** Stat Conversion Data for Reference ** +**************************************** + + Combat rating needed for 1 point of stat + WepS Defe Dodge Parry Bloc M-Hit M-Crit M-Hst S-Hit S-Crit S-Hst Resil +70 3.94 2.37 18.92 31.54 7.88 15.77 22.08 15.77 12.62 22.08 15.77 39.42 +69 3.73 2.24 17.89 29.82 7.45 14.91 20.87 14.91 11.93 20.87 14.91 37.27 +68 3.53 2.12 16.97 28.28 7.07 14.14 19.79 14.14 11.31 19.79 14.14 35.34 +67 3.36 2.02 16.13 26.89 6.72 13.44 18.82 13.44 10.75 18.82 13.44 33.61 +66 3.20 1.92 15.38 25.63 6.41 12.81 17.94 12.81 10.25 17.94 12.81 32.03 +65 3.06 1.84 14.69 24.48 6.12 12.24 17.13 12.24 9.79 17.13 12.24 30.60 +64 2.93 1.76 14.06 23.43 5.86 11.71 16.40 11.71 9.37 16.40 11.71 29.29 +63 2.81 1.68 13.48 22.47 5.62 11.23 15.73 11.23 8.99 15.73 11.23 28.08 +62 2.70 1.62 12.95 21.58 5.39 10.79 15.11 10.79 8.63 15.11 10.79 26.97 +61 2.59 1.56 12.46 20.76 5.19 10.38 14.53 10.38 8.30 14.53 10.38 25.95 +60 2.50 1.50 12.00 20.00 5.00 10.00 14.00 10.00 8.00 14.00 10.00 25.00 +59 2.45 1.47 11.77 19.62 4.90 9.81 13.73 9.81 7.85 13.73 9.81 24.52 +58 2.40 1.44 11.54 19.23 4.81 9.62 13.46 9.62 7.69 13.46 9.62 24.04 +57 2.36 1.41 11.31 18.85 4.71 9.42 13.19 9.42 7.54 13.19 9.42 23.56 +56 2.31 1.38 11.08 18.46 4.62 9.23 12.92 9.23 7.38 12.92 9.23 23.08 +55 2.26 1.36 10.85 18.08 4.52 9.04 12.65 9.04 7.23 12.65 9.04 22.60 +54 2.21 1.33 10.62 17.69 4.42 8.85 12.38 8.85 7.08 12.38 8.85 22.12 +53 2.16 1.30 10.38 17.31 4.33 8.65 12.12 8.65 6.92 12.12 8.65 21.63 +52 2.12 1.27 10.15 16.92 4.23 8.46 11.85 8.46 6.77 11.85 8.46 21.15 +51 2.07 1.24 9.92 16.54 4.13 8.27 11.58 8.27 6.62 11.58 8.27 20.67 +50 2.02 1.21 9.69 16.15 4.04 8.08 11.31 8.08 6.46 11.31 8.08 20.19 +49 1.97 1.18 9.46 15.77 3.94 7.88 11.04 7.88 6.31 11.04 7.88 19.71 +48 1.92 1.15 9.23 15.38 3.85 7.69 10.77 7.69 6.15 10.77 7.69 19.23 +47 1.88 1.13 9.00 15.00 3.75 7.50 10.50 7.50 6.00 10.50 7.50 18.75 +46 1.83 1.10 8.77 14.62 3.65 7.31 10.23 7.31 5.85 10.23 7.31 18.27 +45 1.78 1.07 8.54 14.23 3.56 7.12 9.96 7.12 5.69 9.96 7.12 17.79 +44 1.73 1.04 8.31 13.85 3.46 6.92 9.69 6.92 5.54 9.69 6.92 17.31 +43 1.68 1.01 8.08 13.46 3.37 6.73 9.42 6.73 5.38 9.42 6.73 16.83 +42 1.63 0.98 7.85 13.08 3.27 6.54 9.15 6.54 5.23 9.15 6.54 16.35 +41 1.59 0.95 7.62 12.69 3.17 6.35 8.88 6.35 5.08 8.88 6.35 15.87 +40 1.54 0.92 7.38 12.31 3.08 6.15 8.62 6.15 4.92 8.62 6.15 15.38 +39 1.49 0.89 7.15 11.92 2.98 5.96 8.35 5.96 4.77 8.35 5.96 14.90 +38 1.44 0.87 6.92 11.54 2.88 5.77 8.08 5.77 4.62 8.08 5.77 14.42 +37 1.39 0.84 6.69 11.15 2.79 5.58 7.81 5.58 4.46 7.81 5.58 13.94 +36 1.35 0.81 6.46 10.77 2.69 5.38 7.54 5.38 4.31 7.54 5.38 13.46 +35 1.30 0.78 6.23 10.38 2.60 5.19 7.27 5.19 4.15 7.27 5.19 12.98 +34 1.25 0.75 6.00 10.00 2.50 5.00 7.00 5.00 4.00 7.00 5.00 12.50 +33 1.20 0.72 5.77 9.62 2.40 4.81 6.73 4.81 3.85 6.73 4.81 12.02 +32 1.15 0.69 5.54 9.23 2.31 4.62 6.46 4.62 3.69 6.46 4.62 11.54 +31 1.11 0.66 5.31 8.85 2.21 4.42 6.19 4.42 3.54 6.19 4.42 11.06 +30 1.06 0.63 5.08 8.46 2.12 4.23 5.92 4.23 3.38 5.92 4.23 10.58 +29 1.01 0.61 4.85 8.08 2.02 4.04 5.65 4.04 3.23 5.65 4.04 10.10 +28 0.96 0.58 4.62 7.69 1.92 3.85 5.38 3.85 3.08 5.38 3.85 9.62 +27 0.91 0.55 4.38 7.31 1.83 3.65 5.12 3.65 2.92 5.12 3.65 9.13 +26 0.87 0.52 4.15 6.92 1.73 3.46 4.85 3.46 2.77 4.85 3.46 8.65 +25 0.82 0.49 3.92 6.54 1.63 3.27 4.58 3.27 2.62 4.58 3.27 8.17 +24 0.77 0.46 3.69 6.15 1.54 3.08 4.31 3.08 2.46 4.31 3.08 7.69 +23 0.72 0.43 3.46 5.77 1.44 2.88 4.04 2.88 2.31 4.04 2.88 7.21 +22 0.67 0.40 3.23 5.38 1.35 2.69 3.77 2.69 2.15 3.77 2.69 6.73 +21 0.63 0.38 3.00 5.00 1.25 2.50 3.50 2.50 2.00 3.50 2.50 6.25 +20 0.58 0.35 2.77 4.62 1.15 2.31 3.23 2.31 1.85 3.23 2.31 5.77 +19 0.53 0.32 2.54 4.23 1.06 2.12 2.96 2.12 1.69 2.96 2.12 5.29 +18 0.48 0.29 2.31 3.85 0.96 1.92 2.69 1.92 1.54 2.69 1.92 4.81 +17 0.43 0.26 2.08 3.46 0.87 1.73 2.42 1.73 1.38 2.42 1.73 4.33 +16 0.38 0.23 1.85 3.08 0.77 1.54 2.15 1.54 1.23 2.15 1.54 3.85 +15 0.34 0.20 1.62 2.69 0.67 1.35 1.88 1.35 1.08 1.88 1.35 3.37 +14 0.29 0.17 1.38 2.31 0.58 1.15 1.62 1.15 0.92 1.62 1.15 2.88 +13 0.24 0.14 1.15 1.92 0.48 0.96 1.35 0.96 0.77 1.35 0.96 2.40 +12 0.19 0.12 0.92 1.54 0.38 0.77 1.08 0.77 0.62 1.08 0.77 1.92 +11 0.14 0.09 0.69 1.15 0.29 0.58 0.81 0.58 0.46 0.81 0.58 1.44 +10 0.10 0.06 0.46 0.77 0.19 0.38 0.54 0.38 0.31 0.54 0.38 0.96 + 9 0.05 0.03 0.23 0.38 0.10 0.19 0.27 0.19 0.15 0.27 0.19 0.48 + 8 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 + WepS Defe Dodge Parry Bloc M-Hit M-Crit M-Hst S-Hit S-Crit S-Hst Resil + + Agility needed for 1% Crit + War Pal Hun Rog Pri Sha Mage Lock Dru + 1 4.00 4.60 3.52 2.23 11.00 6.01 12.97 6.67 4.95 + 2 4.20 4.83 3.53 2.33 11.00 6.01 12.97 6.67 4.95 + 3 4.20 4.83 3.69 2.43 11.00 6.32 12.97 7.00 5.20 + 4 4.40 5.06 3.95 2.62 11.56 6.32 13.61 7.00 5.20 + 5 4.60 5.06 4.12 2.72 11.56 6.62 13.61 7.00 5.45 + 6 4.80 5.29 4.28 2.82 11.56 6.62 13.61 7.33 5.45 + 7 4.80 5.29 4.44 3.01 11.56 6.62 13.61 7.33 5.69 + 8 5.00 5.52 4.61 3.11 12.11 6.92 13.61 7.33 5.69 + 9 5.20 5.52 4.88 3.21 12.11 6.92 13.61 7.67 5.94 +10 5.20 5.75 5.04 3.40 12.11 7.22 14.27 7.67 6.44 +11 5.40 5.75 5.41 3.79 12.11 7.22 14.27 8.00 6.68 +12 5.60 5.98 5.99 4.18 12.66 7.52 14.27 8.00 6.68 +13 6.00 6.44 6.46 4.66 12.66 7.52 14.27 8.00 6.93 +14 6.20 6.44 6.94 5.05 12.66 7.82 14.27 8.33 6.93 +15 6.40 6.90 7.52 5.63 12.66 8.12 14.90 8.67 7.43 +16 6.60 6.90 7.89 6.02 13.21 8.42 14.90 9.00 7.43 +17 6.80 7.13 8.38 6.41 13.21 8.42 14.90 9.00 7.67 +18 7.20 7.59 8.95 6.90 13.21 8.72 14.90 9.00 7.92 +19 7.40 7.59 9.43 7.38 13.76 8.72 14.90 9.34 7.92 +20 7.80 8.05 10.02 7.87 13.76 9.32 15.55 9.67 8.91 +21 7.80 8.28 10.40 8.35 13.76 9.32 15.55 10.00 8.91 +22 8.00 8.28 10.99 8.74 13.76 9.62 15.55 10.00 9.16 +23 8.40 8.74 11.47 9.23 14.31 9.62 15.55 10.33 9.41 +24 8.60 8.97 12.06 9.62 14.31 9.92 16.21 10.33 9.41 +25 9.00 9.20 12.55 10.20 14.31 10.22 16.21 11.00 9.90 +26 9.20 9.43 13.04 10.68 14.86 10.53 16.21 11.00 9.90 +27 9.40 9.66 13.62 11.07 14.86 10.53 16.21 11.00 10.15 +28 9.80 9.89 14.10 11.56 14.86 10.82 16.21 11.34 10.40 +29 10.00 10.12 14.71 12.05 15.41 10.82 16.86 11.34 10.40 +30 10.40 10.58 15.29 12.63 15.41 11.43 16.86 12.00 11.39 +31 10.60 10.81 15.70 13.02 15.41 11.43 16.86 12.00 11.64 +32 10.80 10.81 16.29 13.50 15.95 11.72 16.86 12.33 11.64 +33 11.20 11.27 16.89 13.99 15.95 12.03 17.51 12.33 11.89 +34 11.40 11.49 17.39 14.47 15.95 12.03 17.51 12.67 12.14 +35 11.81 11.96 17.99 15.06 16.50 12.63 17.51 13.00 12.38 +36 12.00 12.20 18.48 15.55 16.50 12.94 18.15 13.33 12.63 +37 12.20 12.20 19.08 15.92 16.50 12.94 18.15 13.66 12.87 +38 12.59 12.64 19.69 16.42 17.06 13.23 18.15 13.66 12.87 +39 12.80 12.89 20.28 16.89 17.06 13.23 18.15 14.01 13.12 +40 13.19 13.33 20.79 17.48 17.06 13.83 18.80 14.33 14.10 +41 13.61 13.57 21.28 17.99 17.61 14.14 18.80 14.66 14.37 +42 13.79 13.57 21.88 18.45 17.61 14.14 18.80 14.66 14.37 +43 14.20 14.03 22.52 18.94 18.15 14.43 18.80 14.99 14.60 +44 14.41 14.27 23.09 19.53 18.15 14.73 19.46 14.99 14.86 +45 14.79 14.73 23.75 20.12 18.15 15.04 19.46 15.67 15.36 +46 14.99 14.95 24.21 20.58 18.73 15.34 19.46 16.00 15.60 +47 15.41 15.17 24.88 21.10 18.73 15.65 20.08 16.00 15.60 +48 15.80 15.65 25.58 21.55 19.27 15.95 20.08 16.34 15.85 +49 16.00 15.87 26.18 22.03 19.27 15.95 20.08 16.67 16.10 +50 16.39 16.34 26.81 22.73 19.27 16.53 20.75 17.01 17.09 +51 16.81 16.56 27.32 23.20 19.80 16.84 20.75 17.33 17.33 +52 17.01 16.78 27.93 23.70 19.80 17.15 20.75 17.33 17.57 +53 17.39 17.24 28.57 24.27 20.37 17.15 21.41 17.67 17.83 +54 17.79 17.48 29.33 24.75 20.37 17.45 21.41 17.99 17.83 +55 18.21 17.95 29.94 25.38 20.92 18.05 21.41 18.35 18.32 +56 18.42 18.18 30.49 25.91 20.92 18.35 22.03 18.66 18.55 +57 18.80 18.38 31.15 26.46 21.46 18.66 22.03 19.01 18.83 +58 19.19 18.87 31.85 27.03 21.46 18.66 22.03 19.34 19.05 +59 19.61 19.08 32.57 27.47 22.03 18.94 22.68 19.34 19.31 +60 20.00 19.53 33.22 28.17 22.03 19.53 22.68 20.00 20.28 +61 21.32 20.37 33.67 29.94 22.57 20.16 22.99 20.66 20.92 +62 22.62 20.70 34.48 31.06 22.52 20.58 23.15 20.79 21.19 +63 23.92 21.19 35.21 32.57 22.68 21.28 23.58 21.28 21.93 +64 25.19 21.93 35.84 33.78 23.09 21.93 23.64 21.98 22.37 +65 26.53 22.42 36.63 34.97 23.47 22.27 23.70 22.32 22.83 +66 27.78 22.88 37.04 36.23 23.87 22.88 24.33 22.99 23.26 +67 29.07 23.53 37.88 37.31 24.15 23.42 24.27 22.94 23.58 +68 30.40 24.04 38.61 38.17 24.27 23.98 24.51 23.58 24.27 +69 31.75 24.51 39.37 39.06 24.39 24.51 24.75 24.15 24.63 +70 33.00 25.00 40.00 40.00 25.00 25.00 25.00 24.69 25.00 + War Pal Hun Rog Pri Sha Mage Lock Dru + + Intellect needed for 1% Spell Crit + Pal Hun Pri Sha Mage Lock Dru + 1 12.02 14.31 5.85 7.50 6.11 6.67 6.99 + 2 12.61 15.02 6.11 7.86 6.35 6.97 7.30 + 3 12.61 15.02 6.38 8.22 6.60 7.27 7.62 + 4 13.21 15.75 6.64 8.22 7.09 7.58 7.94 + 5 13.21 15.75 7.17 8.58 7.33 7.88 8.26 + 6 13.81 16.45 7.44 8.93 7.58 8.18 8.58 + 7 14.41 16.45 7.71 9.29 7.82 8.48 8.90 + 8 14.41 17.15 7.97 9.64 8.06 8.79 8.90 + 9 15.02 17.15 8.24 10.00 8.55 9.09 9.21 +10 15.02 17.89 8.77 10.00 8.80 9.39 10.16 +11 15.63 17.89 9.57 10.72 9.53 10.30 10.80 +12 16.23 18.59 10.63 11.43 10.75 11.21 11.75 +13 16.84 20.04 11.43 12.50 11.48 12.12 12.39 +14 17.42 20.04 12.76 13.23 13.68 13.04 13.33 +15 18.62 21.46 13.81 14.29 14.90 13.95 14.62 +16 18.62 21.46 14.62 15.02 15.65 14.53 15.24 +17 19.23 22.17 15.95 15.72 16.61 15.75 16.21 +18 20.41 23.58 16.75 16.78 17.61 16.67 16.84 +19 20.41 23.58 17.79 17.51 18.59 17.57 17.79 +20 21.65 25.06 19.12 18.59 19.80 18.48 19.38 +21 22.22 25.77 19.92 19.31 20.53 19.38 20.00 +22 22.83 25.77 21.28 20.00 21.74 20.28 20.96 +23 23.42 27.17 22.08 21.10 22.47 21.23 21.60 +24 24.04 27.93 23.36 21.79 23.70 22.42 22.88 +25 25.25 28.57 24.45 22.88 24.69 23.31 23.81 +26 25.84 29.33 25.51 23.58 25.64 23.92 24.45 +27 25.84 30.03 26.60 24.27 26.88 25.13 25.38 +28 27.03 30.77 27.62 25.38 29.59 26.04 26.04 +29 27.62 31.45 28.74 26.11 30.77 27.25 27.32 +30 28.82 32.89 30.03 27.17 32.05 28.17 28.90 +31 29.41 33.67 31.06 28.25 32.79 28.82 29.50 +32 30.03 33.67 32.15 28.90 34.01 30.03 30.77 +33 30.67 35.09 33.22 30.03 34.97 30.86 31.45 +34 31.25 35.71 34.60 30.77 35.97 32.15 32.36 +35 32.47 37.17 35.59 31.85 37.17 33.00 33.67 +36 33.00 37.88 36.63 32.89 38.17 33.90 34.25 +37 33.67 37.88 38.02 33.56 39.37 35.21 35.21 +38 34.84 39.37 39.06 34.60 40.32 36.10 36.23 +39 35.46 40.00 40.16 35.34 41.49 37.31 37.17 +40 36.63 41.49 41.49 36.76 42.55 38.17 39.06 +41 37.31 42.19 42.55 37.45 43.48 39.06 39.68 +42 37.88 42.19 43.86 38.17 46.51 40.32 40.98 +43 39.06 43.67 44.84 39.37 47.39 41.15 41.67 +44 39.06 44.44 46.30 40.32 48.54 42.37 42.92 +45 40.32 45.87 47.62 41.49 49.75 43.67 43.86 +46 40.82 46.51 48.54 42.55 50.76 44.64 44.84 +47 42.02 47.17 50.00 43.29 52.08 45.45 45.66 +48 43.29 48.54 51.02 44.25 53.19 46.73 46.73 +49 43.86 49.26 52.36 45.45 54.35 47.85 47.85 +50 45.05 50.76 53.76 46.51 55.87 49.02 49.50 +51 45.66 51.55 54.64 47.62 56.82 50.00 50.51 +52 46.30 52.08 56.18 48.31 57.80 51.28 51.81 +53 47.39 53.76 57.14 49.75 58.82 52.36 52.36 +54 48.08 54.35 58.48 50.25 60.24 53.76 53.76 +55 49.26 55.87 60.24 51.81 61.73 54.95 54.95 +56 49.75 56.50 60.98 52.63 64.94 55.87 55.87 +57 50.51 57.14 62.50 53.48 66.23 56.82 56.82 +58 52.36 58.82 63.69 54.95 67.11 58.14 57.80 +59 52.91 59.52 64.94 55.87 68.49 59.52 59.17 +60 54.05 60.98 66.23 57.14 69.93 60.61 60.98 +61 63.69 63.69 67.57 60.98 69.93 62.89 61.73 +62 65.36 64.94 68.97 62.89 69.93 64.94 63.69 +63 67.57 66.67 69.93 65.79 69.93 67.57 66.67 +64 69.93 69.44 71.94 68.03 70.42 69.93 68.49 +65 71.43 70.92 72.99 70.42 70.42 72.46 70.42 +66 73.53 72.99 74.63 72.46 72.46 74.07 72.99 +67 75.19 75.19 75.76 74.63 75.19 76.92 75.19 +68 76.34 76.92 76.92 76.34 76.34 78.74 76.34 +69 78.13 78.13 78.74 78.13 78.13 80.00 78.13 +70 80.00 80.00 80.00 80.00 80.00 81.97 80.00 + Pal Hun Pri Sha Mage Lock Dru + +************************************************** +** 2.4.0 Spirit-Based Mana Regeneration Formula ** +************************************************** +The new formula formula in 2.4: + +ManaRegen(SPI, INT, LEVEL) = (0.001 + SPI * BASE_REGEN[LEVEL] * (INT^0.5)) * 5 + +BASE_REGEN[LEVEL]= + 1 0.034965 + 2 0.034191 + 3 0.033465 + 4 0.032526 + 5 0.031661 + 6 0.031076 + 7 0.030523 + 8 0.029994 + 9 0.029307 +10 0.028661 +11 0.027584 +12 0.026215 +13 0.025381 +14 0.024300 +15 0.023345 +16 0.022748 +17 0.021958 +18 0.021386 +19 0.020790 +20 0.020121 +21 0.019733 +22 0.019155 +23 0.018819 +24 0.018316 +25 0.017936 +26 0.017576 +27 0.017201 +28 0.016919 +29 0.016581 +30 0.016233 +31 0.015994 +32 0.015707 +33 0.015464 +34 0.015204 +35 0.014956 +36 0.014744 +37 0.014495 +38 0.014302 +39 0.014094 +40 0.013895 +41 0.013724 +42 0.013522 +43 0.013363 +44 0.013175 +45 0.012996 +46 0.012853 +47 0.012687 +48 0.012539 +49 0.012384 +50 0.012233 +51 0.012113 +52 0.011973 +53 0.011859 +54 0.011714 +55 0.011575 +56 0.011473 +57 0.011342 +58 0.011245 +59 0.011110 +60 0.010999 +61 0.010700 +62 0.010522 +63 0.010290 +64 0.010119 +65 0.009968 +66 0.009808 +67 0.009651 +68 0.009553 +69 0.009445 +70 0.009327 + +********** +** TODO ** +********** +Readme: +Combat rating needed for 1 point of stat: parry needs to be updated + +Long term: +- Support for sets +- Option: Hide default stats +- Option: Show only in city + +- Support for "+2% Spirit" type + +Doing: +healing done in Tree of Life form + +Note: +"Intelligently compare Crit Immunity in the StatSummary?" +[ ] Tick Box. +Ticked -- Tooltip: StatSummary will now show '% to be critted' comparisons while AWARE of your opponent's level as defined below. +Unticked (Default) -- Tooltip: StatSummary will now show '% to be critted' comparisons while UNAWARE of your opponent's level. +[ ] Number Field. +Illuminates when Ticked and Dims when Unticked (Default value, but Dimmed, is 73) -- Tooltip: Type the opponent's level you'd like StatSummary to stop comparing 'crit immunity' for. + +-- Failed -- +Try to fix mana oil enchants: was unable to find a way to scan the oil text + +-- Transition to 2.4.0 +if select(2, GetBuildInfo()) >= "7897" then + + +********************* +** Version History ** +********************* +1.3.8 +- NEW: Support for negative stats +- Update for 2.4.3: Parry Rating, Defense Rating, and Block Rating: Low-level players will now convert these ratings into their corresponding defensive stats at the same rate as level 34 players +- Fixed: Better JewelTips support +- Fixed: Druid - Nurturing Instinct (Str->Agi) +- Fixed: Mage - Arcane Fortitude (50% -> 100% Armor from Int) +- Optimized library usage +- Updated localizations +1.3.7a +- Fixed: Loading error +1.3.7 +- Changed: Will only show stat breakdown options your class can use +- Changed: Class specific stat breakdown options will show the talents required +- Added: Stat breakdown support for Mental Quickness (Shaman) +- Fixed: Support for new Demonic Knowledge(Warlock) and Nurturing Instinct(Druid) +- Fixed: Library errors +1.3.6 +- Updated toc to 20400 +- Fixed: Able to clear default gem settings +- Fixed: Deadly Fire Opal now shows rating conversion +1.3.5 +- NEW: Default gems for empty sockets! Set the gems to use for each socket using /rb sum gem +- In 2.4.0: Spirit-Based Mana Regeneration: This system has been adjusted so that as your intellect rises, you will regenerate more mana per point of spirit. +- Fixed: Will now work with [Insightful Earthstorm Diamond] +- Fixed: Profiles should now work +- Changed: Use "/rb win" to open the options window instead of "/rb optionswin" +1.3.1 +- Fixed: Spell Haste summary works now +- Fixed: Doesn't match percentages anymore (ex: Increases healing by up to 10% of your total Intellect) +- Fixed: Error when sorting StatSummary alphabetically +- Updated localizations: Taiwan, French, China, German, Spanish +1.3.0 +- Updated: TOC to 20300 +- Updated localizations: Taiwan, Korean, China, German +- Fixed: Socketed gem stat text color after percentage conversion is no longer yellow +- Fixed: "+X healing and +X spell damage" type gems and enchants now gives correct healing summary +- NEW: Categorized StatSummery Options in to Basic, Physical damage, Spell damage and healing, Tank +- NEW: StatSummary is sorted(basic, physical damage, spell damage and healing, tank in that order) +- NEW: Option to sort StatSummary alphabetically instead of the above +- NEW: Option to include block chance in Avoidance summary +- StatSummary Added: + Resilience + Haste + Haste Rating + Spell Haste + Spell Haste Rating + Penetration + IgnoreArmor + HitRating + CritRating + SpellHitRating + SpellCritRating + DodgeRating + ParryRating + BlockRating +1.2.8 +- Fixed: +X Spell Power gives healing too +- In 2.3.0: Support for Spell Damage bonus in +Healing stats +1.2.7 +- NEW: Option to Show detail text for Resilience and Expertise conversions +- NEW: Option to Show Avoidance Summary <- Dodge, Parry, MobMiss +- NEW: TankPoints support, if you have TankPoints loaded you get 2 new summary options: TankPoints and Total Reduction +- In 2.3.0: Added Expertise stat support +- In 2.3.0: Heart of the Wild (Druid Feral Combat talent) provides 2/4/6/8/10% bonus attack power in Cat form instead +- In 2.3.0: Intensity (Druid Restoration talent) increased to 10/20/30% mana regeneration +- In 2.3.0: Arcane Meditation (Mage Arcane talent) increased to 10/20/30% mana regeneration +- In 2.3.0: Meditation (Priest Discipline talent) increased to 10/20/30% mana regeneration +- In 2.3.0: Weapon Expertise (Paladin Protection talent) renamed Combat Expertise, now increases expertise by 1/2/3/4/5 and total Stamina by 2/4/6/8/10% +- In 2.3.0: Mental Quickness (Shaman Enhancement talent) now also increases spell damage and healing equal to 10/20/30% of your attack power +- All 2.3.0 Changes will only take affect when using a 2.3.0 client. +- Updated: German localization +1.2.6 +- Fixed: Ranged AP Calculations +1.2.5 +- Updated: toc to 20200 +- Fixed: Haste rating change in 2.2.0 +- Fixed: Hunter Survival Instincts talent support +- Fixed: Armor multiplier no longer apply to Armor from enchants +- NEW: Added China localization by iceburn(candykiss) +- Updated: Taiwan localization +- Updated: Korean localization by fenlis +- Updated: German localization by Dleh +- Code optimizations +- Updated: Libs +1.2.4 +- Fixed: Error when difftype is set to comp +- Made Waterfall-1.0 optional +1.2.3 +- NEW: You can now open the options window using /rb optionswin +- Updated Taiwan localization +- Updated Korean localizations by fenlis +1.2.2 +- New option to hide the StatSummary title +- New option to hide the sigma icon in the StatSummary title +- New option to add a empty line after the StatSummary +- Updated Taiwan localization +- Other localizations needs to be updated +1.2.1 +- Updated Taiwan localization +- Improved stat scanning +- Updated German localization +1.2.0 +- Updated French localization by Tixu and Silaor, now supports StatSummary +- Fixed a bug causing StatSummary not showing correctly for languages other then English +- Fixed Parry/SpellHaste rating conversions +- Updated libs +1.1.9 +- Pre updated the TOC to 2.1.0 +- Improved the Sigma icon +- Updated readme file +1.1.8 +- StatSummary: "Mana Regen while Not casting" now shows the correct value +- StatSummary: "Health Regen while Out of Combat" now shows the correct value +- StatSummary: fixed lines with "and" counting stats twice +- Added support for Gnome +5% Intellect Racial +- Added support for Human +10% Spirit Racial +- Fixed StatLogic line 6285 strfind error (thanks to everyone that helped) +- Updated Korean localizations by fenlis +1.1.7 +- Minor bug fixes +- Updated Taiwan localizations by mcc +- Updated Korean localizations by fenlis +- Updated French localizations by renchap +1.1.6 +- Stat Summary now has the option to show resistances +- Fixed Feral Attack Power name +- /rb sum ignore unused now shows leather for hunters +- Fixed an error when mousing over items that goes into a slot you currently have no equipment in when you have the ignore enchant or gem option on +1.1.5 +- Fixed MP5NC, HP5OC summary +- Changed default diff style from comp to main, since not everyone uses a compare addon +- Attempt to fix some more funny bugs +1.1.4 +- Option to display Weapon Max Damage in summary +- Improved option for ignoring enchants and gems, they are now 2 different options +- Fixed some classes not showing summary for cloaks +- Fixed incorrect shield diffs +- Improved diff style code should fix funny errors +1.1.3 +- Fixed EQCompare, tekKompare support +- Updated Taiwan localizations +1.1.2 +- Option to Display diff values in the main tooltip or only in compare tooltips for readability +- Option to Ignore enchants and gems on items when calculating the stat summary +- /rb sum ignore unused now shows all armor types they are use for druids, paladins and shamans +- Updated Taiwan localizations +- Code clean up +1.1.1 +- Option to Show stat summary only for highest level armor type and items you can use with uncommon quality and up +- Option to Hide stat summary for equipped items +- Option to Add a blank line before stat summary for readability +- Mage, Warlock, Shaman now shows spellcrit as default summary instead of crit +- Updated Taiwan localizations +- Minor bug fixes +1.1.0 +- NEW: Stat Summary - Display the sum of stats of the item and/or the stat difference of the item and your equipped items +- Choose the stats you really care about to be show in the summary +- Composite stats are broken down and added into base stats, and supports talent/buff mods, Ex: "Spell Crit Chance" is calculated from "Spell Crit Rating" and "Intellect" +- Option descriptions now show class names for class specific stat conversions +- Added support for Aspect of the Viper +- Option to hide rating conversions +- Option to hide all base stat conversions +- Option to further breakdown Defense into Crit Avoidance, Hit Avoidance, Dodge, Parry and Block +- Option to further breakdown Weapon Skills into Crit, Hit, Dodge Neglect, Parry Neglect, Block Neglect +- Fixed Taiwan and French localization errors +- Fixed locale registering twice error +- Fixed mp5 and hp5 calculations for Shaman, Druid, Mage, Warlock +- Agi -> Dodge only works for your current level, for best results turn off /rb usereqlv, and set /rb level 0 +1.0.0 +- Support for talents and buffs that modify your stats +- Supports the following stat conversions +- Str -> AP, Block, Healing(Talent) +- Agi -> Crit, Dodge, AP, RAP, Armor +- Sta -> Health, SpellDmg(Talent) +- Int -> Mana, SpellCrit, SpellDmg(Talent), Healing(Talent), MP5(Talent), RAP(Talent), Armor(Talent) +- Spi -> MP5(Talent), MP5NC, HP5, SpellDmg(Talent), Healing(Talent) +- If you need a GUI config window for RatingBuster, use Niagara (Download at: http://files.wowace.com/) +0.9.5 +- Fixed library error +0.9.4 +- Added Taiwan localizations by CuteMiyu +0.9.3 +- Updated Korean localization by kcgcom +0.9.2 +- Code clean up +- Finally removed Compost +0.9.1a +- Really fixed locales +0.9.1 +- Fixed locales +- Added Korean localization by kcgcom +0.9.0 +- Optimized parsing algorithm to use fewer resources +- showCritFromAgi and showSpellCritFromInt will now correctly save as per class data +- /rb level will now save +- No longer scans buffs +- Code clean up +0.8.6 +- tekKompare support +- Sniff support +0.8.5 +- AtlasLoot support +- ItemMagic support +- Fixed line 785 error +0.8.4 +- Spell Crit from Intellect defaults off for Hunters too +0.8.3 +- Fixed color picker bug +- Updated French localization (Tixu) +0.8.2 +- Fixed % signs showing before some periods bug +0.8.1 +- Option to enable colored text (/rb color) +- Fixed Defense showing the % sign bug +- Fixed Haste Rating conversion +- Updated French localization (Tixu) +0.8.0 +- Option to show Crit from Agility, Ex: "+15 Agility (+0.72% Crit)" +- Option to show Spell Crit from Intellect, Ex: "+23 Intellect (+0.35% Spell Crit)" +- Support for "grant you xx stat" type pattern, ex: Quel'Serrar, Assassination Armor set +- "+14 (1.21%) Rating" type strings changed to "+14 Rating (+1.21%)" +- Recoded tooltip scanner is now more easily extendable and has support for multiple separators for better accuracy. +0.7.6 +- The amount of haste granted by a point of haste rating has been increased by 50% (Patch 2.0.7) +- Fixed Mutltitips support +- Minor code tweaks +0.7.5 +- Fixed double conversion bug +- Fixed GetItem error +- Support for Hit Avoidance Rating (assuming its the same as melee Hit Rating) +0.7.1 +- Fixed a hooking bug +0.7.0 +- Now uses the OnTooltipSetItem script handler instead of hooking all the SetX methods, + this combined with the new Tooltip:GetItem() method should also fix problems where + RatingBuster doesn't always work, like at the mailbox. +0.6.6 +- MultiTips support +0.6.5 +- LinkWrangler support +0.6.4 +- Updated Libs +0.6.3 +- Use required level defaults to true +- Support for EQCompare +- Changed toc to 20003 for TBC (It will show up as out-of-date until TBC goes live, enable loading out-of-date to load it) +0.6.2 +- Added German localization by Runenstetter@Nathrezim.EU +- Fixed French localization +0.6.1 +- Added French localization by Tixu +0.6 +- Added option to calculate using the required level if you are below the required level +- Redesigned the tooltip scanner to be more locale friendly, should be easier to do translations now. +0.5.1 +- Fixed line 457 error +0.5 +- Improved ItemLevel and ItemID algorithm, will now work on most tooltips +- Updated Libs +0.4.3 +- Fixed line 499 error +- Temporarily removed ItemLevel and ID support for Bagnon, working on a better implementation +0.4.2 +- Fixed a rare error in line 487 +- Updated Libs +0.4.1 +- Inspect frame support for ItemLevel and ItemID +- Two-Handed skill ratings now works +0.4 +- Bagnon support for ItemLevel and ItemID +- Fixed some errors +- Updated libs +0.3.2 +- Fixed auction house bug +0.3.1 +- Fixed keyring bug +0.3 +- Works with enchant links +- Works with keyring items +0.2.1 +- Fixed AceConsole error +0.2 +- Simplified the localization file for easier localization +- Added keyword "spell crit" +- Added Item Level, Item ID support for profession trainer items +- Set Debugging to false +0.1.1 +- Removed AceHook2.1 cause it was causing problems with other Ace2 addons +0.1 +- Initial release \ No newline at end of file diff --git a/Changelog-RatingBuster-1.6.7.txt b/Changelog-RatingBuster-1.6.7.txt new file mode 100644 index 0000000..dce8821 --- /dev/null +++ b/Changelog-RatingBuster-1.6.7.txt @@ -0,0 +1,36 @@ +------------------------------------------------------------------------ +r355 | mikk | 2012-04-25 19:24:09 +0000 (Wed, 25 Apr 2012) | 1 line +Changed paths: + A /tags/1.6.7 (from /trunk:354) + +Tagging as 1.6.7 to pull in new LibStatLogic with fixed gem scanner (would error on settings gems if an equipment slot was empty) +------------------------------------------------------------------------ +r354 | mikk | 2012-04-23 21:23:47 +0000 (Mon, 23 Apr 2012) | 1 line +Changed paths: + M /trunk/RatingBuster.lua + +- Figure out max level automagically so it doesn't get forgotten again (using MAX_PLAYER_LEVEL_TABLE) +------------------------------------------------------------------------ +r353 | mikk | 2012-04-23 01:10:36 +0000 (Mon, 23 Apr 2012) | 1 line +Changed paths: + M /trunk/RatingBuster.lua + +- max level is 85, not 80 +------------------------------------------------------------------------ +r351 | mikk | 2012-04-22 22:10:39 +0000 (Sun, 22 Apr 2012) | 4 lines +Changed paths: + M /trunk/RatingBuster.toc + +- TOC 40300 +Also pulling in new LibStatLogic-1.2: +- Will now pick up new gems in 4.3 (belatedly) +- Added code to always understand gems that already exist in your gear regardless of addon updated-ness +------------------------------------------------------------------------ +r350 | lightsfuryuther | 2012-01-10 00:39:00 +0000 (Tue, 10 Jan 2012) | 2 lines +Changed paths: + M /trunk/RatingBuster-Locale-enUS.lua + M /trunk/RatingBuster.lua + +- Added an option to disable integration with the Reforging UI +- Added English localization strings for the new configuration entries. Other locales will need to be updated. +------------------------------------------------------------------------ diff --git a/GPL.txt b/GPL.txt new file mode 100644 index 0000000..82fa1da --- /dev/null +++ b/GPL.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/RB-Example.jpg b/RB-Example.jpg new file mode 100644 index 0000000..e412bf0 Binary files /dev/null and b/RB-Example.jpg differ diff --git a/RatingBuster-Locale-deDE.lua b/RatingBuster-Locale-deDE.lua new file mode 100644 index 0000000..46fdec1 --- /dev/null +++ b/RatingBuster-Locale-deDE.lua @@ -0,0 +1,626 @@ +--[[ +Name: RatingBuster deDE locale +Revision: $Revision: 75639 $ +Translated by: +- Kuja +]] + +local L = AceLibrary("AceLocale-2.2"):new("RatingBuster") +---- +-- This file is coded in UTF-8 +-- If you don't have a editor that can save in UTF-8, I recommend Ultraedit +---- +-- To translate AceLocale strings, replace true with the translation string +-- Before: ["Show Item ID"] = true, +-- After: ["Show Item ID"] = "顯示物品編號", +L:RegisterTranslations("deDE", function() return { + --------------- + -- Waterfall -- + --------------- + ["RatingBuster Options"] = "RatingBuster Optionen", + ["Waterfall-1.0 is required to access the GUI."] = "Waterfall-1.0 wird zum Anzeigen der GUI benötigt", + --------------------------- + -- Slash Command Options -- + --------------------------- + -- /rb optionswin + ["Options Window"] = "Optionsfenster", + ["Shows the Options Window"] = "Zeigt das Optionsfenster", + -- /rb statmod + ["Enable Stat Mods"] = "Aktiviere Stat Mods", + ["Enable support for Stat Mods"] = "Aktiviert die Unterstützung von Stat Mods", + -- /rb itemid + ["Show ItemID"] = "Zeige ItemID", + ["Show the ItemID in tooltips"] = "Zeigt ItemID im Tooltip", + -- /rb itemlevel + ["Show ItemLevel"] = "Zeige ItemLevel", + ["Show the ItemLevel in tooltips"] = "Zeigt ItemLevel im Tooltip", + -- /rb usereqlv + ["Use required level"] = "Nutze benötigten Level", + ["Calculate using the required level if you are below the required level"] = "Berechne auf Basis des Benötigten Levels falls du unter diesem bist", + -- /rb setlevel + ["Set level"] = "Setze Level", + ["Set the level used in calculations (0 = your level)"] = "Legt den Level der zur Berechnung Benutzt wird fest (0 = dein Level)", + -- /rb color + ["Change text color"] = "Ändere Textfarbe", + ["Changes the color of added text"] = "Ändert die Textfarbe des hinzugefügten Textes", + -- /rb color pick + ["Pick color"] = "Wähle Farbe", + ["Pick a color"] = "Wähle eine Farbe", + -- /rb color enable + ["Enable color"] = "Farbe aktivieren", + ["Enable colored text"] = "Aktiviert gefärbten Text", + -- /rb rating + ["Rating"] = "Bewertung", + ["Options for Rating display"] = "Optionen für die Bewertungsanzeige", + -- /rb rating show + ["Show Rating conversions"] = "Zeige Bewertungsumrechnung", + ["Show Rating conversions in tooltips"] = "Zeige Bewertungsumrechnung im Tooltip", + -- /rb rating detail + ["Show detailed conversions text"] = "Zeige detaillierten Umrechnungtext", + ["Show detailed text for Resiliance and Expertise conversions"] = "Zeige detaillierten Text für Abhärtungs- und Waffenkundumrechnung", + -- /rb rating def + ["Defense breakdown"] = "Verteidigungsanalyse", + ["Convert Defense into Crit Avoidance, Hit Avoidance, Dodge, Parry and Block"] = "Wandle Verteidigung in Vermeidung von (kritischen) Treffern, Ausweichen, Parieren und Blocken um", + -- /rb rating wpn + ["Weapon Skill breakdown"] = "Waffenfertigkeitswertungsanalyse", + ["Convert Weapon Skill into Crit, Hit, Dodge Neglect, Parry Neglect and Block Neglect"] = "Wandle Waffenfertigkeitswertung in (kritische) Treffer, Ausweich-, Parier-, und Blockmissachtung um", + -- /rb rating exp -- 2.3.0 + ["Expertise breakdown"] = "Waffenkundeanalyse", + ["Convert Expertise into Dodge Neglect and Parry Neglect"] = "Wandle Waffenkunde in Ausweich- und Pariermissachtung um", + + -- /rb stat + --["Stat Breakdown"] = "Werte", + ["Changes the display of base stats"] = "Zeigt die Basiswerte an", + -- /rb stat show + ["Show base stat conversions"] = "Zeige Basiswertumwandlung", + ["Show base stat conversions in tooltips"] = "Zeige Basiswertumwandlung im Tooltip", + -- /rb stat str + ["Strength"] = "Stärke", + ["Changes the display of Strength"] = "Zeigt Stärke an", + -- /rb stat str ap + ["Show Attack Power"] = "Zeige Angriffskraft", + ["Show Attack Power from Strength"] = "Zeige Angriffskraft, resultierend aus Stärke", + -- /rb stat str block + ["Show Block Value"] = "Zeige Blockwert", + ["Show Block Value from Strength"] = "Zeige Blockwert, resultierend aus Stärke", + -- /rb stat str dmg + ["Show Spell Damage"] = "Zeige Zauberschaden", + ["Show Spell Damage from Strength"] = "Zeige Zauberschaden, resultierend aus Stärke", + -- /rb stat str heal + ["Show Healing"] = "Zeige Heilung", + ["Show Healing from Strength"] = "Zeige Heilung, resultierend aus Stärke", + + -- /rb stat agi + ["Agility"] = "Beweglichkeit", + ["Changes the display of Agility"] = "Zeigt Beweglichkeit an", + -- /rb stat agi crit + ["Show Crit"] = "Zeige Krit.", + ["Show Crit chance from Agility"] = "Zeige Chance auf kritische Treffer, resultierend aus Beweglichkeit", + -- /rb stat agi dodge + ["Show Dodge"] = "Zeige Ausweichen", + ["Show Dodge chance from Agility"] = "Zeige Ausweichchance, resultierend aus Beweglichkeit", + -- /rb stat agi ap + ["Show Attack Power"] = "Zeige Angriffskraft", + ["Show Attack Power from Agility"] = "Zeige Angriffskraft, resultierend aus Beweglichkeit", + -- /rb stat agi rap + ["Show Ranged Attack Power"] = "Zeige Distanzangriffskraft (RAP)", + ["Show Ranged Attack Power from Agility"] = "Zeige Distanzangriffskraft, resultierend aus Beweglichkeit", + -- /rb stat agi armor + ["Show Armor"] = "Zeige Rüstung", + ["Show Armor from Agility"] = "Zeige Rüstung, resultierend aus Beweglichkeit", + -- /rb stat agi heal + ["Show Healing"] = "Zeige Heilung", + ["Show Healing from Agility"] = "Zeige Heilung, resultierend aus Beweglichkeit", + + -- /rb stat sta + ["Stamina"] = "Ausdauer", + ["Changes the display of Stamina"] = "Zeige Ausdauer an", + -- /rb stat sta hp + ["Show Health"] = "Zeige Leben", + ["Show Health from Stamina"] = "Zeige Leben, resultierend aus Ausdauer", + -- /rb stat sta dmg + ["Show Spell Damage"] = "Zeige Zauberschaden", + ["Show Spell Damage from Stamina"] = "Zeige Zauberschaden, resultierend aus Ausdauer", + + -- /rb stat int + ["Intellect"] = "Intelligenz", + ["Changes the display of Intellect"] = "Zeige Intelligenz an", + -- /rb stat int spellcrit + ["Show Spell Crit"] = "Zeige Zauberkrit.", + ["Show Spell Crit chance from Intellect"] = "Zeige Chance auf kritische Zaubertreffer, resultierend aus Intelligent", + -- /rb stat int mp + ["Show Mana"] = "Zeige Mana", + ["Show Mana from Intellect"] = "Zeige Mana, resultierend aus Intelligenz", + -- /rb stat int dmg + ["Show Spell Damage"] = "Zeige Zauberschaden", + ["Show Spell Damage from Intellect"] = "Zeige Zauberschaden, resultierend aus Intelligenz", + -- /rb stat int heal + ["Show Healing"] = "Zeige Heilung", + ["Show Healing from Intellect"] = "Zeige Heilung, resultierend aus Intelligenz", + -- /rb stat int mp5 + ["Show Mana Regen"] = "Zeige Manaregeneration", + ["Show Mana Regen while casting from Intellect"] = "Zeige Manaregeneration beim Zaubern, resultierend aus Intelligenz", + -- /rb stat int mp5nc + --["Show Mana Regen while NOT casting"] = true, + --["Show Mana Regen while NOT casting from Intellect"] = true, + -- /rb stat int rap + ["Show Ranged Attack Power"] = "Zeige Distanzangriffskraft (RAP)", + ["Show Ranged Attack Power from Intellect"] = "Zeige Distanzangriffskraft, resultierend aus Intelligenz", + -- /rb stat int armor + ["Show Armor"] = "Zeige Rüstung", + ["Show Armor from Intellect"] = "Zeige Rüstung, resultierend aus Intelligenz", + + -- /rb stat spi + ["Spirit"] = "Willenskraft", + ["Changes the display of Spirit"] = "Zeige Willenskraft an", + -- /rb stat spi mp5 + ["Show Mana Regen"] = "Zeige Manaregeneration", + ["Show Mana Regen while casting from Spirit"] = "Zeige Manaregeneration während des Zauberns, resultierend aus Willenskraft", + -- /rb stat spi mp5nc + ["Show Mana Regen while NOT casting"] = "Zeige Manaregeneration (nicht Zaubernd)", + ["Show Mana Regen while NOT casting from Spirit"] = "Zeige Manaregeneration (nicht Zaubernd), resultierend aus Willenskraft", + -- /rb stat spi hp5 + ["Show Health Regen"] = "Zeige Lebensregeneration", + ["Show Health Regen from Spirit"] = "Zeige Lebensregeneration, resultierend aus Willenskraft", + -- /rb stat spi dmg + ["Show Spell Damage"] = "Zeige Zauberschaden", + ["Show Spell Damage from Spirit"] = "Zeige Zauberschaden, resultierend aus Willenskraft", + -- /rb stat spi heal + ["Show Healing"] = "Zeige Heilung", + ["Show Healing from Spirit"] = "Zeige Heilung, resultierend aus Willenskraft", + + -- /rb sum + ["Stat Summary"] = "Werteübersicht", + ["Options for stat summary"] = "Optionen für die Werteübersicht", + -- /rb sum show + ["Show stat summary"] = "Zeige Werteübersicht", + ["Show stat summary in tooltips"] = "Zeige Werteübersicht im Tooltip", + -- /rb sum ignore + ["Ignore settings"] = "Ignorierungseinstellungen", + ["Ignore stuff when calculating the stat summary"] = "Ignoriere Werte bei der Berechnung der Werteübersicht", + -- /rb sum ignore unused + ["Ignore unused items types"] = "Ignoriere Ungenutzte Itemtypen", + ["Show stat summary only for highest level armor type and items you can use with uncommon quality and up"] = "Zeige Werteübersicht nur für den Höchstleveligen Itemtyp und benutzbare Items mit der Qualität \"Selten\" oder höher", + -- /rb sum ignore equipped + ["Ignore equipped items"] = "Ignoriere Angelegte Items", + ["Hide stat summary for equipped items"] = "Verstecke Werteübersicht für Angelegte Items", + -- /rb sum ignore enchant + ["Ignore enchants"] = "Ignoriere Verzauberungen", + ["Ignore enchants on items when calculating the stat summary"] = "Ignoriere Itemverzauberungen für die Berechnung der Werteübersicht", + -- /rb sum ignore gem + ["Ignore gems"] = "Ignoriere Edelsteine", + ["Ignore gems on items when calculating the stat summary"] = "Ignoriere Edelsteine auf gesockelten Items für die Berechnung der Werteübersicht", + -- /rb sum diffstyle + ["Display style for diff value"] = "Anzeigestil für veränderte Werte", + ["Display diff values in the main tooltip or only in compare tooltips"] = "Zeige veränderte Werte im Hauptooltip oder nur in Vergleichstooltips", + -- /rb sum space + ["Add empty line"] = "Füge leere Zeile hinzu", + ["Add a empty line before or after stat summary"] = "Füge eine leere Zeile vor oder nach der Werteübersicht hinzu", + -- /rb sum space before + ["Add before summary"] = "Vor Berechnung hinzufügen", + ["Add a empty line before stat summary"] = "Füge eine leere Zeile vor der Werteübersicht hinzu", + -- /rb sum space after + ["Add after summary"] = "Nach Berechnung hinzufügen", + ["Add a empty line after stat summary"] = "Füge eine leere Zeile nach der Werteübersicht hinzu", + -- /rb sum icon + ["Show icon"] = "Zeige Symbol", + ["Show the sigma icon before summary listing"] = "Zeige das Sigma Symbol vor der Übersichtsliste an", + -- /rb sum title + ["Show title text"] = "Zeige Titeltext", + ["Show the title text before summary listing"] = "Zeige Titeltext vor der Übersichtsliste an", + -- /rb sum showzerostat + ["Show zero value stats"] = "Zeige Nullwerte", + ["Show zero value stats in summary for consistancy"] = "Zeige zur Konsistenz die Nullwerte in der Übersicht an", + -- /rb sum calcsum + ["Calculate stat sum"] = "Berechne Wertesummen", + ["Calculate the total stats for the item"] = "Berechne die Gesamtwerte der Items", + -- /rb sum calcdiff + ["Calculate stat diff"] = "Berechne Wertedifferenz", + ["Calculate the stat difference for the item and equipped items"] = "Berechne Wertedifferenz für das Item und angelegte Items", + -- /rb sum sort + ["Sort StatSummary alphabetically"] = "Sortiere Werteübersicht Alphabetisch", + ["Enable to sort StatSummary alphabetically, disable to sort according to stat type(basic, physical, spell, tank)"] = "Sortiere Werteübersicht alphabetisch, deaktivieren um nach Wertetyp zu sortieren (Basis, Physisch, Zauber, Tank)", + -- /rb sum avoidhasblock + ["Include block chance in Avoidance summary"] = "Zeige Blockchance in Vermeidungsübersicht", + ["Enable to include block chance in Avoidance summary, Disable for only dodge, parry, miss"] = "Zeige Blockchance in Vermeidungsübersicht, deaktivieren um nur Ausweichen, Parieren und Verfehlen zu zeigen", + -- /rb sum basic + ["Stat - Basic"] = "Werte - Basis", + ["Choose basic stats for summary"] = "Wähle Basiswerte für die Übersicht", + -- /rb sum physical + ["Stat - Physical"] = "Werte - Physisch", + ["Choose physical damage stats for summary"] = "Wähle Physische Schadenswerte für die Übersicht", + -- /rb sum spell + ["Stat - Spell"] = "Werte - Zauber", + ["Choose spell damage and healing stats for summary"] = "Wähle Zauberschaden und Heilungswerte für die Übersicht", + -- /rb sum tank + ["Stat - Tank"] = "Werte - Tank", + ["Choose tank stats for summary"] = "Zeige Tankwerte für die Übersicht", + -- /rb sum stat hp + ["Sum Health"] = "Leben zusammenrechnen", + ["Health <- Health, Stamina"] = "Leben <- Leben, Ausdauer", + -- /rb sum stat mp + ["Sum Mana"] = "Mana zusammenrechnen", + ["Mana <- Mana, Intellect"] = "Mana <- Mana, Intelligenz", + -- /rb sum stat ap + ["Sum Attack Power"] = "Angriffskraft zusammenrechnen", + ["Attack Power <- Attack Power, Strength, Agility"] = "Angriffskraft <- Angriffskraft, Stärke, Beweglichkeit", + -- /rb sum stat rap + ["Sum Ranged Attack Power"] = "Distanzangriffskraft (RAP) zusammenrechnen", + ["Ranged Attack Power <- Ranged Attack Power, Intellect, Attack Power, Strength, Agility"] = "Distanzangriffskraft <- Distanzangriffskraft, Intelligenz, Angriffskraft, Stärke, Beweglichkeit", + -- /rb sum stat fap + ["Sum Feral Attack Power"] = "Feral Angriffskraft zusammenrechnen", + ["Feral Attack Power <- Feral Attack Power, Attack Power, Strength, Agility"] = "Feral Angriffskraft <- Feral Angriffskraft, Angriffskraft, Stärke, Beweglichkeit", + -- /rb sum stat dmg + ["Sum Spell Damage"] = "Zauberschaden zusammenrechnen", + ["Spell Damage <- Spell Damage, Intellect, Spirit, Stamina"] = "Zauberschaden <- Zauberschaden, Intelligenz, Willenskraft, Ausdauer", + -- /rb sum stat dmgholy + ["Sum Holy Spell Damage"] = "Heiligzauberschaden zusammenrechnen", + ["Holy Spell Damage <- Holy Spell Damage, Spell Damage, Intellect, Spirit"] = "Heiligzauberschaden <- Heiligzauberschaden, Zauberschaden, Intelligenz, Willenskraft", + -- /rb sum stat dmgarcane + ["Sum Arcane Spell Damage"] = "Arkanzauberschaden zusammenrechnen", + ["Arcane Spell Damage <- Arcane Spell Damage, Spell Damage, Intellect"] = "Arkanzauberschaden <- Arkanzauberschaden, Zauberschaden, Intelligenz", + -- /rb sum stat dmgfire + ["Sum Fire Spell Damage"] = "Feuerzauberschaden zusammenrechnen", + ["Fire Spell Damage <- Fire Spell Damage, Spell Damage, Intellect, Stamina"] = "Feuerzauberschaden <- Feuerzauberschaden, Zauberschaden, Intelligenz, Ausdauer", + -- /rb sum stat dmgnature + ["Sum Nature Spell Damage"] = "Naturzauberschaden zusammenrechnen", + ["Nature Spell Damage <- Nature Spell Damage, Spell Damage, Intellect"] = "Naturzauberschaden <- Naturzauberschaden, Zauberschaden, Intelligenz", + -- /rb sum stat dmgfrost + ["Sum Frost Spell Damage"] = "Frostzauberschaden zusammenrechnen", + ["Frost Spell Damage <- Frost Spell Damage, Spell Damage, Intellect"] = "Frostzauberschaden <- Frostzauberschaden, Zauberschaden, Intelligenz", + -- /rb sum stat dmgshadow + ["Sum Shadow Spell Damage"] = "Schattenzauberschaden zusammenrechnen", + ["Shadow Spell Damage <- Shadow Spell Damage, Spell Damage, Intellect, Spirit, Stamina"] = "Schattenzauberschaden <- Schattenzauberschaden, Zauberschaden, Intelligenz, Willenskraft, Ausdauer", + -- /rb sum stat heal + ["Sum Healing"] = "Heilung zusammenrechnen", + ["Healing <- Healing, Intellect, Spirit, Agility, Strength"] = "Heilung <- Heilung, Intelligenz, Willenskraft, Beweglichkeit, Sträke", + -- /rb sum stat hit + ["Sum Hit Chance"] = "Trefferchance zusammenrechnen", + ["Hit Chance <- Hit Rating, Weapon Skill Rating"] = "Trefferchance <- Trefferwertung, Waffenfertigkeitswertung", + -- /rb sum stat crit + ["Sum Crit Chance"] = "kritische Trefferchance zusammenrechnen", + ["Crit Chance <- Crit Rating, Agility, Weapon Skill Rating"] = "kritische Trefferchance <- kritische Trefferwertung, Beweglichkeit, Waffenfertigkeitswertung", + -- /rb sum stat haste + ["Sum Haste"] = "Tempo zusammenrechnen", + ["Haste <- Haste Rating"] = "Tempo <- Tempowertung", + -- /rb sum stat critspell + ["Sum Spell Crit Chance"] = "kritische Zaubertrefferchance zusammenrechnen", + ["Spell Crit Chance <- Spell Crit Rating, Intellect"] = "kritische Zaubertrefferchance <- kritische Zaubertrefferwertung, Intelligenz", + -- /rb sum stat hitspell + ["Sum Spell Hit Chance"] = "Zaubertrefferchance zusammenrechnen", + ["Spell Hit Chance <- Spell Hit Rating"] = "Zaubertrefferchance <- Zaubertrefferwertung", + -- /rb sum stat hastespell + ["Sum Spell Haste"] = "Zaubertempo zusammenrechnen", + ["Spell Haste <- Spell Haste Rating"] = "Zaubertempo <- Zaubertempowertung", + -- /rb sum stat mp5 + ["Sum Mana Regen"] = "Manaregeneration zusammenrechnen", + ["Mana Regen <- Mana Regen, Spirit"] = "Manaregeneration <- Manaregeneration, Willenskraft", + -- /rb sum stat mp5nc + ["Sum Mana Regen while not casting"] = "Manaregeneration zusammenrechnen (nicht Zaubernd)", + ["Mana Regen while not casting <- Spirit"] = "Manaregeneration (nicht Zaubernd) <- Manaregeneration (nicht Zaubernd), Willenskraft", + -- /rb sum stat hp5 + ["Sum Health Regen"] = "Lebensregeneration zusammenrechnen", + ["Health Regen <- Health Regen"] = "Lebensregeneration <- Lebensregeneration", + -- /rb sum stat hp5oc + ["Sum Health Regen when out of combat"] = "Lebensregeneration außerhalb des Kampfes zusammenrechnen", + ["Health Regen when out of combat <- Spirit"] = "Lebensregeneration außerhalb des Kampfes, Willenskraft", + -- /rb sum stat armor + ["Sum Armor"] = "Rüstung zusammenrechnen", + ["Armor <- Armor from items, Armor from bonuses, Agility, Intellect"] = "Rüstung <- Rüstung von Items, Rüstung von Boni, Beweglichkeit, Intelligenz", + -- /rb sum stat blockvalue + ["Sum Block Value"] = "Blockwert zusammenrechnen", + ["Block Value <- Block Value, Strength"] = "Blockwert <- Blockwert, Stärke", + -- /rb sum stat dodge + ["Sum Dodge Chance"] = "Ausweichchance zusammenrechnen", + ["Dodge Chance <- Dodge Rating, Agility, Defense Rating"] = "Ausweichchance <- Ausweichwertung, Beweglichkeit, Verteidigungswertung", + -- /rb sum stat parry + ["Sum Parry Chance"] = "Parierchance zusammenrechnen", + ["Parry Chance <- Parry Rating, Defense Rating"] = "Parierchance <- Parierwertung, Verteidigungswertung", + -- /rb sum stat block + ["Sum Block Chance"] = "Blockchance zusammenrechnen", + ["Block Chance <- Block Rating, Defense Rating"] = " Blockchance <- Blockwertung, Verteidigungswertung", + -- /rb sum stat avoidhit + ["Sum Hit Avoidance"] = "Treffervermeidung zusammenrechnen", + ["Hit Avoidance <- Defense Rating"] = "Treffervermeidung <- Verteidigungswertung", + -- /rb sum stat avoidcrit + ["Sum Crit Avoidance"] = "kritische Treffervermeidung", + ["Crit Avoidance <- Defense Rating, Resilience"] = "kritische Treffervermeidung <- Verteidigungswertung, Abhärtungswertung", + -- /rb sum stat neglectdodge + ["Sum Dodge Neglect"] = "Ausweichmissachtung zusammenrechnen", + ["Dodge Neglect <- Expertise, Weapon Skill Rating"] = "Ausweichmissachtung <- Waffenkunde, Waffenfertigkeitswertung", -- 2.3.0 + -- /rb sum stat neglectparry + ["Sum Parry Neglect"] = "Pariermissachtung zusammenrechnen", + ["Parry Neglect <- Expertise, Weapon Skill Rating"] = "Pariermissachtung <- Waffenkunde, Waffenfertigkeitswertung", -- 2.3.0 + -- /rb sum stat neglectblock + ["Sum Block Neglect"] = "Blockmissachtung", + ["Block Neglect <- Weapon Skill Rating"] = "Blockmissachtung <- Waffenfertigkeitswertung", + -- /rb sum stat resarcane + ["Sum Arcane Resistance"] = "Arkanwiderstand zusammenrechnen", + ["Arcane Resistance Summary"] = "Arkanwiderstandsübersicht", + -- /rb sum stat resfire + ["Sum Fire Resistance"] = "Feuerwiderstand zusammenrechnen", + ["Fire Resistance Summary"] = "Feuerwiderstandsübersicht", + -- /rb sum stat resnature + ["Sum Nature Resistance"] = "Naturwiderstand zusammenrechnen", + ["Nature Resistance Summary"] = "Naturwiderstandsübersicht", + -- /rb sum stat resfrost + ["Sum Frost Resistance"] = "Frostwiderstand zusammenrechnen", + ["Frost Resistance Summary"] = "Frostwiderstandsübersicht", + -- /rb sum stat resshadow + ["Sum Shadow Resistance"] = "Schattenwiderstand zusammenrechnen", + ["Shadow Resistance Summary"] = "Schattenwiderstandsübersicht", + -- /rb sum stat maxdamage + ["Sum Weapon Max Damage"] = "Waffenmaximalschaden zusammenrechnen", + ["Weapon Max Damage Summary"] = "Waffenmaximalschadensübersicht", + -- /rb sum stat pen + ["Sum Penetration"] = "Durchschlag zusammenrechnen", + ["Spell Penetration Summary"] = "Durchschlagsübersicht", + -- /rb sum stat ignorearmor + ["Sum Ignore Armor"] = "Rüstungsmissachtung zusammenrechnen", + ["Ignore Armor Summary"] = "Rüstungsmissachtungsübersicht", + -- /rb sum stat weapondps + --["Sum Weapon DPS"] = true, + --["Weapon DPS Summary"] = true, + -- /rb sum statcomp str + ["Sum Strength"] = "Stärke zusammenrechnen", + ["Strength Summary"] = "Stärkeübersicht", + -- /rb sum statcomp agi + ["Sum Agility"] = "Beweglichkeit zusammenrechnen", + ["Agility Summary"] = "Beweglichkeitsübersicht", + -- /rb sum statcomp sta + ["Sum Stamina"] = "Ausdauer zusammenrechnen", + ["Stamina Summary"] = "Ausdauerübersicht", + -- /rb sum statcomp int + ["Sum Intellect"] = "Intelligenz zusammenrechnen", + ["Intellect Summary"] = "Intelligenzübersicht", + -- /rb sum statcomp spi + ["Sum Spirit"] = "Willenskraft zusammenrechnen", + ["Spirit Summary"] = "Willenkraftübersicht", + -- /rb sum statcomp hitrating + ["Sum Hit Rating"] = "Trefferwertung zusammenrechnen", + ["Hit Rating Summary"] = "Trefferwertungsübersicht", + -- /rb sum statcomp critrating + ["Sum Crit Rating"] = "kritische Trefferwertung zusammenrechnen", + ["Crit Rating Summary"] = "kritische Trefferwertungsübersicht", + -- /rb sum statcomp hasterating + ["Sum Haste Rating"] = "Tempowertung zusammenrechnen", + ["Haste Rating Summary"] = "Tempowertungsübersicht", + -- /rb sum statcomp hitspellrating + ["Sum Spell Hit Rating"] = "Zaubertrefferwertung zusammenrechnen", + ["Spell Hit Rating Summary"] = "Zaubertrefferwertungsübersicht", + -- /rb sum statcomp critspellrating + ["Sum Spell Crit Rating"] = "kritische Zaubertrefferwertung zusammenrechnen", + ["Spell Crit Rating Summary"] = "kritische Zaubertrefferwertungsübersicht", + -- /rb sum statcomp hastespellrating + ["Sum Spell Haste Rating"] = "Zaubertempowertung zusammenrechnen", + ["Spell Haste Rating Summary"] = "Zaubertempowertungsübersicht", + -- /rb sum statcomp dodgerating + ["Sum Dodge Rating"] = "Verteidigungswertung zusammenrechnen", + ["Dodge Rating Summary"] = "Verteidigungswertungsübersicht", + -- /rb sum statcomp parryrating + ["Sum Parry Rating"] = "Parierwertung zusammenrechnen", + ["Parry Rating Summary"] = "Parierwertungsübersicht", + -- /rb sum statcomp blockrating + ["Sum Block Rating"] = "Blockwertung zusammenrechnen", + ["Block Rating Summary"] = "Blockwertungsübersicht", + -- /rb sum statcomp res + ["Sum Resilience"] = "Abhärtung zusammenrechnen", + ["Resilience Summary"] = "Abhärtungsübersicht", + -- /rb sum statcomp def + ["Sum Defense"] = "Verteidigung zusammenrechnen", + ["Defense <- Defense Rating"] = "Verteidigung <- Verteidigungswertung", + -- /rb sum statcomp wpn + ["Sum Weapon Skill"] = "Waffenfertigkeit zusammenrechnen", + ["Weapon Skill <- Weapon Skill Rating"] = "Waffenfertigkeit <- Waffenfertigkeitswertung", + -- /rb sum statcomp exp -- 2.3.0 + ["Sum Expertise"] = "Waffenkunde zusammenrechnen", + ["Expertise <- Expertise Rating"] = "Waffenkunde <- Waffenkundewertung", + -- /rb sum statcomp tp + ["Sum TankPoints"] = "TankPoints zusammenrechnen", + ["TankPoints <- Health, Total Reduction"] = "TankPoints <- Leben, Gesamtreduzierung", + -- /rb sum statcomp tr + ["Sum Total Reduction"] = "Gesamtreduzierung zusammenrechnen", + ["Total Reduction <- Armor, Dodge, Parry, Block, Block Value, Defense, Resilience, MobMiss, MobCrit, MobCrush, DamageTakenMods"] = "Gesamtreduzierung <- Rüstung, Ausweichen, Parieren, Block, Blockwert, Verteidigung, Abhärtung, MobMiss, MobCrit, MobCrush, DamageTakenMods", + -- /rb sum statcomp avoid + ["Sum Avoidance"] = "Vermeidung zusammenrechnen", + ["Avoidance <- Dodge, Parry, MobMiss, Block(Optional)"] = "Vermeidung <- Ausweichen, Parieren, MobMiss, Block(Optional)", + + -- /rb sum gem + ["Gems"] = "Edelsteine", + ["Auto fill empty gem slots"] = "Leere Edelsteinplätze automatisch füllen", + -- /rb sum gem red + ["Red Socket"] = EMPTY_SOCKET_RED, + ["ItemID or Link of the gem you would like to auto fill"] = "ItemID oder Link des einzusetzenden Edelsteins", + --[""] = true, + ["%s is now set to %s"] = "%s ist nun auf %s gesetzt", + ["Queried server for Gem: %s. Try again in 5 secs."] = "Frage den Server nach Edelstein: %s. Versuchs in 5 Sekunden nochmal", + -- /rb sum gem yellow + ["Yellow Socket"] = EMPTY_SOCKET_YELLOW, + -- /rb sum gem blue + ["Blue Socket"] = EMPTY_SOCKET_BLUE, + -- /rb sum gem meta + ["Meta Socket"] = EMPTY_SOCKET_META, + + ----------------------- + -- Item Level and ID -- + ----------------------- +-- ["ItemLevel: "] = true, +-- ["ItemID: "] = true, + ----------------------- + -- Matching Patterns -- + ----------------------- + -- Items to check -- + -------------------- + -- [Potent Ornate Topaz] + -- +6 Spell Damage, +5 Spell Crit Rating + -------------------- + -- ZG enchant + -- +10 Defense Rating/+10 Stamina/+15 Block Value + -------------------- + -- [Glinting Flam Spessarite] + -- +3 Hit Rating and +3 Agility + -------------------- + -- ItemID: 22589 + -- [Atiesh, Greatstaff of the Guardian] warlock version + -- Equip: Increases the spell critical strike rating of all party members within 30 yards by 28. + -------------------- + -- [Brilliant Wizard Oil] + -- Use: While applied to target weapon it increases spell damage by up to 36 and increases spell critical strike rating by 14 . Lasts for 30 minutes. + ---------------------------------------------------------------------------------------------------- + -- I redesigned the tooltip scanner using a more locale friendly, 2 pass matching matching algorithm. + -- + -- The first pass searches for the rating number, the patterns are read from ["numberPatterns"] here, + -- " by (%d+)" will match strings like: "Increases defense rating by 16." + -- "%+(%d+)" will match strings like: "+10 Defense Rating" + -- You can add additional patterns if needed, its not limited to 2 patterns. + -- The separators are a table of strings used to break up a line into multiple lines what will be parsed seperately. + -- For example "+3 Hit Rating, +5 Spell Crit Rating" will be split into "+3 Hit Rating" and " +5 Spell Crit Rating" + -- + -- The second pass searches for the rating name, the names are read from ["statList"] here, + -- It will look through the table in order, so you can put common strings at the begining to speed up the search, + -- and longer strings should be listed first, like "spell critical strike" should be listed before "critical strike", + -- this way "spell critical strike" does get matched by "critical strike". + -- Strings need to be in lower case letters, because string.lower is called on lookup + -- + -- IMPORTANT: there may not exist a one-to-one correspondence, meaning you can't just translate this file, + -- but will need to go in game and find out what needs to be put in here. + -- For example, in english I found 3 different strings that maps to CR_CRIT_MELEE: "critical strike", "critical hit" and "crit". + -- You will need to find out every string that represents CR_CRIT_MELEE, and so on. + -- In other languages there may be 5 different strings that should all map to CR_CRIT_MELEE. + -- so please check in game that you have all strings, and not translate directly off this table. + -- + -- Tip1: When doing localizations, I recommend you set debugging to true in RatingBuster.lua + -- Find RatingBuster:SetDebugging(false) and change it to RatingBuster:SetDebugging(true) + -- or you can type /rb debug to enable it in game + -- + -- Tip2: The strings are passed into string.find, so you should escape the magic characters ^$()%.[]*+-? with a % + ["numberPatterns"] = { + {pattern = " um (%d+)", addInfo = "AfterNumber",}, + {pattern = "([%+%-]%d+)", addInfo = "AfterStat",}, + {pattern = "verleiht.-(%d+)", addInfo = "AfterNumber",}, -- for "grant you xx stat" type pattern, ex: Quel'Serrar, Assassination Armor set + {pattern = "(%d+) erhöhen.", addInfo = "AfterNumber",}, -- for "add xx stat" type pattern, ex: Adamantite Sharpening Stone + -- Added [^%%] so that it doesn't match strings like "Increases healing by up to 10% of your total Intellect." [Whitemend Pants] ID: 24261 + {pattern = "(%d+)([^%d%%|]+)", addInfo = "AfterStat",}, -- [發光的暗影卓奈石] +6法術傷害及5耐力 + }, + ["separators"] = { + "/", " und ", ",", "%. ", " für ", "&", ":" + }, + --[[ Rating ID + 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; + -- + SPELL_STAT1_NAME = "Stärke" + SPELL_STAT2_NAME = "Beweglichkeit" + SPELL_STAT3_NAME = "Ausdauer" + SPELL_STAT4_NAME = "Intelligenz" + SPELL_STAT5_NAME = "Willenskraft" + --]] + ["statList"] = { + {pattern = string.lower(SPELL_STAT1_NAME), id = SPELL_STAT1_NAME}, -- Strength + {pattern = string.lower(SPELL_STAT2_NAME), id = SPELL_STAT2_NAME}, -- Agility + {pattern = string.lower(SPELL_STAT3_NAME), id = SPELL_STAT3_NAME}, -- Stamina + {pattern = string.lower(SPELL_STAT4_NAME), id = SPELL_STAT4_NAME}, -- Intellect + {pattern = string.lower(SPELL_STAT5_NAME), id = SPELL_STAT5_NAME}, -- Spirit + {pattern = "verteidigungswertung", id = CR_DEFENSE_SKILL}, + {pattern = "ausweichwertung", id = CR_DODGE}, + {pattern = "blockwertung", id = CR_BLOCK}, -- block enchant: "+10 Shield Block Rating" + {pattern = "parierwertung", id = CR_PARRY}, + +-- Falls jemand ein Item mit den unten auskommentierten Patterns hat, die nicht der Übersetzung entsprechen soll er mir bescheid sagen, ich habe nix gefunden... + {pattern = "kritische zaubertrefferwertung", id = CR_CRIT_SPELL}, +-- {pattern = "spell critical hit rating", id = CR_CRIT_SPELL}, +-- {pattern = "spell critical rating", id = CR_CRIT_SPELL}, +-- {pattern = "spell crit rating", id = CR_CRIT_SPELL}, + {pattern = "kritische distanztrefferwertung", id = CR_CRIT_RANGED}, +-- {pattern = "ranged critical hit rating", id = CR_CRIT_RANGED}, +-- {pattern = "ranged critical rating", id = CR_CRIT_RANGED}, +-- {pattern = "ranged crit rating", id = CR_CRIT_RANGED}, + {pattern = "kritische trefferwertung", id = CR_CRIT_MELEE}, +-- {pattern = "critical hit rating", id = CR_CRIT_MELEE}, +-- {pattern = "crit rating", id = CR_CRIT_MELEE}, + + {pattern = "zaubertrefferwertung", id = CR_HIT_SPELL}, + {pattern = "trefferwertung", id = CR_HIT_RANGED}, + {pattern = "trefferwertung", id = CR_HIT_MELEE}, + + {pattern = "abhärtungswertung", id = CR_CRIT_TAKEN_MELEE}, -- resilience is implicitly a rating + + {pattern = "zaubertempowertung", id = CR_HASTE_SPELL}, + {pattern = "distanztempowertung", id = CR_HASTE_RANGED}, + {pattern = "angriffstempowertung", id = CR_HASTE_MELEE}, + {pattern = "nahkampftempowertung", id = CR_HASTE_MELEE}, + {pattern = "tempowertung", id = CR_HASTE_MELEE}, -- [Drums of Battle] + +-- {pattern = "skill rating", id = CR_WEAPON_SKILL}, -- seit 2.3.0 entfernt denke ich.. + {pattern = "waffenkundewertung", id = CR_EXPERTISE}, + +-- {pattern = "hit avoidance rating", id = CR_HIT_TAKEN_MELEE}, - seit 2.0.10 gibt es kein item mehr damit + --[[ + {pattern = "dagger skill rating", id = CR_WEAPON_SKILL}, + {pattern = "sword skill rating", id = CR_WEAPON_SKILL}, + {pattern = "two%-handed swords skill rating", id = CR_WEAPON_SKILL}, + {pattern = "axe skill rating", id = CR_WEAPON_SKILL}, + {pattern = "bow skill rating", id = CR_WEAPON_SKILL}, + {pattern = "crossbow skill rating", id = CR_WEAPON_SKILL}, + {pattern = "gun skill rating", id = CR_WEAPON_SKILL}, + {pattern = "feral combat skill rating", id = CR_WEAPON_SKILL}, + {pattern = "mace skill rating", id = CR_WEAPON_SKILL}, + {pattern = "polearm skill rating", id = CR_WEAPON_SKILL}, + {pattern = "staff skill rating", id = CR_WEAPON_SKILL}, + {pattern = "two%-handed axes skill rating", id = CR_WEAPON_SKILL}, + {pattern = "two%-handed maces skill rating", id = CR_WEAPON_SKILL}, + {pattern = "fist weapons skill rating", id = CR_WEAPON_SKILL}, + --]] + }, + ------------------------- + -- Added info patterns -- + ------------------------- + -- $value will be replaced with the number + -- EX: "$value% Crit" -> "+1.34% Crit" + -- EX: "Crit $value%" -> "Crit +1.34%" + ["$value% Crit"] = "$value% krit.", + ["$value% Spell Crit"] = "$value% Zauberkrit.", + ["$value% Dodge"] = "$value% Ausweichen", +-- ["$value HP"] = true, +-- ["$value MP"] = true, +-- ["$value AP"] = true, +-- ["$value RAP"] = true, + ["$value Dmg"] = "$value Schaden", + ["$value Heal"] = "$value Heilung", + ["$value Armor"] = "$value Rüstung", + ["$value Block"] = "$value Blocken", +-- ["$value MP5"] = true, +-- ["$value MP5(NC)"] = true, +-- ["$value HP5"] = true, + ["$value to be Dodged/Parried"] = "$value wird Ausgewichen/Pariert", + ["$value to be Crit"] = "$value wird kritisch", + ["$value Crit Dmg Taken"] = "$value erlittener Schaden", + ["$value DOT Dmg Taken"] = "$value erlittener Schaden durch DOTs", + + ------------------ + -- Stat Summary -- + ------------------ + ["Stat Summary"] = "Werteübersicht", +} end) diff --git a/RatingBuster-Locale-enUS.lua b/RatingBuster-Locale-enUS.lua new file mode 100644 index 0000000..a23985f --- /dev/null +++ b/RatingBuster-Locale-enUS.lua @@ -0,0 +1,625 @@ +--[[ +Name: RatingBuster enUS locale +Revision: $Revision: 73696 $ +Translated by: +- Whitetooth (hotdogee [at] gmail [dot] com) +]] + +local L = AceLibrary("AceLocale-2.2"):new("RatingBuster") +---- +-- This file is coded in UTF-8 +-- If you don't have a editor that can save in UTF-8, I recommend Ultraedit +---- +-- To translate AceLocale strings, replace true with the translation string +-- Before: ["Show Item ID"] = true, +-- After: ["Show Item ID"] = "顯示物品編號", +L:RegisterTranslations("enUS", function() return { + --------------- + -- Waterfall -- + --------------- + ["RatingBuster Options"] = true, + ["Waterfall-1.0 is required to access the GUI."] = true, + --------------------------- + -- Slash Command Options -- + --------------------------- + -- /rb win + ["Options Window"] = true, + ["Shows the Options Window"] = true, + -- /rb statmod + ["Enable Stat Mods"] = true, + ["Enable support for Stat Mods"] = true, + -- /rb itemid + ["Show ItemID"] = true, + ["Show the ItemID in tooltips"] = true, + -- /rb itemlevel + ["Show ItemLevel"] = true, + ["Show the ItemLevel in tooltips"] = true, + -- /rb usereqlv + ["Use required level"] = true, + ["Calculate using the required level if you are below the required level"] = true, + -- /rb setlevel + ["Set level"] = true, + ["Set the level used in calculations (0 = your level)"] = true, + -- /rb color + ["Change text color"] = true, + ["Changes the color of added text"] = true, + -- /rb color pick + ["Pick color"] = true, + ["Pick a color"] = true, + -- /rb color enable + ["Enable color"] = true, + ["Enable colored text"] = true, + -- /rb rating + ["Rating"] = true, + ["Options for Rating display"] = true, + -- /rb rating show + ["Show Rating conversions"] = true, + ["Show Rating conversions in tooltips"] = true, + -- /rb rating detail + ["Show detailed conversions text"] = true, + ["Show detailed text for Resiliance and Expertise conversions"] = true, + -- /rb rating def + ["Defense breakdown"] = true, + ["Convert Defense into Crit Avoidance, Hit Avoidance, Dodge, Parry and Block"] = true, + -- /rb rating wpn + ["Weapon Skill breakdown"] = true, + ["Convert Weapon Skill into Crit, Hit, Dodge Neglect, Parry Neglect and Block Neglect"] = true, + -- /rb rating exp -- 2.3.0 + ["Expertise breakdown"] = true, + ["Convert Expertise into Dodge Neglect and Parry Neglect"] = true, + + -- /rb stat + ["Stat Breakdown"] = true, + ["Changes the display of base stats"] = true, + -- /rb stat show + ["Show base stat conversions"] = true, + ["Show base stat conversions in tooltips"] = true, + -- /rb stat str + ["Strength"] = true, + ["Changes the display of Strength"] = true, + -- /rb stat str ap + ["Show Attack Power"] = true, + ["Show Attack Power from Strength"] = true, + -- /rb stat str block + ["Show Block Value"] = true, + ["Show Block Value from Strength"] = true, + -- /rb stat str dmg + ["Show Spell Damage"] = true, + ["Show Spell Damage from Strength"] = true, + -- /rb stat str heal + ["Show Healing"] = true, + ["Show Healing from Strength"] = true, + + -- /rb stat agi + ["Agility"] = true, + ["Changes the display of Agility"] = true, + -- /rb stat agi crit + ["Show Crit"] = true, + ["Show Crit chance from Agility"] = true, + -- /rb stat agi dodge + ["Show Dodge"] = true, + ["Show Dodge chance from Agility"] = true, + -- /rb stat agi ap + ["Show Attack Power"] = true, + ["Show Attack Power from Agility"] = true, + -- /rb stat agi rap + ["Show Ranged Attack Power"] = true, + ["Show Ranged Attack Power from Agility"] = true, + -- /rb stat agi armor + ["Show Armor"] = true, + ["Show Armor from Agility"] = true, + -- /rb stat agi heal + ["Show Healing"] = true, + ["Show Healing from Agility"] = true, + + -- /rb stat sta + ["Stamina"] = true, + ["Changes the display of Stamina"] = true, + -- /rb stat sta hp + ["Show Health"] = true, + ["Show Health from Stamina"] = true, + -- /rb stat sta dmg + ["Show Spell Damage"] = true, + ["Show Spell Damage from Stamina"] = true, + + -- /rb stat int + ["Intellect"] = true, + ["Changes the display of Intellect"] = true, + -- /rb stat int spellcrit + ["Show Spell Crit"] = true, + ["Show Spell Crit chance from Intellect"] = true, + -- /rb stat int mp + ["Show Mana"] = true, + ["Show Mana from Intellect"] = true, + -- /rb stat int dmg + ["Show Spell Damage"] = true, + ["Show Spell Damage from Intellect"] = true, + -- /rb stat int heal + ["Show Healing"] = true, + ["Show Healing from Intellect"] = true, + -- /rb stat int mp5 + ["Show Mana Regen"] = true, + ["Show Mana Regen while casting from Intellect"] = true, + -- /rb stat int mp5nc + ["Show Mana Regen while NOT casting"] = true, + ["Show Mana Regen while NOT casting from Intellect"] = true, + -- /rb stat int rap + ["Show Ranged Attack Power"] = true, + ["Show Ranged Attack Power from Intellect"] = true, + -- /rb stat int armor + ["Show Armor"] = true, + ["Show Armor from Intellect"] = true, + + -- /rb stat spi + ["Spirit"] = true, + ["Changes the display of Spirit"] = true, + -- /rb stat spi mp5 + ["Show Mana Regen"] = true, + ["Show Mana Regen while casting from Spirit"] = true, + -- /rb stat spi mp5nc + ["Show Mana Regen while NOT casting"] = true, + ["Show Mana Regen while NOT casting from Spirit"] = true, + -- /rb stat spi hp5 + ["Show Health Regen"] = true, + ["Show Health Regen from Spirit"] = true, + -- /rb stat spi dmg + ["Show Spell Damage"] = true, + ["Show Spell Damage from Spirit"] = true, + -- /rb stat spi heal + ["Show Healing"] = true, + ["Show Healing from Spirit"] = true, + + -- /rb sum + ["Stat Summary"] = true, + ["Options for stat summary"] = true, + -- /rb sum show + ["Show stat summary"] = true, + ["Show stat summary in tooltips"] = true, + -- /rb sum ignore + ["Ignore settings"] = true, + ["Ignore stuff when calculating the stat summary"] = true, + -- /rb sum ignore unused + ["Ignore unused items types"] = true, + ["Show stat summary only for highest level armor type and items you can use with uncommon quality and up"] = true, + -- /rb sum ignore equipped + ["Ignore equipped items"] = true, + ["Hide stat summary for equipped items"] = true, + -- /rb sum ignore enchant + ["Ignore enchants"] = true, + ["Ignore enchants on items when calculating the stat summary"] = true, + -- /rb sum ignore gem + ["Ignore gems"] = true, + ["Ignore gems on items when calculating the stat summary"] = true, + -- /rb sum diffstyle + ["Display style for diff value"] = true, + ["Display diff values in the main tooltip or only in compare tooltips"] = true, + -- /rb sum space + ["Add empty line"] = true, + ["Add a empty line before or after stat summary"] = true, + -- /rb sum space before + ["Add before summary"] = true, + ["Add a empty line before stat summary"] = true, + -- /rb sum space after + ["Add after summary"] = true, + ["Add a empty line after stat summary"] = true, + -- /rb sum icon + ["Show icon"] = true, + ["Show the sigma icon before summary listing"] = true, + -- /rb sum title + ["Show title text"] = true, + ["Show the title text before summary listing"] = true, + -- /rb sum showzerostat + ["Show zero value stats"] = true, + ["Show zero value stats in summary for consistancy"] = true, + -- /rb sum calcsum + ["Calculate stat sum"] = true, + ["Calculate the total stats for the item"] = true, + -- /rb sum calcdiff + ["Calculate stat diff"] = true, + ["Calculate the stat difference for the item and equipped items"] = true, + -- /rb sum sort + ["Sort StatSummary alphabetically"] = true, + ["Enable to sort StatSummary alphabetically, disable to sort according to stat type(basic, physical, spell, tank)"] = true, + -- /rb sum avoidhasblock + ["Include block chance in Avoidance summary"] = true, + ["Enable to include block chance in Avoidance summary, Disable for only dodge, parry, miss"] = true, + -- /rb sum basic + ["Stat - Basic"] = true, + ["Choose basic stats for summary"] = true, + -- /rb sum physical + ["Stat - Physical"] = true, + ["Choose physical damage stats for summary"] = true, + -- /rb sum spell + ["Stat - Spell"] = true, + ["Choose spell damage and healing stats for summary"] = true, + -- /rb sum tank + ["Stat - Tank"] = true, + ["Choose tank stats for summary"] = true, + -- /rb sum stat hp + ["Sum Health"] = true, + ["Health <- Health, Stamina"] = true, + -- /rb sum stat mp + ["Sum Mana"] = true, + ["Mana <- Mana, Intellect"] = true, + -- /rb sum stat ap + ["Sum Attack Power"] = true, + ["Attack Power <- Attack Power, Strength, Agility"] = true, + -- /rb sum stat rap + ["Sum Ranged Attack Power"] = true, + ["Ranged Attack Power <- Ranged Attack Power, Intellect, Attack Power, Strength, Agility"] = true, + -- /rb sum stat fap + ["Sum Feral Attack Power"] = true, + ["Feral Attack Power <- Feral Attack Power, Attack Power, Strength, Agility"] = true, + -- /rb sum stat dmg + ["Sum Spell Damage"] = true, + ["Spell Damage <- Spell Damage, Intellect, Spirit, Stamina"] = true, + -- /rb sum stat dmgholy + ["Sum Holy Spell Damage"] = true, + ["Holy Spell Damage <- Holy Spell Damage, Spell Damage, Intellect, Spirit"] = true, + -- /rb sum stat dmgarcane + ["Sum Arcane Spell Damage"] = true, + ["Arcane Spell Damage <- Arcane Spell Damage, Spell Damage, Intellect"] = true, + -- /rb sum stat dmgfire + ["Sum Fire Spell Damage"] = true, + ["Fire Spell Damage <- Fire Spell Damage, Spell Damage, Intellect, Stamina"] = true, + -- /rb sum stat dmgnature + ["Sum Nature Spell Damage"] = true, + ["Nature Spell Damage <- Nature Spell Damage, Spell Damage, Intellect"] = true, + -- /rb sum stat dmgfrost + ["Sum Frost Spell Damage"] = true, + ["Frost Spell Damage <- Frost Spell Damage, Spell Damage, Intellect"] = true, + -- /rb sum stat dmgshadow + ["Sum Shadow Spell Damage"] = true, + ["Shadow Spell Damage <- Shadow Spell Damage, Spell Damage, Intellect, Spirit, Stamina"] = true, + -- /rb sum stat heal + ["Sum Healing"] = true, + ["Healing <- Healing, Intellect, Spirit, Agility, Strength"] = true, + -- /rb sum stat hit + ["Sum Hit Chance"] = true, + ["Hit Chance <- Hit Rating, Weapon Skill Rating"] = true, + -- /rb sum stat crit + ["Sum Crit Chance"] = true, + ["Crit Chance <- Crit Rating, Agility, Weapon Skill Rating"] = true, + -- /rb sum stat haste + ["Sum Haste"] = true, + ["Haste <- Haste Rating"] = true, + -- /rb sum stat critspell + ["Sum Spell Crit Chance"] = true, + ["Spell Crit Chance <- Spell Crit Rating, Intellect"] = true, + -- /rb sum stat hitspell + ["Sum Spell Hit Chance"] = true, + ["Spell Hit Chance <- Spell Hit Rating"] = true, + -- /rb sum stat hastespell + ["Sum Spell Haste"] = true, + ["Spell Haste <- Spell Haste Rating"] = true, + -- /rb sum stat mp5 + ["Sum Mana Regen"] = true, + ["Mana Regen <- Mana Regen, Spirit"] = true, + -- /rb sum stat mp5nc + ["Sum Mana Regen while not casting"] = true, + ["Mana Regen while not casting <- Spirit"] = true, + -- /rb sum stat hp5 + ["Sum Health Regen"] = true, + ["Health Regen <- Health Regen"] = true, + -- /rb sum stat hp5oc + ["Sum Health Regen when out of combat"] = true, + ["Health Regen when out of combat <- Spirit"] = true, + -- /rb sum stat armor + ["Sum Armor"] = true, + ["Armor <- Armor from items, Armor from bonuses, Agility, Intellect"] = true, + -- /rb sum stat blockvalue + ["Sum Block Value"] = true, + ["Block Value <- Block Value, Strength"] = true, + -- /rb sum stat dodge + ["Sum Dodge Chance"] = true, + ["Dodge Chance <- Dodge Rating, Agility, Defense Rating"] = true, + -- /rb sum stat parry + ["Sum Parry Chance"] = true, + ["Parry Chance <- Parry Rating, Defense Rating"] = true, + -- /rb sum stat block + ["Sum Block Chance"] = true, + ["Block Chance <- Block Rating, Defense Rating"] = true, + -- /rb sum stat avoidhit + ["Sum Hit Avoidance"] = true, + ["Hit Avoidance <- Defense Rating"] = true, + -- /rb sum stat avoidcrit + ["Sum Crit Avoidance"] = true, + ["Crit Avoidance <- Defense Rating, Resilience"] = true, + -- /rb sum stat neglectdodge + ["Sum Dodge Neglect"] = true, + ["Dodge Neglect <- Expertise, Weapon Skill Rating"] = true, -- 2.3.0 + -- /rb sum stat neglectparry + ["Sum Parry Neglect"] = true, + ["Parry Neglect <- Expertise, Weapon Skill Rating"] = true, -- 2.3.0 + -- /rb sum stat neglectblock + ["Sum Block Neglect"] = true, + ["Block Neglect <- Weapon Skill Rating"] = true, + -- /rb sum stat resarcane + ["Sum Arcane Resistance"] = true, + ["Arcane Resistance Summary"] = true, + -- /rb sum stat resfire + ["Sum Fire Resistance"] = true, + ["Fire Resistance Summary"] = true, + -- /rb sum stat resnature + ["Sum Nature Resistance"] = true, + ["Nature Resistance Summary"] = true, + -- /rb sum stat resfrost + ["Sum Frost Resistance"] = true, + ["Frost Resistance Summary"] = true, + -- /rb sum stat resshadow + ["Sum Shadow Resistance"] = true, + ["Shadow Resistance Summary"] = true, + -- /rb sum stat maxdamage + ["Sum Weapon Max Damage"] = true, + ["Weapon Max Damage Summary"] = true, + -- /rb sum stat pen + ["Sum Penetration"] = true, + ["Spell Penetration Summary"] = true, + -- /rb sum stat ignorearmor + ["Sum Ignore Armor"] = true, + ["Ignore Armor Summary"] = true, + -- /rb sum stat weapondps + --["Sum Weapon DPS"] = true, + --["Weapon DPS Summary"] = true, + -- /rb sum statcomp str + ["Sum Strength"] = true, + ["Strength Summary"] = true, + -- /rb sum statcomp agi + ["Sum Agility"] = true, + ["Agility Summary"] = true, + -- /rb sum statcomp sta + ["Sum Stamina"] = true, + ["Stamina Summary"] = true, + -- /rb sum statcomp int + ["Sum Intellect"] = true, + ["Intellect Summary"] = true, + -- /rb sum statcomp spi + ["Sum Spirit"] = true, + ["Spirit Summary"] = true, + -- /rb sum statcomp hitrating + ["Sum Hit Rating"] = true, + ["Hit Rating Summary"] = true, + -- /rb sum statcomp critrating + ["Sum Crit Rating"] = true, + ["Crit Rating Summary"] = true, + -- /rb sum statcomp hasterating + ["Sum Haste Rating"] = true, + ["Haste Rating Summary"] = true, + -- /rb sum statcomp hitspellrating + ["Sum Spell Hit Rating"] = true, + ["Spell Hit Rating Summary"] = true, + -- /rb sum statcomp critspellrating + ["Sum Spell Crit Rating"] = true, + ["Spell Crit Rating Summary"] = true, + -- /rb sum statcomp hastespellrating + ["Sum Spell Haste Rating"] = true, + ["Spell Haste Rating Summary"] = true, + -- /rb sum statcomp dodgerating + ["Sum Dodge Rating"] = true, + ["Dodge Rating Summary"] = true, + -- /rb sum statcomp parryrating + ["Sum Parry Rating"] = true, + ["Parry Rating Summary"] = true, + -- /rb sum statcomp blockrating + ["Sum Block Rating"] = true, + ["Block Rating Summary"] = true, + -- /rb sum statcomp res + ["Sum Resilience"] = true, + ["Resilience Summary"] = true, + -- /rb sum statcomp def + ["Sum Defense"] = true, + ["Defense <- Defense Rating"] = true, + -- /rb sum statcomp wpn + ["Sum Weapon Skill"] = true, + ["Weapon Skill <- Weapon Skill Rating"] = true, + -- /rb sum statcomp exp -- 2.3.0 + ["Sum Expertise"] = true, + ["Expertise <- Expertise Rating"] = true, + -- /rb sum statcomp tp + ["Sum TankPoints"] = true, + ["TankPoints <- Health, Total Reduction"] = true, + -- /rb sum statcomp tr + ["Sum Total Reduction"] = true, + ["Total Reduction <- Armor, Dodge, Parry, Block, Block Value, Defense, Resilience, MobMiss, MobCrit, MobCrush, DamageTakenMods"] = true, + -- /rb sum statcomp avoid + ["Sum Avoidance"] = true, + ["Avoidance <- Dodge, Parry, MobMiss, Block(Optional)"] = true, + -- /rb sum gem + ["Gems"] = true, + ["Auto fill empty gem slots"] = true, + -- /rb sum gem red + ["Red Socket"] = EMPTY_SOCKET_RED, + ["ItemID or Link of the gem you would like to auto fill"] = true, + [""] = true, + ["%s is now set to %s"] = true, + ["Queried server for Gem: %s. Try again in 5 secs."] = true, + -- /rb sum gem yellow + ["Yellow Socket"] = EMPTY_SOCKET_YELLOW, + -- /rb sum gem blue + ["Blue Socket"] = EMPTY_SOCKET_BLUE, + -- /rb sum gem meta + ["Meta Socket"] = EMPTY_SOCKET_META, + + ----------------------- + -- Item Level and ID -- + ----------------------- + ["ItemLevel: "] = true, + ["ItemID: "] = true, + ----------------------- + -- Matching Patterns -- + ----------------------- + -- Items to check -- + -------------------- + -- [Potent Ornate Topaz] + -- +6 Spell Damage, +5 Spell Crit Rating + -------------------- + -- ZG enchant + -- +10 Defense Rating/+10 Stamina/+15 Block Value + -------------------- + -- [Glinting Flam Spessarite] + -- +3 Hit Rating and +3 Agility + -------------------- + -- ItemID: 22589 + -- [Atiesh, Greatstaff of the Guardian] warlock version + -- Equip: Increases the spell critical strike rating of all party members within 30 yards by 28. + -------------------- + -- [Brilliant Wizard Oil] + -- Use: While applied to target weapon it increases spell damage by up to 36 and increases spell critical strike rating by 14 . Lasts for 30 minutes. + ---------------------------------------------------------------------------------------------------- + -- I redesigned the tooltip scanner using a more locale friendly, 2 pass matching matching algorithm. + -- + -- The first pass searches for the rating number, the patterns are read from ["numberPatterns"] here, + -- " by (%d+)" will match strings like: "Increases defense rating by 16." + -- "%+(%d+)" will match strings like: "+10 Defense Rating" + -- You can add additional patterns if needed, its not limited to 2 patterns. + -- The separators are a table of strings used to break up a line into multiple lines what will be parsed seperately. + -- For example "+3 Hit Rating, +5 Spell Crit Rating" will be split into "+3 Hit Rating" and " +5 Spell Crit Rating" + -- + -- The second pass searches for the rating name, the names are read from ["statList"] here, + -- It will look through the table in order, so you can put common strings at the begining to speed up the search, + -- and longer strings should be listed first, like "spell critical strike" should be listed before "critical strike", + -- this way "spell critical strike" does get matched by "critical strike". + -- Strings need to be in lower case letters, because string.lower is called on lookup + -- + -- IMPORTANT: there may not exist a one-to-one correspondence, meaning you can't just translate this file, + -- but will need to go in game and find out what needs to be put in here. + -- For example, in english I found 3 different strings that maps to CR_CRIT_MELEE: "critical strike", "critical hit" and "crit". + -- You will need to find out every string that represents CR_CRIT_MELEE, and so on. + -- In other languages there may be 5 different strings that should all map to CR_CRIT_MELEE. + -- so please check in game that you have all strings, and not translate directly off this table. + -- + -- Tip1: When doing localizations, I recommend you set debugging to true in RatingBuster.lua + -- Find RatingBuster:SetDebugging(false) and change it to RatingBuster:SetDebugging(true) + -- or you can type /rb debug to enable it in game + -- + -- Tip2: The strings are passed into string.find, so you should escape the magic characters ^$()%.[]*+-? with a % + ["numberPatterns"] = { + {pattern = " by (%d+)", addInfo = "AfterNumber",}, + {pattern = "([%+%-]%d+)", addInfo = "AfterStat",}, + {pattern = "grant.-(%d+)", addInfo = "AfterNumber",}, -- for "grant you xx stat" type pattern, ex: Quel'Serrar, Assassination Armor set + {pattern = "add.-(%d+)", addInfo = "AfterNumber",}, -- for "add xx stat" type pattern, ex: Adamantite Sharpening Stone + -- Added [^%%] so that it doesn't match strings like "Increases healing by up to 10% of your total Intellect." [Whitemend Pants] ID: 24261 + -- Added [^|] so that it doesn't match enchant strings (JewelTips) + {pattern = "(%d+)([^%d%%|]+)", addInfo = "AfterStat",}, -- [發光的暗影卓奈石] +6法術傷害及5耐力 + }, + ["separators"] = { + "/", " and ", ",", "%. ", " for ", "&", ":" + }, + --[[ Rating ID + 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; + -- + SPELL_STAT1_NAME = "Strength" + SPELL_STAT2_NAME = "Agility" + SPELL_STAT3_NAME = "Stamina" + SPELL_STAT4_NAME = "Intellect" + SPELL_STAT5_NAME = "Spirit" + --]] + ["statList"] = { + {pattern = string.lower(SPELL_STAT1_NAME), id = SPELL_STAT1_NAME}, -- Strength + {pattern = string.lower(SPELL_STAT2_NAME), id = SPELL_STAT2_NAME}, -- Agility + {pattern = string.lower(SPELL_STAT3_NAME), id = SPELL_STAT3_NAME}, -- Stamina + {pattern = string.lower(SPELL_STAT4_NAME), id = SPELL_STAT4_NAME}, -- Intellect + {pattern = string.lower(SPELL_STAT5_NAME), id = SPELL_STAT5_NAME}, -- Spirit + {pattern = "defense rating", id = CR_DEFENSE_SKILL}, + {pattern = "dodge rating", id = CR_DODGE}, + {pattern = "block rating", id = CR_BLOCK}, -- block enchant: "+10 Shield Block Rating" + {pattern = "parry rating", id = CR_PARRY}, + + {pattern = "spell critical strike rating", id = CR_CRIT_SPELL}, + {pattern = "spell critical hit rating", id = CR_CRIT_SPELL}, + {pattern = "spell critical rating", id = CR_CRIT_SPELL}, + {pattern = "spell crit rating", id = CR_CRIT_SPELL}, + {pattern = "ranged critical strike rating", id = CR_CRIT_RANGED}, + {pattern = "ranged critical hit rating", id = CR_CRIT_RANGED}, + {pattern = "ranged critical rating", id = CR_CRIT_RANGED}, + {pattern = "ranged crit rating", id = CR_CRIT_RANGED}, + {pattern = "critical strike rating", id = CR_CRIT_MELEE}, + {pattern = "critical hit rating", id = CR_CRIT_MELEE}, + {pattern = "critical rating", id = CR_CRIT_MELEE}, + {pattern = "crit rating", id = CR_CRIT_MELEE}, + + {pattern = "spell hit rating", id = CR_HIT_SPELL}, + {pattern = "ranged hit rating", id = CR_HIT_RANGED}, + {pattern = "hit rating", id = CR_HIT_MELEE}, + + {pattern = "resilience", id = CR_CRIT_TAKEN_MELEE}, -- resilience is implicitly a rating + + {pattern = "spell haste rating", id = CR_HASTE_SPELL}, + {pattern = "ranged haste rating", id = CR_HASTE_RANGED}, + {pattern = "haste rating", id = CR_HASTE_MELEE}, + {pattern = "speed rating", id = CR_HASTE_MELEE}, -- [Drums of Battle] + + {pattern = "skill rating", id = CR_WEAPON_SKILL}, + {pattern = "expertise rating", id = CR_EXPERTISE}, + + {pattern = "hit avoidance rating", id = CR_HIT_TAKEN_MELEE}, + --[[ + {pattern = "dagger skill rating", id = CR_WEAPON_SKILL}, + {pattern = "sword skill rating", id = CR_WEAPON_SKILL}, + {pattern = "two%-handed swords skill rating", id = CR_WEAPON_SKILL}, + {pattern = "axe skill rating", id = CR_WEAPON_SKILL}, + {pattern = "bow skill rating", id = CR_WEAPON_SKILL}, + {pattern = "crossbow skill rating", id = CR_WEAPON_SKILL}, + {pattern = "gun skill rating", id = CR_WEAPON_SKILL}, + {pattern = "feral combat skill rating", id = CR_WEAPON_SKILL}, + {pattern = "mace skill rating", id = CR_WEAPON_SKILL}, + {pattern = "polearm skill rating", id = CR_WEAPON_SKILL}, + {pattern = "staff skill rating", id = CR_WEAPON_SKILL}, + {pattern = "two%-handed axes skill rating", id = CR_WEAPON_SKILL}, + {pattern = "two%-handed maces skill rating", id = CR_WEAPON_SKILL}, + {pattern = "fist weapons skill rating", id = CR_WEAPON_SKILL}, + --]] + }, + ------------------------- + -- Added info patterns -- + ------------------------- + -- $value will be replaced with the number + -- EX: "$value% Crit" -> "+1.34% Crit" + -- EX: "Crit $value%" -> "Crit +1.34%" + ["$value% Crit"] = true, + ["$value% Spell Crit"] = true, + ["$value% Dodge"] = true, + ["$value HP"] = true, + ["$value MP"] = true, + ["$value AP"] = true, + ["$value RAP"] = true, + ["$value Dmg"] = true, + ["$value Heal"] = true, + ["$value Armor"] = true, + ["$value Block"] = true, + ["$value MP5"] = true, + ["$value MP5(NC)"] = true, + ["$value HP5"] = true, + ["$value to be Dodged/Parried"] = true, + ["$value to be Crit"] = true, + ["$value Crit Dmg Taken"] = true, + ["$value DOT Dmg Taken"] = true, + + ------------------ + -- Stat Summary -- + ------------------ + ["Stat Summary"] = true, +} end) \ No newline at end of file diff --git a/RatingBuster-Locale-esES.lua b/RatingBuster-Locale-esES.lua new file mode 100644 index 0000000..5864276 --- /dev/null +++ b/RatingBuster-Locale-esES.lua @@ -0,0 +1,620 @@ +--[[ +Name: RatingBuster esES locale +Revision: $Revision: 73696 $ +Translated by: +- carahuevo@Curse +]] + +local L = AceLibrary("AceLocale-2.2"):new("RatingBuster") +---- +-- This file is coded in UTF-8 +-- If you don't have a editor that can save in UTF-8, I recommend Ultraedit +---- +-- To translate AceLocale strings, replace true with the translation string +-- Before: ["Show Item ID"] = true, +-- After: ["Show Item ID"] = "??????", +L:RegisterTranslations("esES", function() return { + --------------- + -- Waterfall -- + --------------- + ["RatingBuster Options"] = "Opciones RatingBuster", + ["Waterfall-1.0 is required to access the GUI."] = "Se requiere Waterfall para acceder a la GUI.", + --------------------------- + -- Slash Command Options -- + --------------------------- + -- /rb optionswin + ["Options Window"] = "Ventana opciones", + ["Shows the Options Window"] = "Muestra la ventana de opciones", + -- /rb statmod + ["Enable Stat Mods"] = "Habilitar Stat Mods", + ["Enable support for Stat Mods"] = "Habilita el soporte para Stat Mods", + -- /rb itemid + ["Show ItemID"] = "Mostrar ItemID", + ["Show the ItemID in tooltips"] = "Mostrar ItemID en los tooltips", + -- /rb itemlevel + ["Show ItemLevel"] = "Mostrar NivelItem", + ["Show the ItemLevel in tooltips"] = "Muestra el NivelItem en los tooltips", + -- /rb usereqlv + ["Use required level"] = "Usar nivel requerido", + ["Calculate using the required level if you are below the required level"] = "Calcular apartir del nivel requerido si estas por debajo" , + -- /rb setlevel + ["Set level"] = "Establecer nivel", + ["Set the level used in calculations (0 = your level)"] = "Establece el nivel usado en los caculos (0=tu nivel)", + -- /rb color + ["Change text color"] = "Cambiar color texto", + ["Changes the color of added text"] = "Cambia el color del texto anadido", + -- /rb color pick + ["Pick color"] = "Coge color", + ["Pick a color"] = "Coge un color", + -- /rb color enable + ["Enable color"] = "Habilitar color", + ["Enable colored text"] = "Habilitar texto coloreado", + -- /rb rating + ["Rating"] = "Calificacion", + ["Options for Rating display"] = "Opciones de visualizacion", + -- /rb rating show + ["Show Rating conversions"] = "Mostrar conversion calificacion", + ["Show Rating conversions in tooltips"] = "Mostrar conversion calificacion en tooltips", + -- /rb rating detail + ["Show detailed conversions text"] = "Mostrar texto detallado conversiones", + ["Show detailed text for Resiliance and Expertise conversions"] = "Mostrar texto detallado de conversiones de Temple y Pericia", + -- /rb rating def + ["Defense breakdown"] = "Desglose Defensa", + ["Convert Defense into Crit Avoidance, Hit Avoidance, Dodge, Parry and Block"] = "Convierte Defensa en evitar Critico, evitar Golpe, Esquivar, Parar y Bloquear", + -- /rb rating wpn + ["Weapon Skill breakdown"] = "Desglose Habilidad arma", + ["Convert Weapon Skill into Crit, Hit, Dodge Neglect, Parry Neglect and Block Neglect"] = "Convierta Habilidad arma en Critico, Golpe, falla Esquivar, y fallo Bloquear", + -- /rb rating exp -- 2.3.0 + ["Expertise breakdown"] = "Desglose Pericia", + ["Convert Expertise into Dodge Neglect and Parry Neglect"] = "Convierte Pericia en fallo Esquivar y fallo Parar", + + -- /rb stat + --["Stat Breakdown"] = "Estad", + ["Changes the display of base stats"] = "Cambia la visualizacion de las estad. base", + -- /rb stat show + ["Show base stat conversions"] = "Mostrar conversiones estad. base", + ["Show base stat conversions in tooltips"] = "Muestra las conversiones de estad. base en los tooltip", + -- /rb stat str + ["Strength"] = "Fuerza", + ["Changes the display of Strength"] = "Cambia la visualizacion de Fuerza", + -- /rb stat str ap + ["Show Attack Power"] = "Motrar Poder Ataque", + ["Show Attack Power from Strength"] = "Motrar Poder Ataque de Fuerza", + -- /rb stat str block + ["Show Block Value"] = "Mostrar Valor Bloqueo", + ["Show Block Value from Strength"] = "Muestra el Valor Bloqueo de Fuerza", + -- /rb stat str dmg + ["Show Spell Damage"] = "Mostrar Dano Hech", + ["Show Spell Damage from Strength"] = "Muestra el Dano de Hechizo de Fuerza", + -- /rb stat str heal + ["Show Healing"] = "Mostrar Sanacion", + ["Show Healing from Strength"] = "Muestra la Sanacion de Fuerza", + + -- /rb stat agi + ["Agility"] = "Agilidad", + ["Changes the display of Agility"] = "Cambia la visualizacion de Agilidad", + -- /rb stat agi crit + ["Show Crit"] = "Mostrar Crit", + ["Show Crit chance from Agility"] = "Muestra la prob. de critico de Agilidad", + -- /rb stat agi dodge + ["Show Dodge"] = "Mostrar Esquivar", + ["Show Dodge chance from Agility"] = "Muestra la prob. de Esquivar de Agilidad", + -- /rb stat agi ap + ["Show Attack Power"] = "Mostrar Poder Ataque", + ["Show Attack Power from Agility"] = "Muestra Poder de Ataque de Agilidad", + -- /rb stat agi rap + ["Show Ranged Attack Power"] = "Mostrar Poder Ataque Dist", + ["Show Ranged Attack Power from Agility"] = "Muestra Poder de Ataque a distancia de Agilidad", + -- /rb stat agi armor + ["Show Armor"] = "Mostrar Armadura", + ["Show Armor from Agility"] = "Muestra la Armadura de Agilidad", + -- /rb stat agi heal + ["Show Healing"] = "Mostrar Sanacion", + ["Show Healing from Agility"] = "Muestra Sanacion de Agilidad", + + -- /rb stat sta + ["Stamina"] = "Aguante", + ["Changes the display of Stamina"] = "Cambia la visualizacion de Aguante", + -- /rb stat sta hp + ["Show Health"] = "Mostrar Salud", + ["Show Health from Stamina"] = "Muestra la Salud de Aguante", + -- /rb stat sta dmg + ["Show Spell Damage"] = "Mostrar Dano Hech", + ["Show Spell Damage from Stamina"] = "Muestra el Dano de Hechizo de Aguante", + + -- /rb stat int + ["Intellect"] = "Intelecto", + ["Changes the display of Intellect"] = "Cambia la visualizacion de Intelecto", + -- /rb stat int spellcrit + ["Show Spell Crit"] = "Mostrar Crit Hech", + ["Show Spell Crit chance from Intellect"] = "Muestra la prob. de Crit. de Hechizo de Intelecto", + -- /rb stat int mp + ["Show Mana"] = "Mostrar Mana", + ["Show Mana from Intellect"] = "Muestra el Mana de Intelecto", + -- /rb stat int dmg + ["Show Spell Damage"] = "Mostrar Dano Hech", + ["Show Spell Damage from Intellect"] = "Muestra el Dano de Hechizo de Intelecto", + -- /rb stat int heal + ["Show Healing"] = "Mostrar Sanacion", + ["Show Healing from Intellect"] = "Muestra la Sanacion de Intelecto", + -- /rb stat int mp5 + ["Show Mana Regen"] = "Mostrar Regen.Mana", + ["Show Mana Regen while casting from Intellect"] = "Muestra la Regen.Mana de Intelecto", + -- /rb stat int mp5nc + --["Show Mana Regen while NOT casting"] = true, + --["Show Mana Regen while NOT casting from Intellect"] = true, + -- /rb stat int rap + ["Show Ranged Attack Power"] = "Mostrar Poder Ataque Dist", + ["Show Ranged Attack Power from Intellect"] = "Muestra el Poder Ataque Dist de Intelecto", + -- /rb stat int armor + ["Show Armor"] = "Mostrar Armadura", + ["Show Armor from Intellect"] = "Muestra la Armadura de Intelecto", + + -- /rb stat spi + ["Spirit"] = "Espiritu", + ["Changes the display of Spirit"] = "Cambia la visualizacion de Espiritu", + -- /rb stat spi mp5 + ["Show Mana Regen"] = "Mostrar Regen.Mana", + ["Show Mana Regen while casting from Spirit"] = "Muestra la Regen.Mana de Espiritu", + -- /rb stat spi mp5nc + ["Show Mana Regen while NOT casting"] = "Mostrar Regen.Mana NO lanzando", + ["Show Mana Regen while NOT casting from Spirit"] = "Muestra la Regen.Mana NO lanzando de Espiritu", + -- /rb stat spi hp5 + ["Show Health Regen"] = "Mostrar Regen.Salud", + ["Show Health Regen from Spirit"] = "Muestra la Regen. de Salud de Espiritu", + -- /rb stat spi dmg + ["Show Spell Damage"] = "Mostrar Dano Hech", + ["Show Spell Damage from Spirit"] = "Muestra el Dano de Hechizos de Espiritu", + -- /rb stat spi heal + ["Show Healing"] = "Mostrar Sanacion", + ["Show Healing from Spirit"] = "Muestra la Sanacion de Espiritu", + + -- /rb sum + ["Stat Summary"] = "Resumen Estad", + ["Options for stat summary"] = "Opciones de Resumen Estad.", + -- /rb sum show + ["Show stat summary"] = "Mostrar Resumen Estad", + ["Show stat summary in tooltips"] = "Muestra el Resumen de Estad. en los tooltips", + -- /rb sum ignore + ["Ignore settings"] = "Ignorar opciones", + ["Ignore stuff when calculating the stat summary"] = "Ignorar los datos cuando se calcule el resumen de estad.", + -- /rb sum ignore unused + ["Ignore unused items types"] = "Ignorar tipos de item no usados", + ["Show stat summary only for highest level armor type and items you can use with uncommon quality and up"] = "Muestra el resumen de estad. solo para los items de mayor nivel de armadura que puedes usar con calidad poco comun en adelante", + -- /rb sum ignore equipped + ["Ignore equipped items"] = "Ignorar items equipados", + ["Hide stat summary for equipped items"] = "Ocultar resumen estad. para los items equipados", + -- /rb sum ignore enchant + ["Ignore enchants"] = "Ignorar encantamientos", + ["Ignore enchants on items when calculating the stat summary"] = "Ignorar encantamientos en items cuando se calcule el resumen de estad.", + -- /rb sum ignore gem + ["Ignore gems"] = "Ignorar gemas", + ["Ignore gems on items when calculating the stat summary"] = "Ignorar gemas en items cuando se calcule el resumen de estad.", + -- /rb sum diffstyle + ["Display style for diff value"] = "Mostrar estilo para el valor de diferencia", + ["Display diff values in the main tooltip or only in compare tooltips"] = "Mostrar diferencia valores en el tooltip principal o solo en los de comparacion", + -- /rb sum space + ["Add empty line"] = "Anadir linea vacia", + ["Add a empty line before or after stat summary"] = "Anade una linea vacia antes o despues del resumen", + -- /rb sum space before + ["Add before summary"] = "Anadir antes del resumen", + ["Add a empty line before stat summary"] = "Anade una linea vacia antes del resumen", + -- /rb sum space after + ["Add after summary"] = "Anadir despues del resumen", + ["Add a empty line after stat summary"] = "Anade una linea vacia despues del resumen", + -- /rb sum icon + ["Show icon"] = "Mostrar icono", + ["Show the sigma icon before summary listing"] = "Muestra el icono de sumatorio antes del listado resumen", + -- /rb sum title + ["Show title text"] = "Mostrar texto titulo" , + ["Show the title text before summary listing"] = "Muestra el titulo antes del listado resumen", + -- /rb sum showzerostat + ["Show zero value stats"] = "Mostrar estad. valor cero", + ["Show zero value stats in summary for consistancy"] = "Muestra las estad. de valor cero por consistencia", + -- /rb sum calcsum + ["Calculate stat sum"] = "Calcula suma de estad.", + ["Calculate the total stats for the item"] = "Calcula el total de las estad. para el item", + -- /rb sum calcdiff + ["Calculate stat diff"] = "Calcular dif. estad.", + ["Calculate the stat difference for the item and equipped items"] = "Calcula la diferencia para el item y los items equipados", + -- /rb sum sort + ["Sort StatSummary alphabetically"] = "Ordenar estad. alfabeticamente", + ["Enable to sort StatSummary alphabetically, disable to sort according to stat type(basic, physical, spell, tank)"] = "Ordena alfabeticamente el resumen, deshabilita para ordenar de acuerdo a la estad. (basica, fisica, hechizo, tanque)", + -- /rb sum avoidhasblock + ["Include block chance in Avoidance summary"] = "Incluir prob. de bloqueo en resumen de Eludir", + ["Enable to include block chance in Avoidance summary, Disable for only dodge, parry, miss"] = "Incluye prob. de bloqueo en resumen de Eludir, Deshabilita para solo esquivar, parar y fallar", + -- /rb sum basic + ["Stat - Basic"] = "Estad. - Basica", + ["Choose basic stats for summary"] = "Escoge las estad. basicas para el resumen", + -- /rb sum physical + ["Stat - Physical"] = "Estad. - Fisico", + ["Choose physical damage stats for summary"] = "Escoge las estad. de dano fisico para el resumen", + -- /rb sum spell + ["Stat - Spell"] = "Estad. - Fisico", + ["Choose spell damage and healing stats for summary"] = "Escoge las estad. de dano de hechizo y sanacion para el resumen", + -- /rb sum tank + ["Stat - Tank"] = "Estad. - Tanque", + ["Choose tank stats for summary"] = "Escoge las estad. de tanque para el resumen", + -- /rb sum stat hp + ["Sum Health"] = "Suma salud", + ["Health <- Health, Stamina"] = "Salud <- Salud, Aguante", + -- /rb sum stat mp + ["Sum Mana"] = "Suma Mana", + ["Mana <- Mana, Intellect"] = "Mana <- Mana, Intelecto", + -- /rb sum stat ap + ["Sum Attack Power"] = "Res. Poder Ataque", + ["Attack Power <- Attack Power, Strength, Agility"] = "Poder Ataque <- Poder Ataque, Fuerza, Agilidad", + -- /rb sum stat rap + ["Sum Ranged Attack Power"] = "Res. P.Ataque Distancia", + ["Ranged Attack Power <- Ranged Attack Power, Intellect, Attack Power, Strength, Agility"] = "P.Ataque Distancia <- P.Ataque Distancia, Intelecto, P.Ataque, Fuerza, Agilidad", + -- /rb sum stat fap + ["Sum Feral Attack Power"] = "Res. P.Ataque feral", + ["Feral Attack Power <- Feral Attack Power, Attack Power, Strength, Agility"] = "P.Ataque feral <- P.Ataque feral, P.Ataque, Fuerza, Agilidad", + -- /rb sum stat dmg + ["Sum Spell Damage"] = "Res. Dano Hech.", + ["Spell Damage <- Spell Damage, Intellect, Spirit, Stamina"] = "Dano Hech. <- Dano Hech., Intelecto, Espiritu, Aguante", + -- /rb sum stat dmgholy + ["Sum Holy Spell Damage"] = "Res. Dano Hech. Sagrado", + ["Holy Spell Damage <- Holy Spell Damage, Spell Damage, Intellect, Spirit"] = "Dano Hech. Sagrado <- Dano Hech. Sagrado, Dano Hech., Intelecto, Espiritu", + -- /rb sum stat dmgarcane + ["Sum Arcane Spell Damage"] = "Res. Dano Hech. Arcano", + ["Arcane Spell Damage <- Arcane Spell Damage, Spell Damage, Intellect"] = "Dano Hech. Arcano <- Dano Hech. Arcano, Dano Hech., Intelecto", + -- /rb sum stat dmgfire + ["Sum Fire Spell Damage"] = "Res. Dano Hech. Fuego", + ["Fire Spell Damage <- Fire Spell Damage, Spell Damage, Intellect, Stamina"] = "Dano Hech. Arcano <- Dano Hech. Arcano, Dano Hech., Intelecto, Aguante", + -- /rb sum stat dmgnature + ["Sum Nature Spell Damage"] = "Res. Dano Hech. Naturaleza", + ["Nature Spell Damage <- Nature Spell Damage, Spell Damage, Intellect"] = "Dano Hech. Naturaleza <- Dano Hech. Naturaleza, Dano Hech., Intelecto", + -- /rb sum stat dmgfrost + ["Sum Frost Spell Damage"] = "Res. Dano Hech. Frio", + ["Frost Spell Damage <- Frost Spell Damage, Spell Damage, Intellect"] = "Dano Hech. Frio <- Dano Hech. Frio, Dano Hech., Intelecto", + -- /rb sum stat dmgshadow + ["Sum Shadow Spell Damage"] = "Res. Dano Hech. Sombras", + ["Shadow Spell Damage <- Shadow Spell Damage, Spell Damage, Intellect, Spirit, Stamina"] = "Dano Hech. Sombras <- Dano Hech. Sombras, Dano Hech., Intelecto, Espiritu, Aguante", + -- /rb sum stat heal + ["Sum Healing"] = "Res. Sanacion", + ["Healing <- Healing, Intellect, Spirit, Agility, Strength"] = "Sanacion <- Sanacion, Intelecto, Espiritu, Agilidad, Fuerza", + -- /rb sum stat hit + ["Sum Hit Chance"] = "Res. prob. Golpe", + ["Hit Chance <- Hit Rating, Weapon Skill Rating"] = "prob. Golpe <- Indice Golpe, Indice pericia", + -- /rb sum stat hitspell + ["Sum Spell Hit Chance"] = "Res. prob. Golpe Hech.", + ["Spell Hit Chance <- Spell Hit Rating"] = "prob. Golpe Hech. <- Indice Golpe Hech.", + -- /rb sum stat crit + ["Sum Crit Chance"] = "prob. Critico", + ["Crit Chance <- Crit Rating, Agility, Weapon Skill Rating"] = "prob. Critico <- Indice Critico, Agilidad, Indice de pericia", + -- /rb sum stat haste + ["Sum Haste"] = "Res. Velocidad", + ["Haste <- Haste Rating"] = "Velocidad <- Indice Velocidad", + -- /rb sum stat critspell + ["Sum Spell Crit Chance"] = "Res. prob. Critico Hech.", + ["Spell Crit Chance <- Spell Crit Rating, Intellect"] = "prob. Critico Hech. <- Indice Critico Hech., Intelecto", + -- /rb sum stat hastespell + ["Sum Spell Haste"] = "Res. velocidad Hech.", + ["Spell Haste <- Spell Haste Rating"] = "Velocidad Hech. <- Indice Velocidad Hech.", + -- /rb sum stat mp5 + ["Sum Mana Regen"] = "Res. Regen. mana", + ["Mana Regen <- Mana Regen, Spirit"] = "Regen. mana <- Regen. mana, Espiritu", + -- /rb sum stat mp5nc + ["Sum Mana Regen while not casting"] = "Res. Regen. mana mientras no se lanza", + ["Mana Regen while not casting <- Spirit"] = "Regen. mana mientras no se lanza <- Espiritu", + -- /rb sum stat hp5 + ["Sum Health Regen"] = "Res. Regen. salud", + ["Health Regen <- Health Regen"] = "Regen. salud <- Regen. salud", + -- /rb sum stat hp5oc + ["Sum Health Regen when out of combat"] = "Res. Regen. salud fuera de combate", + ["Health Regen when out of combat <- Spirit"] = "Regen. salud fuera de combate <- Espiritu", + -- /rb sum stat armor + ["Sum Armor"] = "Res. Armadura", + ["Armor <- Armor from items, Armor from bonuses, Agility, Intellect"] = "Armadura <- Armadura de items, Armadura de bonus, Agilidad, Intelecto", + -- /rb sum stat blockvalue + ["Sum Block Value"] = "Res. Valor Bloqueo", + ["Block Value <- Block Value, Strength"] = "Valor Bloqueo <- Valor Bloqueo, Fuerza", + -- /rb sum stat dodge + ["Sum Dodge Chance"] = "Res. prob. Esquivar", + ["Dodge Chance <- Dodge Rating, Agility, Defense Rating"] = "Prob. Esquivar <- Indice Esquivar, Agilidad, Indice Defensa", + -- /rb sum stat parry + ["Sum Parry Chance"] = "Res. prob. Parar", + ["Parry Chance <- Parry Rating, Defense Rating"] = "Prob. Parar <- Indice Parar, Indice Defensa", + -- /rb sum stat block + ["Sum Block Chance"] = "Res. prob Bloqueo", + ["Block Chance <- Block Rating, Defense Rating"] = "Prob. Bloqueo <- Indice Bloqueo, Indice Defensa", + -- /rb sum stat avoidhit + ["Sum Hit Avoidance"] = "Res. Elusion golpe", + ["Hit Avoidance <- Defense Rating"] = "Elusion golpe <- Indice Defensa", + -- /rb sum stat avoidcrit + ["Sum Crit Avoidance"] = "Res. Elusion Critico", + ["Crit Avoidance <- Defense Rating, Resilience"] = "Elusion Critico <- Indice Defensa, Temple", + -- /rb sum stat neglectdodge + ["Sum Dodge Neglect"] = "Res. fallo Esquivar", + ["Dodge Neglect <- Expertise, Weapon Skill Rating"] = "Fallo Esquivar <- Pericia, Indice habilidad arma", -- 2.3.0 + -- /rb sum stat neglectparry + ["Sum Parry Neglect"] = "Res. fallo Parar", + ["Parry Neglect <- Expertise, Weapon Skill Rating"] = "Fallo Parar <- Pericia, Indice habilidad arma", -- 2.3.0 + -- /rb sum stat neglectblock + ["Sum Block Neglect"] = "Res. fallo Bloquear", + ["Block Neglect <- Weapon Skill Rating"] = "Fallo Bloquear <- Indice habilidad arma", + -- /rb sum stat resarcane + ["Sum Arcane Resistance"] = "Res. Resist. Arcana", + ["Arcane Resistance Summary"] = "Resumen Resistencia Arcana", + -- /rb sum stat resfire + ["Sum Fire Resistance"] = "Res. Resist. Fuego", + ["Fire Resistance Summary"] = "Resumen Resistencia Fuego", + -- /rb sum stat resnature + ["Sum Nature Resistance"] = "Res. Resist. Naturaleza", + ["Nature Resistance Summary"] = "Resumen Resistencia Naturaleza", + -- /rb sum stat resfrost + ["Sum Frost Resistance"] = "Res. Resist. Frio", + ["Frost Resistance Summary"] = "Resumen Resistencia Frio", + -- /rb sum stat resshadow + ["Sum Shadow Resistance"] = "Res. Resist. Sombras", + ["Shadow Resistance Summary"] = "Resumen Resistencia Sombras", + -- /rb sum stat maxdamage + ["Sum Weapon Max Damage"] = "Res. Max Dano Arma", + ["Weapon Max Damage Summary"] = "Resumen de Maximo Dano Arma", + -- /rb sum stat pen + ["Sum Penetration"] = "Res. Penetracion", + ["Spell Penetration Summary"] = "Resumen Penetracion Hechizos", + -- /rb sum stat ignorearmor + ["Sum Ignore Armor"] = "Res. Ignorar armadura", + ["Ignore Armor Summary"] = "Resumen de Ignorar Armadura", + -- /rb sum stat weapondps + --["Sum Weapon DPS"] = true, + --["Weapon DPS Summary"] = true, + -- /rb sum statcomp str + ["Sum Strength"] = "Res. Fuerza", + ["Strength Summary"] = "Resumen Fuerza", + -- /rb sum statcomp agi + ["Sum Agility"] = "Res. Agilidad", + ["Agility Summary"] = "Resumen Agilidad", + -- /rb sum statcomp sta + ["Sum Stamina"] = "Res. Aguante", + ["Stamina Summary"] = "Resumen Aguante", + -- /rb sum statcomp int + ["Sum Intellect"] = "Res. Intelecto", + ["Intellect Summary"] = "Resumen Intelecto", + -- /rb sum statcomp spi + ["Sum Spirit"] = "Res. Espiritu", + ["Spirit Summary"] = "Resumen Espiritu", + -- /rb sum statcomp hitrating + ["Sum Hit Rating"] = "Res. Indice Golpe", + ["Hit Rating Summary"] = "Resumen Indice Golpe", + -- /rb sum statcomp critrating + ["Sum Crit Rating"] = "Res. Indice Critico", + ["Crit Rating Summary"] = "Resumen Indice Critico", + -- /rb sum statcomp hasterating + ["Sum Haste Rating"] = "Res. Indice Velocidad", + ["Haste Rating Summary"] = "Resumen Indice Velocidad", + -- /rb sum statcomp hitspellrating + ["Sum Spell Hit Rating"] = "Res. Golpe Hech.", + ["Spell Hit Rating Summary"] = "Resumen Golpe Hech.", + -- /rb sum statcomp critspellrating + ["Sum Spell Crit Rating"] = "Res. Indice Critico Hech.", + ["Spell Crit Rating Summary"] = "Resumen Indice Critico Hech.", + -- /rb sum statcomp hastespellrating + ["Sum Spell Haste Rating"] = "Res. Indice Velocidad Hech.", + ["Spell Haste Rating Summary"] = "Resumen Indice Velocidad Hech.", + -- /rb sum statcomp dodgerating + ["Sum Dodge Rating"] = "Res. Indice Esquivar", + ["Dodge Rating Summary"] = "Resumen Indice Esquivar", + -- /rb sum statcomp parryrating + ["Sum Parry Rating"] = "Res. Indice Parar", + ["Parry Rating Summary"] = "Resumen Indice Parar", + -- /rb sum statcomp blockrating + ["Sum Block Rating"] = "Res. Indice Bloquear", + ["Block Rating Summary"] = "Resumen Indice Bloquear", + -- /rb sum statcomp res + ["Sum Resilience"] = "Res. Temple", + ["Resilience Summary"] = "Resumen Temple", + -- /rb sum statcomp def + ["Sum Defense"] = "Res. Defensa", + ["Defense <- Defense Rating"] = "Defensa <- Indice Defensa", + -- /rb sum statcomp wpn + ["Sum Weapon Skill"] = "Res. Habilidad Arma", + ["Weapon Skill <- Weapon Skill Rating"] = "Habilidad Arma <- Indice Habilidad Arma", + -- /rb sum statcomp exp -- 2.3.0 + ["Sum Expertise"] = "Res. Pericia", + ["Expertise <- Expertise Rating"] = "Pericia <- Indice Pericia", + -- /rb sum statcomp tp + ["Sum TankPoints"] = "Res. Ptos. Tanque", + ["TankPoints <- Health, Total Reduction"] = "Ptos. Tanque <- Salud, Total Reduccion", + -- /rb sum statcomp tr + ["Sum Total Reduction"] = "Res. Total Reduccion", + ["Total Reduction <- Armor, Dodge, Parry, Block, Block Value, Defense, Resilience, MobMiss, MobCrit, MobCrush, DamageTakenMods"] = "Total Reduccion <- Armadura, Esquivar, Parar, Bloquear, Valor bloqueo, Defensa, Temple, FalloEnemigo, CriticoEnemigo, AplastamientoEnemigo, Modifics.DanoRecibido", + -- /rb sum statcomp avoid + ["Sum Avoidance"] = "Res. Elusion", + ["Avoidance <- Dodge, Parry, MobMiss, Block(Optional)"] = "Elusion <- Esquivar, Parar, FalloEnemigo, Bloqueo(Opcional)", + + -- /rb sum gem + --["Gems"] = true, + --["Auto fill empty gem slots"] = true, + -- /rb sum gem red + ["Red Socket"] = EMPTY_SOCKET_RED, + --["ItemID or Link of the gem you would like to auto fill"] = true, + --[""] = true, + --["%s is now set to %s"] = true, + --["Queried server for Gem: %s. Try again in 5 secs."] = true, + -- /rb sum gem yellow + ["Yellow Socket"] = EMPTY_SOCKET_YELLOW, + -- /rb sum gem blue + ["Blue Socket"] = EMPTY_SOCKET_BLUE, + -- /rb sum gem meta + ["Meta Socket"] = EMPTY_SOCKET_META, + + + ----------------------- + -- Item Level and ID -- + ----------------------- + ["ItemLevel: "] = "NivelItem", + ["ItemID: "] = "IDItem", + ----------------------- + -- Matching Patterns -- + ----------------------- + -- Items to check -- + -------------------- + -- [Potent Ornate Topaz] + -- +6 Spell Damage, +5 Spell Crit Rating + -------------------- + -- ZG enchant + -- +10 Defense Rating/+10 Stamina/+15 Block Value + -------------------- + -- [Glinting Flam Spessarite] + -- +3 Hit Rating and +3 Agility + -------------------- + -- ItemID: 22589 + -- [Atiesh, Greatstaff of the Guardian] warlock version + -- Equip: Increases the spell critical strike rating of all party members within 30 yards by 28. + -------------------- + -- [Brilliant Wizard Oil] + -- Use: While applied to target weapon it increases spell damage by up to 36 and increases spell critical strike rating by 14 . Lasts for 30 minutes. + ---------------------------------------------------------------------------------------------------- + -- I redesigned the tooltip scanner using a more locale friendly, 2 pass matching matching algorithm. + -- + -- The first pass searches for the rating number, the patterns are read from ["numberPatterns"] here, + -- " by (%d+)" will match strings like: "Increases defense rating by 16." + -- "%+(%d+)" will match strings like: "+10 Defense Rating" + -- You can add additional patterns if needed, its not limited to 2 patterns. + -- The separators are a table of strings used to break up a line into multiple lines what will be parsed seperately. + -- For example "+3 Hit Rating, +5 Spell Crit Rating" will be split into "+3 Hit Rating" and " +5 Spell Crit Rating" + -- + -- The second pass searches for the rating name, the names are read from ["statList"] here, + -- It will look through the table in order, so you can put common strings at the begining to speed up the search, + -- and longer strings should be listed first, like "spell critical strike" should be listed before "critical strike", + -- this way "spell critical strike" does get matched by "critical strike". + -- Strings need to be in lower case letters, because string.lower is called on lookup + -- + -- IMPORTANT: there may not exist a one-to-one correspondence, meaning you can't just translate this file, + -- but will need to go in game and find out what needs to be put in here. + -- For example, in english I found 3 different strings that maps to CR_CRIT_MELEE: "critical strike", "critical hit" and "crit". + -- You will need to find out every string that represents CR_CRIT_MELEE, and so on. + -- In other languages there may be 5 different strings that should all map to CR_CRIT_MELEE. + -- so please check in game that you have all strings, and not translate directly off this table. + -- + -- Tip1: When doing localizations, I recommend you set debugging to true in RatingBuster.lua + -- Find RatingBuster:SetDebugging(false) and change it to RatingBuster:SetDebugging(true) + -- or you can type /rb debug to enable it in game + -- + -- Tip2: The strings are passed into string.find, so you should escape the magic characters ^$()%.[]*+-? with a % + ["numberPatterns"] = { + {pattern = " en (%d+)", addInfo = "AfterNumber",}, + {pattern = "([%+%-]%d+)", addInfo = "AfterStat",}, + {pattern = "Otorga.-(%d+)", addInfo = "AfterNumber",}, -- for "grant you xx stat" type pattern, ex: Quel'Serrar, Assassination Armor set + {pattern = "aumenta.-(%d+)", addInfo = "AfterNumber",}, -- for "add xx stat" type pattern, ex: Adamantite Sharpening Stone + {pattern = "(%d+)([^%d%%|]+)", addInfo = "AfterStat",}, -- [????????] +6?????5?? + }, + ["separators"] = { + "/", " y ", ",", "%. ", " durante ", "&" + }, + --[[ Rating ID + 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; + -- + SPELL_STAT1_NAME = "Strength" + SPELL_STAT2_NAME = "Agility" + SPELL_STAT3_NAME = "Stamina" + SPELL_STAT4_NAME = "Intellect" + SPELL_STAT5_NAME = "Spirit" + --]] + ["statList"] = { + {pattern = string.lower(SPELL_STAT1_NAME), id = SPELL_STAT1_NAME}, -- Strength + {pattern = string.lower(SPELL_STAT2_NAME), id = SPELL_STAT2_NAME}, -- Agility + {pattern = string.lower(SPELL_STAT3_NAME), id = SPELL_STAT3_NAME}, -- Stamina + {pattern = string.lower(SPELL_STAT4_NAME), id = SPELL_STAT4_NAME}, -- Intellect + {pattern = string.lower(SPELL_STAT5_NAME), id = SPELL_STAT5_NAME}, -- Spirit + {pattern = "indice de defensa rating, id = CR_DEFENSE_SKILL"}, + {pattern = "indice de esquivar", id = CR_DODGE}, + {pattern = "indice de bloqueo", id = CR_BLOCK}, -- block enchant: "+10 Shield Block Rating" + {pattern = "indice de parada", id = CR_PARRY}, + + {pattern = "indice de golpe critico con hechizos", id = CR_CRIT_SPELL}, + {pattern = "indice de golpe critico a distancia", id = CR_CRIT_RANGED}, + {pattern = "indice de golpe critico cuerpo a cuerpo", id = CR_CRIT_MELEE}, + {pattern = "indice de golpe", id = CR_CRIT_MELEE}, + + {pattern = "indice de golpe con hechizo", id = CR_HIT_SPELL}, + {pattern = "indice de golpe a distancia", id = CR_HIT_RANGED}, + {pattern = "indice de golpe cuerpo a cuerpo", id = CR_HIT_MELEE}, + {pattern = "indice de golpe", id = CR_HIT_MELEE}, + + {pattern = "indice de temple", id = CR_CRIT_TAKEN_MELEE}, -- resilience is implicitly a rating + + {pattern = "indice de celeridad con hechizos", id = CR_HASTE_SPELL}, + {pattern = "indice de celeridad a distancia", id = CR_HASTE_RANGED}, + {pattern = "indice de celeridad con cuerpo a cuerpo", id = CR_HASTE_MELEE}, + {pattern = "indice de celeridad", id = CR_HASTE_MELEE}, + {pattern = "Aumenta el indice de velocidad de lanzamiento de ataques y de ataque de los miembros del grupo cercanos", id = CR_HASTE_MELEE}, -- [Drums of Battle] + + {pattern = "indice de habilidad", id = CR_WEAPON_SKILL}, + {pattern = "indice de pericia", id = CR_EXPERTISE}, + + {pattern = "indice de evasion de golpes cuerpo a cuerpo", id = CR_HIT_TAKEN_MELEE}, + {pattern = "indice de evasion", id = CR_HIT_TAKEN_MELEE}, + --[[ + {pattern = "indice de habilidad con dagas", id = CR_WEAPON_SKILL}, + {pattern = "indice de habilidad con espadas", id = CR_WEAPON_SKILL}, + {pattern = "indice de habilidad con espadas de dos manos", id = CR_WEAPON_SKILL}, + {pattern = "indice de habilidad con hachas", id = CR_WEAPON_SKILL}, + {pattern = "indice de habilidad con arcos", id = CR_WEAPON_SKILL}, + {pattern = "indice de habilidad con ballesta", id = CR_WEAPON_SKILL}, + {pattern = "indice de habilidad con armas de fuego", id = CR_WEAPON_SKILL}, + {pattern = "indice de habilidad en combate feral", id = CR_WEAPON_SKILL}, + {pattern = "indice de habilidad con mazas", id = CR_WEAPON_SKILL}, + {pattern = "indice de habilidad con armas de asta", id = CR_WEAPON_SKILL}, + {pattern = "indice de habilidad con bastones", id = CR_WEAPON_SKILL}, + {pattern = "indice de habilidad con hachas de dos manos", id = CR_WEAPON_SKILL}, + {pattern = "indice de habilidad con mazas de dos manos", id = CR_WEAPON_SKILL}, + {pattern = "indice de habilidad sin armas", id = CR_WEAPON_SKILL}, + --]] + }, + ------------------------- + -- Added info patterns -- + ------------------------- + -- $value will be replaced with the number + -- EX: "$value% Crit" -> "+1.34% Crit" + -- EX: "Crit $value%" -> "Crit +1.34%" + ["$value% Crit"] = "$value% Crit", + ["$value% Spell Crit"] = "$value% Crit hechizos", + ["$value% Dodge"] = "$value% Esquivar", + ["$value HP"] = "$value Vida", + ["$value MP"] = "$value Mana", + ["$value AP"] = "$value P.At", + ["$value RAP"] = "$value P.At Dist", + ["$value Dmg"] = "$value Dano", + ["$value Heal"] = "$value Sanacion", + ["$value Armor"] = "$value Armadura", + ["$value Block"] = "$value Bloqueo", + ["$value MP5"] = "$value Mana/5sec", + ["$value MP5(NC)"] = "$value Mana/5sec(SL)", + ["$value HP5"] = "$value Vida/5sec", + ["$value to be Dodged/Parried"] = "$value Esquivado/Parado", + ["$value to be Crit"] = "$value recibir Crit", + ["$value Crit Dmg Taken"] = "$value Dano crit recib", + ["$value DOT Dmg Taken"] = "$value Dano por tiempo recib", + + ------------------ + -- Stat Summary -- + ------------------ + ["Stat Summary"] = "Resumen estad.", +} end) \ No newline at end of file diff --git a/RatingBuster-Locale-frFR.lua b/RatingBuster-Locale-frFR.lua new file mode 100644 index 0000000..7006165 --- /dev/null +++ b/RatingBuster-Locale-frFR.lua @@ -0,0 +1,451 @@ +--[[ +Name: RatingBuster frFR locale (incomplete) +Revision: $Revision: 73696 $ +Translated by: +- Tixu@Curse +- Silaor +- renchap +]] +local L = AceLibrary("AceLocale-2.2"):new("RatingBuster") +---- +-- This file is coded in UTF-8 +-- If you don't have a editor that can save in UTF-8, I recommend Ultraedit +---- +L:RegisterTranslations("frFR", function() return { + --------------------------- + -- Slash Command Options -- + --------------------------- + -- /rb statmod + ["Enable Stat Mods"] = "Activer les Stat Mods", + ["Enable support for Stat Mods"] = "Activer le support pour Stat Mods", + -- /rb itemid + ["Show ItemID"] = "Voire l'ID de l'objet", + ["Show the ItemID in tooltips"] = "Montrer l'ID d'un objet dans l'infobulle", + -- /rb itemlevel + ["Show ItemLevel"] = "Voire le niveau de l'objet", + ["Show the ItemLevel in tooltips"] = "Montre le niveau de l'objet dans l'infobulle", + -- /rb usereqlv + ["Use required level"] = "Utiliser le niveau requis", + ["Calculate using the required level if you are below the required level"] = "Effectue les calculs en utilisant le niveau requis par l'objet si il n'est pas atteint", + -- /rb setlevel + ["Set level"] = "Définir le niveau", + ["Set the level used in calculations (0 = your level)"] = "Définit le niveau utilisé dans les calculs (0 = votre niveau)", + -- /rb color + ["Change text color"] = "Changer la couleur du texte", + ["Changes the color of added text"] = "Change la couleur du texte ajouté", + -- /rb color pick + ["Pick color"] = "Choix de la couleur", + ["Pick a color"] = "Choisissez une couleur", + -- /rb color enable + ["Enable color"] = "Activer la couleur", + ["Enable colored text"] = "Active le texte coloré", + -- /rb rating + ["Rating"] = "Score", + ["Options for Rating display"] = "Options pour l'affichage des scores", + -- /rb rating show + ["Show Rating conversions"] = "Montrer la conversion des scores", + ["Show Rating conversions in tooltips"] = "Montre dans l'infobulle les gains apportés par le score", + -- /rb rating def + ["Defense breakdown"] = "Détailler la défense", + ["Convert Defense into Crit Avoidance, Hit Avoidance, Dodge, Parry and Block"] = "Convertit le score de défense en Défense Crit, Défense Coup, Esquive, Parade et Bloquage", + -- /rb rating wpn + ["Weapon Skill breakdown"] = "Détailler la compétence d'arme", + ["Convert Weapon Skill into Crit, Hit, Dodge Neglect, Parry Neglect and Block Neglect"] = "Convertit la compétence d'arme en Critique, Toucher, Ignorer Esquive, Ignorer Parade, Ignorer Bloquage", + + -- /rb stat + --["Stat Breakdown"] = "Carac", + ["Changes the display of base stats"] = "Change l'affichage des caractéristiques de base", + -- /rb stat show + ["Show base stat conversions"] = "Montrer les conversions pour les caracs", + ["Show base stat conversions in tooltips"] = "Montre dans l'infobulle les caracs converties", + -- /rb stat str + ["Strength"] = "Force", + ["Changes the display of Strength"] = "Change l'affichage de la Force", + -- /rb stat str ap + ["Show Attack Power"] = "Montrer la PA", + ["Show Attack Power from Strength"] = "Montre la Puissance d'Attaque apporté par la Force", + -- /rb stat str block + ["Show Block Value"] = "Montrer le Bloquage", + ["Show Block Value from Strength"] = "Montre le Bloquage apporté par la Force", + -- /rb stat str dmg + ["Show Spell Damage"] = "Montrer les Dégats des Sorts", + ["Show Spell Damage from Strength"] = "Montre le Bonus de Dégats des Sorts apporté par la Force", + -- /rb stat str heal + ["Show Healing"] = "Montrer les Soins", + ["Show Healing from Strength"] = "Montre le Bonus aux Soins apportés par la Force", + + -- /rb stat agi + ["Agility"] = "Agilité", + ["Changes the display of Agility"] = "Change l'affichage de l'Agilité", + -- /rb stat agi crit + ["Show Crit"] = "Montrer le %Crit", + ["Show Crit chance from Agility"] = "Montre le pourcentage de critique apporté par l'Agilité", + -- /rb stat agi dodge + ["Show Dodge"] = "Montrer l'Esquive", + ["Show Dodge chance from Agility"] = "Montre les chances d'Esquive apportées par l'Agilité", + -- /rb stat agi ap + ["Show Attack Power"] = "Montrer la PA", + ["Show Attack Power from Agility"] = "Montre la Puissance d'Attaque apporté par l'Agilité", + -- /rb stat agi rap + ["Show Ranged Attack Power"] = "Montrer la PA à Distance", + ["Show Ranged Attack Power from Agility"] = "Montre la Puissance d'Attaque à Distance apporté par l'Agilité", + -- /rb stat agi armor + ["Show Armor"] = "Montrer l'Armure", + ["Show Armor from Agility"] = "Montre l'Armure apportée par l'Agilité", + -- /rb stat agi heal + ["Show Healing"] = "Montrer les Soins", + ["Show Healing from Agility"] = "Montre le bonus aux Soins apporté par l'Agilité", + + -- /rb stat sta + ["Stamina"] = "Endurance", + ["Changes the display of Stamina"] = "Change l'affichage de l'Endurance", + -- /rb stat sta hp + ["Show Health"] = "Montrer les PV", + ["Show Health from Stamina"] = "Montre les Points de Vie apportés par l'Endurance", + -- /rb stat sta dmg + ["Show Spell Damage"] = "Montrer les Dégats des Sorts", + ["Show Spell Damage from Stamina"] = "Montre le bonus de Dégats des Sorts apporté par l'Endurance", + + -- /rb stat int + ["Intellect"] = "Intelligence", + ["Changes the display of Intellect"] = "Change l'affichage de l'Intelligence", + -- /rb stat int spellcrit + ["Show Spell Crit"] = "Montrer le %Crit des Sorts", + ["Show Spell Crit chance from Intellect"] = "Montre le Pourcentage de Critique des Sorts apporté par l'Intelligence", + -- /rb stat int mp + ["Show Mana"] = "Montrer les PM", + ["Show Mana from Intellect"] = "Montre les Points de Mana apportés par l'Intelligence", + -- /rb stat int dmg + ["Show Spell Damage"] = "Montrer les Dégats des Sorts", + ["Show Spell Damage from Intellect"] = "Montre le Bonus de Dégats des Sorts apporté par l'Intelligence", + -- /rb stat int heal + ["Show Healing"] = "Montrer les Soins", + ["Show Healing from Intellect"] = "Montre le Bonus aux Soins apportés par l'Intelligence", + -- /rb stat int mp5 + ["Show Mana Regen"] = "Montrer la Regen Mana", + ["Show Mana Regen while casting from Intellect"] = "Montre la Régénération de Mana pendant incantation apportée par l'Intelligence", + -- /rb stat int mp5nc + --["Show Mana Regen while NOT casting"] = true, + --["Show Mana Regen while NOT casting from Intellect"] = true, + -- /rb stat int rap + ["Show Ranged Attack Power"] = "Montre la PA à Distance", + ["Show Ranged Attack Power from Intellect"] = "Montre la Puissance d'Attaque à Distance apportée par l'Intelligence", + -- /rb stat int armor + ["Show Armor"] = "Montrer l'Armure", + ["Show Armor from Intellect"] = "Montre l'Armure apportée par l'Intelligence", + + -- /rb stat spi + ["Spirit"] = "Esprit", + ["Changes the display of Spirit"] = "Change l'affichage de l'Esprit", + -- /rb stat spi mp5 + ["Show Mana Regen"] = "Montrer la Regen Mana", + ["Show Mana Regen while casting from Spirit"] = "Montre la Régénération de Mana pendant incantation apportée par l'Esprit", + -- /rb stat spi mp5nc + ["Show Mana Regen while NOT casting"] = "Montrer la Regen Mana (HI)", + ["Show Mana Regen while NOT casting from Spirit"] = "Montre la Régénération de Mana HORS INCANTATION apportée par l'Epsrit", + -- /rb stat spi hp5 + ["Show Health Regen"] = "Montrer la Regen PV", + ["Show Health Regen from Spirit"] = "Montre la Régénération des Points de Vie apportée par l'Esprit", + -- /rb stat spi dmg + ["Show Spell Damage"] = "Montrer les Dégats des Sorts", + ["Show Spell Damage from Spirit"] = "Montre le Bonus aux Soins apportés par l'Esprit", + -- /rb stat spi heal + ["Show Healing"] = "Montrer les Soins", + ["Show Healing from Spirit"] = "Montre le Bonus aux Soins apportés par l'Esprit", + + -- /rb sum + ["Stat Summary"] = "Résumé des Stats", + ["Options for stat summary"] = "Options pour le Résumé", + -- /rb sum show + ["Show stat summary"] = "Montrer le Résumé", + ["Show stat summary in tooltips"] = "Montre le Résumé des Statistiques de combat dans l'infobulle", + -- /rb sum ignore + ["Ignore settings"] = "Paramètres à ignorer", + ["Ignore stuff when calculating the stat summary"] = "Choisir quoi ignorer lors du calcul du résumé de stats", + -- /rb sum ignore unused + ["Ignore unused items types"] = "Ignorer les types d'objets non utilisés", + ["Show stat summary only for highest level armor type and items you can use with uncommon quality and up"] = "Montre les statistiques uniquement pour les plus hauts rangs d'armure et pour des objets de qualité au moins Inhabituel", + -- /rb sum ignore equipped + ["Ignore equipped items"] = "Ignorer les objets équipés", + ["Hide stat summary for equipped items"] = "Cache le résumé pour les objets équipés", + -- /rb sum ignore enchant + ["Ignore enchants"] = "Ignorer les Enchantements", + ["Ignore enchants on items when calculating the stat summary"] = "Ignore les bonus d'Enchantement lors du calcul du résumé", + -- /rb sum ignore gem + ["Ignore gems"] = "Ignorer les Gemmes", + ["Ignore gems on items when calculating the stat summary"] = "Ignore les bonus des Gemmes lors du calcul du résumé", + -- /rb sum diffstyle + ["Display style for diff value"] = "Style d'affichage du résumé", + ["Display diff values in the main tooltip or only in compare tooltips"] = "Afficher les différences dans l'infobulle principale ou dans l'infobulle de comparaison", + --[[TODO + -- /rb sum space + ["Add empty line"] = true, + ["Add a empty line before or after stat summary"] = true, + -- /rb sum space before + ["Add before summary"] = true, + ["Add a empty line before stat summary"] = true, + -- /rb sum space after + ["Add after summary"] = true, + ["Add a empty line after stat summary"] = true, + -- /rb sum icon + ["Show icon"] = true, + ["Show the sigma icon before summary listing"] = true, + -- /rb sum title + ["Show title text"] = true, + ["Show the title text before summary listing"] = true, + --]] + -- /rb sum showzerostat + ["Show zero value stats"] = "Montrer les stats nulles", + ["Show zero value stats in summary for consistancy"] = "Montre les stats nulles pour plus de cohérence", + -- /rb sum calcsum + ["Calculate stat sum"] = "Calculer les cumuls", + ["Calculate the total stats for the item"] = "Fait un cumul des stats pour l'objet", + -- /rb sum calcdiff + ["Calculate stat diff"] = "Calculer les différences", + ["Calculate the stat difference for the item and equipped items"] = "Fait le calcul des différences avec l'objet équipé", + -- /rb sum stat + --["Stat - Base"] = "Stat Base", + --["Choose base stats for summary"] = "Choisir les Stats de base pour le Résumé", + -- /rb sum stat hp + ["Sum Health"] = "Cumul Vie", + ["Health <- Health, Stamina"] = "Vie <- Vie, Endu", + -- /rb sum stat mp + ["Sum Mana"] = "Cumul Mana", + ["Mana <- Mana, Intellect"] = "Mana <- Mana, Intel", + -- /rb sum stat ap + ["Sum Attack Power"] = "Cumul PA", + ["Attack Power <- Attack Power, Strength, Agility"] = "PA <- PA, Force, Agi", + -- /rb sum stat rap + ["Sum Ranged Attack Power"] = "Cumul PA Dist", + ["Ranged Attack Power <- Ranged Attack Power, Intellect, Attack Power, Strength, Agility"] = "PA Dist <- PA Dist, Intel, PA, Force, Agi", + -- /rb sum stat fap + ["Sum Feral Attack Power"] = "Cumul PA Farouche", + ["Feral Attack Power <- Feral Attack Power, Attack Power, Strength, Agility"] = "PA Farouche <- PA Farouche, PA, Force, Agi", + -- /rb sum stat dmg + ["Sum Spell Damage"] = "Cumul Dégats des Sorts", + ["Spell Damage <- Spell Damage, Intellect, Spirit, Stamina"] = "Dégats des Sorts <- Dégats des Sorts, Intel, Esprit, Endu", + -- /rb sum stat dmgholy + ["Sum Holy Spell Damage"] = "Cumul DS Sacré", + ["Holy Spell Damage <- Holy Spell Damage, Spell Damage, Intellect, Spirit"] = "DS Sacré <- DS Sacré, DS, Intel, Esprit", + -- /rb sum stat dmgarcane + ["Sum Arcane Spell Damage"] = "Cumul DS Arcane", + ["Arcane Spell Damage <- Arcane Spell Damage, Spell Damage, Intellect"] = "DS Arcane <- DS Arcane, DS, Intel", + -- /rb sum stat dmgfire + ["Sum Fire Spell Damage"] = "Cumul DS Feu", + ["Fire Spell Damage <- Fire Spell Damage, Spell Damage, Intellect, Stamina"] = "DS Feu <- DS Feu, DS, Intel, Endu", + -- /rb sum stat dmgnature + ["Sum Nature Spell Damage"] = "Cumul DS Nature", + ["Nature Spell Damage <- Nature Spell Damage, Spell Damage, Intellect"] = "DS Nature <- DS Nature, DS, Intel", + -- /rb sum stat dmgfrost + ["Sum Frost Spell Damage"] = "Cumul DS Givre", + ["Frost Spell Damage <- Frost Spell Damage, Spell Damage, Intellect"] = "DS Givre <- DS Givre, DS, Intel", + -- /rb sum stat dmgshadow + ["Sum Shadow Spell Damage"] = "Cumul DS Ombre", + ["Shadow Spell Damage <- Shadow Spell Damage, Spell Damage, Intellect, Spirit, Stamina"] = "DS Ombre <- DS Ombre, DS, Intel, Esprit, Endu", + -- /rb sum stat heal + ["Sum Healing"] = "Cumul Soins", + ["Healing <- Healing, Intellect, Spirit, Agility, Strength"] = "Soins <- Soins, Intel, Esprit, Agi, Force", + -- /rb sum stat hit + ["Sum Hit Chance"] = "Cumul Toucher", + ["Hit Chance <- Hit Rating, Weapon Skill Rating"] = "Toucher <- Toucher, Score Arme", + -- /rb sum stat hitspell + ["Sum Spell Hit Chance"] = "Cumul Toucher des Sorts", + ["Spell Hit Chance <- Spell Hit Rating"] = "Toucher des Sorts <- Toucher des Sorts", + -- /rb sum stat crit + ["Sum Crit Chance"] = "Cumul Crit", + ["Crit Chance <- Crit Rating, Agility, Weapon Skill Rating"] = "Crit <- %Crit, Agi, Comp Arme", + -- /rb sum stat critspell + ["Sum Spell Crit Chance"] = "Cumul Crit Sorts", + ["Spell Crit Chance <- Spell Crit Rating, Intellect"] = "Crit Sorts <- %Crit Sorts, Intel", + -- /rb sum stat mp5 + ["Sum Mana Regen"] = "Cumul Regen Mana", + ["Mana Regen <- Mana Regen, Spirit"] = "Regen Mana <- Regen Mana, Esprit", + -- /rb sum stat mp5nc + ["Sum Mana Regen while not casting"] = "Cumul Regen Mana HI", + ["Mana Regen while not casting <- Spirit"] = "Regen Mana HI <- Esprit", + -- /rb sum stat hp5 + ["Sum Health Regen"] = "Cumul Regen Vie", + ["Health Regen <- Health Regen"] = "Regen Vie <- Regen Vie", + -- /rb sum stat hp5oc + ["Sum Health Regen when out of combat"] = "Cumul Regen Vie HC", + ["Health Regen when out of combat <- Spirit"] = "Regen Vie HC <- Esprit", + -- /rb sum stat armor + ["Sum Armor"] = "Cumul Armure", + ["Armor <- Armor from items, Armor from bonuses, Agility, Intellect"] = "Armure <- Armure Objets, Armure Bonus, Agi, Intel", + -- /rb sum stat blockvalue + ["Sum Block Value"] = "Cumul Dégats Bloqués", + ["Block Value <- Block Value, Strength"] = "Dégats Bloqués <- Dégats Bloqués, Force", + -- /rb sum stat dodge + ["Sum Dodge Chance"] = "Cumul Esquive", + ["Dodge Chance <- Dodge Rating, Agility, Defense Rating"] = "Esquive <- Score Esquive, Agi, Score Def", + -- /rb sum stat parry + ["Sum Parry Chance"] = "Cumul Parade", + ["Parry Chance <- Parry Rating, Defense Rating"] = "Parade <- Score Parade, Score Def", + -- /rb sum stat block + ["Sum Block Chance"] = "Cumul Bloquage", + ["Block Chance <- Block Rating, Defense Rating"] = "Bloquage <- Score Bloquage, Score Def", + -- /rb sum stat avoidhit + ["Sum Hit Avoidance"] = "Cumul Raté", + ["Hit Avoidance <- Defense Rating"] = "Raté <- Score Def", + -- /rb sum stat avoidcrit + ["Sum Crit Avoidance"] = "Cumul Def Crit", + ["Crit Avoidance <- Defense Rating, Resilience"] = "Def Crit <- Score Def, Resilience", + -- /rb sum stat neglectdodge + ["Sum Dodge Neglect"] = "Cumul Ignore Esquive", + --["Dodge Neglect <- Weapon Skill Rating"] = "Ignore Esquive <- Score Arme", + -- /rb sum stat neglectparry + ["Sum Parry Neglect"] = "Cumul Ignore Parade", + --["Parry Neglect <- Weapon Skill Rating"] = "Ignore Parade <- Score Arme", + -- /rb sum stat neglectblock + ["Sum Block Neglect"] = "Cumul Ignore Bloquage", + ["Block Neglect <- Weapon Skill Rating"] = "Ignore Bloquage <- Score Arme", + -- /rb sum stat resarcane + ["Sum Arcane Resistance"] = "Cumul RA", + ["Arcane Resistance Summary"] = "Résumé de la RA", + -- /rb sum stat resfire + ["Sum Fire Resistance"] = "Cumul RF", + ["Fire Resistance Summary"] = "Résumé de la Rf", + -- /rb sum stat resnature + ["Sum Nature Resistance"] = "Cumul RN", + ["Nature Resistance Summary"] = "Résumé de la RN", + -- /rb sum stat resfrost + ["Sum Frost Resistance"] = "Cumul RG", + ["Frost Resistance Summary"] = "Résumé de la RG", + -- /rb sum stat resshadow + ["Sum Shadow Resistance"] = "Cumul RO", + ["Shadow Resistance Summary"] = "Résumé de la RO", + -- /rb sum stat maxdamage + ["Sum Weapon Max Damage"] = "Cumul Dommage Arme Max", + ["Weapon Max Damage Summary"] = "Résumé du Dommage ax de l'Arme", + -- /rb sum stat weapondps + --["Sum Weapon DPS"] = true, + --["Weapon DPS Summary"] = true, + -- /rb sum statcomp + --["Stat - Composite"] = "Stats - Composées", + --["Choose composite stats for summary"] = "Choisir les Stats composées du résumé", + -- /rb sum statcomp str + ["Sum Strength"] = "Cumul Force", + ["Strength Summary"] = "Résumé de la Force", + -- /rb sum statcomp agi + ["Sum Agility"] = "Cumul Agi", + ["Agility Summary"] = "Résumé de l'Agilité", + -- /rb sum statcomp sta + ["Sum Stamina"] = "Cumul Endu", + ["Stamina Summary"] = "Résumé de l'Endurance", + -- /rb sum statcomp int + ["Sum Intellect"] = "Cumul Int", + ["Intellect Summary"] = "Résumé de l'Intelligence", + -- /rb sum statcomp spi + ["Sum Spirit"] = "Cumul Esprit", + ["Spirit Summary"] = "Résumé de l'Esprit", + -- /rb sum statcomp def + ["Sum Defense"] = "Cumul Def", + ["Defense <- Defense Rating"] = "Def <- Score def", + -- /rb sum statcomp wpn + ["Sum Weapon Skill"] = "Cumul Comp Arme", + ["Weapon Skill <- Weapon Skill Rating"] = "Comp Arme <- Score Arme", + + -- /rb sum gem + --["Gems"] = true, + --["Auto fill empty gem slots"] = true, + -- /rb sum gem red + ["Red Socket"] = EMPTY_SOCKET_RED, + --["ItemID or Link of the gem you would like to auto fill"] = true, + --[""] = true, + --["%s is now set to %s"] = true, + --["Queried server for Gem: %s. Try again in 5 secs."] = true, + -- /rb sum gem yellow + ["Yellow Socket"] = EMPTY_SOCKET_YELLOW, + -- /rb sum gem blue + ["Blue Socket"] = EMPTY_SOCKET_BLUE, + -- /rb sum gem meta + ["Meta Socket"] = EMPTY_SOCKET_META, + + ---------------------- + -- Item Level and ID -- + ----------------------- + ["ItemLevel: "] = "Niveau Objet : ", + ["ItemID: "] = "ID Objet : ", + ----------------------- + -- Matching Patterns -- + ----------------------- + ["numberPatterns"] = { + {pattern = " de (%d+)", addInfo = "AfterNumber",}, + {pattern = "(%d+) \195\160 votre ", addInfo = "AfterNumber",}, + {pattern = "([%+%-]%d+)", addInfo = "AfterStat",}, + {pattern = "ajoute (%d+) (à|au)", addInfo = "AfterNumber",}, -- for "add xx stat" type pattern, ex: Adamantite Sharpening Stone + }, + ["separators"] = { + "/", " et ", ",", "%. ", + }, + + ["statList"] = { + {pattern = string.lower(SPELL_STAT1_NAME), id = SPELL_STAT1_NAME}, -- Strength + {pattern = string.lower(SPELL_STAT2_NAME), id = SPELL_STAT2_NAME}, -- Agility + {pattern = string.lower(SPELL_STAT3_NAME), id = SPELL_STAT3_NAME}, -- Stamina + {pattern = string.lower(SPELL_STAT4_NAME), id = SPELL_STAT4_NAME}, -- Intellect + {pattern = string.lower(SPELL_STAT5_NAME), id = SPELL_STAT5_NAME}, -- Spirit + {pattern = "score de défense", id = CR_DEFENSE_SKILL}, + {pattern = "score d'esquive", id = CR_DODGE}, + {pattern = "score de blocage", id = CR_BLOCK}, -- block enchant: "+10 Shield Block Rating" + {pattern = "score de parade", id = CR_PARRY}, + + {pattern = "score de critique des sorts", id = CR_CRIT_SPELL}, + {pattern = "score de coup critique à distance", id = CR_CRIT_RANGED}, + {pattern = "score de coup critique", id = CR_CRIT_MELEE}, + + {pattern = "score de toucher des sorts", id = CR_HIT_SPELL}, + {pattern = "score de toucher à distance", id = CR_HIT_RANGED}, + {pattern = "score de toucher", id = CR_HIT_MELEE}, + + {pattern = "résilience", id = CR_CRIT_TAKEN_MELEE}, -- resilience is implicitly a rating + {pattern = "score d'évitement des coups", id = CR_HIT_TAKEN_MELEE}, + + {pattern = "score de hâte des sorts", id = CR_HASTE_SPELL}, + {pattern = "score de hâte à distance", id = CR_HASTE_RANGED}, + {pattern = "score de hâte", id = CR_HASTE_MELEE}, + {pattern = "scores de vitesse", id = CR_HASTE_MELEE}, -- [Tambours de Bataille] + + + {pattern = "score de la compétence dagues", id = CR_WEAPON_SKILL}, + {pattern = "score de la compétence epées", id = CR_WEAPON_SKILL}, + {pattern = "score de la compétence epées à deux mains", id = CR_WEAPON_SKILL}, + {pattern = "score de la compétence haches", id = CR_WEAPON_SKILL}, + {pattern = "score de la compétence haches à deux mains", id = CR_WEAPON_SKILL}, + {pattern = "score de la compétence masses", id = CR_WEAPON_SKILL}, + {pattern = "score de la compétence masses à deux mains", id = CR_WEAPON_SKILL}, + {pattern = "score de la compétence armes d'hast", id = CR_WEAPON_SKILL}, + {pattern = "score de la compétence arcs", id = CR_WEAPON_SKILL}, + {pattern = "score de la compétence fusils", id = CR_WEAPON_SKILL}, + {pattern = "score de la compétence arbalètes", id = CR_WEAPON_SKILL}, + {pattern = "score de la compétence bâton", id = CR_WEAPON_SKILL}, + {pattern = "score de la compétence mains nues", id = CR_WEAPON_SKILL}, + + --{pattern = "score de la compétence", id = CR_WEAPON_SKILL}, + }, + ------------------------- + -- Added info patterns -- + ------------------------- + -- $value will be replaced with the number + -- EX: "$value% Crit" -> "+1.34% Crit" + -- EX: "Crit $value%" -> "Crit +1.34%" + ["$value% Crit"] = "$value% Crit", + ["$value% Spell Crit"] = "$value% Crit Sorts", + ["$value% Dodge"] = "$value% Esquive", + ["$value HP"] = "$value PV", + ["$value MP"] = "$value PM", + ["$value AP"] = "$value PA", + ["$value RAP"] = "$value PA Dist", + ["$value Dmg"] = "$value Dégats", + ["$value Heal"] = "$value Soins", + ["$value Armor"] = "$value Armure", + ["$value Block"] = "$value Blocage", + ["$value MP5"] = "$value Mana/5sec", + ["$value MP5(NC)"] = "$value Mana/5sec(HI)", + ["$value HP5"] = "$value Vie/5sec", + + ------------------ + -- Stat Summary -- + ------------------ + ["Stat Summary"] = "Résumé Stats", +} end) \ No newline at end of file diff --git a/RatingBuster-Locale-koKR.lua b/RatingBuster-Locale-koKR.lua new file mode 100644 index 0000000..75d7767 --- /dev/null +++ b/RatingBuster-Locale-koKR.lua @@ -0,0 +1,624 @@ +--[[ +Name: RatingBuster koKR locale +Revision: $Revision: 73696 $ +Translated by: +- kcgcom, fenlis (jungseop.park@gmail.com) +]] + +local L = AceLibrary("AceLocale-2.2"):new("RatingBuster") +---- +-- This file is coded in UTF-8 +-- If you don't have a editor that can save in UTF-8, I recommend Ultraedit +---- +-- To translate AceLocale strings, replace true with the translation string +-- Before: ["Show Item ID"] = true, +-- After: ["Show Item ID"] = "顯示物品編號", +L:RegisterTranslations("koKR", function() return { + --------------- + -- Waterfall -- + --------------- + ["RatingBuster Options"] = "RatingBuster 설정", + ["Waterfall-1.0 is required to access the GUI."] = "GUI를 표시하려면 Waterfall-1.0 라이브러리가 필요합니다.", + --------------------------- + -- Slash Command Options -- + --------------------------- + -- /rb win + ["Options Window"] = "설정창", + ["Shows the Options Window"] = "설정창을 표시합니다.", + -- /rb statmod + ["Enable Stat Mods"] = "능력치 애드온 사용", + ["Enable support for Stat Mods"] = "능력치 애드온 지원을 사용합니다.", + -- /rb itemid + ["Show ItemID"] = "아이템 ID 표시", + ["Show the ItemID in tooltips"] = "툴팁에 아이템 ID를 표시합니다.", + -- /rb itemlevel + ["Show ItemLevel"] = "아이템 레벨 표시", + ["Show the ItemLevel in tooltips"] = "툴팁에 아이템 레벨을 표시합니다.", + -- /rb usereqlv + ["Use required level"] = "최소 요구 레벨 사용", + ["Calculate using the required level if you are below the required level"] = "레벨이 낮아 사용하지 못하는 경우 최소 요구 레벨에 따라 계산합니다.", + -- /rb setlevel + ["Set level"] = "레벨 설정", + ["Set the level used in calculations (0 = your level)"] = "계산에 적용할 레벨을 설정합니다. (0 = 자신 레벨)", + -- /rb color + ["Change text color"] = "글자 색상 변경", + ["Changes the color of added text"] = "추가된 글자의 색상을 변경합니다.", + -- /rb color pick + ["Pick color"] = "색상 선택", + ["Pick a color"] = "색상을 선택합니다.", + -- /rb color enable + ["Enable color"] = "색상 사용", + ["Enable colored text"] = "글자에 색상을 사용합니다.", + -- /rb rating + ["Rating"] = "평점", + ["Options for Rating display"] = "평점 표시에 대한 설정입니다.", + -- /rb rating show + ["Show Rating conversions"] = "평점 변화 표시", + ["Show Rating conversions in tooltips"] = "툴팁에 평점 변화를 표시합니다.", + -- /rb rating detail + ["Show detailed conversions text"] = "세부적인 평점 변화 표시", + ["Show detailed text for Resiliance and Expertise conversions"] = "탄력도와 숙련의 세부적인 평점 변화 표시를 사용합니다.", + -- /rb rating def + ["Defense breakdown"] = "방어 숙련 세분화", + ["Convert Defense into Crit Avoidance, Hit Avoidance, Dodge, Parry and Block"] = "치명타 공격 회피, 공격 회피, 회피, 무기 막기, 방패 막기 등으로 방어 숙련을 세분화합니다.", + -- /rb rating wpn + ["Weapon Skill breakdown"] = "무기 숙련 세분화", + ["Convert Weapon Skill into Crit, Hit, Dodge Neglect, Parry Neglect and Block Neglect"] = "치명타, 공격, 회피 무시, 무기 막기 무시, 방패 막기 무시 등으로 무기 숙련를 세분화합니다.", + -- /rb rating exp -- 2.3.0 + ["Expertise breakdown"] = "숙련 세분화", + ["Convert Expertise into Dodge Neglect and Parry Neglect"] = "회피 무시와 무기막기 무시 등으로 숙련을 세분화 합니다.", + + -- /rb stat + --["Stat Breakdown"] = "능력치", + ["Changes the display of base stats"] = "기본 능력치 표시방법을 변경합니다.", + -- /rb stat show + ["Show base stat conversions"] = "기본 능력치 변화 표시", + ["Show base stat conversions in tooltips"] = "툴팁에 기본 능력치의 변화를 표시합니다.", + -- /rb stat str + ["Strength"] = "힘", + ["Changes the display of Strength"] = "힘에 대한 표시방법을 변경합니다.", + -- /rb stat str ap + ["Show Attack Power"] = "전투력 표시", + ["Show Attack Power from Strength"] = "힘에 의한 전투력을 표시합니다.", + -- /rb stat str block + ["Show Block Value"] = "피해 방어량 표시", + ["Show Block Value from Strength"] = "힘에 의한 피해 방어량을 표시합니다.", + -- /rb stat str dmg + ["Show Spell Damage"] = "주문 공격력 표시", + --["Show Spell Damage from Strength"] = "지능에 의한 주문 공격력을 표시합니다.", + -- /rb stat str heal + ["Show Healing"] = "치유량 표시", + --["Show Healing from Strength"] = "지능에 의한 치유량을 표시합니다.", + + -- /rb stat agi + ["Agility"] = "민첩성", + ["Changes the display of Agility"] = "민첩성 표시방법을 변경합니다.", + -- /rb stat agi crit + ["Show Crit"] = "치명타 표시", + ["Show Crit chance from Agility"] = "민첩성에 의한 치명타 표시", + -- /rb stat agi dodge + ["Show Dodge"] = "회피 표시", + ["Show Dodge chance from Agility"] = "민첩에 의한 회피율을 표시합니다.", + -- /rb stat agi ap + ["Show Attack Power"] = "전투력 표시", + ["Show Attack Power from Agility"] = "민첩에 의한 전투력을 표시합니다.", + -- /rb stat agi rap + ["Show Ranged Attack Power"] = "원거리 전투력 표시", + ["Show Ranged Attack Power from Agility"] = "민첩에 의한 원거리 전투력을 표시합니다.", + -- /rb stat agi armor + ["Show Armor"] = "방어도 표시", + ["Show Armor from Agility"] = "민첩에 의한 방어도를 표시합니다.", + -- /rb stat agi heal + ["Show Healing"] = "치유량 표시", + --["Show Healing from Agility"] = "힘에 의한 치유량을 표시합니다.", + + -- /rb stat sta + ["Stamina"] = "체력", + ["Changes the display of Stamina"] = "체력의 표시방법을 변경합니다.", + -- /rb stat sta hp + ["Show Health"] = "생명력 표시", + ["Show Health from Stamina"] = "체력에 의한 생명력을 표시합니다.", + -- /rb stat sta dmg + ["Show Spell Damage"] = "주문 공격력 표시", + ["Show Spell Damage from Stamina"] = "체력에 의한 주문 공격력을 표시합니다.", + + -- /rb stat int + ["Intellect"] = "지능", + ["Changes the display of Intellect"] = "지능 표시방법을 변경합니다.", + -- /rb stat int spellcrit + ["Show Spell Crit"] = "주문 극대화 표시", + ["Show Spell Crit chance from Intellect"] = "지능에 의한 주문 극대화율 표시", + -- /rb stat int mp + ["Show Mana"] = "마나 표시", + ["Show Mana from Intellect"] = "지능에 의한 마나량을 표시합니다.", + -- /rb stat int dmg + ["Show Spell Damage"] = "주문 공격력 표시", + ["Show Spell Damage from Intellect"] = "지능에 의한 주문 공격력을 표시합니다.", + -- /rb stat int heal + ["Show Healing"] = "치유량 표시", + ["Show Healing from Intellect"] = "지능에 의한 치유량을 표시합니다.", + -- /rb stat int mp5 + ["Show Mana Regen"] = "마나 재생 표시", + ["Show Mana Regen while casting from Intellect"] = "지능에 의해 시전 시 마나 재생량을 표시합니다.", + -- /rb stat int mp5nc + ["Show Mana Regen while NOT casting"] = "평상시 마나 재생 표시", + ["Show Mana Regen while NOT casting from Intellect"] = "지능에 의한 평상시 마나 재생량을 표시합니다.", + -- /rb stat int rap + ["Show Ranged Attack Power"] = "원거리 전투력 표시", + ["Show Ranged Attack Power from Intellect"] = "지능에 의한 원거리 전투력을 표시합니다.", + -- /rb stat int armor + ["Show Armor"] = "방어도 표시", + ["Show Armor from Intellect"] = "지능에 의한 방어도를 표시합니다.", + + -- /rb stat spi + ["Spirit"] = "정신력", + ["Changes the display of Spirit"] = "정신력의 표시방법을 변경합니다.", + -- /rb stat spi mp5 + ["Show Mana Regen"] = "마나 재생 표시", + ["Show Mana Regen while casting from Spirit"] = "정신력에 의해 시전 시 마나 재생량을 표시합니다.", + -- /rb stat spi mp5nc + ["Show Mana Regen while NOT casting"] = "평상시 마나 재생 표시", + ["Show Mana Regen while NOT casting from Spirit"] = "정신력에 의한 평상시 마나 재생량을 표시합니다.", + -- /rb stat spi hp5 + ["Show Health Regen"] = "생명력 재생 표시", + ["Show Health Regen from Spirit"] = "정신력에 의한 생명력 재생량을 표시합니다.", + -- /rb stat spi dmg + ["Show Spell Damage"] = "주문 공격력 표시", + ["Show Spell Damage from Spirit"] = "정신력에 의한 주문 공격력을 표시합니다.", + -- /rb stat spi heal + ["Show Healing"] = "치유량 표시", + ["Show Healing from Spirit"] = "정신력에 의한 치유량을 표시합니다.", + + -- /rb sum + ["Stat Summary"] = "능력치 요약", + ["Options for stat summary"] = "능력치 요약에 대한 설정입니다.", + -- /rb sum show + ["Show stat summary"] = "능력치 요약 표시", + ["Show stat summary in tooltips"] = "툴팁에 능력치 요약을 표시합니다.", + -- /rb sum ignore + ["Ignore settings"] = "제외 설정", + ["Ignore stuff when calculating the stat summary"] = "능력치 요약 계산에 포함되지 않습니다.", + -- /rb sum ignore unused + ["Ignore unused items types"] = "쓸모없는 아이템 제외", + ["Show stat summary only for highest level armor type and items you can use with uncommon quality and up"] = "Show stat summary only for highest level armor type and items you can use with uncommon quality and up", + -- /rb sum ignore equipped + ["Ignore equipped items"] = "착용 아이템 제외", + ["Hide stat summary for equipped items"] = "착용하고 있는 아이템에 대한 능력치 요약은 표시하지 않습니다.", + -- /rb sum ignore enchant + ["Ignore enchants"] = "마법부여 제외", + ["Ignore enchants on items when calculating the stat summary"] = "능력치 요약 계산에 아이템의 마법부여를 포함하지 않습니다.", + -- /rb sum ignore gem + ["Ignore gems"] = "보석 제외", + ["Ignore gems on items when calculating the stat summary"] = "능력치 요약 계산에 아이템의 보석을 포함하지 않습니다.", + -- /rb sum diffstyle + ["Display style for diff value"] = "차이값 표시 형식", + ["Display diff values in the main tooltip or only in compare tooltips"] = "주요 툴팁 이나 비교 툴팁에만 차이값을 표시합니다.", + -- /rb sum space + ["Add empty line"] = "구분선 추가", + ["Add a empty line before or after stat summary"] = "능력치 요약 앞 혹은 뒤에 구분선을 추가합니다.", + -- /rb sum space before + ["Add before summary"] = "요약 앞에 추가", + ["Add a empty line before stat summary"] = "능력치 요약의 앞에 구분선을 추가합니다.", + -- /rb sum space after + ["Add after summary"] = "요약 뒤에 추가", + ["Add a empty line after stat summary"] = "능력치 요약의 뒤에 구분선을 추가합니다.", + -- /rb sum icon + ["Show icon"] = "아이콘 표시", + ["Show the sigma icon before summary listing"] = "요약 목록 앞에 시그마 아이콘을 표시합니다.", + -- /rb sum title + ["Show title text"] = "제목 표시", + ["Show the title text before summary listing"] = "요약 목록 앞에 제목을 표시합니다.", + -- /rb sum showzerostat + ["Show zero value stats"] = "제로 능력치 표시", + ["Show zero value stats in summary for consistancy"] = "구성에 대한 요약에 제로 능력치를 표시합니다.", + -- /rb sum calcsum + ["Calculate stat sum"] = "능력치 합계 계산", + ["Calculate the total stats for the item"] = "아이템에 대한 총 능력치를 계산합니다.", + -- /rb sum calcdiff + ["Calculate stat diff"] = "능력치 차이 계산", + ["Calculate the stat difference for the item and equipped items"] = "아이템과 착용한 아이템과의 능력치 차이를 계산합니다.", + -- /rb sum sort + ["Sort StatSummary alphabetically"] = "능력치 요약 정렬", + ["Enable to sort StatSummary alphabetically, disable to sort according to stat type(basic, physical, spell, tank)"] = "능력치 요약을 알파벳순으로 정렬합니다, 능력치별로 정렬하려면 비활성화하세요.(기본, 물리적, 주문, 탱크)", + -- /rb sum avoidhasblock + ["Include block chance in Avoidance summary"] = "회피 요약에 방어율 포함", + ["Enable to include block chance in Avoidance summary, Disable for only dodge, parry, miss"] = "회피 요약에 방어율을 포함시킵니다. 회피, 무기 막기, 빗맞힘만 사용하려면 비활성화하세요.", + -- /rb sum basic + ["Stat - Basic"] = "능력치 - 기본", + ["Choose basic stats for summary"] = "기본 능력치를 선택합니다.", + -- /rb sum physical + ["Stat - Physical"] = "능력치 - 물리적", + ["Choose physical damage stats for summary"] = "물리적 공격력 능력치를 선택합니다.", + -- /rb sum spell + ["Stat - Spell"] = "능력치 - 주문", + ["Choose spell damage and healing stats for summary"] = "주문 공격려과 치유량을 선택합니다.", + -- /rb sum tank + ["Stat - Tank"] = "능력치 - 탱크", + ["Choose tank stats for summary"] = "탱크 능력치를 선택합니다.", + -- /rb sum stat hp + ["Sum Health"] = "생명력", + ["Health <- Health, Stamina"] = "생명력 <- 생명력, 체력", + -- /rb sum stat mp + ["Sum Mana"] = "마나", + ["Mana <- Mana, Intellect"] = "마나 < 마나, 지능", + -- /rb sum stat ap + ["Sum Attack Power"] = "전투력", + ["Attack Power <- Attack Power, Strength, Agility"] = "전투력 <- 전투력, 힘, 민첩성", + -- /rb sum stat rap + ["Sum Ranged Attack Power"] = "원거리 전투력", + ["Ranged Attack Power <- Ranged Attack Power, Intellect, Attack Power, Strength, Agility"] = "원거리 전투력 <- 원거리 전투력, 지능, 전투력, 힘, 민첩성", + -- /rb sum stat fap + ["Sum Feral Attack Power"] = "야생 전투력", + ["Feral Attack Power <- Feral Attack Power, Attack Power, Strength, Agility"] = "야생 전투력 <- 야생 전투력, 전투력, 힘, 민첩성", + -- /rb sum stat dmg + ["Sum Spell Damage"] = "주문 공격력", + ["Spell Damage <- Spell Damage, Intellect, Spirit, Stamina"] = "주문 공격력 <- 주문 공격력, 지능, 정신력, 체력", + -- /rb sum stat dmgholy + ["Sum Holy Spell Damage"] = "신성 주문 공격력", + ["Holy Spell Damage <- Holy Spell Damage, Spell Damage, Intellect, Spirit"] = "신성 주문 공격력 <- 신성 주문 공격력, 주문 공격력, 지능, 정신력", + -- /rb sum stat dmgarcane + ["Sum Arcane Spell Damage"] = "비전 주문 공격력", + ["Arcane Spell Damage <- Arcane Spell Damage, Spell Damage, Intellect"] = "비전 주문 공격력 <- 비전 주문 공격력, 주문 공격력, 지능", + -- /rb sum stat dmgfire + ["Sum Fire Spell Damage"] = "화염 주문 공격력", + ["Fire Spell Damage <- Fire Spell Damage, Spell Damage, Intellect, Stamina"] = "화염 주문 공격력 <- 화염 주문 공격력, 주문 공격력, 지능, 체력", + -- /rb sum stat dmgnature + ["Sum Nature Spell Damage"] = "자연 주문 공격력", + ["Nature Spell Damage <- Nature Spell Damage, Spell Damage, Intellect"] = "자연 주문 공격력 <- 자연 주문 공격력, 주문 공격력, 지능", + -- /rb sum stat dmgfrost + ["Sum Frost Spell Damage"] = "냉기 주문 공격력", + ["Frost Spell Damage <- Frost Spell Damage, Spell Damage, Intellect"] = "냉기 주문 공격력 <- 냉기 주문 공격력, 주문 공격력, 지능", + -- /rb sum stat dmgshadow + ["Sum Shadow Spell Damage"] = "암흑 주문 공격력", + ["Shadow Spell Damage <- Shadow Spell Damage, Spell Damage, Intellect, Spirit, Stamina"] = "암흑 주문 공격력 <- 암흑 주문 공격력, 주문 공격력, 지능, 정신력, 체력", + -- /rb sum stat heal + ["Sum Healing"] = "치유량", + ["Healing <- Healing, Intellect, Spirit, Agility, Strength"] = "치유량 <- 치유량, 지능, 정신력, 민첩, 힘", + -- /rb sum stat hit + ["Sum Hit Chance"] = "적중률", + ["Hit Chance <- Hit Rating, Weapon Skill Rating"] = "적중률 <- 적중도, 무기 숙력도", + -- /rb sum stat crit + ["Sum Crit Chance"] = "치명타율", + ["Crit Chance <- Crit Rating, Agility, Weapon Skill Rating"] = "치명타율 <- 치명타 적중도, 민첩성, 무기 숙련도", + -- /rb sum stat haste + ["Sum Haste"] = "공격 가속", + ["Haste <- Haste Rating"] = "공격 가속 <- 공격 가속도", + -- /rb sum stat critspell + ["Sum Spell Crit Chance"] = "주문 극대화율", + ["Spell Crit Chance <- Spell Crit Rating, Intellect"] = "주문 극대화율 <- 주문 극대화 적중도, 지능", + -- /rb sum stat hitspell + ["Sum Spell Hit Chance"] = "주문 적중율", + ["Spell Hit Chance <- Spell Hit Rating"] = "주문 적중율 <- 주문 적중도", + -- /rb sum stat hastespell + ["Sum Spell Haste"] = "주문 가속", + ["Spell Haste <- Spell Haste Rating"] = "주문 가속 <- 주문 가속도", + -- /rb sum stat mp5 + ["Sum Mana Regen"] = "마나 재생", + ["Mana Regen <- Mana Regen, Spirit"] = "마나 재생 <- 마나 재생, 정신력", + -- /rb sum stat mp5nc + ["Sum Mana Regen while not casting"] = "미시전 시 마나 재생", + ["Mana Regen while not casting <- Spirit"] = "미시전 시 마나 재생 <- 정신력", + -- /rb sum stat hp5 + ["Sum Health Regen"] = "생명력 재생", + ["Health Regen <- Health Regen"] = "생명력 재생 <- 생명력 재생", + -- /rb sum stat hp5oc + ["Sum Health Regen when out of combat"] = "비전투중 생명력 재생", + ["Health Regen when out of combat <- Spirit"] = "비전투중 생명력 재생 <- 정신력", + -- /rb sum stat armor + ["Sum Armor"] = "방어도", + ["Armor <- Armor from items, Armor from bonuses, Agility, Intellect"] = "방어도 <- 아이템의 방어도, 효과의 방어도, 민첩성, 지능", + -- /rb sum stat blockvalue + ["Sum Block Value"] = "피해 방어량", + ["Block Value <- Block Value, Strength"] = "피해 방어량 <- 피해 방어량, 힘", + -- /rb sum stat dodge + ["Sum Dodge Chance"] = "회피율", + ["Dodge Chance <- Dodge Rating, Agility, Defense Rating"] = "회피율 <- 회피 숙련도, 민첩성, 방어 숙련도", + -- /rb sum stat parry + ["Sum Parry Chance"] = "무기 막기 확률", + ["Parry Chance <- Parry Rating, Defense Rating"] = "무기 막기 확률 <- 무기 막기 숙련도, 방어 숙련도", + -- /rb sum stat block + ["Sum Block Chance"] = "방패 막기 확률", + ["Block Chance <- Block Rating, Defense Rating"] = "방패 막기 확률 <- 방패 막기 숙련도, 방어 숙련도", + -- /rb sum stat avoidhit + ["Sum Hit Avoidance"] = "공격 회피", + ["Hit Avoidance <- Defense Rating"] = "공격 회피 <- 방어 숙련도", + -- /rb sum stat avoidcrit + ["Sum Crit Avoidance"] = "치명타 공격 회피", + ["Crit Avoidance <- Defense Rating, Resilience"] = "치명타 공격 회피 <- 방어 숙련도, 탄력도", + -- /rb sum stat neglectdodge + ["Sum Dodge Neglect"] = "회피 무시", + ["Dodge Neglect <- Expertise, Weapon Skill Rating"] = "회피 무시 <- 숙련도, 무기 숙련도", -- 2.3.0 + -- /rb sum stat neglectparry + ["Sum Parry Neglect"] = "무기 막기 무시", + ["Parry Neglect <- Expertise, Weapon Skill Rating"] = "무기 막기 무시 <- 숙련도, 무기 숙련도", -- 2.3.0 + -- /rb sum stat neglectblock + ["Sum Block Neglect"] = "방패 막기 무시", + ["Block Neglect <- Weapon Skill Rating"] = "방패 막기 무시 <- 무기 숙련도", + -- /rb sum stat resarcane + ["Sum Arcane Resistance"] = "비전 저항력", + ["Arcane Resistance Summary"] = "비전 저항력 요약", + -- /rb sum stat resfire + ["Sum Fire Resistance"] = "화염 저항력", + ["Fire Resistance Summary"] = "화염 저항력 요약", + -- /rb sum stat resnature + ["Sum Nature Resistance"] = "자연 저항력", + ["Nature Resistance Summary"] = "자연 저항력 요약", + -- /rb sum stat resfrost + ["Sum Frost Resistance"] = "냉기 저항력", + ["Frost Resistance Summary"] = "냉기 저항력 요약", + -- /rb sum stat resshadow + ["Sum Shadow Resistance"] = "암흑 저항력", + ["Shadow Resistance Summary"] = "암흑 저항력 요약", + -- /rb sum stat maxdamage + ["Sum Weapon Max Damage"] = "무기 최대 공격력", + ["Weapon Max Damage Summary"] = "무기 최대 공격력 요약", + -- /rb sum stat pen + ["Sum Penetration"] = "관통력", + ["Spell Penetration Summary"] = "주문 관통력 요약", + -- /rb sum stat ignorearmor + ["Sum Ignore Armor"] = "방어도 무시", + ["Ignore Armor Summary"] = "방어도 무시 요약", + -- /rb sum stat weapondps + --["Sum Weapon DPS"] = true, + --["Weapon DPS Summary"] = true, + -- /rb sum statcomp str + ["Sum Strength"] = "힘", + ["Strength Summary"] = "힘 요약", + -- /rb sum statcomp agi + ["Sum Agility"] = "민첩성", + ["Agility Summary"] = "민첩성 요약", + -- /rb sum statcomp sta + ["Sum Stamina"] = "체력", + ["Stamina Summary"] = "체력 요약", + -- /rb sum statcomp int + ["Sum Intellect"] = "지능", + ["Intellect Summary"] = "지능 요약", + -- /rb sum statcomp spi + ["Sum Spirit"] = "정신력", + ["Spirit Summary"] = "정신력 요약", + -- /rb sum statcomp hitrating + ["Sum Hit Rating"] = "적중도", + ["Hit Rating Summary"] = "적중도 요약", + -- /rb sum statcomp critrating + ["Sum Crit Rating"] = "치명타율", + ["Crit Rating Summary"] = "치명타율 요약", + -- /rb sum statcomp hasterating + ["Sum Haste Rating"] = "공격 가속도", + ["Haste Rating Summary"] = "공격 가속도 요약", + -- /rb sum statcomp hitspellrating + ["Sum Spell Hit Rating"] = "주문 적중도", + ["Spell Hit Rating Summary"] = "주문 적중도 요약", + -- /rb sum statcomp critspellrating + ["Sum Spell Crit Rating"] = "주문 극대화율", + ["Spell Crit Rating Summary"] = "주문 극대화율 요약", + -- /rb sum statcomp hastespellrating + ["Sum Spell Haste Rating"] = "주문 가속도", + ["Spell Haste Rating Summary"] = "주문 가속도 요약", + -- /rb sum statcomp dodgerating + ["Sum Dodge Rating"] = "회피율", + ["Dodge Rating Summary"] = "회피율 요약", + -- /rb sum statcomp parryrating + ["Sum Parry Rating"] = "무기 막기율", + ["Parry Rating Summary"] = "무기 막기율 요약", + -- /rb sum statcomp blockrating + ["Sum Block Rating"] = "방어율", + ["Block Rating Summary"] = "방어율 요약", + -- /rb sum statcomp res + ["Sum Resilience"] = "탄력도", + ["Resilience Summary"] = "탄력도 요약", + -- /rb sum statcomp def + ["Sum Defense"] = "방어 숙련", + ["Defense <- Defense Rating"] = "방어 숙련 <- 방어 숙련도", + -- /rb sum statcomp wpn + ["Sum Weapon Skill"] = "무기 숙련", + ["Weapon Skill <- Weapon Skill Rating"] = "무기 숙련 <- 무기 숙련도", + -- /rb sum statcomp exp -- 2.3.0 + ["Sum Expertise"] = "숙련", + ["Expertise <- Expertise Rating"] = "숙련 <- 숙련도", + -- /rb sum statcomp tp + ["Sum TankPoints"] = "탱킹점수", + ["TankPoints <- Health, Total Reduction"] = "탱커점수 <- 체력, 총 감소량", + -- /rb sum statcomp tr + ["Sum Total Reduction"] = "총 감소량", + ["Total Reduction <- Armor, Dodge, Parry, Block, Block Value, Defense, Resilience, MobMiss, MobCrit, MobCrush, DamageTakenMods"] = "총 감소량 <- 방어도, 회피, 무기 막기, 방어, 피해 방어량, 방어, 탄력도, 몹회피, 몹치명타, 몹강타, 적용전 데미지", + -- /rb sum statcomp avoid + ["Sum Avoidance"] = "회피량", + ["Avoidance <- Dodge, Parry, MobMiss, Block(Optional)"] = "회피량 <- 회피, 무기 막기, 몹빗맞힘, 방어(선택적)", + + -- /rb sum gem + ["Gems"] = "보석", + ["Auto fill empty gem slots"] = "빈 보석 슬롯을 자동으로 채웁니다.", + -- /rb sum gem red + ["Red Socket"] = EMPTY_SOCKET_RED, + ["ItemID or Link of the gem you would like to auto fill"] = "당신이 좋아하는 보석의 아이템ID & 링크로 자동으로 채웁니다.", + [""] = "<아이템ID|링크>", + ["%s is now set to %s"] = "현재 %s에 %s 설정", + ["Queried server for Gem: %s. Try again in 5 secs."] = "서버에서 알수없는 보석: %s. 5초뒤 다시하세요.", + -- /rb sum gem yellow + ["Yellow Socket"] = EMPTY_SOCKET_YELLOW, + -- /rb sum gem blue + ["Blue Socket"] = EMPTY_SOCKET_BLUE, + -- /rb sum gem meta + ["Meta Socket"] = EMPTY_SOCKET_META, + + ----------------------- + -- Item Level and ID -- + ----------------------- + ["ItemLevel: "] = "아이템레벨: ", + ["ItemID: "] = "아이템ID: ", + ----------------------- + -- Matching Patterns -- + ----------------------- + -- Items to check -- + -------------------- + -- [Potent Ornate Topaz] + -- +6 Spell Damage, +5 Spell Crit Rating + -------------------- + -- ZG enchant + -- +10 Defense Rating/+10 Stamina/+15 Block Value + -------------------- + -- [Glinting Flam Spessarite] + -- +3 Hit Rating and +3 Agility + -------------------- + -- ItemID: 22589 + -- [Atiesh, Greatstaff of the Guardian] warlock version + -- Equip: Increases the spell critical strike rating of all party members within 30 yards by 28. + -------------------- + -- [Brilliant Wizard Oil] + -- Use: While applied to target weapon it increases spell damage by up to 36 and increases spell critical strike rating by 14 . Lasts for 30 minutes. + ---------------------------------------------------------------------------------------------------- + -- I redesigned the tooltip scanner using a more locale friendly, 2 pass matching matching algorithm. + -- + -- The first pass searches for the rating number, the patterns are read from ["numberPatterns"] here, + -- " by (%d+)" will match strings like: "Increases defense rating by 16." + -- "%+(%d+)" will match strings like: "+10 Defense Rating" + -- You can add additional patterns if needed, its not limited to 2 patterns. + -- The separators are a table of strings used to break up a line into multiple lines what will be parsed seperately. + -- For example "+3 Hit Rating, +5 Spell Crit Rating" will be split into "+3 Hit Rating" and " +5 Spell Crit Rating" + -- + -- The second pass searches for the rating name, the names are read from ["statList"] here, + -- It will look through the table in order, so you can put common strings at the begining to speed up the search, + -- and longer strings should be listed first, like "spell critical strike" should be listed before "critical strike", + -- this way "spell critical strike" does get matched by "critical strike". + -- Strings need to be in lower case letters, because string.lower is called on lookup + -- + -- IMPORTANT: there may not exist a one-to-one correspondence, meaning you can't just translate this file, + -- but will need to go in game and find out what needs to be put in here. + -- For example, in english I found 3 different strings that maps to CR_CRIT_MELEE: "critical strike", "critical hit" and "crit". + -- You will need to find out every string that represents CR_CRIT_MELEE, and so on. + -- In other languages there may be 5 different strings that should all map to CR_CRIT_MELEE. + -- so please check in game that you have all strings, and not translate directly off this table. + -- + -- Tip1: When doing localizations, I recommend you set debugging to true in RatingBuster.lua + -- Find RatingBuster:SetDebugging(false) and change it to RatingBuster:SetDebugging(true) + -- or you can type /rb debug to enable it in game + -- + -- Tip2: The strings are passed into string.find, so you should escape the magic characters ^$()%.[]*+-? with a % + ["numberPatterns"] = { + {pattern = "(%d+)만큼 증가합니다.", addInfo = "AfterNumber",}, + {pattern = "([%+%-]%d+)", addInfo = "AfterNumber",}, +-- {pattern = "grant.-(%d+)", addInfo = "AfterNumber",}, -- for "grant you xx stat" type pattern, ex: Quel'Serrar, Assassination Armor set +-- {pattern = "add.-(%d+)", addInfo = "AfterNumber",}, -- for "add xx stat" type pattern, ex: Adamantite Sharpening Stone + {pattern = "(%d+)([^%d%%|]+)", addInfo = "AfterStat",}, -- [發光的暗影卓奈石] +6法術傷害及5耐力 + }, + ["separators"] = { + "/", " and ", ",", "%. ", " for ", "&", ":" + }, + --[[ Rating ID + 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; + -- + SPELL_STAT1_NAME = "힘" + SPELL_STAT2_NAME = "민첩성" + SPELL_STAT3_NAME = "체력" + SPELL_STAT4_NAME = "지능" + SPELL_STAT5_NAME = "정신력" + --]] + ["statList"] = { + {pattern = string.lower(SPELL_STAT1_NAME), id = SPELL_STAT1_NAME}, -- Strength + {pattern = string.lower(SPELL_STAT2_NAME), id = SPELL_STAT2_NAME}, -- Agility + {pattern = string.lower(SPELL_STAT3_NAME), id = SPELL_STAT3_NAME}, -- Stamina + {pattern = string.lower(SPELL_STAT4_NAME), id = SPELL_STAT4_NAME}, -- Intellect + {pattern = string.lower(SPELL_STAT5_NAME), id = SPELL_STAT5_NAME}, -- Spirit + {pattern = "방어 숙련도", id = CR_DEFENSE_SKILL}, + {pattern = "회피 숙련도", id = CR_DODGE}, + {pattern = "방패 막기 숙련도", id = CR_BLOCK}, -- block enchant: "+10 Shield Block Rating" + {pattern = "무기 막기 숙련도", id = CR_PARRY}, + + {pattern = "주문 극대화 적중도", id = CR_CRIT_SPELL}, + {pattern = "주문의 극대화 적중도", id = CR_CRIT_SPELL}, +-- {pattern = "spell critical rating", id = CR_CRIT_SPELL}, +-- {pattern = "spell crit rating", id = CR_CRIT_SPELL}, + {pattern = "원거리 치명타 적중도", id = CR_CRIT_RANGED}, +-- {pattern = "ranged critical hit rating", id = CR_CRIT_RANGED}, +-- {pattern = "ranged critical rating", id = CR_CRIT_RANGED}, +-- {pattern = "ranged crit rating", id = CR_CRIT_RANGED}, + {pattern = "치명타 적중도", id = CR_CRIT_MELEE}, + {pattern = "근접 치명타 적중도", id = CR_CRIT_MELEE}, +-- {pattern = "crit rating", id = CR_CRIT_MELEE}, + +-- {pattern = "주문의 적중도", id = CR_HIT_SPELL}, + {pattern = "주문 적중도", id = CR_HIT_SPELL}, + {pattern = "원거리 적중도", id = CR_HIT_RANGED}, + {pattern = "적중도", id = CR_HIT_MELEE}, + + {pattern = "탄력도", id = CR_CRIT_TAKEN_MELEE}, -- resilience is implicitly a rating + + {pattern = "주문 시전 가속도", id = CR_HASTE_SPELL}, + {pattern = "원거리 공격 가속도", id = CR_HASTE_RANGED}, + {pattern = "공격 가속도", id = CR_HASTE_MELEE}, + {pattern = "가속도", id = CR_HASTE_MELEE}, -- [Drums of Battle] + + {pattern = "무기 숙련도", id = CR_WEAPON_SKILL}, + {pattern = "숙련도", id = CR_EXPERTISE}, + + {pattern = "근접 공격 회피", id = CR_HIT_TAKEN_MELEE}, + --[[ + {pattern = "dagger skill rating", id = CR_WEAPON_SKILL}, + {pattern = "sword skill rating", id = CR_WEAPON_SKILL}, + {pattern = "two%-handed swords skill rating", id = CR_WEAPON_SKILL}, + {pattern = "axe skill rating", id = CR_WEAPON_SKILL}, + {pattern = "bow skill rating", id = CR_WEAPON_SKILL}, + {pattern = "crossbow skill rating", id = CR_WEAPON_SKILL}, + {pattern = "gun skill rating", id = CR_WEAPON_SKILL}, + {pattern = "feral combat skill rating", id = CR_WEAPON_SKILL}, + {pattern = "mace skill rating", id = CR_WEAPON_SKILL}, + {pattern = "polearm skill rating", id = CR_WEAPON_SKILL}, + {pattern = "staff skill rating", id = CR_WEAPON_SKILL}, + {pattern = "two%-handed axes skill rating", id = CR_WEAPON_SKILL}, + {pattern = "two%-handed maces skill rating", id = CR_WEAPON_SKILL}, + {pattern = "fist weapons skill rating", id = CR_WEAPON_SKILL}, + --]] + }, + ------------------------- + -- Added info patterns -- + ------------------------- + -- $value will be replaced with the number + -- EX: "$value% Crit" -> "+1.34% Crit" + -- EX: "Crit $value%" -> "Crit +1.34%" + ["$value% Crit"] = "치명타 $value%", + ["$value% Spell Crit"] = "극대화 $value%", + ["$value% Dodge"] = "회피 $value%", + ["$value HP"] = "생명력 $value", + ["$value MP"] = "마나 $value", + ["$value AP"] = "전투력 $value", + ["$value RAP"] = "원거리 전투력 $value", + ["$value Dmg"] = "공격력 $value", + ["$value Heal"] = "치유량 $value", + ["$value Armor"] = "방어도 $value", + ["$value Block"] = "방어 $value", + ["$value MP5"] = "$value MP5", + ["$value MP5(NC)"] = "$value MP5(NC)", + ["$value HP5"] = "$value HP5", + ["$value to be Dodged/Parried"] = "이후 회피 감소/무기막기 감소 $value", + ["$value to be Crit"] = "이후 치명타 $value", + ["$value Crit Dmg Taken"] = "가질 치명타 데미지 $value", + ["$value DOT Dmg Taken"] = "가질 DOT 데미지 $value", + + ------------------ + -- Stat Summary -- + ------------------ + ["Stat Summary"] = "능력치 요약", +} end) \ No newline at end of file diff --git a/RatingBuster-Locale-ruRU.lua b/RatingBuster-Locale-ruRU.lua new file mode 100644 index 0000000..3f11233 --- /dev/null +++ b/RatingBuster-Locale-ruRU.lua @@ -0,0 +1,807 @@ +--[[ +Name: RatingBuster ruRU locale +Revision: $Revision: 343 $ +Translated by: +- Orsana \ StingerSoft \ Swix +]] + +local L = LibStub("AceLocale-3.0"):NewLocale("RatingBuster", "ruRU") +if not L then return end +-- This file is coded in UTF-8 +-- If you don't have a editor that can save in UTF-8, I recommend NotePad++ or Ultraedit +---- +-- To translate AceLocale strings, replace true with the translation string +-- Before: L["Show Item ID"] = true, +-- After: L["Show Item ID"] = "Показывать ID", +--------------- +-- Waterfall -- +--------------- +L["RatingBuster Options"] = "Окно настроек" +L["Enabled"] = "Включён" +L["Suspend/resume this addon"] = "Отключить/Запустить аддон" +--------------------------- +-- Slash Command Options -- +--------------------------- +L["Always"] = "Всегда" +L["ALT Key"] = "Клавиша ALT" +L["CTRL Key"] = "Клавиша CTRL" +L["SHIFT Key"] = "Клавиша SHIFT" +L["Never"] = "Никогда" +L["General Settings"] = "Основные настройки" +L["Profiles"] = "Профили" +-- /rb win +L["Options Window"] = "Окно настроек" +L["Shows the Options Window"] = "Показать окно настроек" +-- /rb hidebzcomp +L["Hide Blizzard Item Comparisons"] = "Скрыть сравнение от Blizzardа" +L["Disable Blizzard stat change summary when using the built-in comparison tooltip"] = "Отключить сравнение предметов Blizzard, если используется метод сравнения RatingBusterа" +-- /rb statmod +L["Enable Stat Mods"] = "Включить модуль статистики" +L["Enable support for Stat Mods"] = "Включает поддержку модуля статистики" +-- /rb subtract_equip +--L["Enable Subtract Equipped Stats"] = "" +--L["Enable for more accurate calculation of Mana Regen from Intellect and Spirit, and diminishing stats like Dodge, Parry, Resilience"] = "" +-- /rb usereqlv +L["Use Required Level"] = "Использовать необходимый уровень" +L["Calculate using the required level if you are below the required level"] = "Рассчитывать статы исходя из минимально необходимого для надевания предмета уровня, если вы ниже этого уровня" +-- /rb level +L["Set Level"] = "Задать уровень" +L["Set the level used in calculations (0 = your level)"] = "Задать уровень используемый в расчетах (0 - ваш уровень)" +-- /rb ilvlid +--L["Item Level and ID"] = "" +--L["Settings for Item Level and Item ID"] = "" +-- /rb ilvlid coloritemlevel +--L["Colorize Item Level"] = "" +--L["Customize the color of the Item Level text"] = "" +-- /rb ilvlid itemlevelall +--L["Show Item Level on all items"] = "" +--L["Display the Item Level on all items instead of just on equippable items"] = "" +-- /rb ilvlid itemid +--L["Show Item ID"] = "" +--L["Display the Item ID on all items"] = "" +--------------------------------------------------------------------------- +-- /rb rating +L["Rating"] = "Рейтинги" +L["Options for Rating display"] = "Настройки отображения рейтингов" +-- /rb rating show +L["Show Rating Conversions"] = "Конвертация рейтингов" +L["Select when to show rating conversions in tooltips. Modifier keys needs to be pressed before showing the tooltips."] = "Выберите когда показывать конвертацию рейтингов в подсказке. Модификатор клавиш должен быть нажатым перед показом подсказки." +-- /rb rating spell +L["Show Spell Hit/Haste"] = "Меткость/скорость заклинаний" +L["Show Spell Hit/Haste from Hit/Haste Rating"] = "Показывать меткость/скорость заклинаний из рейтинга меткости/скорость" +-- /rb rating physical +L["Show Physical Hit/Haste"] = "Меткость/скорость физических атак" +L["Show Physical Hit/Haste from Hit/Haste Rating"] = "Показывать меткость/скорость физических атак из рейтинга меткости" +-- /rb rating detail +L["Show Detailed Conversions Text"] = "Детальная конвертация рейтингов" +L["Show detailed text for Resilience and Expertise conversions"] = "Показывать детальную конвертацию рейтингов мастерства и устойчивости" +-- /rb rating exp +L["Expertise Breakdown"] = "Разбивать уровень мастерства" +L["Convert Expertise into Dodge Neglect and Parry Neglect"] = "Разбивать уровень мастерства на игнорирование уклонения и парирования" +--------------------------------------------------------------------------- +-- /rb rating color +L["Change Text Color"] = "Изменить цвет текста" +L["Changes the color of added text"] = "Изменить цвет добавляемого текста" +-- /rb rating color pick +L["Pick Color"] = "Выбрать цвет" +L["Pick a color"] = "Выбрать цвет" +-- /rb rating color enable +L["Enable Color"] = "Включить цвет текста" +L["Enable colored text"] = "Включить цвет текста" +--------------------------------------------------------------------------- +-- /rb stat +L["Stat Breakdown"] = "Настройки статов" +L["Changes the display of base stats"] = "Показывать изменения базовых статов" +-- /rb stat show +L["Show Base Stat Conversions"] = "Показывать изменение базовых статов" +L["Select when to show base stat conversions in tooltips. Modifier keys needs to be pressed before showing the tooltips."] = "Выберите когда показывать изменение базовых статов в подсказке. Модификатор клавиш должен быть нажатым перед показом подсказки." +--------------------------------------------------------------------------- +-- /rb stat str +L["Strength"] = "Сила" +L["Changes the display of Strength"] = "Показывать изменение силы" +-- /rb stat str ap +L["Show Attack Power"] = "Сила атаки" +L["Show Attack Power from Strength"] = "Показывать изменение силы атаки от силы" +-- /rb stat str block +L["Show Block Value"] = "Блокирование" +L["Show Block Value from Strength"] = "Показывать изменение блокирования от силы" +-- /rb stat str dmg +L["Show Spell Damage"] = "Урон от заклинаний" +L["Show Spell Damage from Strength"] = "Показывать изменение урона заклинаниями от силы" +-- /rb stat str heal +L["Show Healing"] = "Исцеление" +L["Show Healing from Strength"] = "Показывать изменение исцеления от силы" +-- /rb stat str parryrating +L["Show Parry Rating"] = "Рейтинг парирования" +L["Show Parry Rating from Strength"] = "Показывать изменение рейтинга парирования от силы" +-- /rb stat str parry +L["Show Parry"] = "Парирование" +L["Show Parry from Strength"] = "Показывать изменения парирования от силы" +--------------------------------------------------------------------------- +-- /rb stat agi +L["Agility"] = "Ловкость" +L["Changes the display of Agility"] = "Показывать изменения ловкости" +-- /rb stat agi crit +L["Show Crit"] = "Крит. удар" +L["Show Crit chance from Agility"] = "Показывать изменение крит. удара от ловкости" +-- /rb stat agi dodge +L["Show Dodge"] = "Уклонение" +L["Show Dodge chance from Agility"] = "Показывать изменение уклонения от ловкости" +-- /rb stat agi ap +L["Show Attack Power"] = "Сила атаки" +L["Show Attack Power from Agility"] = "Показывать изменение силы атаки от ловкости" +-- /rb stat agi rap +L["Show Ranged Attack Power"] = "Сила атаки дальнего боя" +L["Show Ranged Attack Power from Agility"] = "Показывать изменение силы атаки дальнего боя от ловкости" +-- /rb stat agi dmg +L["Show Spell Damage"] = "Магический урон" +L["Show Spell Damage from Agility"] = "Показывать изменение магического урона от ловкости" +-- /rb stat agi heal +L["Show Healing"] = "Исцеление" +L["Show Healing from Agility"] = "Показывать изменение исцеления от ловкости" +--------------------------------------------------------------------------- +-- /rb stat sta +L["Stamina"] = "Выносливость" +L["Changes the display of Stamina"] = "Показывать изменение выносливости" +-- /rb stat sta hp +L["Show Health"] = "Здоровье" +L["Show Health from Stamina"] = "Показывать изменение здоровья от выносливости" +-- /rb stat sta dmg +L["Show Spell Damage"] = "Урон от заклинаний" +L["Show Spell Damage from Stamina"] = "Показывать изменение урона заклинаниями от выносливости" +-- /rb stat sta heal +L["Show Healing"] = "Исцеление" +L["Show Healing from Stamina"] = "Показывать изменение исцеления от выносливости" +-- /rb stat sta ap +L["Show Attack Power"] = "Силы атаки" +L["Show Attack Power from Stamina"] = "Показывать изменение силы атаки от выносливости" +--------------------------------------------------------------------------- +-- /rb stat int +L["Intellect"] = "Интеллект" +L["Changes the display of Intellect"] = "Показывать изменение интеллекта" +-- /rb stat int spellcrit +L["Show Spell Crit"] = "Крит. удар от заклинаний" +L["Show Spell Crit chance from Intellect"] = "Показывать изменение крит. удара заклинаний от интеллекта" +-- /rb stat int mp +L["Show Mana"] = "Мана" +L["Show Mana from Intellect"] = "Показывать изменение маны от интеллекта" +-- /rb stat int dmg +L["Show Spell Damage"] = "Урон от заклинаний" +L["Show Spell Damage from Intellect"] = "Показывать изменение урона заклинаний от интеллекта" +-- /rb stat int heal +L["Show Healing"] = "Исцеление" +L["Show Healing from Intellect"] = "Показывать изменение исцеления от интеллекта" +-- /rb stat int mp5 +L["Show Combat Mana Regen"] = "Восполнение маны в бою" +L["Show Mana Regen while in combat from Intellect"] = "Показывать изменение восполнения маны от интеллекта (в бою)" +-- /rb stat int mp5oc +L["Show Normal Mana Regen"] = "Восполнения маны вне боя" +L["Show Mana Regen while not in combat from Intellect"] = "Показывать изменение восполнения маны от интеллекта (вне боя)" +-- /rb stat int rap +L["Show Ranged Attack Power"] = "Сила атаки дальнего боя" +L["Show Ranged Attack Power from Intellect"] = "Показывать изменение силы атаки дальнего боя от интеллекта" +-- /rb stat int ap +L["Show Attack Power"] = "Силы атаки" +L["Show Attack Power from Intellect"] = "Показывать изменение силы атаки от интеллекта" +--------------------------------------------------------------------------- +-- /rb stat spi +L["Spirit"] = "Дух" +L["Changes the display of Spirit"] = "Показывать изменение духа" +-- /rb stat spi mp5 +L["Show Combat Mana Regen"] = "Восполнение маны в бою" +L["Show Mana Regen while in combat from Spirit"] = "Показывать изменение восполнения маны от духа (в бою)" +-- /rb stat spi mp5oc +L["Show Normal Mana Regen"] = "Восполнения маны вне боя" +L["Show Mana Regen while not in combat from Spirit"] = "Показывать изменение восполнения маны от духа (вне боя)" +-- /rb stat spi hp5 +L["Show Normal Health Regen"] = "Восполнение здаровья вне боя" +L["Show Health Regen while not in combat from Spirit"] = "Показывать изменение восполнения здоровья от духа (вне боя)" +-- /rb stat spi dmg +L["Show Spell Damage"] = "Урон от заклинаний" +L["Show Spell Damage from Spirit"] = "Показывать изменение урона заклинаний от духа" +-- /rb stat spi heal +L["Show Healing"] = "Исцеление" +L["Show Healing from Spirit"] = "Показывать изменение исцеления от духа" +-- /rb stat spi spellcrit +L["Show Spell Crit"] = "Крит. удар заклинаний" +L["Show Spell Crit chance from Spirit"] = "Показывать изменение вероятности критического удара заклинаниями от духа" +-- /rb stat spi spellhitrating +L["Show Spell Hit Rating"] = "Рейтинг меткости заклинания" +L["Show Spell Hit Rating from Spirit"] = "Показывать изменение рейтинга меткости заклинания от духа" +-- /rb stat spi spellhit +L["Show Spell Hit"] = "Меткость заклинания" +L["Show Spell Hit from Spirit"] = "Показывать изменение меткости заклинания от духа" +--------------------------------------------------------------------------- +-- /rb stat armor +L["Armor"] = "Броня" +L["Changes the display of Armor"] = "Показывать изменение брони" +-- /rb stat armor ap +L["Show Attack Power"] = "Силы атаки" +L["Show Attack Power from Armor"] = "Показывать изменение силы атаки от брони" +--------------------------------------------------------------------------- +-- /rb sum +L["Stat Summary"] = "Настройки итогов" +L["Options for stat summary"] = "Итоги по статам" +-- /rb sum show +L["Show Stat Summary"] = "Показывать суммарные изменения" +L["Select when to show stat summary in tooltips. Modifier keys needs to be pressed before showing the tooltips."] = "Выберите когда показывать суммарные изменения в подсказке. Модификатор клавиш должен быть нажатым перед показом подсказки." +-- /rb sum ignore +L["Ignore Settings"] = "Настройки игнорирования" +L["Ignore stuff when calculating the stat summary"] = " Настройка игнорирования при расчете итога" +-- /rb sum ignore unused +L["Ignore Undesirable Items"] = "Игнорирование неподходящих предметов" +L["Hide stat summary for undesirable items"] = "Скрыть итоги по статам для неподходящих предметов" +-- /rb sum ignore quality +L["Minimum Item Quality"] = "Мин. качество предмета" +L["Show stat summary only for selected quality items and up"] = "Показывать итоги по статам только для выбранного качества предметов и выше" +-- /rb sum ignore armor +L["Armor Types"] = "Тип брони" +L["Select armor types you want to ignore"] = "Выберите тип брони, который будет игнорироваться" +-- /rb sum ignore armor cloth +L["Ignore Cloth"] = "Игнорировать ткань" +L["Hide stat summary for all cloth armor"] = "Скрыть итоги по статам для всех доспехов из ткани" +-- /rb sum ignore armor leather +L["Ignore Leather"] = "Игнорированть кожу" +L["Hide stat summary for all leather armor"] = "Скрыть итоги по статам для всех доспехов из кожы" +-- /rb sum ignore armor mail +L["Ignore Mail"] = "Игнорированть кальчугу" +L["Hide stat summary for all mail armor"] = "Скрыть итоги по статам для всех доспехов из кальчуги" +-- /rb sum ignore armor plate +L["Ignore Plate"] = "Игнорированть латы" +L["Hide stat summary for all plate armor"] = "Скрыть итоги по статам для всех доспехов из лат" +-- /rb sum ignore equipped +L["Ignore Equipped Items"] = "Не показывать для надетых вещей" +L["Hide stat summary for equipped items"] = "Не показывать для надетых вещей" +-- /rb sum ignore enchant +L["Ignore Enchants"] = "Игнорировать чары" +L["Ignore enchants on items when calculating the stat summary"] = "Игнорировать чары при расчете итога" +-- /rb sum ignore gem +L["Ignore Gems"] = "Игнорировать самоцветы" +L["Ignore gems on items when calculating the stat summary"] = "Игнорировать самоцветы при расчете итога" +-- /rb sum ignore prismaticSocket +L["Ignore Prismatic Sockets"] = "Игнорировать радужные гнёзда" +L["Ignore gems in prismatic sockets when calculating the stat summary"] = "Игнорировать гнезда для радужного самоцвета при расчете итога" +-- /rb sum diffstyle +L["Display Style For Diff Value"] = "Стиль отображения отличия значений" +L["Display diff values in the main tooltip or only in compare tooltips"] = "Отображения различных значений в главной подсказке или только в сравнительных подсказках" +-- /rb sum space +L["Add Empty Line"] = "Добавить пустую линию" +L["Add a empty line before or after stat summary"] = "Добавить пустую линию перед или после итогов" +-- /rb sum space before +L["Add Before Summary"] = "Добавить линию до итога" +L["Add a empty line before stat summary"] = "Добавить линию до итога" +-- /rb sum space after +L["Add After Summary"] = "Добавить линию после итога" +L["Add a empty line after stat summary"] = "Добавить линию после итога" +-- /rb sum icon +L["Show Icon"] = "Добавить иконку" +L["Show the sigma icon before summary listing"] = "Добавит иконку до списка итога" +-- /rb sum title +L["Show Title Text"] = "Показывать заголовок" +L["Show the title text before summary listing"] = "Показывать заголовок до списка итога" +-- /rb sum showzerostat +L["Show Zero Value Stats"] = "Показывать нулевые статы" +L["Show zero value stats in summary for consistancy"] = "Показывать нулевые статы" +-- /rb sum calcsum +L["Calculate Stat Sum"] = "Рассчитать сумму стат" +L["Calculate the total stats for the item"] = "Рассчитать все статы для предмета" +-- /rb sum calcdiff +L["Calculate Stat Diff"] = "Рассчитывать разницу в статах" +L["Calculate the stat difference for the item and equipped items"] = "Рассчитывать разницу в статах с надетой вещью" +-- /rb sum sort +L["Sort StatSummary Alphabetically"] = "Сортировать статы в алфавитном порядке" +L["Enable to sort StatSummary alphabetically, disable to sort according to stat type(basic, physical, spell, tank)"] = "Если включено - то по алфавиту, если выключено, то по смыслу (базовые, физические, заклинания, танковые)" +-- /rb sum avoidhasblock +L["Include Block Chance In Avoidance Summary"] = "Включать вероятность блока в итоге избежаний" +L["Enable to include block chance in Avoidance summary, Disable for only dodge, parry, miss"] = "Включать вероятность блока в итоге избежаний, отключение только для уклона, парирования, промоха" +--------------------------------------------------------------------------- +-- /rb sum basic +L["Stat - Basic"] = "Статы - базовые" +L["Choose basic stats for summary"] = "Выбор базовых статов для подсчета" +-- /rb sum basic hp +L["Sum Health"] = "Сумма здоровья" +L["Health <- Health, Stamina"] = "Здоровье <- Здоровье, Выносливость" +-- /rb sum basic mp +L["Sum Mana"] = "Сумма маны" +L["Mana <- Mana, Intellect"] = "Мана <- Мана, Интеллект" +-- /rb sum basic mp5 +L["Sum Combat Mana Regen"] = "Сумма восст. маны в бою" +L["Combat Mana Regen <- Mana Regen, Spirit"] = "Восстановление маны в бою <- Восстановления маны, Дух" +-- /rb sum basic mp5oc +L["Sum Normal Mana Regen"] = "Сумма восст. маны вне боя" +L["Normal Mana Regen <- Spirit"] = "Сумма восстановления маны вне боя <- Дух" +-- /rb sum basic hp5 +L["Sum Combat Health Regen"] = "Сумма восст. здоровья в бою" +L["Combat Health Regen <- Health Regen"] = "Восстановление здоровья в бою <- Восстановление здоровья" +-- /rb sum basic hp5oc +L["Sum Normal Health Regen"] = "Сумма восст. здоровья вне боя" +L["Normal Health Regen <- Spirit"] = "Сумма восстановления здоровья вне боя <- Дух" +-- /rb sum basic str +L["Sum Strength"] = "Сумма силы" +L["Strength Summary"] = "Суммировать силу" +-- /rb sum basic agi +L["Sum Agility"] = "Сумма ловкости" +L["Agility Summary"] = "Суммировать ловкость" +-- /rb sum basic sta +L["Sum Stamina"] = "Сумма выносливости" +L["Stamina Summary"] = "Суммировать выносливость" +-- /rb sum basic int +L["Sum Intellect"] = "Сумма интеллекта" +L["Intellect Summary"] = "Суммировать интеллект" +-- /rb sum basic spi +L["Sum Spirit"] = "Сумма духа" +L["Spirit Summary"] = "Суммировать дух" +-- /rb sum basic mastery +L["Sum Mastery"] = "Сумма искусности" +L["Mastery Summary"] = "Суммировать искусность" +-- /rb sum basic masteryrating +L["Sum Mastery Rating"] = "Сумма рейтинга искусности" +L["Mastery Rating Summary"] = "Суммировать рейтинг искусности" +--------------------------------------------------------------------------- +-- /rb sum physical +L["Stat - Physical"] = "Статы - физические" +L["Choose physical damage stats for summary"] = "Выбор статов физического урона для подсчета" +-- /rb sum physical ap +L["Sum Attack Power"] = "Сумма силы атаки" +L["Attack Power <- Attack Power, Strength, Agility"] = "Сила атаки <- Сила атаки, Сила, Ловкость" +-- /rb sum physical rap +L["Sum Ranged Attack Power"] = "Сумма силы атаки дальнего боя" +L["Ranged Attack Power <- Ranged Attack Power, Intellect, Attack Power, Strength, Agility"] = "Сила атаки дальнего боя <- Сила атаки дальнего боя, Интеллект, Сила атаки, Сила, Ловкость" +-- /rb sum physical fap +L["Sum Feral Attack Power"] = "Сумма силы атаки в облике зверя" +L["Feral Attack Power <- Feral Attack Power, Attack Power, Strength, Agility"] = "Силы атаки в облике зверя <- Сила атаки в облике зверя, Сила атаки, Сила, Ловкость" +-- /rb sum physical hit +L["Sum Hit Chance"] = "Сумма вероятности поподания" +L["Hit Chance <- Hit Rating"] = "Вероятности поподания <- Рейтинг меткости" +-- /rb sum physical hitrating +L["Sum Hit Rating"] = "Сумма рейтинга меткости" +L["Hit Rating Summary"] = "Суммировать рейтинг меткости" +-- /rb sum physical crit +L["Sum Crit Chance"] = "Сумма вероятности крит удара" +L["Crit Chance <- Crit Rating, Agility"] = "Вероятности крит удара <- Рейтинг крит удара, Ловкость" +-- /rb sum physical critrating +L["Sum Crit Rating"] = "Сумма рейтинга крита" +L["Crit Rating Summary"] = "Суммировать рейтинг крит удара" +-- /rb sum physical haste +L["Sum Haste"] = "Сумма скорости" +L["Haste <- Haste Rating"] = "Скорость <- Рейтинг скорости" +-- /rb sum physical hasterating +L["Sum Haste Rating"] = "Сумма рейтинга скорости" +L["Haste Rating Summary"] = "Суммировать рейтинг скорости" +-- /rb sum physical rangedhit +L["Sum Ranged Hit Chance"] = "Сумма вероятности поподания в дальнем бою" +L["Ranged Hit Chance <- Hit Rating, Ranged Hit Rating"] = "Вероятность поподания в дальнем бою <- Рейтинг меткости, Рейтинг меткости дальнего боя" +-- /rb sum physical rangedhitrating +L["Sum Ranged Hit Rating"] = "Сумма рейтинга меткости дальнего боя" +L["Ranged Hit Rating Summary"] = "Суммировать рейтинг меткости дальнего боя" +-- /rb sum physical rangedcrit +L["Sum Ranged Crit Chance"] = "Сумма вероятности крита в дальнем бою" +L["Ranged Crit Chance <- Crit Rating, Agility, Ranged Crit Rating"] = "Вероятность крита в дальнем бою <- Рейтинг крита, Ловкость, Рейтинга крит удара дальнего боя" +-- /rb sum physical rangedcritrating +L["Sum Ranged Crit Rating"] = "Сумма рейтинга крит удара дальнего боя" +L["Ranged Crit Rating Summary"] = "Суммировать рейтинг критического удара в дальнем бою" +-- /rb sum physical rangedhaste +L["Sum Ranged Haste"] = "Сумма скорости дальнего боя" +L["Ranged Haste <- Haste Rating, Ranged Haste Rating"] = "Скорости дальнего боя <- Рейтинг скорости, Рейтинг скорости дальнего боя" +-- /rb sum physical rangedhasterating +L["Sum Ranged Haste Rating"] = "Сумма рейтинга скорости дальнего боя" +L["Ranged Haste Rating Summary"] = "Суммировать рейтинг скорости дальнего боя" +-- /rb sum physical maxdamage +L["Sum Weapon Max Damage"] = "Сумма макс урона оружия" +L["Weapon Max Damage Summary"] = "Суммировать макс урон уружия" +-- /rb sum physical weapondps +--L["Sum Weapon DPS"] = "Сумма УВС оружия" +--L["Weapon DPS Summary"] = "Суммировать урон в секунду от оружия" +-- /rb sum physical wpn +L["Sum Weapon Skill"] = "Сумма оружейного навык" +L["Weapon Skill <- Weapon Skill Rating"] = "Оружейный навык <- Рейтинг владения оружием" +-- /rb sum physical exp +L["Sum Expertise"] = "Сумма мастерства" +L["Expertise <- Expertise Rating"] = "Мастерство <- рейтинг мастерства" +-- /rb sum physical exprating +L["Sum Expertise Rating"] = "Сумма рейтинга мастерства" +L["Expertise Rating Summary"] = "Суммировать рейтинг мастерства" +--------------------------------------------------------------------------- +-- /rb sum spell +L["Stat - Spell"] = "Статы - заклинания" +L["Choose spell damage and healing stats for summary"] = "Выбор статов исцеления и урона заклинаниями для посчета" +-- /rb sum spell power +L["Sum Spell Power"] = "Сумма силы заклинаний" +L["Spell Power <- Spell Power, Intellect, Agility, Strength"] = "Сила заклинаний <- Силы заклинаний, Интеллект, Ловкость, Сила" +-- /rb sum spell dmg +L["Sum Spell Damage"] = "Сумма урона заклинаниями" +L["Spell Damage <- Spell Damage, Intellect, Spirit, Stamina"] = "Урон заклинаниями <- Урон заклинаниями, Интеллект, Дух, Выносливость" +-- /rb sum spell dmgholy +L["Sum Holy Spell Damage"] = "Сумма урона светлой магией" +L["Holy Spell Damage <- Holy Spell Damage, Spell Damage, Intellect, Spirit"] = "Урон светлой магии <- Урон светлой магией, Урон заклинаниями, Интеллект, Дух" +-- /rb sum spell dmgarcane +L["Sum Arcane Spell Damage"] = "Сумма урона тайной магией" +L["Arcane Spell Damage <- Arcane Spell Damage, Spell Damage, Intellect"] = "Урон тайной магией <- Урон тайной магией, Урон заклинаниями, Интеллект" +-- /rb sum spell dmgfire +L["Sum Fire Spell Damage"] = "Сумма урона магией огня" +L["Fire Spell Damage <- Fire Spell Damage, Spell Damage, Intellect, Stamina"] = "Урон магией огня <- Урон магией огня, Урон заклинаниями, Интеллект, Выносливость" +-- /rb sum spell dmgnature +L["Sum Nature Spell Damage"] = "Сумма урона силами природы" +L["Nature Spell Damage <- Nature Spell Damage, Spell Damage, Intellect"] = "Урон силами природы <- Урон силами природы, Урон заклинаниями, Интеллект" +-- /rb sum spell dmgfrost +L["Sum Frost Spell Damage"] = "Сумма урона магией льда" +L["Frost Spell Damage <- Frost Spell Damage, Spell Damage, Intellect"] = "Урон магией льда <- Урон магией льда, Урон заклинаниями, Интеллект" +-- /rb sum spell dmgshadow +L["Sum Shadow Spell Damage"] = "Сумма урона темной магией" +L["Shadow Spell Damage <- Shadow Spell Damage, Spell Damage, Intellect, Spirit, Stamina"] = "Урон темной магией <- Урон темной магией, Урон заклинаниями, Интеллект, Дух, Выносливость" +-- /rb sum spell heal +L["Sum Healing"] = "Сумма исцеления" +L["Healing <- Healing, Intellect, Spirit, Agility, Strength"] = "Исцеление <- Исцеление, Интеллект, Дух, Ловкость, Сила" +-- /rb sum spell crit +L["Sum Spell Crit Chance"] = "Сумма вероятности крита заклинания" +L["Spell Crit Chance <- Spell Crit Rating, Intellect"] = "Вероятность крита заклинания <- Рейтинг крита удара заклинаниями, Интеллект" +-- /rb sum spell hit +L["Sum Spell Hit Chance"] = "Сумма вероятности поподания заклинаний" +L["Spell Hit Chance <- Spell Hit Rating"] = "Вероятность поподания заклинаний <- Рйтинг меткости заклинаний" +-- /rb sum spell haste +L["Sum Spell Haste"] = "Сумма скорости заклинаний" +L["Spell Haste <- Spell Haste Rating"] = "Скорость заклинаний <- Рейтинг скорости заклинаний" +-- /rb sum spell pen +L["Sum Penetration"] = "Сумма проникающей способности" +L["Spell Penetration Summary"] = "Суммировать проникающую способность заклинаний" +-- /rb sum spell hitrating +L["Sum Spell Hit Rating"] = "Сумма рейтинга меткости заклинаний" +L["Spell Hit Rating Summary"] = "Суммировать рейтинг меткости заклинаний" +-- /rb sum spell critrating +L["Sum Spell Crit Rating"] = "Сумма рейтинга крит удара заклинаниями" +L["Spell Crit Rating Summary"] = "Суммировать рейтинг крит удара заклинаниями" +-- /rb sum spell hasterating +L["Sum Spell Haste Rating"] = "Сумма рейтинга скорости заклинаний" +L["Spell Haste Rating Summary"] = "Суммировать рейтинг скорости заклинаний" +--------------------------------------------------------------------------- +-- /rb sum tank +L["Stat - Tank"] = "Статы - танкования" +L["Choose tank stats for summary"] = "Выбор статов танкования для подсчета" +-- /rb sum tank armor +L["Sum Armor"] = "Сумма брони" +L["Armor <- Armor from items and bonuses"] = "Броня <- Броня с одежды и бонусов" +-- /rb sum tank dodge +L["Sum Dodge Chance"] = "Сумма вероятности уклонения" +L["Dodge Chance <- Dodge Rating, Agility"] = "Вероятность уклонения <- рейтинг уклонения, ловкость" +-- /rb sum tank parry +L["Sum Parry Chance"] = "Сумма вероятности парирования" +L["Parry Chance <- Parry Rating"] = "Вероятность парирования <- рейтинг парирования" +-- /rb sum tank block +L["Sum Block Chance"] = "Сумма вероятности блокирования" +L["Block Chance <- Block Rating"] = "Вероятность блокирования <- рейтинг блокирования" +-- /rb sum tank neglectdodge +L["Sum Dodge Neglect"] = "Сумма игнорирования уклонения" +L["Dodge Neglect <- Expertise"] = "Игнорирование уклонения <- Мастерство" +-- /rb sum tank neglectparry +L["Sum Parry Neglect"] = "Сумма игнорирования парирования" +L["Parry Neglect <- Expertise"] = "Игнорирование парирования <- Мастерство" +-- /rb sum tank resarcane +L["Sum Arcane Resistance"] = "Сумма защиты от тайной магии" +L["Arcane Resistance Summary"] = "Суммировать сопротивление тайной магии" +-- /rb sum tank resfire +L["Sum Fire Resistance"] = "Сумма защиты от огня" +L["Fire Resistance Summary"] = "Суммировать сопротивление огню" +-- /rb sum tank resnature +L["Sum Nature Resistance"] = "Сумма защиты от магии природы" +L["Nature Resistance Summary"] = "Суммировать сопротивление силам природы" +-- /rb sum tank resfrost +L["Sum Frost Resistance"] = "Сумма защиты от магии льда" +L["Frost Resistance Summary"] = "Суммировать сопротивление магии льда" +-- /rb sum tank resshadow +L["Sum Shadow Resistance"] = "Сумма защиты от темной магии" +L["Shadow Resistance Summary"] = "Суммировать сопротивление темной магии" +-- /rb sum tank dodgerating +L["Sum Dodge Rating"] = "Сумма рейтинга уклонения" +L["Dodge Rating Summary"] = "Суммировать рейтинг уклонения" +-- /rb sum tank parryrating +L["Sum Parry Rating"] = "Сумма рейтинга парирования" +L["Parry Rating Summary"] = "Суммировать рейтинг парирования" +-- /rb sum tank blockrating +L["Sum Block Rating"] = "Сумма рейтинга блока" +L["Block Rating Summary"] = "Суммировать рейтинг блока" +-- /rb sum tank res +L["Sum Resilience"] = "Сумма устойчивости" +L["Resilience Summary"] = "Суммировать устойчивость" +-- /rb sum tank tp +L["Sum TankPoints"] = "Самма TankPoints" +L["TankPoints <- Health, Total Reduction"] ="TankPoints <- Здоровье, Общее Cнижение" +-- /rb sum tank tr +L["Sum Total Reduction"] = "Самма общего снижения" +L["Total Reduction <- Armor, Dodge, Parry, Block, MobMiss, MobCrit, MobCrush, DamageTakenMods"] = "Общее снижение <- Броня, Уклонение, Парирование, Блок, ПромахСущества, КритСущества, MobCrush, DamageTakenMods" +-- /rb sum tank avoid +L["Sum Avoidance"] = "Сумма уклонения от удара" +L["Avoidance <- Dodge, Parry, MobMiss, Block(Optional)"] = "Уклонение от удара <- Уклонение, Парирование, ПромахСущества, Блок(дополнительный)" +--------------------------------------------------------------------------- +-- /rb sum gemset +L["Gem Set"] = "Набор самоцветов" +L["Select a gem set to configure"] = "Для настройки выберите набор самоцветов" +L["Default Gem Set 1"] = "Набор по умолчанию 1" +L["Default Gem Set 2"] = "Набор по умолчанию 2" +L["Default Gem Set 3"] = "Набор по умолчанию 3" +-- /rb sum gem +L["Auto fill empty gem slots"] = "Автозаполнение пустых слотов" +-- /rb sum gem red +L["Red Socket"] = EMPTY_SOCKET_RED +L["ItemID or Link of the gem you would like to auto fill"] = "ID предмета или ссылка на самоцвет, кторым вы хотите автозаполнять слоты" +L[""] = "" +L["|cffffff7f%s|r is now set to |cffffff7f[%s]|r"] = "|cffffff7f%s|r в настоящее время установлена на |cffffff7f[%s]|r" +L["Invalid input: %s. ItemID or ItemLink required."] = "Ошибочный ввод: %s. Требуется ID предмета либо ссылка." +L["Queried server for Gem: %s. Try again in 5 secs."] = "Запрос у сервера самоцвета: %s. Повторная попытка через 5 сек." +-- /rb sum gem yellow +L["Yellow Socket"] = EMPTY_SOCKET_YELLOW +-- /rb sum gem blue +L["Blue Socket"] = EMPTY_SOCKET_BLUE +-- /rb sum gem meta +L["Meta Socket"] = EMPTY_SOCKET_META +-- /rb sum gem2 +L["Second set of default gems which can be toggled with a modifier key"] = "Второй набор самоцветов по умолчанию который может быть переключен с помощью клавиш" +L["Can't use the same modifier as Gem Set 3"] = "Нельзя использовать теже клавиши что и у набора самоцветов 3" +-- /rb sum gem2 key +L["Toggle Key"] = "Клавиша переключения" +L["Use this key to toggle alternate gems"] = "Используйте данную клавишу для переключения альтернативных самоцветов" +-- /rb sum gem3 +L["Third set of default gems which can be toggled with a modifier key"] = "Третий набор самоцветов по умолчанию который может быть переключен с помощью клавиш" +L["Can't use the same modifier as Gem Set 2"] = "Нельзя использовать теже клавиши что и у набора самоцветов 2" + +----------------------- +-- Item Level and ID -- +----------------------- +L["ItemLevel: "] = "Уровень предмета: " +L["ItemID: "] = "ID предмета: " +----------------------- +-- Matching Patterns -- +----------------------- +-- Items to check -- +-------------------- +-- [Potent Ornate Topaz] +-- +6 Spell Damage, +5 Spell Crit Rating +-------------------- +-- ZG enchant +-- +10 Defense Rating/+10 Stamina/+15 Block Value +-------------------- +-- [Glinting Flam Spessarite] +-- +3 Hit Rating and +3 Agility +-------------------- +-- ItemID: 22589 +-- [Atiesh, Greatstaff of the Guardian] warlock version +-- Equip: Increases the spell critical strike rating of all party members within 30 yards by 28. +-------------------- +-- [Brilliant Wizard Oil] +-- Use: While applied to target weapon it increases spell damage by up to 36 and increases spell critical strike rating by 14 . Lasts for 30 minutes. +---------------------------------------------------------------------------------------------------- +-- I redesigned the tooltip scanner using a more locale friendly, 2 pass matching matching algorithm. +-- +-- The first pass searches for the rating number, the patterns are read from L["numberPatterns"] here, +-- " by (%d+)" will match strings like: "Increases defense rating by 16." +-- "%+(%d+)" will match strings like: "+10 Defense Rating" +-- You can add additional patterns if needed, its not limited to 2 patterns. +-- The separators are a table of strings used to break up a line into multiple lines what will be parsed seperately. +-- For example "+3 Hit Rating, +5 Spell Crit Rating" will be split into "+3 Hit Rating" and " +5 Spell Crit Rating" +-- +-- The second pass searches for the rating name, the names are read from L["statList"] here, +-- It will look through the table in order, so you can put common strings at the begining to speed up the search, +-- and longer strings should be listed first, like "spell critical strike" should be listed before "critical strike", +-- this way "spell critical strike" does get matched by "critical strike". +-- Strings need to be in lower case letters, because string.lower is called on lookup +-- +-- IMPORTANT: there may not exist a one-to-one correspondence, meaning you can't just translate this file, +-- but will need to go in game and find out what needs to be put in here. +-- For example, in english I found 3 different strings that maps to CR_CRIT_MELEE: "critical strike", "critical hit" and "crit". +-- You will need to find out every string that represents CR_CRIT_MELEE, and so on. +-- In other languages there may be 5 different strings that should all map to CR_CRIT_MELEE. +-- so please check in game that you have all strings, and not translate directly off this table. +-- +-- Tip1: When doing localizations, I recommend you set debugging to true in RatingBuster.lua +-- Find RatingBuster:SetDebugging(false) and change it to RatingBuster:SetDebugging(true) +-- or you can type /rb debug to enable it in game +-- +-- Tip2: The strings are passed into string.find, so you should escape the magic characters ^$()%.[]*+-? with a % +L["numberPatterns"] = { + {pattern = " на (%d+)", addInfo = "AfterNumber", space = " ", }, + {pattern = "([%+%-]%d+)", addInfo = "AfterNumber", space = " ", }, + {pattern = " увеличена на (%d+)", addInfo = "AfterNumber", space = " ", }, + {pattern = "(%d+) к ", addInfo = "AfterNumber", space = " ", }, -- тест + {pattern = "увеличение (%d+)", addInfo = "AfterNumber", space = " ", }, -- for "grant you xx stat" type pattern, ex: Quel'Serrar, Assassination Armor set + {pattern = "дополнительно (%d+)", addInfo = "AfterNumber", space = " ", }, -- for "add xx stat" type pattern, ex: Adamantite Sharpening Stone + -- Added [^%%] so that it doesn't match strings like "Increases healing by up to 10% of your total Intellect." [Whitemend Pants] ID: 24261 + -- Added [^|] so that it doesn't match enchant strings (JewelTips) + {pattern = "на (%d+)([^%d%%|]+)", addInfo = "AfterNumber", space = " ", }, -- [發光的暗影卓奈石] +6法術傷害及5耐力 +} +L["separators"] = { + "/", " и ", ",", "%. ", " для ", "&", ":", + -- Fix for [Mirror of Truth] + -- Equip: Chance on melee and ranged critical strike to increase your attack power by 1000 for 10 secs. + -- 1000 was falsely detected detected as ranged critical strike + "повысить вашу", +} +--[[ Rating ID +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; +COMBAT_RATING_RESILIENCE_CRIT_TAKEN = 15; +COMBAT_RATING_RESILIENCE_PLAYER_DAMAGE_TAKEN = 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; +-- +SPELL_STAT1_NAME = "Strength" +SPELL_STAT2_NAME = "Agility" +SPELL_STAT3_NAME = "Stamina" +SPELL_STAT4_NAME = "Intellect" +SPELL_STAT5_NAME = "Spirit" +--]] +-- для русской локализации надо указывать все используемые склонения рейтингов (рейтинг, рейтинга, + -- рейтингу) т.к. иначе распознавание не работает. +-- + +L["statList"] = { + {pattern = string.lower("Силе атаки"), id = SPELL_STAT1115_NAME}, --чтобы Сила атаки и сила заклинаний не распознавалась как Сила + {pattern = string.lower("Сила атаки"), id = SPELL_STAT1115_NAME}, -- строки SPELL_STAT1115_NAME должны быть впереди + {pattern = string.lower("Силу атаки"), id = SPELL_STAT1115_NAME}, + {pattern = string.lower("Сила заклинаний"), id = SPELL_STAT1115_NAME}, + {pattern = string.lower("Силу заклинаний"), id = SPELL_STAT1115_NAME}, + {pattern = string.lower("Силе заклинаний"), id = SPELL_STAT1115_NAME}, -- конец левых строчек + + {pattern = string.lower(SPELL_STAT1_NAME), id = SPELL_STAT1_NAME}, -- Strength + {pattern = string.lower("Силе"), id = SPELL_STAT1_NAME}, + {pattern = string.lower(SPELL_STAT2_NAME), id = SPELL_STAT2_NAME}, -- Agility + {pattern = string.lower("Ловкости"), id = SPELL_STAT2_NAME}, + {pattern = string.lower(SPELL_STAT3_NAME), id = SPELL_STAT3_NAME}, -- Stamina + {pattern = string.lower("Выносливости"), id = SPELL_STAT3_NAME}, + {pattern = string.lower(SPELL_STAT4_NAME), id = SPELL_STAT4_NAME}, -- Intellect + {pattern = string.lower("Интеллекту"), id = SPELL_STAT4_NAME}, + {pattern = string.lower(SPELL_STAT5_NAME), id = SPELL_STAT5_NAME}, -- Spirit + {pattern = string.lower("Духу"), id = SPELL_STAT5_NAME}, + + {pattern = "рейтинг защиты", id = CR_DEFENSE_SKILL}, + {pattern = "рейтингу защиты", id = CR_DEFENSE_SKILL}, + {pattern = "рейтинга защиты", id = CR_DEFENSE_SKILL}, + {pattern = "рейтинг уклонения", id = CR_DODGE}, + {pattern = "рейтингу уклонения", id = CR_DODGE}, + {pattern = "рейтинга уклонения", id = CR_DODGE}, + {pattern = "рейтинг блокирования щитом", id = CR_BLOCK}, -- block enchant: "+10 Shield Block Rating" + {pattern = "рейтинга блокирования щитом", id = CR_BLOCK}, + {pattern = "рейтингу блокирования щитом", id = CR_BLOCK}, + {pattern = "увеличение рейтинга блокирования щита на", id = CR_BLOCK}, + {pattern = "рейтинг блока", id = CR_BLOCK}, + {pattern = "рейтинга блока", id = CR_BLOCK}, + {pattern = "рейтингу блока", id = CR_BLOCK}, + {pattern = "рейтинг парирования", id = CR_PARRY}, + {pattern = "рейтинга парирования", id = CR_PARRY}, + {pattern = "рейтингу парирования", id = CR_PARRY}, + + {pattern = "рейтинг критического удара %(заклинания%)", id = CR_CRIT_SPELL}, + {pattern = "рейтингу критического удара %(заклинания%)", id = CR_CRIT_SPELL}, + {pattern = "рейтинга критического удара %(заклинания%)", id = CR_CRIT_SPELL}, + {pattern = "рейтинга критического удара заклинаниями", id = CR_CRIT_SPELL}, + {pattern = "рейтингу критического удара заклинаниями", id = CR_CRIT_SPELL}, + {pattern = "рейтинг критического удара заклинаниями", id = CR_CRIT_SPELL}, + {pattern = "spell critical hit rating", id = CR_CRIT_SPELL}, + {pattern = "spell critical rating", id = CR_CRIT_SPELL}, + {pattern = "spell crit rating", id = CR_CRIT_SPELL}, + {pattern = "ranged critical strike rating", id = CR_CRIT_RANGED}, + {pattern = "к критическому удару в дальнем бою", id = CR_CRIT_RANGED}, -- [Heartseeker Scope] + {pattern = "ranged critical hit rating", id = CR_CRIT_RANGED}, + {pattern = "ranged critical rating", id = CR_CRIT_RANGED}, + {pattern = "ranged crit rating", id = CR_CRIT_RANGED}, + {pattern = "рейтинг критического удара", id = CR_CRIT_MELEE}, + {pattern = "рейтинг критического эффекта", id = CR_CRIT_MELEE}, + {pattern = "рейтингу критического удара", id = CR_CRIT_MELEE}, + {pattern = "рейтинга критического удара", id = CR_CRIT_MELEE}, + {pattern = "рейтинг крит. удара оруж. ближнего боя", id = CR_CRIT_MELEE}, + {pattern = "critical hit rating", id = CR_CRIT_MELEE}, + {pattern = "critical rating", id = CR_CRIT_MELEE}, + {pattern = "crit rating", id = CR_CRIT_MELEE}, + + {pattern = "рейтинг меткости %(заклинания%)", id = CR_HIT_SPELL}, + {pattern = "рейтингу меткости %(заклинания%)", id = CR_HIT_SPELL}, + {pattern = "рейтинга меткости %(заклинания%)", id = CR_HIT_SPELL}, + {pattern = "рейтингу меткости заклинаний", id = CR_HIT_SPELL}, + {pattern = "Рейтинг меткости (оруж. дальн. боя)", id = CR_HIT_RANGED}, + {pattern = "рейтинга нанесения удара ближнего боя", id = CR_HIT_MELEE}, + {pattern = "рейтинг меткости", id = CR_HIT_MELEE}, + {pattern = "рейтинга меткости", id = CR_HIT_MELEE}, + {pattern = "рейтингу меткости", id = CR_HIT_MELEE}, + + {pattern = "рейтинг устойчивости", id = COMBAT_RATING_RESILIENCE_PLAYER_DAMAGE_TAKEN}, -- resilience is implicitly a rating + {pattern = "рейтингу устойчивости", id = COMBAT_RATING_RESILIENCE_PLAYER_DAMAGE_TAKEN}, + {pattern = "рейтинга устойчивости", id = COMBAT_RATING_RESILIENCE_PLAYER_DAMAGE_TAKEN}, + + {pattern = "рейтинг скорости %(заклинания%)", id = CR_HASTE_SPELL}, + {pattern = "рейтингу скорости %(заклинания%)", id = CR_HASTE_SPELL}, + {pattern = "рейтинга скорости %(заклинания%)", id = CR_HASTE_SPELL}, + {pattern = "скорости наложения заклинаний", id = CR_HASTE_SPELL}, + {pattern = "скорость наложения заклинаний", id = CR_HASTE_SPELL}, + {pattern = "рейтинг скорости дальнего боя", id = CR_HASTE_RANGED}, + {pattern = "рейтингу скорости дальнего боя", id = CR_HASTE_RANGED}, + {pattern = "рейтинга скорости дальнего боя", id = CR_HASTE_RANGED}, + {pattern = "рейтинг скорости", id = CR_HASTE_MELEE}, + {pattern = "рейтингу скорости", id = CR_HASTE_MELEE}, + {pattern = "рейтинга скорости", id = CR_HASTE_MELEE}, + {pattern = "speed rating", id = CR_HASTE_MELEE}, -- [Drums of Battle] + + {pattern = "рейтинг владения", id = CR_WEAPON_SKILL}, + {pattern = "рейтингу владения", id = CR_WEAPON_SKILL}, + {pattern = "рейтинга владения", id = CR_WEAPON_SKILL}, + {pattern = "рейтинг мастерства", id = CR_EXPERTISE}, + {pattern = "рейтингу мастерства", id = CR_EXPERTISE}, + {pattern = "рейтинга мастерства", id = CR_EXPERTISE}, + + {pattern = "рейтинг уклонения от удара", id = CR_HIT_TAKEN_MELEE}, + {pattern = "Рейтингу уклонения от удара", id = CR_HIT_TAKEN_MELEE}, + {pattern = "рейтинга уклонения от удара", id = CR_HIT_TAKEN_MELEE}, + {pattern = "рейтинг пробивания брони", id = CR_ARMOR_PENETRATION}, + {pattern = "рейтингу пробивания брони", id = CR_ARMOR_PENETRATION}, + {pattern = "рейтинга пробивания брони", id = CR_ARMOR_PENETRATION}, + {pattern = "рейтинг искусности", id = CR_MASTERY}, + {pattern = "рейтингу искусности", id = CR_MASTERY}, + {pattern = "рейтинга искусности", id = CR_MASTERY}, + {pattern = string.lower(ARMOR), id = ARMOR}, + --[[ + {pattern = "dagger skill rating", id = CR_WEAPON_SKILL}, + {pattern = "sword skill rating", id = CR_WEAPON_SKILL}, + {pattern = "two%-handed swords skill rating", id = CR_WEAPON_SKILL}, + {pattern = "axe skill rating", id = CR_WEAPON_SKILL}, + {pattern = "bow skill rating", id = CR_WEAPON_SKILL}, + {pattern = "crossbow skill rating", id = CR_WEAPON_SKILL}, + {pattern = "gun skill rating", id = CR_WEAPON_SKILL}, + {pattern = "feral combat skill rating", id = CR_WEAPON_SKILL}, + {pattern = "mace skill rating", id = CR_WEAPON_SKILL}, + {pattern = "polearm skill rating", id = CR_WEAPON_SKILL}, + {pattern = "staff skill rating", id = CR_WEAPON_SKILL}, + {pattern = "two%-handed axes skill rating", id = CR_WEAPON_SKILL}, + {pattern = "two%-handed maces skill rating", id = CR_WEAPON_SKILL}, + {pattern = "fist weapons skill rating", id = CR_WEAPON_SKILL}, + --]] +} +------------------------- +-- Added info patterns -- +------------------------- +-- $value will be replaced with the number +-- EX: "$value% Crit" -> "+1.34% Crit" +-- EX: "Crit $value%" -> "Crit +1.34%" +L["$value% Crit"] = "$value% крит" +L["$value% Spell Crit"] = "$value% крит закл" +L["$value% Dodge"] = "$value% уклонение" +L["$value HP"] = "$value Здор" +L["$value MP"] = "$value Мана" +L["$value AP"] = "$value Сила атаки" +L["$value RAP"] = "$value САДБ" +L["$value Dmg"] = "$value урона" +L["$value Heal"] = "$value Исцеления" +L["$value Armor"] = "$value Броня" +L["$value Block"] = "$value% Блок" +L["$value MP5"] = "$value МП5сек" +L["$value MP5(OC)"] = "$value МП 5сек НК" +L["$value HP5"] = "$value Здор 5сек" +L["$value to be Dodged/Parried"] = "$value% уклон/парир" +L["$value to be Crit"] = "$value% крит" +L["$value Crit Dmg Taken"] = "$value крит урон" +L["$value DOT Dmg Taken"] = "$value сила дотов" +L["$value Parry"] = "$value парирование" +-- for hit rating showing both physical and spell conversions +-- (+1.21%, S+0.98%) +-- (+1.21%, +0.98% S) +L["$value Spell"] = "$value закл." +L["$value Spell Hit"] = "$value метк. закл." + +------------------ +-- Stat Summary -- +------------------ +L["Stat Summary"] = "Итог по статам" \ No newline at end of file diff --git a/RatingBuster-Locale-zhCN.lua b/RatingBuster-Locale-zhCN.lua new file mode 100644 index 0000000..0522d4b --- /dev/null +++ b/RatingBuster-Locale-zhCN.lua @@ -0,0 +1,619 @@ +--[[ +Name: RatingBuster zhCN locale +Revision: $Revision: 73696 $ +Translated by: +- iceburn +]] + +local L = AceLibrary("AceLocale-2.2"):new("RatingBuster") +---- +-- This file is coded in UTF-8 +-- If you don't have a editor that can save in UTF-8, I recommend Ultraedit +---- +-- To translate AceLocale strings, replace true with the translation string +-- Before: ["Show Item ID"] = true, +-- After: ["Show Item ID"] = "顯示物品編號", +L:RegisterTranslations("zhCN", function() return { + --------------- + -- Waterfall -- + --------------- + ["RatingBuster Options"] = "RatingBuster选项", + ["Waterfall-1.0 is required to access the GUI."] = "这个GUI需要Waterfall库", + --------------------------- + -- Slash Command Options -- + --------------------------- + -- /rb optionswin + ["Options Window"] = "选项窗口", + ["Shows the Options Window"] = "打开选项窗口", + -- /rb statmod + ["Enable Stat Mods"] = "属性加成", + ["Enable support for Stat Mods"] = "启用属性加成计算", + -- /rb itemid + ["Show ItemID"] = "显示物品编号", + ["Show the ItemID in tooltips"] = "显示物品编号", + -- /rb itemlevel + ["Show ItemLevel"] = "显示物品等级", + ["Show the ItemLevel in tooltips"] = "显示物品等级", + -- /rb usereqlv + ["Use required level"] = "使用需要等级", + ["Calculate using the required level if you are below the required level"] = "如果你的等级低于需要等级则用需要等级来换算", + -- /rb setlevel + ["Set level"] = "设定换算等级", + ["Set the level used in calculations (0 = your level)"] = "设定换算等级 (0 = 你的目前的等级)", + -- /rb color + ["Change text color"] = "设定文字颜色", + ["Changes the color of added text"] = "设定RB所增加的文字的颜色", + -- /rb color pick + ["Pick color"] = "挑选颜色", + ["Pick a color"] = "挑选颜色", + -- /rb color enable + ["Enable color"] = "启用文字颜色", + ["Enable colored text"] = "启用文字颜色", + -- /rb rating + ["Rating"] = "属性等级", + ["Options for Rating display"] = "设定属性等级显示", + -- /rb rating show + ["Show Rating conversions"] = "显示属性等级转换", + ["Show Rating conversions in tooltips"] = "在提示框架中显示属性等级转换结果", + -- /rb rating detail + ["Show detailed conversions text"] = "显示详细转换文本", + ["Show detailed text for Resiliance and Expertise conversions"] = "显示详细的抗性和精准等级转换", + -- /rb rating def + ["Defense breakdown"] = "分析防御", + ["Convert Defense into Crit Avoidance, Hit Avoidance, Dodge, Parry and Block"] = "将防御分为避免爆击、避免击中、躲闪、招架和格挡", + -- /rb rating wpn + ["Weapon Skill breakdown"] = "分析武器技能", + ["Convert Weapon Skill into Crit, Hit, Dodge Neglect, Parry Neglect and Block Neglect"] = "加武器技能分为爆击、击中、防止被躲闪、防止被招架和防止被格挡", + -- /rb rating exp -- 2.3.0 + ["Expertise breakdown"] = "精准效能", + ["Convert Expertise into Dodge Neglect and Parry Neglect"] = "转换精准等级为忽略躲闪和忽略招架", + + -- /rb stat + ["Stat Breakdown"] = "基本属性解析", + ["Changes the display of base stats"] = "设定基本属性的解析显示", + -- /rb stat show + ["Show base stat conversions"] = "显示基本属性解析", + ["Show base stat conversions in tooltips"] = "在物品提示中显示基本属性解析", + -- /rb stat str + ["Strength"] = "力量", + ["Changes the display of Strength"] = "自订力量解析项目", + -- /rb stat str ap + ["Show Attack Power"] = "显示近战攻击强度", + ["Show Attack Power from Strength"] = "显示力量给的近战攻击强度", + -- /rb stat str block + ["Show Block Value"] = "显示格档值", + ["Show Block Value from Strength"] = "显示力量给的格档值", + -- /rb stat str dmg + ["Show Spell Damage"] = "显示法伤", + ["Show Spell Damage from Strength"] = "显示力量给的法术伤害加成", + -- /rb stat str heal + ["Show Healing"] = "显示治疗", + ["Show Healing from Strength"] = "显示力量给的治疗加成", + + -- /rb stat agi + ["Agility"] = "敏捷", + ["Changes the display of Agility"] = "自订敏捷解析项目", + -- /rb stat agi crit + ["Show Crit"] = "显示物理爆击", + ["Show Crit chance from Agility"] = "显示敏捷给的物理爆击几率", + -- /rb stat agi dodge + ["Show Dodge"] = "显示躲闪", + ["Show Dodge chance from Agility"] = "显示敏捷给的躲闪几率", + -- /rb stat agi ap + ["Show Attack Power"] = "显示近战攻击强度", + ["Show Attack Power from Agility"] = "显示敏捷给的近战攻击强度", + -- /rb stat agi rap + ["Show Ranged Attack Power"] = "显示远程攻击强度", + ["Show Ranged Attack Power from Agility"] = "显示敏捷给的远程攻击强度", + -- /rb stat agi armor + ["Show Armor"] = "显示护甲值", + ["Show Armor from Agility"] = "显示敏捷给的护甲值", + -- /rb stat agi heal + ["Show Healing"] = "显示治疗", + ["Show Healing from Agility"] = "显示敏捷给的治疗加成", + + -- /rb stat sta + ["Stamina"] = "耐力", + ["Changes the display of Stamina"] = "自订耐力解析项目", + -- /rb stat sta hp + ["Show Health"] = "显示生命值", + ["Show Health from Stamina"] = "显示耐力给的生命值", + -- /rb stat sta dmg + ["Show Spell Damage"] = "显示法伤", + ["Show Spell Damage from Stamina"] = "显示耐力给的法术伤害加成", + + -- /rb stat int + ["Intellect"] = "智力", + ["Changes the display of Intellect"] = "自订智力解析项目", + -- /rb stat int spellcrit + ["Show Spell Crit"] = "显示法术爆击", + ["Show Spell Crit chance from Intellect"] = "显示智力给的法术爆击几率", + -- /rb stat int mp + ["Show Mana"] = "显示法力值", + ["Show Mana from Intellect"] = "显示智力给的法力值", + -- /rb stat int dmg + ["Show Spell Damage"] = "显示法伤", + ["Show Spell Damage from Intellect"] = "显示智力给的法术伤害加成", + -- /rb stat int heal + ["Show Healing"] = "显示治疗", + ["Show Healing from Intellect"] = "显示智力给的治疗加成", + -- /rb stat int mp5 + ["Show Mana Regen"] = "显示施法回魔", + ["Show Mana Regen while casting from Intellect"] = "显示智力给的施法中法力恢复量", + -- /rb stat int mp5nc + ["Show Mana Regen while NOT casting"] = "显示5秒外回魔", + ["Show Mana Regen while NOT casting from Intellect"] = "显示在非施法状态下的法力恢复量", + -- /rb stat int rap + ["Show Ranged Attack Power"] = "显示远程攻击强度", + ["Show Ranged Attack Power from Intellect"] = "显示智力给的远程攻击强度", + -- /rb stat int armor + ["Show Armor"] = "显示护甲值", + ["Show Armor from Intellect"] = "显示智力给的护甲值", + + -- /rb stat spi + ["Spirit"] = "精神", + ["Changes the display of Spirit"] = "自订精神解析项目", + -- /rb stat spi mp5 + ["Show Mana Regen"] = "显示施法回魔", + ["Show Mana Regen while casting from Spirit"] = "显示在施法状态时,精神给的法力恢复量", + -- /rb stat spi mp5nc + ["Show Mana Regen while NOT casting"] = "显示正常回魔", + ["Show Mana Regen while NOT casting from Spirit"] = "显示在未施法状态时,精神给的法力恢复量", + -- /rb stat spi hp5 + ["Show Health Regen"] = "显示回血", + ["Show Health Regen from Spirit"] = "显示精神给的正常回血", + -- /rb stat spi dmg + ["Show Spell Damage"] = "显示法伤", + ["Show Spell Damage from Spirit"] = "显示精神给的法术伤害加成", + -- /rb stat spi heal + ["Show Healing"] = "显示治疗", + ["Show Healing from Spirit"] = "显示精神给的治疗加成", + + -- /rb sum + ["Stat Summary"] = "属性统计", + ["Options for stat summary"] = "自订属性选项", + -- /rb sum show + ["Show stat summary"] = "显示属性统计", + ["Show stat summary in tooltips"] = "在物品提示中显示属性统计", + -- /rb sum ignore + ["Ignore settings"] = "忽略设定", + ["Ignore stuff when calculating the stat summary"] = "设定在统计总合时所要忽略的事项", + -- /rb sum ignore unused + ["Ignore unused items types"] = "忽略不可能使用的物品", + ["Show stat summary only for highest level armor type and items you can use with uncommon quality and up"] = "只显示在你会使用的物品上", + -- /rb sum ignore equipped + ["Ignore equipped items"] = "忽略已装备的物品", + ["Hide stat summary for equipped items"] = "隐藏已装备的物品的统计总合", + -- /rb sum ignore enchant + ["Ignore enchants"] = "忽略附魔", + ["Ignore enchants on items when calculating the stat summary"] = "计算时忽略物品上的附魔效果", + -- /rb sum ignore gem + ["Ignore gems"] = "忽略宝石", + ["Ignore gems on items when calculating the stat summary"] = "计算时忽略物品上的宝石效果", + -- /rb sum diffstyle + ["Display style for diff value"] = "差异值显示方式", + ["Display diff values in the main tooltip or only in compare tooltips"] = "设定在主提示框架或只在比较框架中显示差异值", + -- /rb sum space + ["Add empty line"] = "加入空白列", + ["Add a empty line before or after stat summary"] = "在物品提示中的属性统计前或后加入空白列", + -- /rb sum space before + ["Add before summary"] = "加在统计前", + ["Add a empty line before stat summary"] = "在物品提示中的属性统计前加入空白列", + -- /rb sum space after + ["Add after summary"] = "加在统计后", + ["Add a empty line after stat summary"] = "在物品提示中的属性统计后加入空白列", + -- /rb sum icon + ["Show icon"] = "显示图示", + ["Show the sigma icon before summary listing"] = "在属性统计前显示图示", + -- /rb sum title + ["Show title text"] = "显示标题", + ["Show the title text before summary listing"] = "在属性统计前显示标题文字", + -- /rb sum showzerostat + ["Show zero value stats"] = "显示数值为0的属性", + ["Show zero value stats in summary for consistancy"] = "为了一致性,在统计中显示数值为0的属性", + -- /rb sum calcsum + ["Calculate stat sum"] = "计算总和统计", + ["Calculate the total stats for the item"] = "计算物品的总和统计", + -- /rb sum calcdiff + ["Calculate stat diff"] = "计算差异统计", + ["Calculate the stat difference for the item and equipped items"] = "计算物品和已装备物品的统计差异", + -- /rb sum sort + ["Sort StatSummary alphabetically"] = "按照字母排序", + ["Enable to sort StatSummary alphabetically, disable to sort according to stat type(basic, physical, spell, tank)"] = "启用以按照字母顺序排列,禁用按照属性类型排列(基础、物理、法术、抵抗……)", + -- /rb sum avoidhasblock + ["Include block chance in Avoidance summary"] = "在躲避统计中显示格挡几率", + ["Enable to include block chance in Avoidance summary, Disable for only dodge, parry, miss"] = "启用该选项后将在躲避统计中加入格挡几率,禁用将仅显示躲闪,招架,未击中", + -- /rb sum basic + ["Stat - Basic"] = "属性 - 基本", + ["Choose basic stats for summary"] = "选择想要统计的基本属性", + -- /rb sum physical + ["Stat - Physical"] = "属性 - 物理", + ["Choose physical damage stats for summary"] = "选择想要统计的物理攻击属性", + -- /rb sum spell + ["Stat - Spell"] = "属性 - 法术", + ["Choose spell damage and healing stats for summary"] = "选择想要统计的法术攻击和治疗的属性", + -- /rb sum tank + ["Stat - Tank"] = "属性 - 抗打击", + ["Choose tank stats for summary"] = "选择你想要统计的抗打击能力的属性", + -- /rb sum stat hp + ["Sum Health"] = "统计生命值", + ["Health <- Health, Stamina"] = "生命值 ← 生命值、耐力", + -- /rb sum stat mp + ["Sum Mana"] = "统计法力值", + ["Mana <- Mana, Intellect"] = "法力值 ← 法力值、智力", + -- /rb sum stat ap + ["Sum Attack Power"] = "统计近战攻击强度", + ["Attack Power <- Attack Power, Strength, Agility"] = "近战攻击强度 ← 攻击强度、力量、敏捷", + -- /rb sum stat rap + ["Sum Ranged Attack Power"] = "统计远程攻击强度", + ["Ranged Attack Power <- Ranged Attack Power, Intellect, Attack Power, Strength, Agility"] = "远程攻击强度 ← 远程攻击强度、智力、攻击强度、力量、敏捷", + -- /rb sum stat fap + ["Sum Feral Attack Power"] = "统计野性攻击强度", + ["Feral Attack Power <- Feral Attack Power, Attack Power, Strength, Agility"] = "野性攻击强度 ← 野性攻击强度、攻击强度、力量、敏捷", + -- /rb sum stat dmg + ["Sum Spell Damage"] = "统计法术伤害", + ["Spell Damage <- Spell Damage, Intellect, Spirit, Stamina"] = "法术伤害 ← 法术伤害、智力、精神、耐力", + -- /rb sum stat dmgholy + ["Sum Holy Spell Damage"] = "统计神圣法术伤害", + ["Holy Spell Damage <- Holy Spell Damage, Spell Damage, Intellect, Spirit"] = "神圣法术伤害 ← 神圣法术伤害、法术伤害、智力、精神", + -- /rb sum stat dmgarcane + ["Sum Arcane Spell Damage"] = "统计奥术法术伤害", + ["Arcane Spell Damage <- Arcane Spell Damage, Spell Damage, Intellect"] = "奥术法术伤害 ← 奥术法术伤害、法术伤害、智力", + -- /rb sum stat dmgfire + ["Sum Fire Spell Damage"] = "统计火焰法术伤害", + ["Fire Spell Damage <- Fire Spell Damage, Spell Damage, Intellect, Stamina"] = "火焰法术伤害 ← 火焰法术伤害、法术伤害、智力、耐力", + -- /rb sum stat dmgnature + ["Sum Nature Spell Damage"] = "统计自然法术伤害", + ["Nature Spell Damage <- Nature Spell Damage, Spell Damage, Intellect"] = "自然法术伤害 ← 自然法术伤害、法术伤害、智力", + -- /rb sum stat dmgfrost + ["Sum Frost Spell Damage"] = "统计冰霜法术伤害", + ["Frost Spell Damage <- Frost Spell Damage, Spell Damage, Intellect"] = "冰霜法术伤害 ← 冰霜法术伤害、法术伤害、智力", + -- /rb sum stat dmgshadow + ["Sum Shadow Spell Damage"] = "统计暗影法术伤害", + ["Shadow Spell Damage <- Shadow Spell Damage, Spell Damage, Intellect, Spirit, Stamina"] = "暗影法术伤害 ← 暗影法术伤害、法术伤害、智力、精神、耐力", + -- /rb sum stat heal + ["Sum Healing"] = "统计治疗", + ["Healing <- Healing, Intellect, Spirit, Agility, Strength"] = "治疗 ← 治疗、智力、精神、敏捷、力量", + -- /rb sum stat hit + ["Sum Hit Chance"] = "统计物理命中几率", + ["Hit Chance <- Hit Rating, Weapon Skill Rating"] = "物理命中几率 ← 命中等级、武器技能等级", + -- /rb sum stat crit + ["Sum Crit Chance"] = "统计物理爆击几率", + ["Crit Chance <- Crit Rating, Agility, Weapon Skill Rating"] = "物理爆击几率 ← 爆击等级、敏捷、武器技能等级", + -- /rb sum stat haste + ["Sum Haste"] = "统计急速", + ["Haste <- Haste Rating"] = "急速 ← 急速等级", + -- /rb sum stat critspell + ["Sum Spell Crit Chance"] = "统计法术爆击几率", + ["Spell Crit Chance <- Spell Crit Rating, Intellect"] = "法术爆击几率 ← 法术爆击等级、智力", + -- /rb sum stat hitspell + ["Sum Spell Hit Chance"] = "统计法术命中几率", + ["Spell Hit Chance <- Spell Hit Rating"] = "法术命中几率 ← 法术命中等级", + -- /rb sum stat hastespell + ["Sum Spell Haste"] = "统计法术急速", + ["Spell Haste <- Spell Haste Rating"] = "法术急速 ← 法术急速等级", + -- /rb sum stat mp5 + ["Sum Mana Regen"] = "统计法力恢复", + ["Mana Regen <- Mana Regen, Spirit"] = "法力恢复 ← 法力恢复、精神", + -- /rb sum stat mp5nc + ["Sum Mana Regen while not casting"] = "统计法力恢复(未施法时)", + ["Mana Regen while not casting <- Spirit"] = "法力恢复(未施法时) ← 精神", + -- /rb sum stat hp5 + ["Sum Health Regen"] = "统计生命恢复", + ["Health Regen <- Health Regen"] = "生命恢复 ← 生命恢复", + -- /rb sum stat hp5oc + ["Sum Health Regen when out of combat"] = "统计生命恢复(未战斗时)", + ["Health Regen when out of combat <- Spirit"] = "生命恢复(未战斗时) ← 精神", + -- /rb sum stat armor + ["Sum Armor"] = "统计护甲值", + ["Armor <- Armor from items, Armor from bonuses, Agility, Intellect"] = "护甲值 ← 物品护甲、护甲加成、敏捷、智力", + -- /rb sum stat blockvalue + ["Sum Block Value"] = "统计格挡值", + ["Block Value <- Block Value, Strength"] = "格挡值 ← 格挡值、力量", + -- /rb sum stat dodge + ["Sum Dodge Chance"] = "统计躲闪几率", + ["Dodge Chance <- Dodge Rating, Agility, Defense Rating"] = "躲闪几率 ← 躲闪等级、敏捷、防御等级", + -- /rb sum stat parry + ["Sum Parry Chance"] = "统计招架几率", + ["Parry Chance <- Parry Rating, Defense Rating"] = "招架几率 ← 招架等级、防御等级", + -- /rb sum stat block + ["Sum Block Chance"] = "统计格挡几率", + ["Block Chance <- Block Rating, Defense Rating"] = "格挡几率 ← 格挡等级、防御等级", + -- /rb sum stat avoidhit + ["Sum Hit Avoidance"] = "统计物理命中躲闪", + ["Hit Avoidance <- Defense Rating"] = "物理命中躲闪 ← 防御等级", + -- /rb sum stat avoidcrit + ["Sum Crit Avoidance"] = "统计物理爆击躲闪", + ["Crit Avoidance <- Defense Rating, Resilience"] = "物理爆击躲闪 ← 防御等级、韧性", + -- /rb sum stat neglectdodge + ["Sum Dodge Neglect"] = "统计防止被躲闪", + ["Dodge Neglect <- Expertise, Weapon Skill Rating"] = "防止被躲闪 ← 精准等级、武器技能等级", -- 2.3.0 + -- /rb sum stat neglectparry + ["Sum Parry Neglect"] = "统计防止被招架", + ["Parry Neglect <- Expertise, Weapon Skill Rating"] = "防止被招架 ← 精准等级、武器技能等级", -- 2.3.0 + -- /rb sum stat neglectblock + ["Sum Block Neglect"] = "统计防止被格挡", + ["Block Neglect <- Weapon Skill Rating"] = "防止被格挡 ← 武器技能等级", + -- /rb sum stat resarcane + ["Sum Arcane Resistance"] = "统计奥术抗性", + ["Arcane Resistance Summary"] = "统计奥术抗性", + -- /rb sum stat resfire + ["Sum Fire Resistance"] = "统计火焰抗性", + ["Fire Resistance Summary"] = "统计火焰抗性", + -- /rb sum stat resnature + ["Sum Nature Resistance"] = "统计自然抗性", + ["Nature Resistance Summary"] = "统计自然抗性", + -- /rb sum stat resfrost + ["Sum Frost Resistance"] = "统计冰霜抗性", + ["Frost Resistance Summary"] = "统计冰霜抗性", + -- /rb sum stat resshadow + ["Sum Shadow Resistance"] = "统计暗影抗性", + ["Shadow Resistance Summary"] = "统计暗影抗性", + -- /rb sum stat maxdamage + ["Sum Weapon Max Damage"] = "统计武器最大伤害", + ["Weapon Max Damage Summary"] = "统计武器最大伤害", + -- /rb sum stat pen + ["Sum Penetration"] = "统计穿透", + ["Spell Penetration Summary"] = "统计法术穿透", + -- /rb sum stat ignorearmor + ["Sum Ignore Armor"] = "统计忽略护甲", + ["Ignore Armor Summary"] = "统计忽略护甲效果", + -- /rb sum stat weapondps + --["Sum Weapon DPS"] = true, + --["Weapon DPS Summary"] = true, + -- /rb sum statcomp str + ["Sum Strength"] = "统计力量", + ["Strength Summary"] = "统计力量", + -- /rb sum statcomp agi + ["Sum Agility"] = "统计敏捷", + ["Agility Summary"] = "统计敏捷", + -- /rb sum statcomp sta + ["Sum Stamina"] = "统计耐力", + ["Stamina Summary"] = "统计耐力", + -- /rb sum statcomp int + ["Sum Intellect"] = "统计智力", + ["Intellect Summary"] = "统计智力", + -- /rb sum statcomp spi + ["Sum Spirit"] = "统计精神", + ["Spirit Summary"] = "统计精神", + -- /rb sum statcomp hitrating + ["Sum Hit Rating"] = "统计命中等级", + ["Hit Rating Summary"] = "统计命中等级", + -- /rb sum statcomp critrating + ["Sum Crit Rating"] = "统计爆击等级", + ["Crit Rating Summary"] = "统计爆击等级", + -- /rb sum statcomp hasterating + ["Sum Haste Rating"] = "统计急速等级", + ["Haste Rating Summary"] = "统计急速等级", + -- /rb sum statcomp hitspellrating + ["Sum Spell Hit Rating"] = "统计法术命中等级", + ["Spell Hit Rating Summary"] = "统计法术命中等级", + -- /rb sum statcomp critspellrating + ["Sum Spell Crit Rating"] = "统计法术爆击等级", + ["Spell Crit Rating Summary"] = "统计法术爆击等级", + -- /rb sum statcomp hastespellrating + ["Sum Spell Haste Rating"] = "统计法术急速等级", + ["Spell Haste Rating Summary"] = "统计法术急速等级", + -- /rb sum statcomp dodgerating + ["Sum Dodge Rating"] = "统计躲闪等级", + ["Dodge Rating Summary"] = "统计躲闪等级", + -- /rb sum statcomp parryrating + ["Sum Parry Rating"] = "统计招架等级", + ["Parry Rating Summary"] = "统计招架等级", + -- /rb sum statcomp blockrating + ["Sum Block Rating"] = "统计格挡等级", + ["Block Rating Summary"] = "统计格挡等级", + -- /rb sum statcomp res + ["Sum Resilience"] = "统计韧性", + ["Resilience Summary"] = "统计韧性等级", + -- /rb sum statcomp def + ["Sum Defense"] = "统计防御", + ["Defense <- Defense Rating"] = "防御 ← 防御等级", + -- /rb sum statcomp wpn + ["Sum Weapon Skill"] = "统计武器技能", + ["Weapon Skill <- Weapon Skill Rating"] = "武器技能 ← 武器技能等级", + -- /rb sum statcomp exp -- 2.3.0 + ["Sum Expertise"] = "统计精准", + ["Expertise <- Expertise Rating"] = "精准 ← 精准等级", + -- /rb sum statcomp tp + ["Sum TankPoints"] = "统计抗打击能力", + ["TankPoints <- Health, Total Reduction"] = "抗打击能力 ← 生命值, 所有伤害减免", + -- /rb sum statcomp tr + ["Sum Total Reduction"] = "统计伤害减免", + ["Total Reduction <- Armor, Dodge, Parry, Block, Block Value, Defense, Resilience, MobMiss, MobCrit, MobCrush, DamageTakenMods"] = "所有伤害减免 <- 护甲值, 躲闪, 招架, 格挡, 格挡值, 防御技能, 韧性, 怪物未击中几率, 怪物重击几率, 怪物碾压打击几率, 伤害减免", + -- /rb sum statcomp avoid + ["Sum Avoidance"] = "统计躲避", + ["Avoidance <- Dodge, Parry, MobMiss, Block(Optional)"] = "躲避 ← 躲闪, 招架, 怪物未命中, 格挡(可选)", + -- /rb sum gem + ["Gems"] = "宝石", + ["Auto fill empty gem slots"] = "自动填充空宝石位", + -- /rb sum gem red + ["Red Socket"] = EMPTY_SOCKET_RED, + ["ItemID or Link of the gem you would like to auto fill"] = "你想要填充该空格位的物品ID或者链接", + [""] = "<物品ID|链接>", + ["%s is now set to %s"] = "%s现在被放置于%s", + ["Queried server for Gem: %s. Try again in 5 secs."] = "对服务器查询宝石: %s。将会在5秒后重试。", + -- /rb sum gem yellow + ["Yellow Socket"] = EMPTY_SOCKET_YELLOW, + -- /rb sum gem blue + ["Blue Socket"] = EMPTY_SOCKET_BLUE, + -- /rb sum gem meta + ["Meta Socket"] = EMPTY_SOCKET_META, + + ----------------------- + -- Item Level and ID -- + ----------------------- + ["ItemLevel: "] = "物品等级: ", + ["ItemID: "] = "物品编号: ", + ----------------------- + -- Matching Patterns -- + ----------------------- + -- Items to check -- + -------------------- + -- [Potent Ornate Topaz] + -- +6 Spell Damage, +5 Spell Crit Rating + -------------------- + -- ZG enchant + -- +10 Defense Rating/+10 Stamina/+15 Block Value + -------------------- + -- [Glinting Flam Spessarite] + -- +3 Hit Rating and +3 Agility + -------------------- + -- ItemID: 22589 + -- [Atiesh, Greatstaff of the Guardian] warlock version + -- Equip: Increases the spell critical strike rating of all party members within 30 yards by 28. + -------------------- + -- [Brilliant Wizard Oil] + -- Use: While applied to target weapon it increases spell damage by up to 36 and increases spell critical strike rating by 14 . Lasts for 30 minutes. + ---------------------------------------------------------------------------------------------------- + -- I redesigned the tooltip scanner using a more locale friendly, 2 pass matching matching algorithm. + -- + -- The first pass searches for the rating number, the patterns are read from ["numberPatterns"] here, + -- " by (%d+)" will match strings like: "Increases defense rating by 16." + -- "%+(%d+)" will match strings like: "+10 Defense Rating" + -- You can add additional patterns if needed, its not limited to 2 patterns. + -- The separators are a table of strings used to break up a line into multiple lines what will be parsed seperately. + -- For example "+3 Hit Rating, +5 Spell Crit Rating" will be split into "+3 Hit Rating" and " +5 Spell Crit Rating" + -- + -- The second pass searches for the rating name, the names are read from ["statList"] here, + -- It will look through the table in order, so you can put common strings at the begining to speed up the search, + -- and longer strings should be listed first, like "spell critical strike" should be listed before "critical strike", + -- this way "spell critical strike" does get matched by "critical strike". + -- Strings need to be in lower case letters, because string.lower is called on lookup + -- + -- IMPORTANT: there may not exist a one-to-one correspondence, meaning you can't just translate this file, + -- but will need to go in game and find out what needs to be put in here. + -- For example, in english I found 3 different strings that maps to CR_CRIT_MELEE: "critical strike", "critical hit" and "crit". + -- You will need to find out every string that represents CR_CRIT_MELEE, and so on. + -- In other languages there may be 5 different strings that should all map to CR_CRIT_MELEE. + -- so please check in game that you have all strings, and not translate directly off this table. + -- + -- Tip1: When doing localizations, I recommend you set debugging to true in RatingBuster.lua + -- Find RatingBuster:SetDebugging(false) and change it to RatingBuster:SetDebugging(true) + -- or you can type /rb debug to enable it in game + -- + -- Tip2: The strings are passed into string.find, so you should escape the magic characters ^$()%.[]*+-? with a % + ["numberPatterns"] = { + {pattern = "(%d+)。", addInfo = "AfterNumber",}, + {pattern = "([%+%-]%d+)", addInfo = "AfterStat",}, + {pattern = "佩戴者.-(%d+)", addInfo = "AfterNumber",}, -- for "grant you xx stat" type pattern, ex: Quel'Serrar, Assassination Armor set + {pattern = "提高.-(%d+)", addInfo = "AfterNumber",}, + {pattern = "(%d+)([^%d%%|]+)", addInfo = "AfterStat",}, -- [发光的暗影卓奈石] +6法术伤害及5耐力 + }, + ["separators"] = { + "/", "和", ",", "。", " 持续 ", "&", "及", "并", ",","、", + }, + --[[ Rating ID + 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; + -- + SPELL_STAT1_NAME = "Strength" + SPELL_STAT2_NAME = "Agility" + SPELL_STAT3_NAME = "Stamina" + SPELL_STAT4_NAME = "Intellect" + SPELL_STAT5_NAME = "Spirit" + --]] + ["statList"] = { + {pattern = string.lower(SPELL_STAT1_NAME), id = SPELL_STAT1_NAME}, -- Strength + {pattern = string.lower(SPELL_STAT2_NAME), id = SPELL_STAT2_NAME}, -- Agility + {pattern = string.lower(SPELL_STAT3_NAME), id = SPELL_STAT3_NAME}, -- Stamina + {pattern = string.lower(SPELL_STAT4_NAME), id = SPELL_STAT4_NAME}, -- Intellect + {pattern = string.lower(SPELL_STAT5_NAME), id = SPELL_STAT5_NAME}, -- Spirit + {pattern = "防御等级", id = CR_DEFENSE_SKILL}, + {pattern = "躲闪等级", id = CR_DODGE}, + {pattern = "格挡等级", id = CR_BLOCK}, -- block enchant: "+10 Shield Block Rating" + {pattern = "招架等级", id = CR_PARRY}, + + {pattern = "法术爆击等级", id = CR_CRIT_SPELL}, + {pattern = "法术爆击命中等级", id = CR_CRIT_SPELL}, + {pattern = "法术爆击等级", id = CR_CRIT_SPELL}, + {pattern = "远程爆击等级", id = CR_CRIT_RANGED}, + {pattern = "远程爆击命中等级", id = CR_CRIT_RANGED}, + {pattern = "远程爆击等级", id = CR_CRIT_RANGED}, + {pattern = "近战爆击等级", id = CR_CRIT_MELEE}, + {pattern = "爆击等级", id = CR_CRIT_MELEE}, + + {pattern = "法术命中等级", id = CR_HIT_SPELL}, + {pattern = "远程命中等级", id = CR_HIT_RANGED}, + {pattern = "命中等级", id = CR_HIT_MELEE}, + + {pattern = "韧性等级", id = CR_CRIT_TAKEN_MELEE}, -- resilience is implicitly a rating + + {pattern = "法术急速等级", id = CR_HASTE_SPELL}, + {pattern = "远程急速等级", id = CR_HASTE_RANGED}, + {pattern = "急速等级", id = CR_HASTE_MELEE}, + {pattern = "加速等级", id = CR_HASTE_MELEE}, -- [Drums of Battle] + + {pattern = "武器技能等级", id = CR_WEAPON_SKILL}, + {pattern = "精准等级", id = CR_EXPERTISE}, + + {pattern = "命中躲闪等级", id = CR_HIT_TAKEN_MELEE}, + --[[ + {pattern = "dagger skill rating", id = CR_WEAPON_SKILL}, + {pattern = "sword skill rating", id = CR_WEAPON_SKILL}, + {pattern = "two%-handed swords skill rating", id = CR_WEAPON_SKILL}, + {pattern = "axe skill rating", id = CR_WEAPON_SKILL}, + {pattern = "bow skill rating", id = CR_WEAPON_SKILL}, + {pattern = "crossbow skill rating", id = CR_WEAPON_SKILL}, + {pattern = "gun skill rating", id = CR_WEAPON_SKILL}, + {pattern = "feral combat skill rating", id = CR_WEAPON_SKILL}, + {pattern = "mace skill rating", id = CR_WEAPON_SKILL}, + {pattern = "polearm skill rating", id = CR_WEAPON_SKILL}, + {pattern = "staff skill rating", id = CR_WEAPON_SKILL}, + {pattern = "two%-handed axes skill rating", id = CR_WEAPON_SKILL}, + {pattern = "two%-handed maces skill rating", id = CR_WEAPON_SKILL}, + {pattern = "fist weapons skill rating", id = CR_WEAPON_SKILL}, + --]] + }, + ------------------------- + -- Added info patterns -- + ------------------------- + -- $value will be replaced with the number + -- EX: "$value% Crit" -> "+1.34% Crit" + -- EX: "Crit $value%" -> "Crit +1.34%" + ["$value% Crit"] = "$value% 爆击", + ["$value% Spell Crit"] = "$value% 法爆", + ["$value% Dodge"] = "$value% 躲闪", + ["$value HP"] = "$value 生命", + ["$value MP"] = "$value 法力", + ["$value AP"] = "$value 攻击强度", + ["$value RAP"] = "$value 远攻强度", + ["$value Dmg"] = "$value 法伤", + ["$value Heal"] = "$value 治疗", + ["$value Armor"] = "$value 护甲", + ["$value Block"] = "$value 格挡值", + ["$value MP5"] = "$value 施法回魔", + ["$value MP5(NC)"] = "$value 精神回魔", + ["$value HP5"] = "$value 回血", + ["$value to be Dodged/Parried"] = "$value 被躲闪/被招架", + ["$value to be Crit"] = "$value 被致命一击", + ["$value Crit Dmg Taken"] = "$value 致命一击伤害减免", + ["$value DOT Dmg Taken"] = "$value 持续伤害减免", + + ------------------ + -- Stat Summary -- + ------------------ + ["Stat Summary"] = "属性统计", +} end) \ No newline at end of file diff --git a/RatingBuster-Locale-zhTW.lua b/RatingBuster-Locale-zhTW.lua new file mode 100644 index 0000000..d6b4fae --- /dev/null +++ b/RatingBuster-Locale-zhTW.lua @@ -0,0 +1,618 @@ +--[[ +Name: RatingBuster zhTW locale +Revision: $Revision: 73696 $ +Translated by: +- Whitetooth@Cenarius (hotdogee@bahamut.twbbs.org) +- CuteMiyu +- 小紫 +- mcc +]] + +local L = AceLibrary("AceLocale-2.2"):new("RatingBuster") +---- +-- This file is coded in UTF-8 +-- If you don't have a editor that can save in UTF-8, I recommend Ultraedit +---- +-- To translate AceLocale strings, replace true with the translation string +-- Before: ["Show Item ID"] = true, +-- After: ["Show Item ID"] = "顯示物品編號", +L:RegisterTranslations("zhTW", function() return { + --------------- + -- Waterfall -- + --------------- + ["RatingBuster Options"] = "屬性轉換選項", + ["Waterfall-1.0 is required to access the GUI."] = "需要 Waterfall-1.0 才能使用設定介面。", + --------------------------- + -- Slash Command Options -- + --------------------------- + -- /rb optionswin + ["Options Window"] = "選項視窗", + ["Shows the Options Window"] = "顯示選項視窗", + -- /rb statmod + ["Enable Stat Mods"] = "屬性加成", + ["Enable support for Stat Mods"] = "啟用屬性加成計算", + -- /rb itemid + ["Show ItemID"] = "顯示物品編號", + ["Show the ItemID in tooltips"] = "顯示物品編號", + -- /rb itemlevel + ["Show ItemLevel"] = "顯示物品等級", + ["Show the ItemLevel in tooltips"] = "顯示物品等級", + -- /rb usereqlv + ["Use required level"] = "使用需要等級", + ["Calculate using the required level if you are below the required level"] = "如果你的等級低於需要等級則用需要等級來換算", + -- /rb setlevel + ["Set level"] = "設定換算等級", + ["Set the level used in calculations (0 = your level)"] = "設定換算等級 (0 = 你的目前的等級)", + -- /rb color + ["Change text color"] = "設定文字顏色", + ["Changes the color of added text"] = "設定 RB 所增加的文字的顏色", + -- /rb color pick + ["Pick color"] = "挑選顏色", + ["Pick a color"] = "挑選顏色", + -- /rb color enable + ["Enable color"] = "啟用文字顏色", + ["Enable colored text"] = "啟用文字顏色", + -- /rb rating + ["Rating"] = "屬性等級", + ["Options for Rating display"] = "設定屬性等級顯示", + -- /rb rating show + ["Show Rating conversions"] = "顯示屬性等級轉換", + ["Show Rating conversions in tooltips"] = "在提示框架中顯示屬性等級轉換結果", + -- /rb rating detail + ["Show detailed conversions text"] = "顯示詳細轉換文字", + ["Show detailed text for Resiliance and Expertise conversions"] = "顯示韌性和熟練技能的詳細轉換文字", + -- /rb rating def + ["Defense breakdown"] = "分析防禦", + ["Convert Defense into Crit Avoidance, Hit Avoidance, Dodge, Parry and Block"] = "將防禦分為避免致命、避免命中、閃躲、招架和格擋", + -- /rb rating wpn + ["Weapon Skill breakdown"] = "分析武器技能", + ["Convert Weapon Skill into Crit, Hit, Dodge Neglect, Parry Neglect and Block Neglect"] = "將武器技能分為致命、擊中、防止被閃躲、防止被招架和防止被格擋", + -- /rb rating exp -- 2.3.0 + ["Expertise breakdown"] = "分析熟練技能", + ["Convert Expertise into Dodge Neglect and Parry Neglect"] = "將熟練技能分為防止被閃躲、防止被招架", + + -- /rb stat + ["Stat Breakdown"] = "基本屬性解析", + ["Changes the display of base stats"] = "設定基本屬性的解析顯示", + -- /rb stat show + ["Show base stat conversions"] = "顯示基本屬性解析", + ["Show base stat conversions in tooltips"] = "在物品提示中顯示基本屬性解析", + -- /rb stat str + ["Strength"] = "力量", + ["Changes the display of Strength"] = "自訂力量解析項目", + -- /rb stat str ap + ["Show Attack Power"] = "顯示攻擊強度", + ["Show Attack Power from Strength"] = "顯示力量給的攻擊強度", + -- /rb stat str block + ["Show Block Value"] = "顯示格檔值", + ["Show Block Value from Strength"] = "顯示力量給的格檔值", + -- /rb stat str dmg + ["Show Spell Damage"] = "顯示法傷", + ["Show Spell Damage from Strength"] = "顯示力量給的法術傷害加成", + -- /rb stat str heal + ["Show Healing"] = "顯示治療", + ["Show Healing from Strength"] = "顯示力量給的治療加成", + + -- /rb stat agi + ["Agility"] = "敏捷", + ["Changes the display of Agility"] = "自訂敏捷解析項目", + -- /rb stat agi crit + ["Show Crit"] = "顯示致命", + ["Show Crit chance from Agility"] = "顯示敏捷給的致命一擊機率", + -- /rb stat agi dodge + ["Show Dodge"] = "顯示閃躲", + ["Show Dodge chance from Agility"] = "顯示敏捷給的閃躲機率", + -- /rb stat agi ap + ["Show Attack Power"] = "顯示攻擊強度", + ["Show Attack Power from Agility"] = "顯示敏捷給的攻擊強度", + -- /rb stat agi rap + ["Show Ranged Attack Power"] = "顯示遠程攻擊強度", + ["Show Ranged Attack Power from Agility"] = "顯示敏捷給的遠程攻擊強度", + -- /rb stat agi armor + ["Show Armor"] = "顯示裝甲值", + ["Show Armor from Agility"] = "顯示敏捷給的裝甲值", + -- /rb stat str heal + ["Show Healing"] = "顯示治療", + ["Show Healing from Agility"] = "顯示敏捷給的治療加成", + + -- /rb stat sta + ["Stamina"] = "耐力", + ["Changes the display of Stamina"] = "自訂耐力解析項目", + -- /rb stat sta hp + ["Show Health"] = "顯示生命力", + ["Show Health from Stamina"] = "顯示耐力給的生命力", + -- /rb stat sta dmg + ["Show Spell Damage"] = "顯示法傷", + ["Show Spell Damage from Stamina"] = "顯示耐力給的法術傷害加成", + + -- /rb stat int + ["Intellect"] = "智力", + ["Changes the display of Intellect"] = "自訂智力解析項目", + -- /rb stat int spellcrit + ["Show Spell Crit"] = "顯示法術致命", + ["Show Spell Crit chance from Intellect"] = "顯示智力給的法術致命一擊機率", + -- /rb stat int mp + ["Show Mana"] = "顯示法力", + ["Show Mana from Intellect"] = "顯示智力給的法力", + -- /rb stat int dmg + ["Show Spell Damage"] = "顯示法傷", + ["Show Spell Damage from Intellect"] = "顯示智力給的法術傷害加成", + -- /rb stat int heal + ["Show Healing"] = "顯示治療", + ["Show Healing from Intellect"] = "顯示智力給的治療加成", + -- /rb stat int mp5 + ["Show Mana Regen"] = "顯示施法回魔", + ["Show Mana Regen while casting from Intellect"] = "顯示智力給的施法中法力恢復量", + -- /rb stat int mp5nc + ["Show Mana Regen while NOT casting"] = "顯示一般回魔", + ["Show Mana Regen while NOT casting from Intellect"] = "顯示在未施法狀態時,智力給的法力恢復量", + -- /rb stat int rap + ["Show Ranged Attack Power"] = "顯示遠程攻擊強度", + ["Show Ranged Attack Power from Intellect"] = "顯示智力給的遠程攻擊強度", + -- /rb stat int armor + ["Show Armor"] = "顯示裝甲值", + ["Show Armor from Intellect"] = "顯示智力給的裝甲值", + + -- /rb stat spi + ["Spirit"] = "精神", + ["Changes the display of Spirit"] = "自訂精神解析項目", + -- /rb stat spi mp5 + ["Show Mana Regen"] = "顯示施法回魔", + ["Show Mana Regen while casting from Spirit"] = "顯示在施法狀態時,精神給的法力恢復量", + -- /rb stat spi mp5nc + ["Show Mana Regen while NOT casting"] = "顯示一般回魔", + ["Show Mana Regen while NOT casting from Spirit"] = "顯示在未施法狀態時,精神給的法力恢復量", + -- /rb stat spi hp5 + ["Show Health Regen"] = "顯示回血", + ["Show Health Regen from Spirit"] = "顯示精神給的戰鬥外回生命力", + -- /rb stat spi dmg + ["Show Spell Damage"] = "顯示法傷", + ["Show Spell Damage from Spirit"] = "顯示精神給的法術傷害加成", + -- /rb stat spi heal + ["Show Healing"] = "顯示治療", + ["Show Healing from Spirit"] = "顯示精神給的治療加成", + + -- /rb sum + ["Stat Summary"] = "屬性統計", + ["Options for stat summary"] = "自訂屬性選項", + -- /rb sum show + ["Show stat summary"] = "顯示屬性統計", + ["Show stat summary in tooltips"] = "在物品提示中顯示屬性統計", + -- /rb sum ignore + ["Ignore settings"] = "忽略設定", + ["Ignore stuff when calculating the stat summary"] = "設定在統計總合時所要忽略的項目", + -- /rb sum ignore unused + ["Ignore unused items types"] = "忽略不可能使用的物品", + ["Show stat summary only for highest level armor type and items you can use with uncommon quality and up"] = "只顯示在你會使用的物品上", + -- /rb sum ignore equipped + ["Ignore equipped items"] = "忽略已裝備的物品", + ["Hide stat summary for equipped items"] = "隱藏已裝備的物品的統計總合", + -- /rb sum ignore enchant + ["Ignore enchants"] = "忽略附魔", + ["Ignore enchants on items when calculating the stat summary"] = "計算時忽略物品上的附魔效果", + -- /rb sum ignore gem + ["Ignore gems"] = "忽略寶石", + ["Ignore gems on items when calculating the stat summary"] = "計算時忽略物品上的寶石效果", + -- /rb sum diffstyle + ["Display style for diff value"] = "差異值顯示方式", + ["Display diff values in the main tooltip or only in compare tooltips"] = "設定在主提示框架或只在比較框架中顯示差異值", + -- /rb sum space + ["Add empty line"] = "加入空白列", + ["Add a empty line before or after stat summary"] = "在物品提示中的屬性統計前或後加入空白列", + -- /rb sum space before + ["Add before summary"] = "加在統計前", + ["Add a empty line before stat summary"] = "在物品提示中的屬性統計前加入空白列", + -- /rb sum space after + ["Add after summary"] = "加在統計後", + ["Add a empty line after stat summary"] = "在物品提示中的屬性統計後加入空白列", + -- /rb sum icon + ["Show icon"] = "顯示圖示", + ["Show the sigma icon before summary listing"] = "在屬性統計前顯示圖示", + -- /rb sum title + ["Show title text"] = "顯示標題", + ["Show the title text before summary listing"] = "在屬性統計前顯示標題文字", + -- /rb sum showzerostat + ["Show zero value stats"] = "顯示數值為 0 的屬性", + ["Show zero value stats in summary for consistancy"] = "為了一致性,在統計中顯示數值為 0 的屬性", + -- /rb sum calcsum + ["Calculate stat sum"] = "計算統計總合", + ["Calculate the total stats for the item"] = "計算物品的統計總合", + -- /rb sum calcdiff + ["Calculate stat diff"] = "計算統計差異", + ["Calculate the stat difference for the item and equipped items"] = "計算物品和已裝備物品的統計差異", + -- /rb sum sort + ["Sort StatSummary alphabetically"] = "依字幕順序排列屬性統計", + ["Enable to sort StatSummary alphabetically, disable to sort according to stat type(basic, physical, spell, tank)"] = "開啟時依字幕順序排列,關閉時依屬性種類排列(基本、物理、魔法、坦克)", + -- /rb sum avoidhasblock + ["Include block chance in Avoidance summary"] = "傷害迴避包含格檔率", + ["Enable to include block chance in Avoidance summary, Disable for only dodge, parry, miss"] = "開啟時傷害迴避包含格檔率,關閉時有閃躲、招架、未擊中", + -- /rb sum basic + ["Stat - Basic"] = "統計基本屬性", + ["Choose basic stats for summary"] = "自訂基本屬性統計項目", + -- /rb sum physical + ["Stat - Physical"] = "統計物理屬性", + ["Choose physical damage stats for summary"] = "自訂物理傷害屬性統計項目", + -- /rb sum spell + ["Stat - Spell"] = "統計魔法屬性", + ["Choose spell damage and healing stats for summary"] = "自訂魔法傷害及治療屬性統計項目", + -- /rb sum tank + ["Stat - Tank"] = "統計坦克屬性", + ["Choose tank stats for summary"] = "自訂坦克屬性統計項目", + -- /rb sum stat hp + ["Sum Health"] = "統計生命力", + ["Health <- Health, Stamina"] = "生命力 ← 生命力、耐力", + -- /rb sum stat mp + ["Sum Mana"] = "統計法力", + ["Mana <- Mana, Intellect"] = "法力 ← 法力、智力", + -- /rb sum stat ap + ["Sum Attack Power"] = "統計攻擊強度", + ["Attack Power <- Attack Power, Strength, Agility"] = "攻擊強度 ← 攻擊強度、力量、敏捷", + -- /rb sum stat rap + ["Sum Ranged Attack Power"] = "統計遠程攻擊強度", + ["Ranged Attack Power <- Ranged Attack Power, Intellect, Attack Power, Strength, Agility"] = "遠程攻擊強度 ← 遠程攻擊強度、智力、攻擊強度、力量、敏捷", + -- /rb sum stat fap + ["Sum Feral Attack Power"] = "統計野性攻擊強度", + ["Feral Attack Power <- Feral Attack Power, Attack Power, Strength, Agility"] = "野性攻擊強度 ← 野性攻擊強度、攻擊強度、力量、敏捷", + -- /rb sum stat dmg + ["Sum Spell Damage"] = "統計法術傷害", + ["Spell Damage <- Spell Damage, Intellect, Spirit, Stamina"] = "法術傷害 ← 法術傷害、智力、精神、耐力", + -- /rb sum stat dmgholy + ["Sum Holy Spell Damage"] = "統計神聖法術傷害", + ["Holy Spell Damage <- Holy Spell Damage, Spell Damage, Intellect, Spirit"] = "神聖法術傷害 ← 神聖法術傷害、法術傷害、智力、精神", + -- /rb sum stat dmgarcane + ["Sum Arcane Spell Damage"] = "統計秘法法術傷害", + ["Arcane Spell Damage <- Arcane Spell Damage, Spell Damage, Intellect"] = "秘法法術傷害 ← 秘法法術傷害、法術傷害、智力", + -- /rb sum stat dmgfire + ["Sum Fire Spell Damage"] = "統計火焰法術傷害", + ["Fire Spell Damage <- Fire Spell Damage, Spell Damage, Intellect, Stamina"] = "火焰法術傷害 ← 火焰法術傷害、法術傷害、智力、耐力", + -- /rb sum stat dmgnature + ["Sum Nature Spell Damage"] = "統計自然法術傷害", + ["Nature Spell Damage <- Nature Spell Damage, Spell Damage, Intellect"] = "自然法術傷害 ← 自然法術傷害、法術傷害、智力", + -- /rb sum stat dmgfrost + ["Sum Frost Spell Damage"] = "統計冰霜法術傷害", + ["Frost Spell Damage <- Frost Spell Damage, Spell Damage, Intellect"] = "冰霜法術傷害 ← 冰霜法術傷害、法術傷害、智力", + -- /rb sum stat dmgshadow + ["Sum Shadow Spell Damage"] = "統計暗影法術傷害", + ["Shadow Spell Damage <- Shadow Spell Damage, Spell Damage, Intellect, Spirit, Stamina"] = "暗影法術傷害 ← 暗影法術傷害、法術傷害、智力、精神、耐力", + -- /rb sum stat heal + ["Sum Healing"] = "統計治療", + ["Healing <- Healing, Intellect, Spirit, Agility, Strength"] = "治療 ← 治療、智力、精神、敏捷、力量", + -- /rb sum stat hit + ["Sum Hit Chance"] = "統計命中機率", + ["Hit Chance <- Hit Rating, Weapon Skill Rating"] = "命中機率 ← 命中等級、武器技能等級", + -- /rb sum stat crit + ["Sum Crit Chance"] = "統計致命一擊機率", + ["Crit Chance <- Crit Rating, Agility, Weapon Skill Rating"] = "致命一擊機率 ← 致命一擊等級、敏捷、武器技能等級", + -- /rb sum stat haste + ["Sum Haste"] = "統計加速", + ["Haste <- Haste Rating"] = "加速 ← 加速等級", + -- /rb sum stat critspell + ["Sum Spell Crit Chance"] = "統計法術致命一擊機率", + ["Spell Crit Chance <- Spell Crit Rating, Intellect"] = "法術致命一擊機率 ← 法術致命一擊等級、智力", + -- /rb sum stat hitspell + ["Sum Spell Hit Chance"] = "統計法術命中機率", + ["Spell Hit Chance <- Spell Hit Rating"] = "法術命中機率 ← 法術命中機率", + -- /rb sum stat hastespell + ["Sum Spell Haste"] = "統計法術加速", + ["Spell Haste <- Spell Haste Rating"] = "法術加速 ← 法術加速等級", + -- /rb sum stat mp5 + ["Sum Mana Regen"] = "統計法力恢復", + ["Mana Regen <- Mana Regen, Spirit"] = "法力恢復 ← 法力恢復、精神", + -- /rb sum stat mp5nc + ["Sum Mana Regen while not casting"] = "統計法力恢復 (未施法時)", + ["Mana Regen while not casting <- Spirit"] = "法力恢復 (未施法時) ← 精神", + -- /rb sum stat hp5 + ["Sum Health Regen"] = "統計生命恢復", + ["Health Regen <- Health Regen"] = "生命恢復 ← 生命恢復", + -- /rb sum stat hp5oc + ["Sum Health Regen when out of combat"] = "統計生命恢復 (未戰鬥時)", + ["Health Regen when out of combat <- Spirit"] = "生命恢復 (未戰鬥時) ← 精神", + -- /rb sum stat armor + ["Sum Armor"] = "統計裝甲值", + ["Armor <- Armor from items, Armor from bonuses, Agility, Intellect"] = "裝甲值 ← 物品裝甲、裝甲加成、敏捷、智力", + -- /rb sum stat blockvalue + ["Sum Block Value"] = "統計格擋值", + ["Block Value <- Block Value, Strength"] = "格擋值 ← 格擋值、力量", + -- /rb sum stat dodge + ["Sum Dodge Chance"] = "統計閃躲機率", + ["Dodge Chance <- Dodge Rating, Agility, Defense Rating"] = "閃躲機率 ← 閃躲等級、敏捷、防禦等級", + -- /rb sum stat parry + ["Sum Parry Chance"] = "統計招架機率", + ["Parry Chance <- Parry Rating, Defense Rating"] = "招架機率 ← 招架等級、防禦等級", + -- /rb sum stat block + ["Sum Block Chance"] = "統計格擋機率", + ["Block Chance <- Block Rating, Defense Rating"] = "格擋機率 ← 格擋等級、防禦等級", + -- /rb sum stat avoidhit + ["Sum Hit Avoidance"] = "統計迴避命中", + ["Hit Avoidance <- Defense Rating"] = "迴避命中 ← 防禦等級", + -- /rb sum stat avoidcrit + ["Sum Crit Avoidance"] = "統計迴避致命一擊", + ["Crit Avoidance <- Defense Rating, Resilience"] = "迴避致命一擊 ← 防禦等級、韌性", + -- /rb sum stat neglectdodge + ["Sum Dodge Neglect"] = "統計防止被閃躲", + ["Dodge Neglect <- Expertise, Weapon Skill Rating"] = "防止被閃躲 ← 熟練技能、武器技能等級", -- 2.3.0 + -- /rb sum stat neglectparry + ["Sum Parry Neglect"] = "統計防止被招架", + ["Parry Neglect <- Expertise, Weapon Skill Rating"] = "防止被招架 ← 熟練技能、武器技能等級", -- 2.3.0 + -- /rb sum stat neglectblock + ["Sum Block Neglect"] = "統計防止被格擋", + ["Block Neglect <- Weapon Skill Rating"] = "防止被格擋 ← 武器技能等級", + -- /rb sum stat resarcane + ["Sum Arcane Resistance"] = "統計秘法抗性", + ["Arcane Resistance Summary"] = "統計秘法抗性", + -- /rb sum stat resfire + ["Sum Fire Resistance"] = "統計火焰抗性", + ["Fire Resistance Summary"] = "統計火焰抗性", + -- /rb sum stat resnature + ["Sum Nature Resistance"] = "統計自然抗性", + ["Nature Resistance Summary"] = "統計自然抗性", + -- /rb sum stat resfrost + ["Sum Frost Resistance"] = "統計冰霜抗性", + ["Frost Resistance Summary"] = "統計冰霜抗性", + -- /rb sum stat resshadow + ["Sum Shadow Resistance"] = "統計暗影抗性", + ["Shadow Resistance Summary"] = "統計暗影抗性", + -- /rb sum stat maxdamage + ["Sum Weapon Max Damage"] = "統計武器最大傷害", + ["Weapon Max Damage Summary"] = "統計武器最大傷害", + -- /rb sum stat pen + ["Sum Penetration"] = "統計法術穿透力", + ["Spell Penetration Summary"] = "統計法術穿透力", + -- /rb sum stat ignorearmor + ["Sum Ignore Armor"] = "統計無視護甲", + ["Ignore Armor Summary"] = "統計無視護甲", + -- /rb sum stat weapondps + --["Sum Weapon DPS"] = true, + --["Weapon DPS Summary"] = true, + -- /rb sum statcomp str + ["Sum Strength"] = "統計力量", + ["Strength Summary"] = "統計力量", + -- /rb sum statcomp agi + ["Sum Agility"] = "統計敏捷", + ["Agility Summary"] = "統計敏捷", + -- /rb sum statcomp sta + ["Sum Stamina"] = "統計耐力", + ["Stamina Summary"] = "統計耐力", + -- /rb sum statcomp int + ["Sum Intellect"] = "統計智力", + ["Intellect Summary"] = "統計智力", + -- /rb sum statcomp spi + ["Sum Spirit"] = "統計精神", + ["Spirit Summary"] = "統計精神", + -- /rb sum statcomp hitrating + ["Sum Hit Rating"] = "統計命中等級", + ["Hit Rating Summary"] = "統計命中等級", + -- /rb sum statcomp critrating + ["Sum Crit Rating"] = "統計致命等級", + ["Crit Rating Summary"] = "統計致命等級", + -- /rb sum statcomp hasterating + ["Sum Haste Rating"] = "統計加速等級", + ["Haste Rating Summary"] = "統計加速等級", + -- /rb sum statcomp hitspellrating + ["Sum Spell Hit Rating"] = "統計法術命中等級", + ["Spell Hit Rating Summary"] = "統計法術命中等級", + -- /rb sum statcomp critspellrating + ["Sum Spell Crit Rating"] = "統計法術致命等級", + ["Spell Crit Rating Summary"] = "統計法術致命等級", + -- /rb sum statcomp hastespellrating + ["Sum Spell Haste Rating"] = "統計法術加速等級", + ["Spell Haste Rating Summary"] = "統計法術加速等級", + -- /rb sum statcomp dodgerating + ["Sum Dodge Rating"] = "統計閃躲等級", + ["Dodge Rating Summary"] = "統計閃躲等級", + -- /rb sum statcomp parryrating + ["Sum Parry Rating"] = "統計招架等級", + ["Parry Rating Summary"] = "統計招架等級", + -- /rb sum statcomp blockrating + ["Sum Block Rating"] = "統計格檔等級", + ["Block Rating Summary"] = "統計格檔等級", + -- /rb sum statcomp res + ["Sum Resilience"] = "統計韌性", + ["Resilience Summary"] = "統計韌性", + -- /rb sum statcomp def + ["Sum Defense"] = "統計防禦", + ["Defense <- Defense Rating"] = "防禦 ← 防禦等級", + -- /rb sum statcomp wpn + ["Sum Weapon Skill"] = "統計武器技能", + ["Weapon Skill <- Weapon Skill Rating"] = "武器技能 ← 武器技能等級", + -- /rb sum statcomp exp -- 2.3.0 + ["Sum Expertise"] = "統計熟練技能", + ["Expertise <- Expertise Rating"] = "熟練技能 ← 熟練等級", + -- /rb sum statcomp tp + ["Sum TankPoints"] = "統計坦克點", + ["TankPoints <- Health, Total Reduction"] = "坦克點 ← 生命力、傷害減免總值", + -- /rb sum statcomp tr + ["Sum Total Reduction"] = "統計傷害減免總值", + ["Total Reduction <- Armor, Dodge, Parry, Block, Block Value, Defense, Resilience, MobMiss, MobCrit, MobCrush, DamageTakenMods"] = "傷害減免總值 ← 護甲、閃躲、招架、格擋、格檔值、防禦、韌性、怪物未擊中、怪物致命、怪物輾壓、DamageTakenMods (?)", + -- /rb sum statcomp avoid + ["Sum Avoidance"] = "統計傷害迴避", + ["Avoidance <- Dodge, Parry, MobMiss, Block(Optional)"] = "傷害迴避 ← 閃躲、招架、怪物未擊中、格擋(選項)", + -- /rb sum gem + ["Gems"] = "預設寶石", + ["Auto fill empty gem slots"] = "空寶石插槽的預設寶石", + -- /rb sum gem red + ["Red Socket"] = EMPTY_SOCKET_RED, + ["ItemID or Link of the gem you would like to auto fill"] = "預設寶石的物品編號或連結", + [""] = "<物品編號|連結>", + ["%s is now set to %s"] = "%s 現在被設定為 %s", + ["Queried server for Gem: %s. Try again in 5 secs."] = "嘗試查詢編號:%s,請5秒後再試一次。", + -- /rb sum gem yellow + ["Yellow Socket"] = EMPTY_SOCKET_YELLOW, + -- /rb sum gem blue + ["Blue Socket"] = EMPTY_SOCKET_BLUE, + -- /rb sum gem meta + ["Meta Socket"] = EMPTY_SOCKET_META, + + ----------------------- + -- Item Level and ID -- + ----------------------- + ["ItemLevel: "] = "物品等級: ", + ["ItemID: "] = "物品編號: ", + ----------------------- + -- Matching Patterns -- + ----------------------- + -- Items to check -- + -------------------- + -- [Potent Ornate Topaz] + -- +6 Spell Damage, +5 Spell Crit Rating + -------------------- + -- ZG enchant + -- +10 Defense Rating/+10 Stamina/+15 Block Value + -------------------- + -- [Glinting Flam Spessarite] + -- +3 Hit Rating and +3 Agility + -------------------- + -- ItemID: 22589 + -- [Atiesh, Greatstaff of the Guardian] warlock version + -- Equip: Increases the spell critical strike rating of all party members within 30 yards by 28. + -------------------- + -- [Brilliant Wizard Oil] + -- Use: While applied to target weapon it increases spell damage by up to 36 and increases spell critical strike rating by 14 . Lasts for 30 minutes. + ---------------------------------------------------------------------------------------------------- + -- I redesigned the tooltip scanner using a more locale friendly, 2 pass matching matching algorithm. + -- + -- The first pass searches for the rating number, the patterns are read from ["numberPatterns"] here, + -- " by (%d+)" will match strings like: "Increases defense rating by 16." + -- "%+(%d+)" will match strings like: "+10 Defense Rating" + -- You can add additional patterns if needed, its not limited to 2 patterns. + -- The separators are a table of strings used to break up a line into multiple lines what will be parsed seperately. + -- For example "+3 Hit Rating, +5 Spell Crit Rating" will be split into "+3 Hit Rating" and " +5 Spell Crit Rating" + -- + -- The second pass searches for the rating name, the names are read from ["statList"] here, + -- It will look through the table in order, so you can put common strings at the begining to speed up the search, + -- and longer strings should be listed first, like "spell critical strike" should be listed before "critical strike", + -- this way "spell critical strike" does get matched by "critical strike". + -- Strings need to be in lower case letters, because string.lower is called on lookup + -- + -- IMPORTANT: there may not exist a one-to-one correspondence, meaning you can't just translate this file, + -- but will need to go in game and find out what needs to be put in here. + -- For example, in english I found 3 different strings that maps to CR_CRIT_MELEE: "critical strike", "critical hit" and "crit". + -- You will need to find out every string that represents CR_CRIT_MELEE, and so on. + -- In other languages there may be 5 different strings that should all map to CR_CRIT_MELEE. + -- so please check in game that you have all strings, and not translate directly off this table. + -- + -- Tip1: When doing localizations, I recommend you set debugging to true in RatingBuster.lua + -- Find RatingBuster:SetDebugging(false) and change it to RatingBuster:SetDebugging(true) + -- or you can type /rb debug to enable it in game + -- + -- Tip2: The strings are passed into string.find, so you should escape the magic characters ^$()%.[]*+-? with a % + ["numberPatterns"] = { + {pattern = "提高.-(%d+)", addInfo = "AfterNumber",}, + {pattern = "提升.-(%d+)", addInfo = "AfterNumber",}, -- [奎克米瑞之眼] ID:27683 + {pattern = "(%d+)。", addInfo = "AfterNumber",}, + {pattern = "([%+%-]%d+)", addInfo = "AfterStat",}, + {pattern = "佩戴者.-(%d+)", addInfo = "AfterNumber",}, -- for "grant you xx stat" type pattern, ex: Quel'Serrar, Assassination Armor set + {pattern = "(%d+)([^%d%%|]+)", addInfo = "AfterStat",}, -- [發光的暗影卓奈石] +6法術傷害及5耐力 + }, + ["separators"] = { + "/", "和", ",", "。", " 持續 ", "&", "及", "並", ",", + }, + --[[ Rating ID + 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; + -- + SPELL_STAT1_NAME = "Strength" + SPELL_STAT2_NAME = "Agility" + SPELL_STAT3_NAME = "Stamina" + SPELL_STAT4_NAME = "Intellect" + SPELL_STAT5_NAME = "Spirit" + --]] + ["statList"] = { + {pattern = string.lower(SPELL_STAT1_NAME), id = SPELL_STAT1_NAME}, -- Strength + {pattern = string.lower(SPELL_STAT2_NAME), id = SPELL_STAT2_NAME}, -- Agility + {pattern = string.lower(SPELL_STAT3_NAME), id = SPELL_STAT3_NAME}, -- Stamina + {pattern = string.lower(SPELL_STAT4_NAME), id = SPELL_STAT4_NAME}, -- Intellect + {pattern = string.lower(SPELL_STAT5_NAME), id = SPELL_STAT5_NAME}, -- Spirit + {pattern = "防禦等級", id = CR_DEFENSE_SKILL}, + {pattern = "閃躲等級", id = CR_DODGE}, + {pattern = "格擋等級", id = CR_BLOCK}, -- block enchant: "+10 Shield Block Rating" + {pattern = "招架等級", id = CR_PARRY}, + + {pattern = "法術致命一擊等級", id = CR_CRIT_SPELL}, + {pattern = "遠程攻擊致命一擊等級", id = CR_CRIT_RANGED}, + {pattern = "致命一擊等級", id = CR_CRIT_MELEE}, + + {pattern = "法術命中等級", id = CR_HIT_SPELL}, + {pattern = "遠程命中等級", id = CR_HIT_RANGED}, + {pattern = "命中等級", id = CR_HIT_MELEE}, + + {pattern = "韌性", id = CR_CRIT_TAKEN_MELEE}, -- resilience is implicitly a rating + + {pattern = "法術加速等級", id = CR_HASTE_SPELL}, + {pattern = "遠程攻擊加速等級", id = CR_HASTE_RANGED}, + {pattern = "加速等級", id = CR_HASTE_MELEE}, + {pattern = "攻擊速度等級", id = CR_HASTE_MELEE}, -- [Drums of Battle] + + {pattern = "技能等級", id = CR_WEAPON_SKILL}, + {pattern = "熟練等級", id = CR_EXPERTISE}, -- 2.3 + + {pattern = "命中迴避率", id = CR_HIT_TAKEN_MELEE}, + --[[ + {pattern = "dagger skill rating", id = CR_WEAPON_SKILL}, + {pattern = "sword skill rating", id = CR_WEAPON_SKILL}, + {pattern = "two%-handed swords skill rating", id = CR_WEAPON_SKILL}, + {pattern = "axe skill rating", id = CR_WEAPON_SKILL}, + {pattern = "bow skill rating", id = CR_WEAPON_SKILL}, + {pattern = "crossbow skill rating", id = CR_WEAPON_SKILL}, + {pattern = "gun skill rating", id = CR_WEAPON_SKILL}, + {pattern = "feral combat skill rating", id = CR_WEAPON_SKILL}, + {pattern = "mace skill rating", id = CR_WEAPON_SKILL}, + {pattern = "polearm skill rating", id = CR_WEAPON_SKILL}, + {pattern = "staff skill rating", id = CR_WEAPON_SKILL}, + {pattern = "two%-handed axes skill rating", id = CR_WEAPON_SKILL}, + {pattern = "two%-handed maces skill rating", id = CR_WEAPON_SKILL}, + {pattern = "fist weapons skill rating", id = CR_WEAPON_SKILL}, + --]] + }, + ------------------------- + -- Added info patterns -- + ------------------------- + -- $value will be replaced with the number + -- EX: "$value% Crit" -> "+1.34% Crit" + -- EX: "Crit $value%" -> "Crit +1.34%" + ["$value% Crit"] = "$value% 致命", + ["$value% Spell Crit"] = "$value% 法術致命", + ["$value% Dodge"] = "$value% 閃躲", + ["$value HP"] = "$value 生命", + ["$value MP"] = "$value 法力", + ["$value AP"] = "$value 強度", + ["$value RAP"] = "$value 遠程強度", + ["$value Dmg"] = "$value 法傷", + ["$value Heal"] = "$value 治療", + ["$value Armor"] = "$value 裝甲", + ["$value Block"] = "$value 格擋值", + ["$value MP5"] = "$value 施法回魔", + ["$value MP5(NC)"] = "$value 一般回魔", + ["$value HP5"] = "$value 回血", + ["$value to be Dodged/Parried"] = "$value 被閃躲/被招架", + ["$value to be Crit"] = "$value 被致命", + ["$value Crit Dmg Taken"] = "$value 致命傷害減免", + ["$value DOT Dmg Taken"] = "$value 持續傷害減免", + + ------------------ + -- Stat Summary -- + ------------------ + ["Stat Summary"] = "屬性統計", +} end) \ No newline at end of file diff --git a/RatingBuster.lua b/RatingBuster.lua new file mode 100644 index 0000000..9a11d21 --- /dev/null +++ b/RatingBuster.lua @@ -0,0 +1,3464 @@ +--[[ +Name: RatingBuster +Revision: $Revision: 78903 $ +Author: Whitetooth +Email: hotdogee [at] gmail [dot] com +Description: Converts combat ratings in tooltips into normal percentages. +]] + +--------------- +-- Libraries -- +--------------- +local TipHooker = AceLibrary("TipHooker-1.0") +local StatLogic = AceLibrary("StatLogic-1.0") +local Waterfall = AceLibrary:HasInstance("Waterfall-1.0") and AceLibrary("Waterfall-1.0") +local L = AceLibrary("AceLocale-2.2"):new("RatingBuster") +local BI = AceLibrary("LibBabble-Inventory-3.0"):GetLookupTable() + + +-------------------- +-- AceAddon Setup -- +-------------------- +-- AceAddon Initialization +RatingBuster = AceLibrary("AceAddon-2.0"):new("AceDB-2.0", "AceConsole-2.0", "AceEvent-2.0", "AceDebug-2.0") +RatingBuster.title = "Rating Buster" +RatingBuster.version = "1.3.8 (r"..gsub("$Revision: 78903 $", "(%d+)", "%1")..")" +RatingBuster.date = gsub("$Date: 2008-07-22 15:35:19 +0800 (星期二, 22 七月 2008) $", "^.-(%d%d%d%d%-%d%d%-%d%d).-$", "%1") + + +------------------- +-- Set Debugging -- +------------------- +RatingBuster:SetDebugging(false) + + +----------- +-- Cache -- +----------- +local cache = {} +setmetatable(cache, {__mode = "kv"}) -- weak table to enable garbage collection +local function clearCache() + for k in pairs(cache) do + cache[k] = nil + end +end +--debug +--RatingBuster.cache = cache + + +--------------------- +-- Local Variables -- +--------------------- +local _ +local _, class = UnitClass("player") +local calcLevel, playerLevel +local profileDB, profileDB -- Initialized in :OnInitialize() + + +-- Localize globals +local _G = getfenv(0) +local strfind = strfind +local strsub = strsub +local gsub = gsub +local pairs = pairs +local ipairs = ipairs +local type = type +local select = select +local tinsert = tinsert +local tremove = tremove +local tsort = table.sort +local strsplit = strsplit +local strjoin = strjoin +local unpack = unpack +local tonumber = tonumber +local UnitStat = UnitStat +local wowBuildNo = select(2, GetBuildInfo()) + +local GetItemInfoCached = setmetatable({}, { __index = function(self, n) + self[n] = {GetItemInfo(n)} -- store in cache + return self[n] -- return result +end }) +local GetItemInfo = function(item) + return unpack(GetItemInfoCached[item]) +end +local GetParryChance = GetParryChance +local GetBlockChance = GetBlockChance + +--------------------- +-- Saved Variables -- +--------------------- +-- Register DB +RatingBuster:RegisterDB("RatingBusterDB", nil, "class") +-- Default values +local profileDefault = { + showItemLevel = true, + showItemID = false, + useRequiredLevel = true, + customLevel = 0, + textColor = {r = 1.0, g = 0.996, b = 0.545, hex = "|cfffffe8b"}, + enableTextColor = true, + enableStatMods = true, + showRatings = true, + detailedConversionText = false, + defBreakDown = false, + wpnBreakDown = false, + expBreakDown = false, + showStats = true, + showSum = true, + sumIgnoreUnused = true, + sumIgnoreEquipped = false, + sumIgnoreEnchant = true, + sumIgnoreGems = false, + sumBlankLine = true, + sumBlankLineAfter = false, + sumShowIcon = true, + sumShowTitle = true, + sumDiffStyle = "main", + sumSortAlpha = false, + sumAvoidWithBlock = false, + showZeroValueStat = false, + calcDiff = true, + calcSum = true, +--[[ +Str -> AP, Block, Healing +Agi -> Crit, Dodge, AP, RAP, Armor +Sta -> Health, SpellDmg +Int -> Mana, SpellCrit, SpellDmg, Healing, MP5, RAP, Armor +Spi -> MP5, MP5NC, HP5, SpellDmg, Healing +--]] + -- Base stat conversions + showAPFromStr = false, + showBlockValueFromStr = false, + + showCritFromAgi = true, + showDodgeFromAgi = true, + showAPFromAgi = false, + showRAPFromAgi = false, + showArmorFromAgi = false, + showHealingFromAgi = false, -- Druid - Nurturing Instinct + + showHealthFromSta = false, + showSpellDmgFromSta = false, -- Warlock + + showManaFromInt = false, + showSpellCritFromInt = true, + showSpellDmgFromInt = false, -- Druid, Mage, Paladin, Shaman, Warlock + showHealingFromInt = false, -- Druid, Paladin, Shaman + showMP5FromInt = false, + showMP5NCFromInt = false, + showRAPFromInt = false, -- Hunter + showArmorFromInt = false, -- Mage + + showMP5FromSpi = false, -- Druid, Mage, Priest + showMP5NCFromSpi = false, + showHP5FromSpi = false, + showSpellDmgFromSpi = false, -- Priest + showHealingFromSpi = false, -- Priest + ------------------ + -- Stat Summary -- + ------------------ + -- Basic + sumHP = false, + sumMP = false, + sumMP5 = false, + sumMP5NC = false, + sumHP5 = false, + sumHP5OC = false, + sumStr = false, + sumAgi = false, + sumSta = false, + sumInt = false, + sumSpi = false, + -- Physical + sumAP = false, + sumRAP = false, + sumFAP = false, + sumHit = false, + sumHitRating = false, -- new + sumCrit = false, + sumCritRating = false, -- new + sumHaste = false, -- new + sumHasteRating = false, -- new + sumExpertise = false, + sumWeaponSkill = false, + sumDodgeNeglect = false, + sumParryNeglect = false, + sumBlockNeglect = false, + sumWeaponMaxDamage = false, + sumWeaponDPS = false, + sumIgnoreArmor = false, -- new + -- Spell + sumSpellDmg = false, + sumArcaneDmg = false, + sumFrostDmg = false, + sumNatureDmg = false, + sumFireDmg = false, + sumShadowDmg = false, + sumHolyDmg = false, + sumHealing = false, + sumSpellHit = false, + sumSpellHitRating = false, -- new + sumSpellCrit = false, + sumSpellCritRating = false, -- new + sumSpellHaste = false, -- new + sumSpellHasteRating = false, -- new + sumPenetration = false, -- new + -- Tank + sumArmor = false, + sumDodge = false, + sumDodgeRating = false, -- new + sumParry = false, + sumParryRating = false, -- new + sumBlock = false, + sumBlockRating = false, -- new + sumBlockValue = false, + sumHitAvoid = false, + sumCritAvoid = false, + sumArcaneResist = false, + sumFrostResist = false, + sumNatureResist = false, + sumFireResist = false, + sumShadowResist = false, + sumResilience = false, -- new + sumDefense = false, + sumTankPoints = false, + sumTotalReduction = false, + sumAvoidance = false, + -- Gems + sumGemRed = { + itemID = nil, + gemID = nil, + gemText = nil, + }; + sumGemYellow = { + itemID = nil, + gemID = nil, + gemText = nil, + }; + sumGemBlue = { + itemID = nil, + gemID = nil, + gemText = nil, + }; + sumGemMeta = { + itemID = nil, + gemID = nil, + gemText = nil, + }; +} + + + +--------------------------- +-- Slash Command Options -- +--------------------------- + +local function getProfileOption(key) + return profileDB[key] +end +local function setProfileOptionAndClearCache(key, value) + profileDB[key] = value + clearCache() +end +local function getGem(key) + return profileDB[key].gemLink +end +local function setGem(key, value) + if value == "" then + profileDB[key].itemID = nil + profileDB[key].gemID = nil + profileDB[key].gemName = nil + profileDB[key].gemLink = nil + return + end + local gemID, gemText = StatLogic:GetGemID(value) + if gemID and gemText then + local name, link = GetItemInfo(value) + local itemID = link:match("item:(%d+)") + profileDB[key].itemID = itemID + profileDB[key].gemID = gemID + profileDB[key].gemName = name + profileDB[key].gemLink = link + -- Trim spaces + gemText = strtrim(gemText) + -- Strip color codes + if strsub(gemText, -2) == "|r" then + gemText = strsub(gemText, 1, -3) + end + if strfind(strsub(gemText, 1, 10), "|c%x%x%x%x%x%x%x%x") then + gemText = strsub(gemText, 11) + end + profileDB[key].gemText = gemText + clearCache() + local socket = strsub(key, 7).." Socket" + -- Check to see if we are called by AceConsole or Waterfall + if not debugstack():find("AceConsole") then + RatingBuster:Print(L["%s is now set to %s"]:format(L[socket], link)) + end + else + RatingBuster:Print(L["Queried server for Gem: %s. Try again in 5 secs."]:format(value)) + end +end + +local consoleOptions = { + type = 'group', + args = { + win = { + type = "execute", + name = L["Options Window"], + desc = L["Shows the Options Window"], + func = function() + if Waterfall then + Waterfall:Open("RatingBuster") + else + RatingBuster:Print(L["Waterfall-1.0 is required to access the GUI."]) + end + end, + }, + statmod = { + type = 'toggle', + name = L["Enable Stat Mods"], + desc = L["Enable support for Stat Mods"], + passValue = "enableStatMods", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + itemid = { + type = 'toggle', + name = L["Show ItemID"], + desc = L["Show the ItemID in tooltips"], + passValue = "showItemID", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + itemlevel = { + type = 'toggle', + name = L["Show ItemLevel"], + desc = L["Show the ItemLevel in tooltips"], + passValue = "showItemLevel", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + usereqlv = { + type = 'toggle', + name = L["Use required level"], + desc = L["Calculate using the required level if you are below the required level"], + passValue = "useRequiredLevel", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + level = { + type = 'range', + name = L["Set level"], + desc = L["Set the level used in calculations (0 = your level)"], + passValue = "customLevel", + get = getProfileOption, + set = setProfileOptionAndClearCache, + min = 0, + max = 73, -- set to level cap + 3 + step = 1, + }, + rating = { + type = 'group', + name = L["Rating"], + desc = L["Options for Rating display"], + args = { + show = { + type = 'toggle', + name = L["Show Rating conversions"], + desc = L["Show Rating conversions in tooltips"], + passValue = "showRatings", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + detail = { + type = 'toggle', + name = L["Show detailed conversions text"], + desc = L["Show detailed text for Resiliance and Expertise conversions"], + passValue = "detailedConversionText", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + def = { + type = 'toggle', + name = L["Defense breakdown"], + desc = L["Convert Defense into Crit Avoidance, Hit Avoidance, Dodge, Parry and Block"], + passValue = "defBreakDown", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + wpn = { + type = 'toggle', + name = L["Weapon Skill breakdown"], + desc = L["Convert Weapon Skill into Crit, Hit, Dodge Neglect, Parry Neglect and Block Neglect"], + passValue = "wpnBreakDown", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + exp = { + type = 'toggle', + name = L["Expertise breakdown"], + desc = L["Convert Expertise into Dodge Neglect and Parry Neglect"], + passValue = "expBreakDown", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + color = { + type = 'group', + name = L["Change text color"], + desc = L["Changes the color of added text"], + args = { + pick = { + type = 'execute', + name = L["Pick color"], + desc = L["Pick a color"], + func = function() + CloseMenus() + ColorPickerFrame.func = function() + profileDB.textColor.r, profileDB.textColor.g, profileDB.textColor.b = ColorPickerFrame:GetColorRGB(); + profileDB.textColor.hex = "|cff"..string.format("%02x%02x%02x", profileDB.textColor.r * 255, profileDB.textColor.g * 255, profileDB.textColor.b * 255) + -- clear cache + clearCache() + end + ColorPickerFrame:SetColorRGB(profileDB.textColor.r, profileDB.textColor.g, profileDB.textColor.b); + ColorPickerFrame.previousValues = {r = profileDB.textColor.r, g = profileDB.textColor.g, b = profileDB.textColor.b}; + ColorPickerFrame:Show() + end, + }, + enable = { + type = 'toggle', + name = L["Enable color"], + desc = L["Enable colored text"], + passValue = "enableTextColor", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + }, + }, + }, + }, + stat = { + type = 'group', + name = L["Stat Breakdown"], + desc = L["Changes the display of base stats"], + args = { + show = { + type = 'toggle', + name = L["Show base stat conversions"], + desc = L["Show base stat conversions in tooltips"], + passValue = "showStats", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + str = { + type = 'group', + name = L["Strength"], + desc = L["Changes the display of Strength"], + args = { + ap = { + type = 'toggle', + name = L["Show Attack Power"], + desc = L["Show Attack Power from Strength"], + passValue = "showAPFromStr", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + block = { + type = 'toggle', + name = L["Show Block Value"], + desc = L["Show Block Value from Strength"], + passValue = "showBlockValueFromStr", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + }, + }, + agi = { + type = 'group', + name = L["Agility"], + desc = L["Changes the display of Agility"], + args = { + crit = { + type = 'toggle', + name = L["Show Crit"], + desc = L["Show Crit chance from Agility"], + passValue = "showCritFromAgi", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + dodge = { + type = 'toggle', + name = L["Show Dodge"], + desc = L["Show Dodge chance from Agility"], + passValue = "showDodgeFromAgi", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + ap = { + type = 'toggle', + name = L["Show Attack Power"], + desc = L["Show Attack Power from Agility"], + passValue = "showAPFromAgi", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + rap = { + type = 'toggle', + name = L["Show Ranged Attack Power"], + desc = L["Show Ranged Attack Power from Agility"], + passValue = "showRAPFromAgi", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + armor = { + type = 'toggle', + name = L["Show Armor"], + desc = L["Show Armor from Agility"], + passValue = "showArmorFromAgi", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + }, + }, + sta = { + type = 'group', + name = L["Stamina"], + desc = L["Changes the display of Stamina"], + args = { + hp = { + type = 'toggle', + name = L["Show Health"], + desc = L["Show Health from Stamina"], + passValue = "showHealthFromSta", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + }, + }, + int = { + type = 'group', + name = L["Intellect"], + desc = L["Changes the display of Intellect"], + args = { + spellcrit = { + type = 'toggle', + name = L["Show Spell Crit"], + desc = L["Show Spell Crit chance from Intellect"], + passValue = "showSpellCritFromInt", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + mp = { + type = 'toggle', + name = L["Show Mana"], + desc = L["Show Mana from Intellect"], + passValue = "showManaFromInt", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + mp5 = { + type = 'toggle', + name = L["Show Mana Regen"], + desc = L["Show Mana Regen while casting from Intellect"], + passValue = "showMP5FromInt", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + mp5nc = { + type = 'toggle', + name = L["Show Mana Regen while NOT casting"], + desc = L["Show Mana Regen while NOT casting from Intellect"], + passValue = "showMP5NCFromInt", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + }, + }, + spi = { + type = 'group', + name = L["Spirit"], + desc = L["Changes the display of Spirit"], + args = { + mp5nc = { + type = 'toggle', + name = L["Show Mana Regen while NOT casting"], + desc = L["Show Mana Regen while NOT casting from Spirit"], + passValue = "showMP5NCFromSpi", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + hp5 = { + type = 'toggle', + name = L["Show Health Regen"], + desc = L["Show Health Regen from Spirit"], + passValue = "showHP5FromSpi", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + }, + }, + }, + }, + sum = { + type = 'group', + name = L["Stat Summary"], + desc = L["Options for stat summary"], + args = { + show = { + type = 'toggle', + name = L["Show stat summary"], + desc = L["Show stat summary in tooltips"], + passValue = "showSum", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + ignore = { + type = 'group', + name = L["Ignore settings"], + desc = L["Ignore stuff when calculating the stat summary"], + args = { + unused = { + type = 'toggle', + name = L["Ignore unused items types"], + desc = L["Show stat summary only for highest level armor type and items you can use with uncommon quality and up"], + passValue = "sumIgnoreUnused", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + equipped = { + type = 'toggle', + name = L["Ignore equipped items"], + desc = L["Hide stat summary for equipped items"], + passValue = "sumIgnoreEquipped", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + enchant = { + type = 'toggle', + name = L["Ignore enchants"], + desc = L["Ignore enchants on items when calculating the stat summary"], + passValue = "sumIgnoreEnchant", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + gem = { + type = 'toggle', + name = L["Ignore gems"], + desc = L["Ignore gems on items when calculating the stat summary"], + passValue = "sumIgnoreGems", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + }, + }, + diffstyle = { + type = 'text', + name = L["Display style for diff value"], + desc = L["Display diff values in the main tooltip or only in compare tooltips"], + validate = {"comp", "main"}, + passValue = "sumDiffStyle", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + space = { + type = 'group', + name = L["Add empty line"], + desc = L["Add a empty line before or after stat summary"], + args = { + before = { + type = 'toggle', + name = L["Add before summary"], + desc = L["Add a empty line before stat summary"], + passValue = "sumBlankLine", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + after = { + type = 'toggle', + name = L["Add after summary"], + desc = L["Add a empty line after stat summary"], + passValue = "sumBlankLineAfter", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + }, + }, + icon = { + type = 'toggle', + name = L["Show icon"], + desc = L["Show the sigma icon before summary listing"], + passValue = "sumShowIcon", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + title = { + type = 'toggle', + name = L["Show title text"], + desc = L["Show the title text before summary listing"], + passValue = "sumShowTitle", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + showzerostat = { + type = 'toggle', + name = L["Show zero value stats"], + desc = L["Show zero value stats in summary for consistancy"], + passValue = "showZeroValueStat", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + calcsum = { + type = 'toggle', + name = L["Calculate stat sum"], + desc = L["Calculate the total stats for the item"], + passValue = "calcSum", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + calcdiff = { + type = 'toggle', + name = L["Calculate stat diff"], + desc = L["Calculate the stat difference for the item and equipped items"], + passValue = "calcDiff", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + sort = { + type = 'toggle', + name = L["Sort StatSummary alphabetically"], + desc = L["Enable to sort StatSummary alphabetically, disable to sort according to stat type(basic, physical, spell, tank)"], + passValue = "sumSortAlpha", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + avoidhasblock = { + type = 'toggle', + name = L["Include block chance in Avoidance summary"], + desc = L["Enable to include block chance in Avoidance summary, Disable for only dodge, parry, miss"], + passValue = "sumAvoidWithBlock", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + basic = { + type = 'group', + name = L["Stat - Basic"], + desc = L["Choose basic stats for summary"], + args = { + hp = { + type = 'toggle', + name = L["Sum Health"], + desc = L["Health <- Health, Stamina"], + passValue = "sumHP", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + mp = { + type = 'toggle', + name = L["Sum Mana"], + desc = L["Mana <- Mana, Intellect"], + passValue = "sumMP", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + mp5 = { + type = 'toggle', + name = L["Sum Mana Regen"], + desc = L["Mana Regen <- Mana Regen, Spirit"], + passValue = "sumMP5", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + mp5nc = { + type = 'toggle', + name = L["Sum Mana Regen while not casting"], + desc = L["Mana Regen while not casting <- Spirit"], + passValue = "sumMP5NC", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + hp5 = { + type = 'toggle', + name = L["Sum Health Regen"], + desc = L["Health Regen <- Health Regen"], + passValue = "sumHP5", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + hp5oc = { + type = 'toggle', + name = L["Sum Health Regen when out of combat"], + desc = L["Health Regen when out of combat <- Spirit"], + passValue = "sumHP5OC", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + str = { + type = 'toggle', + name = L["Sum Strength"], + desc = L["Strength Summary"], + passValue = "sumStr", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + agi = { + type = 'toggle', + name = L["Sum Agility"], + desc = L["Agility Summary"], + passValue = "sumAgi", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + sta = { + type = 'toggle', + name = L["Sum Stamina"], + desc = L["Stamina Summary"], + passValue = "sumSta", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + int = { + type = 'toggle', + name = L["Sum Intellect"], + desc = L["Intellect Summary"], + passValue = "sumInt", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + spi = { + type = 'toggle', + name = L["Sum Spirit"], + desc = L["Spirit Summary"], + passValue = "sumSpi", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + }, + }, + physical = { + type = 'group', + name = L["Stat - Physical"], + desc = L["Choose physical damage stats for summary"], + args = { + ap = { + type = 'toggle', + name = L["Sum Attack Power"], + desc = L["Attack Power <- Attack Power, Strength, Agility"], + passValue = "sumAP", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + rap = { + type = 'toggle', + name = L["Sum Ranged Attack Power"], + desc = L["Ranged Attack Power <- Ranged Attack Power, Intellect, Attack Power, Strength, Agility"], + passValue = "sumRAP", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + fap = { + type = 'toggle', + name = L["Sum Feral Attack Power"], + desc = L["Feral Attack Power <- Feral Attack Power, Attack Power, Strength, Agility"], + passValue = "sumFAP", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + hit = { + type = 'toggle', + name = L["Sum Hit Chance"], + desc = L["Hit Chance <- Hit Rating, Weapon Skill Rating"], + passValue = "sumHit", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + hitrating = { + type = 'toggle', + name = L["Sum Hit Rating"], + desc = L["Hit Rating Summary"], + passValue = "sumHitRating", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + crit = { + type = 'toggle', + name = L["Sum Crit Chance"], + desc = L["Crit Chance <- Crit Rating, Agility, Weapon Skill Rating"], + passValue = "sumCrit", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + critrating = { + type = 'toggle', + name = L["Sum Crit Rating"], + desc = L["Crit Rating Summary"], + passValue = "sumCritRating", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + haste = { + type = 'toggle', + name = L["Sum Haste"], + desc = L["Haste <- Haste Rating"], + passValue = "sumHaste", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + hasterating = { + type = 'toggle', + name = L["Sum Haste Rating"], + desc = L["Haste Rating Summary"], + passValue = "sumHasteRating", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + neglectdodge = { + type = 'toggle', + name = L["Sum Dodge Neglect"], + desc = L["Dodge Neglect <- Expertise, Weapon Skill Rating"], + passValue = "sumDodgeNeglect", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + neglectparry = { + type = 'toggle', + name = L["Sum Parry Neglect"], + desc = L["Parry Neglect <- Expertise, Weapon Skill Rating"], + passValue = "sumParryNeglect", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + neglectblock = { + type = 'toggle', + name = L["Sum Block Neglect"], + desc = L["Block Neglect <- Weapon Skill Rating"], + passValue = "sumBlockNeglect", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + wpn = { + type = 'toggle', + name = L["Sum Weapon Skill"], + desc = L["Weapon Skill <- Weapon Skill Rating"], + passValue = "sumWeaponSkill", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + exp = { + type = 'toggle', + name = L["Sum Expertise"], + desc = L["Expertise <- Expertise Rating"], + passValue = "sumExpertise", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + maxdamage = { + type = 'toggle', + name = L["Sum Weapon Max Damage"], + desc = L["Weapon Max Damage Summary"], + passValue = "sumWeaponMaxDamage", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + --[[ + weapondps = { + type = 'toggle', + name = L["Sum Weapon DPS"], + desc = L["Weapon DPS Summary"], + get = function() return profileDB.sumWeaponDPS end, + set = function(v) + profileDB.sumWeaponDPS = v + -- clear cache + clearCache() + end, + }, + --]] + ignorearmor = { + type = 'toggle', + name = L["Sum Ignore Armor"], + desc = L["Ignore Armor Summary"], + passValue = "sumIgnoreArmor", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + }, + }, + spell = { + type = 'group', + name = L["Stat - Spell"], + desc = L["Choose spell damage and healing stats for summary"], + args = { + dmg = { + type = 'toggle', + name = L["Sum Spell Damage"], + desc = L["Spell Damage <- Spell Damage, Intellect, Spirit, Stamina"], + passValue = "sumSpellDmg", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + dmgholy = { + type = 'toggle', + name = L["Sum Holy Spell Damage"], + desc = L["Holy Spell Damage <- Holy Spell Damage, Spell Damage, Intellect, Spirit"], + passValue = "sumHolyDmg", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + dmgarcane = { + type = 'toggle', + name = L["Sum Arcane Spell Damage"], + desc = L["Arcane Spell Damage <- Arcane Spell Damage, Spell Damage, Intellect"], + passValue = "sumArcaneDmg", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + dmgfire = { + type = 'toggle', + name = L["Sum Fire Spell Damage"], + desc = L["Fire Spell Damage <- Fire Spell Damage, Spell Damage, Intellect, Stamina"], + passValue = "sumFireDmg", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + dmgnature = { + type = 'toggle', + name = L["Sum Nature Spell Damage"], + desc = L["Nature Spell Damage <- Nature Spell Damage, Spell Damage, Intellect"], + passValue = "sumNatureDmg", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + dmgfrost = { + type = 'toggle', + name = L["Sum Frost Spell Damage"], + desc = L["Frost Spell Damage <- Frost Spell Damage, Spell Damage, Intellect"], + passValue = "sumFrostDmg", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + dmgshadow = { + type = 'toggle', + name = L["Sum Shadow Spell Damage"], + desc = L["Shadow Spell Damage <- Shadow Spell Damage, Spell Damage, Intellect, Spirit, Stamina"], + passValue = "sumShadowDmg", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + heal = { + type = 'toggle', + name = L["Sum Healing"], + desc = L["Healing <- Healing, Intellect, Spirit, Agility, Strength"], + passValue = "sumHealing", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + hitspell = { + type = 'toggle', + name = L["Sum Spell Hit Chance"], + desc = L["Spell Hit Chance <- Spell Hit Rating"], + passValue = "sumSpellHit", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + hitspellrating = { + type = 'toggle', + name = L["Sum Spell Hit Rating"], + desc = L["Spell Hit Rating Summary"], + passValue = "sumSpellHitRating", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + critspell = { + type = 'toggle', + name = L["Sum Spell Crit Chance"], + desc = L["Spell Crit Chance <- Spell Crit Rating, Intellect"], + passValue = "sumSpellCrit", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + critspellrating = { + type = 'toggle', + name = L["Sum Spell Crit Rating"], + desc = L["Spell Crit Rating Summary"], + passValue = "sumSpellCritRating", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + hastespell = { + type = 'toggle', + name = L["Sum Spell Haste"], + desc = L["Spell Haste <- Spell Haste Rating"], + passValue = "sumSpellHaste", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + hastespellrating = { + type = 'toggle', + name = L["Sum Spell Haste Rating"], + desc = L["Spell Haste Rating Summary"], + passValue = "sumSpellHasteRating", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + pen = { + type = 'toggle', + name = L["Sum Penetration"], + desc = L["Spell Penetration Summary"], + passValue = "sumPenetration", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + }, + }, + tank = { + type = 'group', + name = L["Stat - Tank"], + desc = L["Choose tank stats for summary"], + args = { + armor = { + type = 'toggle', + name = L["Sum Armor"], + desc = L["Armor <- Armor from items, Armor from bonuses, Agility, Intellect"], + passValue = "sumArmor", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + def = { + type = 'toggle', + name = L["Sum Defense"], + desc = L["Defense <- Defense Rating"], + passValue = "sumDefense", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + dodge = { + type = 'toggle', + name = L["Sum Dodge Chance"], + desc = L["Dodge Chance <- Dodge Rating, Agility, Defense Rating"], + passValue = "sumDodge", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + dodgerating = { + type = 'toggle', + name = L["Sum Dodge Rating"], + desc = L["Dodge Rating Summary"], + passValue = "sumDodgeRating", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + parry = { + type = 'toggle', + name = L["Sum Parry Chance"], + desc = L["Parry Chance <- Parry Rating, Defense Rating"], + passValue = "sumParry", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + parryrating = { + type = 'toggle', + name = L["Sum Parry Rating"], + desc = L["Parry Rating Summary"], + passValue = "sumParryRating", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + block = { + type = 'toggle', + name = L["Sum Block Chance"], + desc = L["Block Chance <- Block Rating, Defense Rating"], + passValue = "sumBlock", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + blockrating = { + type = 'toggle', + name = L["Sum Block Rating"], + desc = L["Block Rating Summary"], + passValue = "sumBlockRating", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + blockvalue = { + type = 'toggle', + name = L["Sum Block Value"], + desc = L["Block Value <- Block Value, Strength"], + passValue = "sumBlockValue", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + avoidhit = { + type = 'toggle', + name = L["Sum Hit Avoidance"], + desc = L["Hit Avoidance <- Defense Rating"], + passValue = "sumHitAvoid", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + avoidcrit = { + type = 'toggle', + name = L["Sum Crit Avoidance"], + desc = L["Crit Avoidance <- Defense Rating, Resilience"], + passValue = "sumCritAvoid", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + res = { + type = 'toggle', + name = L["Sum Resilience"], + desc = L["Resilience Summary"], + passValue = "sumResilience", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + resarcane = { + type = 'toggle', + name = L["Sum Arcane Resistance"], + desc = L["Arcane Resistance Summary"], + passValue = "sumArcaneResist", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + resfire = { + type = 'toggle', + name = L["Sum Fire Resistance"], + desc = L["Fire Resistance Summary"], + passValue = "sumFireResist", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + resnature = { + type = 'toggle', + name = L["Sum Nature Resistance"], + desc = L["Nature Resistance Summary"], + passValue = "sumNatureResist", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + resfrost = { + type = 'toggle', + name = L["Sum Frost Resistance"], + desc = L["Frost Resistance Summary"], + passValue = "sumFrostResist", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + resshadow = { + type = 'toggle', + name = L["Sum Shadow Resistance"], + desc = L["Shadow Resistance Summary"], + passValue = "sumShadowResist", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + avoid = { + type = 'toggle', + name = L["Sum Avoidance"], + desc = L["Avoidance <- Dodge, Parry, MobMiss, Block(Optional)"], + passValue = "sumAvoidance", + get = getProfileOption, + set = setProfileOptionAndClearCache, + }, + }, + }, + gem = { + type = 'group', + name = L["Gems"], + desc = L["Auto fill empty gem slots"], + args = { + red = { + type = 'text', + name = L["Red Socket"], + desc = L["ItemID or Link of the gem you would like to auto fill"], + usage = L[""], + passValue = "sumGemRed", + get = getGem, + set = setGem, + order = 1, + }, + yellow = { + type = 'text', + name = L["Yellow Socket"], + desc = L["ItemID or Link of the gem you would like to auto fill"], + usage = L[""], + passValue = "sumGemYellow", + get = getGem, + set = setGem, + order = 2, + }, + blue = { + type = 'text', + name = L["Blue Socket"], + desc = L["ItemID or Link of the gem you would like to auto fill"], + usage = L[""], + passValue = "sumGemBlue", + get = getGem, + set = setGem, + order = 3, + }, + meta = { + type = 'text', + name = L["Meta Socket"], + desc = L["ItemID or Link of the gem you would like to auto fill"], + usage = L[""], + passValue = "sumGemMeta", + get = getGem, + set = setGem, + order = 4, + }, + }, + }, + }, + }, + }, +} + +-- TankPoints support, version check +local tpSupport +local tpLocale +if TankPoints and (tonumber(strsub(TankPoints.version, 1, 3)) >= 2.6) then + tpSupport = true + tpLocale = AceLibrary("AceLocale-2.2"):new("TankPoints") + consoleOptions.args.sum.args.tank.args.tp = { + type = 'toggle', + name = L["Sum TankPoints"], + desc = L["TankPoints <- Health, Total Reduction"], + passValue = "sumTankPoints", + get = getProfileOption, + set = setProfileOptionAndClearCache, + } + consoleOptions.args.sum.args.tank.args.tr = { + type = 'toggle', + name = L["Sum Total Reduction"], + desc = L["Total Reduction <- Armor, Dodge, Parry, Block, Block Value, Defense, Resilience, MobMiss, MobCrit, MobCrush, DamageTakenMods"], + passValue = "sumTotalReduction", + get = getProfileOption, + set = setProfileOptionAndClearCache, + } + --[[ + consoleOptions.args.sum.args.tank.args.avoid = { + type = 'toggle', + name = L["Sum Avoidance"], + desc = L["Avoidance <- Dodge, Parry, MobMiss"], + passValue = "sumAvoidance", + get = getProfileOption, + set = setProfileOptionAndClearCache, + } + --]] +end + +-- Class specific settings +if class == "DRUID" then + profileDefault.sumHP = true + profileDefault.sumMP = true + profileDefault.sumFAP = true + profileDefault.sumHit = true + profileDefault.sumCrit = true + profileDefault.sumHaste = true + profileDefault.sumExpertise = true + profileDefault.sumDodge = true + profileDefault.sumArmor = true + profileDefault.sumResilience = true + profileDefault.sumSpellDmg = true + profileDefault.sumSpellHit = true + profileDefault.sumSpellCrit = true + profileDefault.sumSpellHaste = true + profileDefault.sumHealing = true + profileDefault.sumMP5 = true + profileDefault.showHealingFromAgi = true + profileDefault.showSpellDmgFromInt = true + profileDefault.showHealingFromInt = true + profileDefault.showMP5FromInt = true -- Dreamstate (Rank 3) - 1,17 + profileDefault.showMP5FromSpi = true + consoleOptions.args.stat.args.agi.args.heal = { -- Nurturing Instinct (Rank 2) - 2,14 + type = 'toggle', + name = L["Show Healing"].." ("..GetSpellInfo(47180)..")", -- ["Nurturing Instinct"] + desc = L["Show Healing from Agility"].." ("..GetSpellInfo(47180)..")", -- ["Nurturing Instinct"] + passValue = "showHealingFromAgi", + get = getProfileOption, + set = setProfileOptionAndClearCache, + } + consoleOptions.args.stat.args.int.args.dmg = { -- Lunar Guidance (Rank 3) - 1,12 + type = 'toggle', + name = L["Show Spell Damage"].." ("..GetSpellInfo(33591)..")", -- ["Lunar Guidance"] + desc = L["Show Spell Damage from Intellect"].." ("..GetSpellInfo(33591)..")", -- ["Lunar Guidance"] + passValue = "showSpellDmgFromInt", + get = getProfileOption, + set = setProfileOptionAndClearCache, + } + consoleOptions.args.stat.args.int.args.heal = { -- Lunar Guidance (Rank 3) - 1,12 + type = 'toggle', + name = L["Show Healing"].." ("..GetSpellInfo(33591)..")", + desc = L["Show Healing from Intellect"].." ("..GetSpellInfo(33591)..")", + passValue = "showHealingFromInt", + get = getProfileOption, + set = setProfileOptionAndClearCache, + } + consoleOptions.args.stat.args.spi.args.mp5 = { -- Intensity (Rank 3) - 3,6 + type = 'toggle', + name = L["Show Mana Regen"].." ("..GetSpellInfo(35359)..")", + desc = L["Show Mana Regen while casting from Spirit"].." ("..GetSpellInfo(35359)..")", + passValue = "showMP5FromSpi", + get = getProfileOption, + set = setProfileOptionAndClearCache, + } +end +if class == "HUNTER" then + profileDefault.sumHP = true + profileDefault.sumMP = true + profileDefault.sumResilience = true + profileDefault.sumRAP = true + profileDefault.sumHit = true + profileDefault.sumCrit = true + profileDefault.sumHaste = true + profileDefault.sumMP5 = true + profileDefault.showMP5FromInt = true -- Aspect of the Viper + profileDefault.showDodgeFromAgi = false + profileDefault.showSpellCritFromInt = false + profileDefault.showRAPFromInt = true + consoleOptions.args.stat.args.int.args.rap = { -- Careful Aim + type = 'toggle', + name = L["Show Ranged Attack Power"].." ("..GetSpellInfo(34484)..")", + desc = L["Show Ranged Attack Power from Intellect"].." ("..GetSpellInfo(34484)..")", + passValue = "showRAPFromInt", + get = getProfileOption, + set = setProfileOptionAndClearCache, + } +end +if class == "MAGE" then + profileDefault.sumHP = true + profileDefault.sumMP = true + profileDefault.sumResilience = true + profileDefault.sumSpellDmg = true + profileDefault.sumSpellHit = true + profileDefault.sumSpellCrit = true + profileDefault.sumSpellHaste = true + profileDefault.sumMP5 = true + profileDefault.showCritFromAgi = false + profileDefault.showDodgeFromAgi = false + profileDefault.showSpellDmgFromInt = true + profileDefault.showArmorFromInt = true + profileDefault.showMP5FromInt = true + profileDefault.showMP5FromSpi = true + consoleOptions.args.stat.args.int.args.dmg = { -- Mind Mastery (Rank 5) - 1,22 + type = 'toggle', + name = L["Show Spell Damage"].." ("..GetSpellInfo(31588)..")", + desc = L["Show Spell Damage from Intellect"].." ("..GetSpellInfo(31588)..")", + passValue = "showSpellDmgFromInt", + get = getProfileOption, + set = setProfileOptionAndClearCache, + } + consoleOptions.args.stat.args.int.args.armor = { -- Arcane Fortitude - 1,9 + type = 'toggle', + name = L["Show Armor"].." ("..GetSpellInfo(28574)..")", + desc = L["Show Armor from Intellect"].." ("..GetSpellInfo(28574)..")", + passValue = "showArmorFromInt", + get = getProfileOption, + set = setProfileOptionAndClearCache, + } + consoleOptions.args.stat.args.spi.args.mp5 = { -- Arcane Meditation (Rank 3) - 1,12 + type = 'toggle', + name = L["Show Mana Regen"].." ("..GetSpellInfo(18464)..")", + desc = L["Show Mana Regen while casting from Spirit"].." ("..GetSpellInfo(18464)..")", + passValue = "showMP5FromSpi", + get = getProfileOption, + set = setProfileOptionAndClearCache, + } +end +if class == "PALADIN" then + profileDefault.sumHP = true + profileDefault.sumMP = true + profileDefault.sumResilience = true + profileDefault.sumHit = true + profileDefault.sumCrit = true + profileDefault.sumHaste = true + profileDefault.sumExpertise = true + profileDefault.sumHolyDmg = true + profileDefault.sumSpellHit = true + profileDefault.sumSpellCrit = true + profileDefault.sumSpellHaste = true + profileDefault.sumHealing = true + profileDefault.sumMP5 = true + profileDefault.showSpellDmgFromInt = true + profileDefault.showHealingFromInt = true + consoleOptions.args.stat.args.int.args.dmg = { -- Holy Guidance (Rank 5) - 1,19 + type = 'toggle', + name = L["Show Spell Damage"].." ("..GetSpellInfo(31841)..")", + desc = L["Show Spell Damage from Intellect"].." ("..GetSpellInfo(31841)..")", + passValue = "showSpellDmgFromInt", + get = getProfileOption, + set = setProfileOptionAndClearCache, + } + consoleOptions.args.stat.args.int.args.heal = { -- Holy Guidance (Rank 5) - 1,19 + type = 'toggle', + name = L["Show Healing"].." ("..GetSpellInfo(31841)..")", + desc = L["Show Healing from Intellect"].." ("..GetSpellInfo(31841)..")", + passValue = "showHealingFromInt", + get = getProfileOption, + set = setProfileOptionAndClearCache, + } +end +if class == "PRIEST" then + profileDefault.sumHP = true + profileDefault.sumMP = true + profileDefault.sumResilience = true + profileDefault.sumSpellDmg = true + profileDefault.sumSpellHit = true + profileDefault.sumSpellCrit = true + profileDefault.sumSpellHaste = true + profileDefault.sumHealing = true + profileDefault.sumMP5 = true + profileDefault.showCritFromAgi = false + profileDefault.showDodgeFromAgi = false + profileDefault.showMP5FromInt = true + profileDefault.showMP5FromSpi = true + profileDefault.showSpellDmgFromSpi = true + profileDefault.showHealingFromSpi = true + consoleOptions.args.stat.args.spi.args.mp5 = { -- Meditation (Rank 3) - 1,9 + type = 'toggle', + name = L["Show Mana Regen"].." ("..GetSpellInfo(38346)..")", + desc = L["Show Mana Regen while casting from Spirit"].." ("..GetSpellInfo(38346)..")", + passValue = "showMP5FromSpi", + get = getProfileOption, + set = setProfileOptionAndClearCache, + } + consoleOptions.args.stat.args.spi.args.dmg = { -- Spiritual Guidance (Rank 5) - 2,14, Improved Divine Spirit (Rank 2) - 1,15 - Buff + type = 'toggle', + name = L["Show Spell Damage"].." ("..GetSpellInfo(15031)..", "..GetSpellInfo(33182)..")", + desc = L["Show Spell Damage from Spirit"].." ("..GetSpellInfo(15031)..", "..GetSpellInfo(33182)..")", + passValue = "showSpellDmgFromSpi", + get = getProfileOption, + set = setProfileOptionAndClearCache, + } + consoleOptions.args.stat.args.spi.args.heal = { -- Spiritual Guidance (Rank 5) - 2,14, Improved Divine Spirit (Rank 2) - 1,15 - Buff + type = 'toggle', + name = L["Show Healing"].." ("..GetSpellInfo(15031)..", "..GetSpellInfo(33182)..")", + desc = L["Show Healing from Spirit"].." ("..GetSpellInfo(15031)..", "..GetSpellInfo(33182)..")", + passValue = "showHealingFromSpi", + get = getProfileOption, + set = setProfileOptionAndClearCache, + } +end +if class == "ROGUE" then + profileDefault.sumHP = true + profileDefault.sumResilience = true + profileDefault.sumAP = true + profileDefault.sumHit = true + profileDefault.sumCrit = true + profileDefault.sumHaste = true + profileDefault.sumExpertise = true + profileDefault.showSpellCritFromInt = false +end +if class == "SHAMAN" then + profileDefault.sumHP = true + profileDefault.sumMP = true + profileDefault.sumResilience = true + profileDefault.sumSpellDmg = true + profileDefault.sumSpellHit = true + profileDefault.sumSpellCrit = true + profileDefault.sumSpellHaste = true + profileDefault.sumHealing = true + profileDefault.sumMP5 = true + profileDefault.showSpellDmgFromStr = true + profileDefault.showHealingFromStr = true + profileDefault.showSpellDmgFromInt = true + profileDefault.showHealingFromInt = true + profileDefault.showMP5FromInt = true + consoleOptions.args.stat.args.str.args.dmg = { -- Mental Quickness (Rank 3) - 2,15 + type = 'toggle', + name = L["Show Spell Damage"].." ("..GetSpellInfo(30814)..")", + desc = L["Show Spell Damage from Strength"].." ("..GetSpellInfo(30814)..")", + passValue = "showSpellDmgFromStr", + get = getProfileOption, + set = setProfileOptionAndClearCache, + } + consoleOptions.args.stat.args.str.args.heal = { -- Mental Quickness (Rank 3) - 2,15 + type = 'toggle', + name = L["Show Healing"].." ("..GetSpellInfo(30814)..")", + desc = L["Show Healing from Strength"].." ("..GetSpellInfo(30814)..")", + passValue = "showHealingFromStr", + get = getProfileOption, + set = setProfileOptionAndClearCache, + } + consoleOptions.args.stat.args.int.args.dmg = { -- Nature's Blessing (Rank 3) - 3,18 + type = 'toggle', + name = L["Show Spell Damage"].." ("..GetSpellInfo(30869)..")", + desc = L["Show Spell Damage from Intellect"].." ("..GetSpellInfo(30869)..")", + passValue = "showSpellDmgFromInt", + get = getProfileOption, + set = setProfileOptionAndClearCache, + } + consoleOptions.args.stat.args.int.args.heal = { -- Nature's Blessing (Rank 3) - 3,18 + type = 'toggle', + name = L["Show Healing"].." ("..GetSpellInfo(30869)..")", + desc = L["Show Healing from Intellect"].." ("..GetSpellInfo(30869)..")", + passValue = "showHealingFromInt", + get = getProfileOption, + set = setProfileOptionAndClearCache, + } +end +if class == "WARLOCK" then + profileDefault.sumHP = true + profileDefault.sumMP = true + profileDefault.sumResilience = true + profileDefault.sumSpellDmg = true + profileDefault.sumSpellHit = true + profileDefault.sumSpellCrit = true + profileDefault.sumSpellHaste = true + profileDefault.showCritFromAgi = false + profileDefault.showDodgeFromAgi = false + profileDefault.showSpellDmgFromSta = true + profileDefault.showSpellDmgFromInt = true + consoleOptions.args.stat.args.sta.args.dmg = { -- Demonic Knowledge (Rank 3) - 2,20 - UnitExists("pet") + type = 'toggle', + name = L["Show Spell Damage"].." ("..GetSpellInfo(35693)..")", + desc = L["Show Spell Damage from Stamina"].." ("..GetSpellInfo(35693)..")", + passValue = "showSpellDmgFromSta", + get = getProfileOption, + set = setProfileOptionAndClearCache, + } + consoleOptions.args.stat.args.int.args.dmg = { -- Demonic Knowledge (Rank 3) - 2,20 - UnitExists("pet") + type = 'toggle', + name = L["Show Spell Damage"].." ("..GetSpellInfo(35693)..")", + desc = L["Show Spell Damage from Intellect"].." ("..GetSpellInfo(35693)..")", + passValue = "showSpellDmgFromInt", + get = getProfileOption, + set = setProfileOptionAndClearCache, + } +end +if class == "WARRIOR" then + profileDefault.sumHP = true + profileDefault.sumResilience = true + profileDefault.sumAP = true + profileDefault.sumHit = true + profileDefault.sumCrit = true + profileDefault.sumHaste = true + profileDefault.sumExpertise = true + profileDefault.showSpellCritFromInt = false +end + +-- Register Defaults +RatingBuster:RegisterDefaults("profile", profileDefault) +RatingBuster:RegisterDefaults("class", profileDefault) +RatingBuster:RegisterDefaults("char", profileDefault) + +----------- +-- Tools -- +----------- +-- copyTable +local function copyTable(to, from) + if to then + for k in pairs(to) do + to[k] = nil + end + setmetatable(to, nil) + else + to = {} + end + for k,v in pairs(from) do + if type(k) == "table" then + k = copyTable({}, k) + end + if type(v) == "table" then + v = copyTable({}, v) + end + to[k] = v + end + setmetatable(to, getmetatable(from)) + return to +end + + +--------------------- +-- Initializations -- +--------------------- +--[[ Loading Process Event Reference +{ +ADDON_LOADED - When this addon is loaded +VARIABLES_LOADED - When all addons are loaded +PLAYER_LOGIN - Most information about the game world should now be available to the UI +} +--]] +-- OnInitialize(name) called at ADDON_LOADED +function RatingBuster:OnProfileEnable() + -- this is called every time our profile changes (after the change) + profileDB = self.db.profile +end + +function RatingBuster:OnInitialize() + profileDB = self.db.profile + + self:RegisterChatCommand("/rb", "/ratingbuster", consoleOptions, "RATINGBUSTER") + + if Waterfall then + Waterfall:Register("RatingBuster", + "aceOptions", consoleOptions, + "title", L["RatingBuster Options"]) + end +end + +-- OnEnable() called at PLAYER_LOGIN +function RatingBuster:OnEnable() + -- Hook item tooltips + TipHooker:Hook(self.ProcessTooltip, "item") + -- Initialize playerLevel + playerLevel = UnitLevel("player") + -- for setting a new level + self:RegisterEvent("PLAYER_LEVEL_UP") + -- Events that require cache clearing + self:RegisterEvent("CHARACTER_POINTS_CHANGED", clearCache) -- talent point changed + self:RegisterEvent("UNIT_AURA", 1) -- fire at most once every 1 second +end + +function RatingBuster:OnDisable() + -- Unhook item tooltips + TipHooker:Unhook(self.ProcessTooltip, "item") +end + +-- event = PLAYER_LEVEL_UP +-- arg1 = New player level +function RatingBuster:PLAYER_LEVEL_UP(newlevel) + playerLevel = newlevel + clearCache() +end + +-- event = UNIT_AURA +-- arg1 = the UnitID of the entity +function RatingBuster:UNIT_AURA(unit) + if unit ~= "player" then return end + clearCache() +end + +-------------------------- +-- Process Tooltip Core -- +-------------------------- +--[[ +"+15 Agility" +-> "+15 Agility (+0.46% Crit)" +"+15 Crit Rating" +-> "+15 Crit Rating (+1.20%)" +"Equip: Increases your hit rating by 10." +-> "Equip: Increases your hit rating by 10 (+1.20%)." +--]] +-- Empty Sockets +local EmptySocketLookup = { + [EMPTY_SOCKET_RED] = "sumGemRed", -- EMPTY_SOCKET_RED = "Red Socket"; + [EMPTY_SOCKET_YELLOW] = "sumGemYellow", -- EMPTY_SOCKET_YELLOW = "Yellow Socket"; + [EMPTY_SOCKET_BLUE] = "sumGemBlue", -- EMPTY_SOCKET_BLUE = "Blue Socket"; + [EMPTY_SOCKET_META] = "sumGemMeta", -- EMPTY_SOCKET_META = "Meta Socket"; +} +-- Color code (used to fix gem text color) +local currentColorCode +function RatingBuster.ProcessTooltip(tooltip, name, link) + -- Check if we're in standby mode + --if not RatingBuster:IsActive() then return end + --------------------------- + -- Set calculation level -- + --------------------------- + calcLevel = profileDB.customLevel or 0 + if calcLevel == 0 then + calcLevel = playerLevel + end + if profileDB.useRequiredLevel and link then + local _, _, _, _, reqLevel = GetItemInfo(link) + --RatingBuster:Print(link..", "..calcLevel) + if reqLevel and calcLevel < reqLevel then + calcLevel = reqLevel + end + end + --------------------- + -- Tooltip Scanner -- + --------------------- + -- Loop through tooltip lines starting at line 2 + local tipTextLeft = tooltip:GetName().."TextLeft" + for i = 2, tooltip:NumLines() do + local fontString = _G[tipTextLeft..i] + local text = fontString:GetText() + if text then + -- Get data from cache if available + local cacheID = text..calcLevel + local cacheText = cache[cacheID] + if cacheText then + if cacheText ~= text then + fontString:SetText(cacheText) + end + elseif EmptySocketLookup[text] and profileDB[EmptySocketLookup[text]].gemText then -- Replace empty sockets with gem text + text = profileDB[EmptySocketLookup[text]].gemText + cache[cacheID] = text + -- SetText + fontString:SetText(text) + elseif strfind(text, "%d") then -- do nothing if we don't find a number + -- Find and set color code (used to fix gem text color) pattern:|cxxxxxxxx + currentColorCode = select(3, strfind(text, "(|c%x%x%x%x%x%x%x%x)")) or "|r" + -- Initial pattern check, do nothing if not found + -- Check for separators and bulid separatorTable + local separatorTable = {} + for _, sep in ipairs(L["separators"]) do + if strfind(text, sep) then + tinsert(separatorTable, sep) + end + end + -- SplitDoJoin + text = RatingBuster:SplitDoJoin(text, separatorTable) + cache[cacheID] = text + -- SetText + fontString:SetText(text) + end + end + end + ---------------------------- + -- Item Level and Item ID -- + ---------------------------- + -- Check for ItemLevel addon, do nothing if found + if not ItemLevel_AddInfo and (profileDB.showItemLevel or profileDB.showItemID) and link then + if cache[link] then + tooltip:AddLine(cache[link]) + else + -- Get the Item ID from the link string + local _, link, _, level = GetItemInfo(link) + if link then + local _, _, id = strfind(link, "item:(%d+)") + local newLine = "" + if level and profileDB.showItemLevel then + newLine = newLine..L["ItemLevel: "]..level + end + if id and profileDB.showItemID then + if newLine ~= "" then + newLine = newLine..", " + end + newLine = newLine..L["ItemID: "]..id + end + if newLine ~= "" then + cache[link] = newLine + tooltip:AddLine(newLine) + end + end + end + end + ------------------ + -- Stat Summary -- + ------------------ + --[[ + ---------------- + -- Base Stats -- + ---------------- + -- Health - HEALTH, STA + -- Mana - MANA, INT + -- Attack Power - AP, STR, AGI + -- Ranged Attack Power - RANGED_AP, INT, AP, STR, AGI + -- Feral Attack Power - FERAL_AP, AP, STR, AGI + -- Spell Damage - SPELL_DMG, STA, INT, SPI + -- Holy Damage - HOLY_SPELL_DMG, SPELL_DMG, INT, SPI + -- Arcane Damage - ARCANE_SPELL_DMG, SPELL_DMG, INT + -- Fire Damage - FIRE_SPELL_DMG, SPELL_DMG, STA, INT + -- Nature Damage - NATURE_SPELL_DMG, SPELL_DMG, INT + -- Frost Damage - FROST_SPELL_DMG, SPELL_DMG, INT + -- Shadow Damage - SHADOW_SPELL_DMG, SPELL_DMG, STA, INT, SPI + -- Healing - HEAL, STR, INT, SPI + -- Hit Chance - MELEE_HIT_RATING, WEAPON_RATING + -- Crit Chance - MELEE_CRIT_RATING, WEAPON_RATING, AGI + -- Spell Hit Chance - SPELL_HIT_RATING + -- Spell Crit Chance - SPELL_CRIT_RATING, INT + -- Mana Regen - MANA_REG, SPI + -- Health Regen - HEALTH_REG + -- Mana Regen Not Casting - SPI + -- Health Regen While Casting - SPI + -- Armor - ARMOR, ARMOR_BONUS, AGI, INT + -- Block Value - BLOCK_VALUE, STR + -- Dodge Chance - DODGE_RATING, DEFENSE_RATING, AGI + -- Parry Chance - PARRY_RATING, DEFENSE_RATING + -- Block Chance - BLOCK_RATING, DEFENSE_RATING + -- Hit Avoidance - DEFENSE_RATING, MELEE_HIT_AVOID_RATING + -- Crit Avoidance - DEFENSE_RATING, RESILIENCE_RATING, MELEE_CRIT_AVOID_RATING + -- Dodge Neglect - EXPERTISE_RATING, WEAPON_RATING + -- Parry Neglect - EXPERTISE_RATING, WEAPON_RATING + -- Block Neglect - WEAPON_RATING + --------------------- + -- Composite Stats -- + --------------------- + -- Strength - STR + -- Agility - AGI + -- Stamina - STA + -- Intellect - INT + -- Spirit - SPI + -- Defense - DEFENSE_RATING + -- Weapon Skill - WEAPON_RATING + -- Expertise - EXPERTISE_RATING + --]] + if profileDB.showSum then + RatingBuster:StatSummary(tooltip, name, link) + end + --------------------- + -- Repaint tooltip -- + --------------------- + tooltip:Show() +end + +--------------------------------------------------------------------------------- +-- Recursive algorithm that divides a string into pieces using the separators in separatorTable, +-- processes them separately, then joins them back together +--------------------------------------------------------------------------------- +-- text = "+24 Agility/+4 Stamina and +4 Spell Crit/+5 Spirit" +-- separatorTable = {"/", " and ", ","} +-- RatingBuster:SplitDoJoin("+24 Agility/+4 Stamina, +4 Dodge and +4 Spell Crit/+5 Spirit", {"/", " and ", ",", "%. ", " for ", "&"}) +-- RatingBuster:SplitDoJoin("+6法術傷害及5耐力", {"/", "和", ",", "。", " 持續 ", "&", "及",}) +function RatingBuster:SplitDoJoin(text, separatorTable) + if type(separatorTable) == "table" and table.maxn(separatorTable) > 0 then + local sep = tremove(separatorTable, 1) + text = gsub(text, sep, "@") + text = {strsplit("@", text)} + local processedText = {} + local tempTable = {} + for _, t in ipairs(text) do + --self:Print(t[1]) + copyTable(tempTable, separatorTable) + tinsert(processedText, self:SplitDoJoin(t, tempTable)) + end + -- Join text + return (gsub(strjoin("@", unpack(processedText)), "@", sep)) + else + --self:Print(cacheID) + return self:ProcessText(text) + end +end + + +function RatingBuster:ProcessText(text) + --self:Print(text) + -- Check if test has a matching pattern + for _, num in ipairs(L["numberPatterns"]) do + -- Convert text to lower so we don't have to worry about same ratings with different cases + local lowerText = string.lower(text) + -- Capture the stat value + local s, e, value, partialtext = strfind(lowerText, num.pattern) + if value then + -- Check and switch captures if needed + if partialtext and tonumber(partialtext) then + value, partialtext = partialtext, value + end + -- Capture the stat name + for _, stat in ipairs(L["statList"]) do + if (not partialtext and strfind(lowerText, stat.pattern)) or (partialtext and strfind(partialtext, stat.pattern)) then + value = tonumber(value) + local infoString = "" + if type(stat.id) == "number" and stat.id >= 1 and stat.id <= 24 and profileDB.showRatings then + -------------------- + -- Combat Ratings -- + -------------------- + -- Calculate stat value + local effect, strID = StatLogic:GetEffectFromRating(value, stat.id, calcLevel) + --self:Debug(reversedAmount..", "..amount..", "..v[2]..", "..RatingBuster.targetLevel)-- debug + -- If rating is resilience, add a minus sign + if strID == "DEFENSE" and profileDB.defBreakDown then + effect = effect * 0.04 + local numStats = 5 + if GetParryChance() == 0 then + numStats = numStats - 1 + end + if GetBlockChance() == 0 then + numStats = numStats - 1 + end + infoString = format("%+.2f%% x"..numStats, effect) + elseif strID == "WEAPON_SKILL" and profileDB.wpnBreakDown then + effect = effect * 0.04 + infoString = format("%+.2f%% x5", effect) + elseif strID == "EXPERTISE" and profileDB.expBreakDown then + effect = floor(effect) * -0.25 + if profileDB.detailedConversionText then + infoString = gsub(L["$value to be Dodged/Parried"], "$value", format("%+.2f%%%%", effect)) + else + infoString = format("%+.2f%%", effect) + end + elseif stat.id >= 15 and stat.id <= 17 then -- Resilience + effect = effect * -1 + if profileDB.detailedConversionText then + infoString = gsub(L["$value to be Crit"], "$value", format("%+.2f%%%%", effect))..", "..gsub(L["$value Crit Dmg Taken"], "$value", format("%+.2f%%%%", effect * 2))..", "..gsub(L["$value DOT Dmg Taken"], "$value", format("%+.2f%%%%", effect)) + else + infoString = format("%+.2f%%", effect) + end + else + --self:Debug(text..", "..tostring(effect)..", "..value..", "..stat.id..", "..calcLevel) + -- Build info string + infoString = format("%+.2f", effect) + if stat.id > 2 and stat.id < 21 then -- if rating is a percentage + infoString = infoString.."%" + end + end + elseif stat.id == SPELL_STAT1_NAME and profileDB.showStats then + -------------- + -- Strength -- + -------------- + local statmod = 1 + if profileDB.enableStatMods then + statmod = StatLogic:GetStatMod("MOD_STR") + value = value * statmod + end + local infoTable = {} + if profileDB.showAPFromStr then + local mod = StatLogic:GetStatMod("MOD_AP") + local effect = value * StatLogic:GetAPPerStr(class) * mod + if (mod ~= 1 or statmod ~= 1) and floor(abs(effect) * 10 + 0.5) > 0 then + tinsert(infoTable, (gsub(L["$value AP"], "$value", format("%+.1f", effect)))) + elseif floor(abs(effect) + 0.5) > 0 then -- so we don't get +0 AP when effect < 0.5 + tinsert(infoTable, (gsub(L["$value AP"], "$value", format("%+.0f", effect)))) + end + end + if profileDB.showBlockValueFromStr then + local effect = value * StatLogic:GetBlockValuePerStr(class) + if floor(abs(effect) * 10 + 0.5) > 0 then + tinsert(infoTable, (gsub(L["$value Block"], "$value", format("%+.1f", effect)))) + end + end + if profileDB.showSpellDmgFromStr then -- Shaman: Mental Quickness (Rank 3) - 2,15 + local mod = StatLogic:GetStatMod("MOD_AP") * StatLogic:GetStatMod("MOD_SPELL_DMG") + local effect = value * StatLogic:GetAPPerStr(class) * StatLogic:GetStatMod("ADD_SPELL_DMG_MOD_AP") * mod + if (mod ~= 1 or statmod ~= 1) and floor(abs(effect) * 10 + 0.5) > 0 then + tinsert(infoTable, (gsub(L["$value Dmg"], "$value", format("%+.1f", effect)))) + elseif floor(abs(effect) + 0.5) > 0 then + tinsert(infoTable, (gsub(L["$value Dmg"], "$value", format("%+.0f", effect)))) + end + end + if profileDB.showHealingFromStr then -- Shaman: Mental Quickness (Rank 3) - 2,15 + local mod = StatLogic:GetStatMod("MOD_AP") * StatLogic:GetStatMod("MOD_HEALING") + local effect = value * StatLogic:GetAPPerStr(class) * StatLogic:GetStatMod("ADD_HEALING_MOD_AP") * mod + if (mod ~= 1 or statmod ~= 1) and floor(abs(effect) * 10 + 0.5) > 0 then + tinsert(infoTable, (gsub(L["$value Heal"], "$value", format("%+.1f", effect)))) + elseif floor(abs(effect) + 0.5) > 0 then + tinsert(infoTable, (gsub(L["$value Heal"], "$value", format("%+.0f", effect)))) + end + end + infoString = strjoin(", ", unpack(infoTable)) + elseif stat.id == SPELL_STAT2_NAME and profileDB.showStats then + ------------- + -- Agility -- + ------------- + local statmod = 1 + if profileDB.enableStatMods then + statmod = StatLogic:GetStatMod("MOD_AGI") + value = value * statmod + end + local infoTable = {} + if profileDB.showAPFromAgi then + local mod = StatLogic:GetStatMod("MOD_AP") + local effect = value * StatLogic:GetAPPerAgi(class) * mod + if (mod ~= 1 or statmod ~= 1) and floor(abs(effect) * 10 + 0.5) > 0 then + tinsert(infoTable, (gsub(L["$value AP"], "$value", format("%+.1f", effect)))) + elseif floor(abs(effect) + 0.5) > 0 then + tinsert(infoTable, (gsub(L["$value AP"], "$value", format("%+.0f", effect)))) + end + end + if profileDB.showRAPFromAgi then + local mod = StatLogic:GetStatMod("MOD_RANGED_AP") + local effect = value * StatLogic:GetRAPPerAgi(class) * mod + if (mod ~= 1 or statmod ~= 1) and floor(abs(effect) * 10 + 0.5) > 0 then + tinsert(infoTable, (gsub(L["$value RAP"], "$value", format("%+.1f", effect)))) + elseif floor(abs(effect) + 0.5) > 0 then + tinsert(infoTable, (gsub(L["$value RAP"], "$value", format("%+.0f", effect)))) + end + end + if profileDB.showCritFromAgi then + local effect = StatLogic:GetCritFromAgi(value, class, calcLevel) + if effect > 0 then + tinsert(infoTable, (gsub(L["$value% Crit"], "$value", format("%+.2f", effect)))) + end + end + if profileDB.showDodgeFromAgi and (calcLevel == playerLevel) then + local effect = StatLogic:GetDodgeFromAgi(value) + if effect > 0 then + tinsert(infoTable, (gsub(L["$value% Dodge"], "$value", format("%+.2f", effect)))) + end + end + if profileDB.showArmorFromAgi then + local effect = value * 2 + if effect > 0 then + tinsert(infoTable, (gsub(L["$value Armor"], "$value", format("%+.0f", effect)))) + end + end + if profileDB.showHealingFromAgi then + local mod = StatLogic:GetStatMod("MOD_HEALING") + local effect = value * StatLogic:GetStatMod("ADD_HEALING_MOD_AGI") * mod + if floor(abs(effect) * 10 + 0.5) > 0 then + tinsert(infoTable, (gsub(L["$value Heal"], "$value", format("%+.1f", effect)))) + end + end + infoString = strjoin(", ", unpack(infoTable)) + elseif stat.id == SPELL_STAT3_NAME and profileDB.showStats then + ------------- + -- Stamina -- + ------------- + local statmod = 1 + if profileDB.enableStatMods then + statmod = StatLogic:GetStatMod("MOD_STA") + value = value * statmod + end + local infoTable = {} + if profileDB.showHealthFromSta then + local mod = StatLogic:GetStatMod("MOD_HEALTH") + local effect = value * 10 * mod -- 10 Health per Sta + if (mod ~= 1 or statmod ~= 1) and floor(abs(effect) * 10 + 0.5) > 0 then + tinsert(infoTable, (gsub(L["$value HP"], "$value", format("%+.1f", effect)))) + elseif floor(abs(effect) + 0.5) > 0 then + tinsert(infoTable, (gsub(L["$value HP"], "$value", format("%+.0f", effect)))) + end + end + if profileDB.showSpellDmgFromSta then + local mod = StatLogic:GetStatMod("MOD_SPELL_DMG") + local effect = value * StatLogic:GetStatMod("ADD_SPELL_DMG_MOD_STA") * mod + if floor(abs(effect) * 10 + 0.5) > 0 then + tinsert(infoTable, (gsub(L["$value Dmg"], "$value", format("%+.1f", effect)))) + end + end + infoString = strjoin(", ", unpack(infoTable)) + elseif stat.id == SPELL_STAT4_NAME and profileDB.showStats then + --------------- + -- Intellect -- + --------------- + local statmod = 1 + if profileDB.enableStatMods then + statmod = StatLogic:GetStatMod("MOD_INT") + value = value * statmod + end + local infoTable = {} + if profileDB.showManaFromInt then + local mod = StatLogic:GetStatMod("MOD_MANA") + local effect = value * 15 * mod -- 15 Mana per Int + if (mod ~= 1 or statmod ~= 1) and floor(abs(effect) * 10 + 0.5) > 0 then + tinsert(infoTable, (gsub(L["$value MP"], "$value", format("%+.1f", effect)))) + elseif floor(abs(effect) + 0.5) > 0 then + tinsert(infoTable, (gsub(L["$value MP"], "$value", format("%+.0f", effect)))) + end + end + if profileDB.showSpellCritFromInt then + local effect = StatLogic:GetSpellCritFromInt(value, class, calcLevel) + if effect > 0 then + tinsert(infoTable, (gsub(L["$value% Spell Crit"], "$value", format("%+.2f", effect)))) + end + end + if profileDB.showSpellDmgFromInt then + local mod = StatLogic:GetStatMod("MOD_SPELL_DMG") + local effect = value * StatLogic:GetStatMod("ADD_SPELL_DMG_MOD_INT") * mod + if floor(abs(effect) * 10 + 0.5) > 0 then + tinsert(infoTable, (gsub(L["$value Dmg"], "$value", format("%+.1f", effect)))) + end + end + if profileDB.showHealingFromInt then + local mod = StatLogic:GetStatMod("MOD_HEALING") + local effect = value * StatLogic:GetStatMod("ADD_HEALING_MOD_INT") * mod + if floor(abs(effect) * 10 + 0.5) > 0 then + tinsert(infoTable, (gsub(L["$value Heal"], "$value", format("%+.1f", effect)))) + end + end + if profileDB.showMP5FromInt then + local effect + if wowBuildNo >= '7897' then -- 2.4.0 + local _, int = UnitStat("player", 4) + local _, spi = UnitStat("player", 5) + effect = value * StatLogic:GetStatMod("ADD_MANA_REG_MOD_INT") + (StatLogic:GetNormalManaRegenFromSpi(spi, int + value, calcLevel) - StatLogic:GetNormalManaRegenFromSpi(spi, int, calcLevel)) * StatLogic:GetStatMod("ADD_MANA_REG_MOD_NORMAL_MANA_REG") + else + effect = value * StatLogic:GetStatMod("ADD_MANA_REG_MOD_INT") + end + if floor(abs(effect) * 10 + 0.5) > 0 then + tinsert(infoTable, (gsub(L["$value MP5"], "$value", format("%+.1f", effect)))) + end + end + if profileDB.showMP5NCFromInt then + local effect + if wowBuildNo >= '7897' then -- 2.4.0 + local _, int = UnitStat("player", 4) + local _, spi = UnitStat("player", 5) + effect = value * StatLogic:GetStatMod("ADD_MANA_REG_MOD_INT") + StatLogic:GetNormalManaRegenFromSpi(spi, int + value, calcLevel) - StatLogic:GetNormalManaRegenFromSpi(spi, int, calcLevel) + else + effect = value * StatLogic:GetStatMod("ADD_MANA_REG_MOD_INT") + end + if floor(abs(effect) * 10 + 0.5) > 0 then + tinsert(infoTable, (gsub(L["$value MP5(NC)"], "$value", format("%+.1f", effect)))) + end + end + if profileDB.showRAPFromInt then + local mod = StatLogic:GetStatMod("MOD_RANGED_AP") + local effect = value * StatLogic:GetStatMod("ADD_RANGED_AP_MOD_INT") * mod + if floor(abs(effect) * 10 + 0.5) > 0 then + tinsert(infoTable, (gsub(L["$value RAP"], "$value", format("%+.1f", effect)))) + end + end + if profileDB.showArmorFromInt then + local effect = value * StatLogic:GetStatMod("ADD_ARMOR_MOD_INT") + if floor(abs(effect) + 0.5) > 0 then + tinsert(infoTable, (gsub(L["$value Armor"], "$value", format("%+.0f", effect)))) + end + end + infoString = strjoin(", ", unpack(infoTable)) + elseif stat.id == SPELL_STAT5_NAME and profileDB.showStats then + ------------ + -- Spirit -- + ------------ + local statmod = 1 + if profileDB.enableStatMods then + statmod = StatLogic:GetStatMod("MOD_SPI") + value = value * statmod + end + local infoTable = {} + if profileDB.showMP5FromSpi then + local mod = StatLogic:GetStatMod("ADD_MANA_REG_MOD_NORMAL_MANA_REG") + local effect + if wowBuildNo >= '7897' then -- 2.4.0 + effect = StatLogic:GetNormalManaRegenFromSpi(value, nil, calcLevel) * mod + else + effect = StatLogic:GetNormalManaRegenFromSpi(value, class) * mod + end + if floor(abs(effect) * 10 + 0.5) > 0 then + tinsert(infoTable, (gsub(L["$value MP5"], "$value", format("%+.1f", effect)))) + end + end + if profileDB.showMP5NCFromSpi then + local effect + if wowBuildNo >= '7897' then -- 2.4.0 + effect = StatLogic:GetNormalManaRegenFromSpi(value, nil, calcLevel) + else + effect = StatLogic:GetNormalManaRegenFromSpi(value, class) + end + if floor(abs(effect) * 10 + 0.5) > 0 then + tinsert(infoTable, (gsub(L["$value MP5(NC)"], "$value", format("%+.1f", effect)))) + end + end + if profileDB.showHP5FromSpi then + local effect = StatLogic:GetHealthRegenFromSpi(value, class) + if floor(abs(effect) * 10 + 0.5) > 0 then + tinsert(infoTable, (gsub(L["$value HP5"], "$value", format("%+.1f", effect)))) + end + end + if profileDB.showSpellDmgFromSpi then + local mod = StatLogic:GetStatMod("MOD_SPELL_DMG") + local effect = value * StatLogic:GetStatMod("ADD_SPELL_DMG_MOD_SPI") * mod + if floor(abs(effect) * 10 + 0.5) > 0 then + tinsert(infoTable, (gsub(L["$value Dmg"], "$value", format("%+.1f", effect)))) + end + end + if profileDB.showHealingFromSpi then + local mod = StatLogic:GetStatMod("MOD_HEALING") + local effect = value * StatLogic:GetStatMod("ADD_HEALING_MOD_SPI") * mod + if floor(abs(effect) * 10 + 0.5) > 0 then + tinsert(infoTable, (gsub(L["$value Heal"], "$value", format("%+.1f", effect)))) + end + end + infoString = strjoin(", ", unpack(infoTable)) + end + if infoString ~= "" then + -- Add parenthesis + infoString = "("..infoString..")" + -- Add Color + if profileDB.enableTextColor then + infoString = profileDB.textColor.hex..infoString..currentColorCode + end + -- Build replacement string + if num.addInfo == "AfterNumber" then -- Add after number + infoString = gsub(infoString, "%%", "%%%%%%%%") -- sub "%" with "%%%%" + infoString = gsub(strsub(text, s, e), "%d+", "%0 "..infoString, 1) -- sub "33" with "33 (3.33%)" + else -- Add after stat + infoString = gsub(infoString, "%%", "%%%%") + s, e = strfind(lowerText, stat.pattern) + infoString = "%0 "..infoString + end + -- Insert info into text + return (gsub(text, strsub(text, s, e), infoString, 1)) -- because gsub has 2 return values, but we only want 1 + end + return text + end + end + end + end + return text +end + + +-- Color Numbers +local GREEN_FONT_COLOR_CODE = GREEN_FONT_COLOR_CODE -- "|cff20ff20" Green +local HIGHLIGHT_FONT_COLOR_CODE = HIGHLIGHT_FONT_COLOR_CODE -- "|cffffffff" White +local RED_FONT_COLOR_CODE = RED_FONT_COLOR_CODE -- "|cffffffff" White +local FONT_COLOR_CODE_CLOSE = FONT_COLOR_CODE_CLOSE -- "|r" +local function colorNum(text, num) + if num > 0 then + return GREEN_FONT_COLOR_CODE..text..FONT_COLOR_CODE_CLOSE + elseif num < 0 then + return RED_FONT_COLOR_CODE..text..FONT_COLOR_CODE_CLOSE + else + return HIGHLIGHT_FONT_COLOR_CODE..text..FONT_COLOR_CODE_CLOSE + end +end + +-- Used armor type each class uses +local classArmorTypes = { + WARRIOR = { + [BI["Plate"]] = true, + }, + PALADIN = { + [BI["Plate"]] = true, + [BI["Mail"]] = true, + [BI["Leather"]] = true, + [BI["Cloth"]] = true, + }, + HUNTER = { + [BI["Mail"]] = true, + [BI["Leather"]] = true, + }, + ROGUE = { + [BI["Leather"]] = true, + }, + PRIEST = { + [BI["Cloth"]] = true, + }, + SHAMAN = { + [BI["Mail"]] = true, + [BI["Leather"]] = true, + [BI["Cloth"]] = true, + }, + MAGE = { + [BI["Cloth"]] = true, + }, + WARLOCK = { + [BI["Cloth"]] = true, + }, + DRUID = { + [BI["Leather"]] = true, + [BI["Cloth"]] = true, + }, +} + +local armorTypes = { + [BI["Plate"]] = true, + [BI["Mail"]] = true, + [BI["Leather"]] = true, + [BI["Cloth"]] = true, +} + + +local summaryCalcData = { + ----------- + -- Basic -- + ----------- + -- Strength - STR + { + option = "sumStr", + name = "STR", + func = function(sum) return sum["STR"] end, + }, + -- Agility - AGI + { + option = "sumAgi", + name = "AGI", + func = function(sum) return sum["AGI"] end, + }, + -- Stamina - STA + { + option = "sumSta", + name = "STA", + func = function(sum) return sum["STA"] end, + }, + -- Intellect - INT + { + option = "sumInt", + name = "INT", + func = function(sum) return sum["INT"] end, + }, + -- Spirit - SPI + { + option = "sumSpi", + name = "SPI", + func = function(sum) return sum["SPI"] end, + }, + -- Health - HEALTH, STA + { + option = "sumHP", + name = "HEALTH", + func = function(sum) return ((sum["HEALTH"] or 0) + (sum["STA"] * 10)) * StatLogic:GetStatMod("MOD_HEALTH") end, + }, + -- Mana - MANA, INT + { + option = "sumMP", + name = "MANA", + func = function(sum) return ((sum["MANA"] or 0) + (sum["INT"] * 15)) * StatLogic:GetStatMod("MOD_MANA") end, + }, + -- Health Regen - HEALTH_REG + { + option = "sumHP5", + name = "HEALTH_REG", + func = function(sum) return (sum["HEALTH_REG"] or 0) end, + }, + -- Health Regen while Out of Combat - HEALTH_REG, SPI + { + option = "sumHP5OC", + name = "HEALTH_REG_OUT_OF_COMBAT", + func = function(sum) return (sum["HEALTH_REG"] or 0) + StatLogic:GetHealthRegenFromSpi(sum["SPI"], class) end, + }, + -- Mana Regen - MANA_REG, SPI, INT + { + option = "sumMP5", + name = "MANA_REG", + func = function(sum) + if wowBuildNo >= '7897' then -- 2.4.0 + local _, int = UnitStat("player", 4) + local _, spi = UnitStat("player", 5) + return (sum["MANA_REG"] or 0) + + (sum["INT"] * StatLogic:GetStatMod("ADD_MANA_REG_MOD_INT")) + + (StatLogic:GetNormalManaRegenFromSpi(spi + sum["SPI"], int + sum["INT"], calcLevel) + - StatLogic:GetNormalManaRegenFromSpi(spi, int, calcLevel)) * StatLogic:GetStatMod("ADD_MANA_REG_MOD_NORMAL_MANA_REG") + else + return (sum["MANA_REG"] or 0) + + (sum["INT"] * StatLogic:GetStatMod("ADD_MANA_REG_MOD_INT")) + + (StatLogic:GetNormalManaRegenFromSpi(sum["SPI"], class) * StatLogic:GetStatMod("ADD_MANA_REG_MOD_NORMAL_MANA_REG")) + end + end, + }, + -- Mana Regen while Not casting - MANA_REG, SPI, INT + { + option = "sumMP5NC", + name = "MANA_REG_NOT_CASTING", + func = function(sum) + if wowBuildNo >= '7897' then -- 2.4.0 + local _, int = UnitStat("player", 4) + local _, spi = UnitStat("player", 5) + return (sum["MANA_REG"] or 0) + + (sum["INT"] * StatLogic:GetStatMod("ADD_MANA_REG_MOD_INT")) + + StatLogic:GetNormalManaRegenFromSpi(spi + sum["SPI"], int + sum["INT"], calcLevel) + - StatLogic:GetNormalManaRegenFromSpi(spi, int, calcLevel) + else + return (sum["MANA_REG"] or 0) + + (sum["INT"] * StatLogic:GetStatMod("ADD_MANA_REG_MOD_INT")) + + StatLogic:GetNormalManaRegenFromSpi(sum["SPI"], class) + end + end, + }, + --------------------- + -- Physical Damage -- + --------------------- + -- Attack Power - AP, STR, AGI + { + option = "sumAP", + name = "AP", + func = function(sum) return ((sum["AP"] or 0) + (sum["STR"] * StatLogic:GetAPPerStr(class)) + + (sum["AGI"] * StatLogic:GetAPPerAgi(class))) * StatLogic:GetStatMod("MOD_AP") end, + }, + -- Ranged Attack Power - RANGED_AP, AP, AGI, INT + { + option = "sumRAP", + name = "RANGED_AP", + func = function(sum) return ((sum["RANGED_AP"] or 0) + (sum["AP"] or 0) + (sum["AGI"] * StatLogic:GetRAPPerAgi(class)) + + (sum["INT"] * StatLogic:GetStatMod("ADD_RANGED_AP_MOD_INT"))) * (StatLogic:GetStatMod("MOD_RANGED_AP") + StatLogic:GetStatMod("MOD_AP") - 1) end, + }, + -- Feral Attack Power - FERAL_AP, AP, STR, AGI + { + option = "sumFAP", + name = "FERAL_AP", + func = function(sum) return ((sum["FERAL_AP"] or 0) + (sum["AP"] or 0) + (sum["STR"] * StatLogic:GetAPPerStr(class)) + + (sum["AGI"] * StatLogic:GetAPPerAgi(class))) * StatLogic:GetStatMod("MOD_AP") end, + }, + -- Hit Chance - MELEE_HIT_RATING, WEAPON_RATING + { + option = "sumHit", + name = "MELEE_HIT", + func = function(sum) + local s = 0 + for id, v in pairs(sum) do + if strsub(id, -13) == "WEAPON_RATING" then + s = s + StatLogic:GetEffectFromRating(v, CR_WEAPON_SKILL, calcLevel) * 0.04 + break + end + end + return s + StatLogic:GetEffectFromRating((sum["MELEE_HIT_RATING"] or 0), "MELEE_HIT_RATING", calcLevel) + end, + ispercent = true, + }, + -- Hit Rating - MELEE_HIT_RATING + { + option = "sumHitRating", + name = "MELEE_HIT_RATING", + func = function(sum) return (sum["MELEE_HIT_RATING"] or 0) end, + }, + -- Crit Chance - MELEE_CRIT_RATING, WEAPON_RATING, AGI + { + option = "sumCrit", + name = "MELEE_CRIT", + func = function(sum) + local s = 0 + for id, v in pairs(sum) do + if strsub(id, -13) == "WEAPON_RATING" then + s = s + StatLogic:GetEffectFromRating(v, CR_WEAPON_SKILL, calcLevel) * 0.04 + break + end + end + return s + StatLogic:GetEffectFromRating((sum["MELEE_CRIT_RATING"] or 0), "MELEE_CRIT_RATING", calcLevel) + + StatLogic:GetCritFromAgi(sum["AGI"], class, calcLevel) + end, + ispercent = true, + }, + -- Crit Rating - MELEE_CRIT_RATING + { + option = "sumCritRating", + name = "MELEE_CRIT_RATING", + func = function(sum) return (sum["MELEE_CRIT_RATING"] or 0) end, + }, + -- Haste - MELEE_HASTE_RATING + { + option = "sumHaste", + name = "MELEE_HASTE", + func = function(sum) return StatLogic:GetEffectFromRating((sum["MELEE_HASTE_RATING"] or 0), "MELEE_HASTE_RATING", calcLevel) end, + ispercent = true, + }, + -- Haste Rating - MELEE_HASTE_RATING + { + option = "sumHasteRating", + name = "MELEE_HASTE_RATING", + func = function(sum) return (sum["MELEE_HASTE_RATING"] or 0) end, + }, + -- Expertise - EXPERTISE_RATING + { + option = "sumExpertise", + name = "EXPERTISE", + func = function(sum) return StatLogic:GetEffectFromRating((sum["EXPERTISE_RATING"] or 0), "EXPERTISE_RATING", calcLevel) end, + }, + -- Dodge Neglect - EXPERTISE_RATING, WEAPON_RATING -- 2.3.0 + { + option = "sumDodgeNeglect", + name = "DODGE_NEGLECT", + func = function(sum) + local s = 0 + for id, v in pairs(sum) do + if strsub(id, -13) == "WEAPON_RATING" then + s = StatLogic:GetEffectFromRating(v, CR_WEAPON_SKILL, calcLevel) * 0.04 + end + end + s = s + floor(StatLogic:GetEffectFromRating((sum["EXPERTISE_RATING"] or 0), "EXPERTISE_RATING", calcLevel)) * 0.25 + return s + end, + ispercent = true, + }, + -- Parry Neglect - EXPERTISE_RATING, WEAPON_RATING -- 2.3.0 + { + option = "sumParryNeglect", + name = "PARRY_NEGLECT", + func = function(sum) + local s = 0 + for id, v in pairs(sum) do + if strsub(id, -13) == "WEAPON_RATING" then + s = StatLogic:GetEffectFromRating(v, CR_WEAPON_SKILL, calcLevel) * 0.04 + end + end + s = s + floor(StatLogic:GetEffectFromRating((sum["EXPERTISE_RATING"] or 0), "EXPERTISE_RATING", calcLevel)) * 0.25 + return s + end, + ispercent = true, + }, + -- Block Neglect - WEAPON_RATING + { + option = "sumBlockNeglect", + name = "BLOCK_NEGLECT", + func = function(sum) + for id, v in pairs(sum) do + if strsub(id, -13) == "WEAPON_RATING" then + return StatLogic:GetEffectFromRating(v, CR_WEAPON_SKILL, calcLevel) * 0.04 + end + end + return 0 + end, + ispercent = true, + }, + -- Weapon Max Damage - MAX_DAMAGE + { + option = "sumWeaponMaxDamage", + name = "MAX_DAMAGE", + func = function(sum) return (sum["MAX_DAMAGE"] or 0) end, + }, + -- Ignore Armor - IGNORE_ARMOR + { + option = "sumIgnoreArmor", + name = "IGNORE_ARMOR", + func = function(sum) return (sum["IGNORE_ARMOR"] or 0) end, + }, + ------------------------------ + -- Spell Damage and Healing -- + ------------------------------ + -- Spell Damage - SPELL_DMG, STA, INT, SPI + { + option = "sumSpellDmg", + name = "SPELL_DMG", + func = function(sum) + local ap = ((sum["AP"] or 0) + (sum["STR"] * StatLogic:GetAPPerStr(class)) + + (sum["AGI"] * StatLogic:GetAPPerAgi(class))) * StatLogic:GetStatMod("MOD_AP") + return ((sum["SPELL_DMG"] or 0) + (sum["STA"] * StatLogic:GetStatMod("ADD_SPELL_DMG_MOD_STA")) + + (sum["INT"] * StatLogic:GetStatMod("ADD_SPELL_DMG_MOD_INT")) + + (sum["SPI"] * StatLogic:GetStatMod("ADD_SPELL_DMG_MOD_SPI")) + + (ap * StatLogic:GetStatMod("ADD_SPELL_DMG_MOD_AP"))) * StatLogic:GetStatMod("MOD_SPELL_DMG") + end, + }, + -- Holy Damage - HOLY_SPELL_DMG, SPELL_DMG, INT, SPI + { + option = "sumHolyDmg", + name = "HOLY_SPELL_DMG", + func = function(sum) return ((sum["HOLY_SPELL_DMG"] or 0) + (sum["SPELL_DMG"] or 0) + + (sum["STA"] * StatLogic:GetStatMod("ADD_SPELL_DMG_MOD_STA")) + + (sum["INT"] * StatLogic:GetStatMod("ADD_SPELL_DMG_MOD_INT")) + + (sum["SPI"] * StatLogic:GetStatMod("ADD_SPELL_DMG_MOD_SPI"))) * StatLogic:GetStatMod("MOD_SPELL_DMG") end, + }, + -- Arcane Damage - ARCANE_SPELL_DMG, SPELL_DMG, INT + { + option = "sumArcaneDmg", + name = "ARCANE_SPELL_DMG", + func = function(sum) return ((sum["ARCANE_SPELL_DMG"] or 0) + (sum["SPELL_DMG"] or 0) + + (sum["STA"] * StatLogic:GetStatMod("ADD_SPELL_DMG_MOD_STA")) + + (sum["INT"] * StatLogic:GetStatMod("ADD_SPELL_DMG_MOD_INT")) + + (sum["SPI"] * StatLogic:GetStatMod("ADD_SPELL_DMG_MOD_SPI"))) * StatLogic:GetStatMod("MOD_SPELL_DMG") end, + }, + -- Fire Damage - FIRE_SPELL_DMG, SPELL_DMG, STA, INT + { + option = "sumFireDmg", + name = "FIRE_SPELL_DMG", + func = function(sum) return ((sum["FIRE_SPELL_DMG"] or 0) + (sum["SPELL_DMG"] or 0) + + (sum["STA"] * StatLogic:GetStatMod("ADD_SPELL_DMG_MOD_STA")) + + (sum["INT"] * StatLogic:GetStatMod("ADD_SPELL_DMG_MOD_INT")) + + (sum["SPI"] * StatLogic:GetStatMod("ADD_SPELL_DMG_MOD_SPI"))) * StatLogic:GetStatMod("MOD_SPELL_DMG") end, + }, + -- Nature Damage - NATURE_SPELL_DMG, SPELL_DMG, INT + { + option = "sumNatureDmg", + name = "NATURE_SPELL_DMG", + func = function(sum) return ((sum["NATURE_SPELL_DMG"] or 0) + (sum["SPELL_DMG"] or 0) + + (sum["STA"] * StatLogic:GetStatMod("ADD_SPELL_DMG_MOD_STA")) + + (sum["INT"] * StatLogic:GetStatMod("ADD_SPELL_DMG_MOD_INT")) + + (sum["SPI"] * StatLogic:GetStatMod("ADD_SPELL_DMG_MOD_SPI"))) * StatLogic:GetStatMod("MOD_SPELL_DMG") end, + }, + -- Frost Damage - FROST_SPELL_DMG, SPELL_DMG, INT + { + option = "sumFrostDmg", + name = "FROST_SPELL_DMG", + func = function(sum) return ((sum["FROST_SPELL_DMG"] or 0) + (sum["SPELL_DMG"] or 0) + + (sum["STA"] * StatLogic:GetStatMod("ADD_SPELL_DMG_MOD_STA")) + + (sum["INT"] * StatLogic:GetStatMod("ADD_SPELL_DMG_MOD_INT")) + + (sum["SPI"] * StatLogic:GetStatMod("ADD_SPELL_DMG_MOD_SPI"))) * StatLogic:GetStatMod("MOD_SPELL_DMG") end, + }, + -- Shadow Damage - SHADOW_SPELL_DMG, SPELL_DMG, STA, INT, SPI + { + option = "sumShadowDmg", + name = "SHADOW_SPELL_DMG", + func = function(sum) return ((sum["SHADOW_SPELL_DMG"] or 0) + (sum["SPELL_DMG"] or 0) + + (sum["STA"] * StatLogic:GetStatMod("ADD_SPELL_DMG_MOD_STA")) + + (sum["INT"] * StatLogic:GetStatMod("ADD_SPELL_DMG_MOD_INT")) + + (sum["SPI"] * StatLogic:GetStatMod("ADD_SPELL_DMG_MOD_SPI"))) * StatLogic:GetStatMod("MOD_SPELL_DMG") end, + }, + -- Healing - HEAL, AGI, STR, INT, SPI + { + option = "sumHealing", + name = "HEAL", + func = function(sum) + local ap = ((sum["AP"] or 0) + (sum["STR"] * StatLogic:GetAPPerStr(class)) + + (sum["AGI"] * StatLogic:GetAPPerAgi(class))) * StatLogic:GetStatMod("MOD_AP") + return ((sum["HEAL"] or 0) + + (sum["STR"] * StatLogic:GetStatMod("ADD_HEALING_MOD_STR")) + + (sum["INT"] * StatLogic:GetStatMod("ADD_HEALING_MOD_INT")) + + (sum["SPI"] * StatLogic:GetStatMod("ADD_HEALING_MOD_SPI")) + + (sum["AGI"] * StatLogic:GetStatMod("ADD_HEALING_MOD_AGI")) + + (ap * StatLogic:GetStatMod("ADD_HEALING_MOD_AP"))) * StatLogic:GetStatMod("MOD_SPELL_DMG") + end, + }, + -- Spell Hit Chance - SPELL_HIT_RATING + { + option = "sumSpellHit", + name = "SPELL_HIT", + func = function(sum) return StatLogic:GetEffectFromRating((sum["SPELL_HIT_RATING"] or 0), "SPELL_HIT_RATING", calcLevel) end, + ispercent = true, + }, + -- Spell Hit Rating - SPELL_HIT_RATING + { + option = "sumSpellHitRating", + name = "SPELL_HIT_RATING", + func = function(sum) return (sum["SPELL_HIT_RATING"] or 0) end, + }, + -- Spell Crit Chance - SPELL_CRIT_RATING, INT + { + option = "sumSpellCrit", + name = "SPELL_CRIT", + func = function(sum) return StatLogic:GetEffectFromRating((sum["SPELL_CRIT_RATING"] or 0), "SPELL_CRIT_RATING", calcLevel) + + StatLogic:GetSpellCritFromInt(sum["INT"], class, calcLevel) end, + ispercent = true, + }, + -- Spell Crit Rating - SPELL_CRIT_RATING + { + option = "sumSpellCritRating", + name = "SPELL_CRIT_RATING", + func = function(sum) return (sum["SPELL_CRIT_RATING"] or 0) end, + }, + -- Spell Haste - SPELL_HASTE_RATING + { + option = "sumSpellHaste", + name = "SPELL_HASTE", + func = function(sum) return StatLogic:GetEffectFromRating((sum["SPELL_HASTE_RATING"] or 0), "SPELL_HASTE_RATING", calcLevel) end, + ispercent = true, + }, + -- Spell Haste Rating - SPELL_HASTE_RATING + { + option = "sumSpellHasteRating", + name = "SPELL_HASTE_RATING", + func = function(sum) return (sum["SPELL_HASTE_RATING"] or 0) end, + }, + -- Spell Penetration - SPELLPEN + { + option = "sumPenetration", + name = "SPELLPEN", + func = function(sum) return (sum["SPELLPEN"] or 0) end, + }, + ---------- + -- Tank -- + ---------- + -- Armor - ARMOR, ARMOR_BONUS, AGI, INT + { + option = "sumArmor", + name = "ARMOR", + func = function(sum) return (sum["ARMOR"] or 0) * StatLogic:GetStatMod("MOD_ARMOR") + + (sum["ARMOR_BONUS"] or 0) + ((sum["AGI"] or 0) * 2) + + ((sum["INT"] or 0) * StatLogic:GetStatMod("ADD_ARMOR_MOD_INT")) end, + }, + -- Dodge Chance - DODGE_RATING, DEFENSE_RATING, AGI + { + option = "sumDodge", + name = "DODGE", + func = function(sum) return StatLogic:GetEffectFromRating((sum["DODGE_RATING"] or 0), "DODGE_RATING", calcLevel) + + StatLogic:GetEffectFromRating((sum["DEFENSE_RATING"] or 0), "DEFENSE_RATING", calcLevel) * 0.04 + + StatLogic:GetDodgeFromAgi(sum["AGI"]) end, + ispercent = true, + }, + -- Dodge Rating - DODGE_RATING + { + option = "sumDodgeRating", + name = "DODGE_RATING", + func = function(sum) return (sum["DODGE_RATING"] or 0) end, + }, + -- Parry Chance - PARRY_RATING, DEFENSE_RATING + { + option = "sumParry", + name = "PARRY", + func = function(sum) + if GetParryChance() == 0 then return 0 end + return StatLogic:GetEffectFromRating((sum["PARRY_RATING"] or 0), "PARRY_RATING", calcLevel) + + StatLogic:GetEffectFromRating((sum["DEFENSE_RATING"] or 0), "DEFENSE_RATING", calcLevel) * 0.04 + end, + ispercent = true, + }, + -- Parry Rating - PARRY_RATING + { + option = "sumParryRating", + name = "PARRY_RATING", + func = function(sum) return (sum["PARRY_RATING"] or 0) end, + }, + -- Block Chance - BLOCK_RATING, DEFENSE_RATING + { + option = "sumBlock", + name = "BLOCK", + func = function(sum) + if GetBlockChance() == 0 then return 0 end + return StatLogic:GetEffectFromRating((sum["BLOCK_RATING"] or 0), "BLOCK_RATING", calcLevel) + + StatLogic:GetEffectFromRating((sum["DEFENSE_RATING"] or 0), "DEFENSE_RATING", calcLevel) * 0.04 + end, + ispercent = true, + }, + -- Block Rating - BLOCK_RATING + { + option = "sumBlockRating", + name = "BLOCK_RATING", + func = function(sum) return (sum["BLOCK_RATING"] or 0) end, + }, + -- Block Value - BLOCK_VALUE, STR + { + option = "sumBlockValue", + name = "BLOCK_VALUE", + func = function(sum) + if GetBlockChance() == 0 then return 0 end + return (sum["BLOCK_VALUE"] or 0) * StatLogic:GetStatMod("MOD_BLOCK_VALUE") + + ((sum["STR"] or 0) * StatLogic:GetBlockValuePerStr(class)) + end, + }, + -- Hit Avoidance - DEFENSE_RATING, MELEE_HIT_AVOID_RATING + { + option = "sumHitAvoid", + name = "MELEE_HIT_AVOID", + func = function(sum) return StatLogic:GetEffectFromRating((sum["MELEE_HIT_AVOID_RATING"] or 0), "MELEE_HIT_AVOID_RATING", calcLevel) + + StatLogic:GetEffectFromRating((sum["DEFENSE_RATING"] or 0), "DEFENSE_RATING", calcLevel) * 0.04 end, + ispercent = true, + }, + -- Crit Avoidance - DEFENSE_RATING, RESILIENCE_RATING, MELEE_CRIT_AVOID_RATING + { + option = "sumCritAvoid", + name = "MELEE_CRIT_AVOID", + func = function(sum) return StatLogic:GetEffectFromRating((sum["MELEE_CRIT_AVOID_RATING"] or 0), "MELEE_CRIT_AVOID_RATING", calcLevel) + + StatLogic:GetEffectFromRating((sum["RESILIENCE_RATING"] or 0), "RESILIENCE_RATING", calcLevel) + + StatLogic:GetEffectFromRating((sum["DEFENSE_RATING"] or 0), "DEFENSE_RATING", calcLevel) * 0.04 end, + ispercent = true, + }, + -- Resilience - RESILIENCE_RATING + { + option = "sumResilience", + name = "RESILIENCE_RATING", + func = function(sum) return (sum["RESILIENCE_RATING"] or 0) end, + }, + -- Arcane Resistance - ARCANE_RES + { + option = "sumArcaneResist", + name = "ARCANE_RES", + func = function(sum) return (sum["ARCANE_RES"] or 0) end, + }, + -- Fire Resistance - FIRE_RES + { + option = "sumFireResist", + name = "FIRE_RES", + func = function(sum) return (sum["FIRE_RES"] or 0) end, + }, + -- Nature Resistance - NATURE_RES + { + option = "sumNatureResist", + name = "NATURE_RES", + func = function(sum) return (sum["NATURE_RES"] or 0) end, + }, + -- Frost Resistance - FROST_RES + { + option = "sumFrostResist", + name = "FROST_RES", + func = function(sum) return (sum["FROST_RES"] or 0) end, + }, + -- Shadow Resistance - SHADOW_RES + { + option = "sumShadowResist", + name = "SHADOW_RES", + func = function(sum) return (sum["SHADOW_RES"] or 0) end, + }, + -- Defense - DEFENSE_RATING + { + option = "sumDefense", + name = "DEFENSE", + func = function(sum) return StatLogic:GetEffectFromRating((sum["DEFENSE_RATING"] or 0), "DEFENSE_RATING", calcLevel) end, + }, + -- Avoidance - PARRY, DODGE, MOBMISS + { + option = "sumAvoidance", + name = "AVOIDANCE", + ispercent = true, + func = function(sum) + local dodge, parry, mobMiss, block + if GetParryChance() == 0 then + parry = 0 + else + parry = StatLogic:GetEffectFromRating((sum["PARRY_RATING"] or 0), "PARRY_RATING", calcLevel) + + StatLogic:GetEffectFromRating((sum["DEFENSE_RATING"] or 0), "DEFENSE_RATING", calcLevel) * 0.04 + end + dodge = StatLogic:GetEffectFromRating((sum["DODGE_RATING"] or 0), "DODGE_RATING", calcLevel) + + StatLogic:GetEffectFromRating((sum["DEFENSE_RATING"] or 0), "DEFENSE_RATING", calcLevel) * 0.04 + + StatLogic:GetDodgeFromAgi(sum["AGI"]) + mobMiss = StatLogic:GetEffectFromRating((sum["DEFENSE_RATING"] or 0), "DEFENSE_RATING", calcLevel) * 0.04 + if profileDB.sumAvoidWithBlock then + if GetBlockChance() == 0 then + block = 0 + else + block = StatLogic:GetEffectFromRating((sum["BLOCK_RATING"] or 0), "BLOCK_RATING", calcLevel) + + StatLogic:GetEffectFromRating((sum["DEFENSE_RATING"] or 0), "DEFENSE_RATING", calcLevel) * 0.04 + end + return parry + dodge + mobMiss + block + end + return parry + dodge + mobMiss + end, + ispercent = true, + }, +} +if tpSupport == true then + -- TankPoints + tinsert(summaryCalcData, { + option = "sumTankPoints", + name = "TANKPOINTS", + func = function(diffTable1) + -- Item type + local itemType = diffTable1.itemType + local right + -- Calculate current TankPoints + local tpSource = {} + local TP = TankPoints + local TPTips = TankPointsTooltips + TP:GetSourceData(tpSource, TP_MELEE) + local tpResults = {} + copyTable(tpResults, tpSource) + TP:GetTankPoints(tpResults, TP_MELEE) + -- Update if different + if floor(TP.resultsTable.tankPoints[TP_MELEE]) ~= floor(tpResults.tankPoints[TP_MELEE]) then + copyTable(TP.sourceTable, tpSource) + copyTable(TP.resultsTable, tpResults) + end + ---------------------------------------------------- + -- Calculate TP difference with 1st equipped item -- + ---------------------------------------------------- + local tpTable = {} + -- Set the forceShield arg + local forceShield + -- if not equipped shield and item is shield then force on + -- if not equipped shield and item is not shield then nil + -- if equipped shield and item is shield then nil + -- if equipped shield and item is not shield then force off + if ((diffTable1.diffItemType1 ~= "INVTYPE_SHIELD") and (diffTable1.diffItemType2 ~= "INVTYPE_SHIELD")) and (itemType == "INVTYPE_SHIELD") then + forceShield = true + elseif ((diffTable1.diffItemType1 == "INVTYPE_SHIELD") or (diffTable1.diffItemType2 == "INVTYPE_SHIELD")) and (itemType ~= "INVTYPE_SHIELD") then + forceShield = false + end + -- Get the tp table + TP:GetSourceData(tpTable, TP_MELEE, forceShield) + -- Build changes table + local changes = TPTips:BuildChanges({}, diffTable1) + -- Alter tp table + TP:AlterSourceData(tpTable, changes, forceShield) + -- Calculate TankPoints from tpTable + TP:GetTankPoints(tpTable, TP_MELEE, forceShield) + -- Calculate tp difference + local diff = floor(tpTable.tankPoints[TP_MELEE]) - floor(TP.resultsTable.tankPoints[TP_MELEE]) + + return diff + end, + }) + -- Total Reduction + tinsert(summaryCalcData, { + option = "sumTotalReduction", + name = "TOTALREDUCTION", + ispercent = true, + func = function(diffTable1) + -- Item type + local itemType = diffTable1.itemType + local right + -- Calculate current TankPoints + local tpSource = {} + local TP = TankPoints + local TPTips = TankPointsTooltips + TP:GetSourceData(tpSource, TP_MELEE) + local tpResults = {} + copyTable(tpResults, tpSource) + TP:GetTankPoints(tpResults, TP_MELEE) + -- Update if different + if floor(TP.resultsTable.tankPoints[TP_MELEE]) ~= floor(tpResults.tankPoints[TP_MELEE]) then + copyTable(TP.sourceTable, tpSource) + copyTable(TP.resultsTable, tpResults) + end + ---------------------------------------------------- + -- Calculate TP difference with 1st equipped item -- + ---------------------------------------------------- + local tpTable = {} + -- Set the forceShield arg + local forceShield + -- if not equipped shield and item is shield then force on + -- if not equipped shield and item is not shield then nil + -- if equipped shield and item is shield then nil + -- if equipped shield and item is not shield then force off + if ((diffTable1.diffItemType1 ~= "INVTYPE_SHIELD") and (diffTable1.diffItemType2 ~= "INVTYPE_SHIELD")) and (itemType == "INVTYPE_SHIELD") then + forceShield = true + elseif ((diffTable1.diffItemType1 == "INVTYPE_SHIELD") or (diffTable1.diffItemType2 == "INVTYPE_SHIELD")) and (itemType ~= "INVTYPE_SHIELD") then + forceShield = false + end + -- Get the tp table + TP:GetSourceData(tpTable, TP_MELEE, forceShield) + -- Build changes table + local changes = TPTips:BuildChanges({}, diffTable1) + -- Alter tp table + TP:AlterSourceData(tpTable, changes, forceShield) + -- Calculate TankPoints from tpTable + TP:GetTankPoints(tpTable, TP_MELEE, forceShield) + -- Calculate tp difference + local diff = tpTable.totalReduction[TP_MELEE] - TP.resultsTable.totalReduction[TP_MELEE] + + return diff * 100 + end, + }) + --[[ + -- Avoidance + tinsert(summaryCalcData, { + option = "sumAvoidance", + name = "AVOIDANCE", + ispercent = true, + func = function(diffTable1) + -- Item type + local itemType = diffTable1.itemType + local right + -- Calculate current TankPoints + local tpSource = {} + local TP = TankPoints + local TPTips = TankPointsTooltips + TP:GetSourceData(tpSource, TP_MELEE) + local tpResults = {} + copyTable(tpResults, tpSource) + TP:GetTankPoints(tpResults, TP_MELEE) + -- Update if different + if floor(TP.resultsTable.tankPoints[TP_MELEE]) ~= floor(tpResults.tankPoints[TP_MELEE]) then + copyTable(TP.sourceTable, tpSource) + copyTable(TP.resultsTable, tpResults) + end + ---------------------------------------------------- + -- Calculate TP difference with 1st equipped item -- + ---------------------------------------------------- + local tpTable = {} + -- Set the forceShield arg + local forceShield + -- if not equipped shield and item is shield then force on + -- if not equipped shield and item is not shield then nil + -- if equipped shield and item is shield then nil + -- if equipped shield and item is not shield then force off + if ((diffTable1.diffItemType1 ~= "INVTYPE_SHIELD") and (diffTable1.diffItemType2 ~= "INVTYPE_SHIELD")) and (itemType == "INVTYPE_SHIELD") then + forceShield = true + elseif ((diffTable1.diffItemType1 == "INVTYPE_SHIELD") or (diffTable1.diffItemType2 == "INVTYPE_SHIELD")) and (itemType ~= "INVTYPE_SHIELD") then + forceShield = false + end + -- Get the tp table + TP:GetSourceData(tpTable, TP_MELEE, forceShield) + -- Build changes table + local changes = TPTips:BuildChanges({}, diffTable1) + -- Alter tp table + TP:AlterSourceData(tpTable, changes, forceShield) + -- Calculate TankPoints from tpTable + TP:GetTankPoints(tpTable, TP_MELEE, forceShield) + -- Calculate tp difference + local diff = tpTable.mobMissChance + tpTable.dodgeChance + tpTable.parryChance - TP.resultsTable.mobMissChance - TP.resultsTable.dodgeChance - TP.resultsTable.parryChance + + return diff * 100 + end, + }) + --]] +end + + +function sumSortAlphaComp(a, b) + return a[1] < b[1] +end + +function RatingBuster:StatSummary(tooltip, name, link) + -- Hide stat summary for equipped items + if profileDB.sumIgnoreEquipped and IsEquippedItem(link) then return end + + -- Show stat summary only for highest level armor type and items you can use with uncommon quality and up + if profileDB.sumIgnoreUnused then + local _, _, itemRarity, _, _, _, itemSubType, _, itemEquipLoc = GetItemInfo(link) + + -- Check rarity + if not itemRarity or itemRarity < 2 then + return + end + + -- Check armor type + if armorTypes[itemSubType] and (not classArmorTypes[class][itemSubType]) and itemEquipLoc ~= "INVTYPE_CLOAK" then + --self:Print("Check armor type", itemSubType) + return + end + + -- Check for Red item types + local tName = tooltip:GetName() + if _G[tName.."TextRight3"]:GetText() and select(2, _G[tName.."TextRight3"]:GetTextColor()) < 0.2 then + --self:Print("TextRight3", select(2, _G[tName.."TextRight3"]:GetTextColor())) + return + end + if _G[tName.."TextRight4"]:GetText() and select(2, _G[tName.."TextRight4"]:GetTextColor()) < 0.2 then + --self:Print("TextRight4", select(2, _G[tName.."TextRight4"]:GetTextColor())) + return + end + if select(2, _G[tName.."TextLeft3"]:GetTextColor()) < 0.2 then + --self:Print("TextLeft3", select(2, _G[tName.."TextLeft3"]:GetTextColor())) + return + end + if select(2, _G[tName.."TextLeft4"]:GetTextColor()) < 0.2 then + --self:Print("TextLeft4", select(2, _G[tName.."TextLeft4"]:GetTextColor())) + return + end + end + + -- Ignore enchants and gems on items when calculating the stat summary + local red = profileDB.sumGemRed.gemID + local yellow = profileDB.sumGemYellow.gemID + local blue = profileDB.sumGemBlue.gemID + local meta = profileDB.sumGemMeta.gemID + + if profileDB.sumIgnoreEnchant then + link = StatLogic:RemoveEnchant(link) + end + if profileDB.sumIgnoreGems then + link = StatLogic:RemoveGem(link) + else + link = StatLogic:BuildGemmedTooltip(link, red, yellow, blue, meta) + end + + -- Diff Display Style + -- Main Tooltip: tooltipLevel = 0 + -- Compare Tooltip 1: tooltipLevel = 1 + -- Compare Tooltip 2: tooltipLevel = 2 + local id + local tooltipLevel = 0 + local mainTooltip = tooltip + -- Determine tooltipLevel and id + if profileDB.calcDiff and (profileDB.sumDiffStyle == "comp") then + -- Obtain main tooltip + for _, t in pairs(TipHooker.SupportedTooltips) do + if mainTooltip:IsOwned(t) then + mainTooltip = t + break + end + end + for _, t in pairs(TipHooker.SupportedTooltips) do + if mainTooltip:IsOwned(t) then + mainTooltip = t + break + end + end + -- Detemine tooltip level + local _, mainlink, difflink1, difflink2 = StatLogic:GetDiffID(mainTooltip, profileDB.sumIgnoreEnchant, profileDB.sumIgnoreGems, red, yellow, blue, meta) + if link == mainlink then + tooltipLevel = 0 + elseif link == difflink1 then + tooltipLevel = 1 + elseif link == difflink2 then + tooltipLevel = 2 + end + -- Construct id + if tooltipLevel > 0 then + id = link..mainlink + else + id = "sum"..link + end + else + id = StatLogic:GetDiffID(link, profileDB.sumIgnoreEnchant, profileDB.sumIgnoreGems, red, yellow, blue, meta) + end + + -- Check Cache + if cache[id] then + if table.maxn(cache[id]) == 0 then return end + -- Write Tooltip + if profileDB.sumBlankLine then + tooltip:AddLine(" ") + end + if profileDB.sumShowTitle then + tooltip:AddLine(HIGHLIGHT_FONT_COLOR_CODE..L["Stat Summary"]..FONT_COLOR_CODE_CLOSE) + if profileDB.sumShowIcon then + tooltip:AddTexture("Interface\\AddOns\\RatingBuster\\images\\Sigma") + end + end + for _, o in ipairs(cache[id]) do + tooltip:AddDoubleLine(o[1], o[2]) + end + if profileDB.sumBlankLineAfter then + tooltip:AddLine(" ") + end + return + end + + ------------------------- + -- Build Summary Table -- + local statData = {} + statData.sum = StatLogic:GetSum(link) + if not statData.sum then return end + if not profileDB.calcSum then + statData.sum = nil + end + + -- Ignore bags + if not StatLogic:GetDiff(link) then return end + + -- Get Diff Data + if profileDB.calcDiff then + if profileDB.sumDiffStyle == "comp" then + if tooltipLevel > 0 then + statData.diff1 = select(tooltipLevel, StatLogic:GetDiff(mainTooltip, nil, nil, profileDB.sumIgnoreEnchant, profileDB.sumIgnoreGems, red, yellow, blue, meta)) + end + else + statData.diff1, statData.diff2 = StatLogic:GetDiff(link, nil, nil, profileDB.sumIgnoreEnchant, profileDB.sumIgnoreGems, red, yellow, blue, meta) + end + end + -- Apply Base Stat Mods + for _, v in pairs(statData) do + v["STR"] = (v["STR"] or 0) + v["AGI"] = (v["AGI"] or 0) + v["STA"] = (v["STA"] or 0) + v["INT"] = (v["INT"] or 0) + v["SPI"] = (v["SPI"] or 0) + end + if profileDB.enableStatMods then + for _, v in pairs(statData) do + v["STR"] = v["STR"] * StatLogic:GetStatMod("MOD_STR") + v["AGI"] = v["AGI"] * StatLogic:GetStatMod("MOD_AGI") + v["STA"] = v["STA"] * StatLogic:GetStatMod("MOD_STA") + v["INT"] = v["INT"] * StatLogic:GetStatMod("MOD_INT") + v["SPI"] = v["SPI"] * StatLogic:GetStatMod("MOD_SPI") + end + end + -- Summary Table + --[[ + local statData = { + sum = {}, + diff1 = {}, + diff2 = {}, + } + if profileDB.sumHP then + local d = {name = "HEALTH"} + for k, sum in pairs(data) do + d[k] = ((sum["HEALTH"] or 0) + (sum["STA"] * 10)) * StatLogic:GetStatMod("MOD_HEALTH") + end + tinsert(summary, d) + end + local summaryCalcData = { + -- Health - HEALTH, STA + sumHP = { + name = "HEALTH", + func = function(sum) return ((sum["HEALTH"] or 0) + (sum["STA"] * 10)) * StatLogic:GetStatMod("MOD_HEALTH") end, + ispercent = false, + }, + } + --]] + local summary = {} + for _, calcData in pairs(summaryCalcData) do + if profileDB[calcData.option] then + local entry = { + name = calcData.name, + ispercent = calcData.ispercent, + } + for statDataType, statTable in pairs(statData) do + if tpSupport and ((calcData.name == "TANKPOINTS") or (calcData.name == "TOTALREDUCTION")) and (statDataType == "sum") then + entry[statDataType] = nil + else + entry[statDataType] = calcData.func(statTable) + end + end + tinsert(summary, entry) + end + end + + local calcSum = profileDB.calcSum + local calcDiff = profileDB.calcDiff + -- Weapon Skill - WEAPON_RATING + if profileDB.sumWeaponSkill then + local weapon = {} + if calcSum then + for id, v in pairs(statData.sum) do + if strsub(id, -13) == "WEAPON_RATING" then + weapon[id] = true + local entry = { + name = strsub(id, 1, -8), + } + entry.sum = StatLogic:GetEffectFromRating(v, CR_WEAPON_SKILL, calcLevel) + if calcDiff and statData.diff1 then + entry.diff1 = StatLogic:GetEffectFromRating((statData.diff1[id] or 0), CR_WEAPON_SKILL, calcLevel) + if statData.diff2 then + entry.diff2 = StatLogic:GetEffectFromRating((statData.diff2[id] or 0), CR_WEAPON_SKILL, calcLevel) + end + end + tinsert(summary, entry) + end + end + end + if calcDiff and statData.diff1 then + for id, v in pairs(statData.diff1) do + if (strsub(id, -13) == "WEAPON_RATING") and not weapon[id] then + weapon[id] = true + local entry = { + name = strsub(id, 1, -8), + sum = 0, + } + entry.diff1 = StatLogic:GetEffectFromRating(v, CR_WEAPON_SKILL, calcLevel) + if statData.diff2 then + entry.diff2 = StatLogic:GetEffectFromRating((statData.diff2[id] or 0), CR_WEAPON_SKILL, calcLevel) + end + tinsert(summary, entry) + end + end + if statData.diff2 then + for id, v in pairs(statData.diff2) do + if (strsub(id, -13) == "WEAPON_RATING") and not weapon[id] then + weapon[id] = true + local entry = { + name = strsub(id, 1, -8), + sum = 0, + diff1 = 0, + } + entry.diff2 = StatLogic:GetEffectFromRating(v, CR_WEAPON_SKILL, calcLevel) + tinsert(summary, entry) + end + end + end + end + end + + local showZeroValueStat = profileDB.showZeroValueStat + ------------------------ + -- Build Output Table -- + local output = {} + for _, t in ipairs(summary) do + local n, s, d1, d2, ispercent = t.name, t.sum, t.diff1, t.diff2, t.ispercent + local right, left + local skip + if not showZeroValueStat then + if (s == 0 or not s) and (d1 == 0 or not d1) and (d2 == 0 or not d2) then + skip = true + end + end + if not skip then + if calcSum and calcDiff then + local d = ((not s) or ((s - floor(s)) == 0)) and ((not d1) or ((d1 - floor(d1)) == 0)) and ((not d2) or ((d2 - floor(d2)) == 0)) + if s then + if d then + s = format("%d", s) + elseif ispercent then + s = format("%.2f%%", s) + else + s = format("%.1f", s) + end + if d1 then + if d then + d1 = colorNum(format("%+d", d1), d1) + elseif ispercent then + d1 = colorNum(format("%+.2f%%", d1), d1) + else + d1 = colorNum(format("%+.1f", d1), d1) + end + if d2 then + if d then + d2 = colorNum(format("%+d", d2), d2) + elseif ispercent then + d2 = colorNum(format("%+.2f%%", d2), d2) + else + d2 = colorNum(format("%+.1f", d2), d2) + end + right = format("%s (%s||%s)", s, d1, d2) + else + right = format("%s (%s)", s, d1) + end + else + right = s + end + else + if d1 then + if d then + d1 = colorNum(format("%+d", d1), d1) + elseif ispercent then + d1 = colorNum(format("%+.2f%%", d1), d1) + else + d1 = colorNum(format("%+.1f", d1), d1) + end + if d2 then + if d then + d2 = colorNum(format("%+d", d2), d2) + elseif ispercent then + d2 = colorNum(format("%+.2f%%", d2), d2) + else + d2 = colorNum(format("%+.1f", d2), d2) + end + right = format("(%s||%s)", d1, d2) + else + right = format("(%s)", d1) + end + end + end + elseif calcSum then + if s then + if (s - floor(s)) == 0 then + s = format("%d", s) + elseif ispercent then + s = format("%.2f%%", s) + else + s = format("%.1f", s) + end + right = s + end + elseif calcDiff then + local d = ((not d1) or (d1 - floor(d1)) == 0) and ((not d2) or ((d2 - floor(d2)) == 0)) + if d1 then + if d then + d1 = colorNum(format("%+d", d1), d1) + elseif ispercent then + d1 = colorNum(format("%+.2f%%", d1), d1) + else + d1 = colorNum(format("%+.1f", d1), d1) + end + if d2 then + if d then + d2 = colorNum(format("%+d", d2), d2) + elseif ispercent then + d2 = colorNum(format("%+.2f%%", d2), d2) + else + d2 = colorNum(format("%+.1f", d2), d2) + end + right = format("%s||%s", d1, d2) + else + right = d1 + end + end + end + if right then + if n == "TANKPOINTS" then + if tpSupport then + left = tpLocale["TankPoints"] + else + left = "TankPoints" + end + elseif n == "TOTALREDUCTION" then + if tpSupport then + left = tpLocale["Total Reduction"] + else + left = "Total Reduction" + end + else + left = StatLogic:GetStatNameFromID(n) + end + tinsert(output, {left, right}) + end + end + end + -- sort alphabetically if option enabled + if profileDB.sumSortAlpha then + tsort(output, sumSortAlphaComp) + end + -- Write cache + cache[id] = output + if table.maxn(output) == 0 then return end + ------------------- + -- Write Tooltip -- + if profileDB.sumBlankLine then + tooltip:AddLine(" ") + end + if profileDB.sumShowTitle then + tooltip:AddLine(HIGHLIGHT_FONT_COLOR_CODE..L["Stat Summary"]..FONT_COLOR_CODE_CLOSE) + if profileDB.sumShowIcon then + tooltip:AddTexture("Interface\\AddOns\\RatingBuster\\images\\Sigma") + end + end + for _, o in ipairs(output) do + tooltip:AddDoubleLine(o[1], o[2]) + end + if profileDB.sumBlankLineAfter then + tooltip:AddLine(" ") + end +end + + +-- RatingBuster:Bench(1000) +--------- +-- self:SplitDoJoin("+24 Agility/+4 Stamina, +4 Dodge and +4 Spell Crit/+5 Spirit", {"/", " and ", ","}) +-- 1000 times: 0.16 - 0.18 without Compost +-- 1000 times: 0.22 - 0.24 with Compost +--------- +-- RatingBuster.ProcessTooltip(ItemRefTooltip, link) +-- 1000 times: 0.31 sec - 0.7.6 +-- 1000 times: 0.29 sec - 0. +-- 1000 times: 0.24 sec - 0.8.58.0 +--------- +-- strjoin 1000000 times: 0.46 +-- .. 1000000 times: 0.27 +-------------- +function RatingBuster:Bench(k) + local t1 = GetTime() + local link = GetInventoryItemLink("player", 12) + for i = 1, k, 1 do + --------------------------------------------------------------------------- + --self:SplitDoJoin("+24 Agility/+4 Stamina, +4 Dodge and +4 Spell Crit/+5 Spirit", {"/", " and ", ","}) + --------------------------------------------------------------------------- + ItemRefTooltip:SetInventoryItem("player", 12) + RatingBuster.ProcessTooltip(ItemRefTooltip, link) + --------------------------------------------------------------------------- + --ItemRefTooltip:SetScript("OnTooltipSetItem", function(frame, ...) RatingBuster:Print("OnTooltipSetItem") end) + ---------------------------------------------------------------------- + --local h = strjoin("", "test", "123") + --local h = "test".."123" + -------------------------------------------------------------------------------- + end + return GetTime() - t1 +end diff --git a/RatingBuster.toc b/RatingBuster.toc new file mode 100644 index 0000000..d13fb7d --- /dev/null +++ b/RatingBuster.toc @@ -0,0 +1,40 @@ +## Interface: 20400 +## Title: RatingBuster |cff7fff7f -Ace2-|r +## Notes: Item stat breakdown, analysis and comparation +## Notes-zhTW: 裝備數值解析與比較 +## Author: Whitetooth +## X-eMail: hotdogee [at] gmail [dot] com +## SavedVariables: RatingBusterDB +## OptionalDeps: Ace2, TipHookerLib, StatLogicLib, UTF8, LibBabble-Inventory-3.0, Waterfall-1.0, TankPoints +## X-Embeds: Ace2, TipHookerLib, StatLogicLib, UTF8, LibBabble-Inventory-3.0, Waterfall-1.0 +## X-Category: Interface Enhancements +## X-RelSite-WoWI: 5819 +## X-RelSite-Curse: 4991 +## X-License: GPL v2 +## X-Encoding: UTF-8 + +##################### +# Non-Ace Libraries # +##################### +UTF8\utf8data.lua +UTF8\utf8.lua + +################# +# Ace Libraries # +################# +embeds.xml + +###################### +# Localization Files # +###################### +RatingBuster-Locale-enUS.lua +RatingBuster-Locale-zhCN.lua +RatingBuster-Locale-zhTW.lua +RatingBuster-Locale-deDE.lua +RatingBuster-Locale-frFR.lua +RatingBuster-Locale-koKR.lua + +######## +# Core # +######## +RatingBuster.lua \ No newline at end of file diff --git a/UTF8/utf8.lua b/UTF8/utf8.lua new file mode 100644 index 0000000..8fdafa1 --- /dev/null +++ b/UTF8/utf8.lua @@ -0,0 +1,327 @@ +-- $Id: utf8.lua 147 2007-01-04 00:57:00Z pasta $ +-- +-- Provides UTF-8 aware string functions implemented in pure lua: +-- * string.utf8len(s) +-- * string.utf8sub(s, i, j) +-- * string.utf8reverse(s) +-- +-- If utf8data.lua (containing the lower<->upper case mappings) is loaded, these +-- additional functions are available: +-- * string.utf8upper(s) +-- * string.utf8lower(s) +-- +-- All functions behave as their non UTF-8 aware counterparts with the exception +-- that UTF-8 characters are used instead of bytes for all units. + +--[[ +Copyright (c) 2006-2007, Kyle Smith +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the author nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + +-- ABNF from RFC 3629 +-- +-- UTF8-octets = *( UTF8-char ) +-- UTF8-char = UTF8-1 / UTF8-2 / UTF8-3 / UTF8-4 +-- UTF8-1 = %x00-7F +-- UTF8-2 = %xC2-DF UTF8-tail +-- UTF8-3 = %xE0 %xA0-BF UTF8-tail / %xE1-EC 2( UTF8-tail ) / +-- %xED %x80-9F UTF8-tail / %xEE-EF 2( UTF8-tail ) +-- UTF8-4 = %xF0 %x90-BF 2( UTF8-tail ) / %xF1-F3 3( UTF8-tail ) / +-- %xF4 %x80-8F 2( UTF8-tail ) +-- UTF8-tail = %x80-BF +-- + +-- returns the number of bytes used by the UTF-8 character at byte i in s +-- also doubles as a UTF-8 character validator +local function utf8charbytes (s, i) + -- argument defaults + i = i or 1 + + -- argument checking + if type(s) ~= "string" then + error("bad argument #1 to 'utf8charbytes' (string expected, got ".. type(s).. ")") + end + if type(i) ~= "number" then + error("bad argument #2 to 'utf8charbytes' (number expected, got ".. type(i).. ")") + end + + local c = s:byte(i) + + -- determine bytes needed for character, based on RFC 3629 + -- validate byte 1 + if c > 0 and c <= 127 then + -- UTF8-1 + return 1 + + elseif c >= 194 and c <= 223 then + -- UTF8-2 + local c2 = s:byte(i + 1) + + if not c2 then + error("UTF-8 string terminated early") + end + + -- validate byte 2 + if c2 < 128 or c2 > 191 then + error("Invalid UTF-8 character") + end + + return 2 + + elseif c >= 224 and c <= 239 then + -- UTF8-3 + local c2 = s:byte(i + 1) + local c3 = s:byte(i + 2) + + if not c2 or not c3 then + error("UTF-8 string terminated early") + end + + -- validate byte 2 + if c == 224 and (c2 < 160 or c2 > 191) then + error("Invalid UTF-8 character") + elseif c == 237 and (c2 < 128 or c2 > 159) then + error("Invalid UTF-8 character") + elseif c2 < 128 or c2 > 191 then + error("Invalid UTF-8 character") + end + + -- validate byte 3 + if c3 < 128 or c3 > 191 then + error("Invalid UTF-8 character") + end + + return 3 + + elseif c >= 240 and c <= 244 then + -- UTF8-4 + local c2 = s:byte(i + 1) + local c3 = s:byte(i + 2) + local c4 = s:byte(i + 3) + + if not c2 or not c3 or not c4 then + error("UTF-8 string terminated early") + end + + -- validate byte 2 + if c == 240 and (c2 < 144 or c2 > 191) then + error("Invalid UTF-8 character") + elseif c == 244 and (c2 < 128 or c2 > 143) then + error("Invalid UTF-8 character") + elseif c2 < 128 or c2 > 191 then + error("Invalid UTF-8 character") + end + + -- validate byte 3 + if c3 < 128 or c3 > 191 then + error("Invalid UTF-8 character") + end + + -- validate byte 4 + if c4 < 128 or c4 > 191 then + error("Invalid UTF-8 character") + end + + return 4 + + else + error("Invalid UTF-8 character") + end +end + + +-- returns the number of characters in a UTF-8 string +local function utf8len (s) + -- argument checking + if type(s) ~= "string" then + error("bad argument #1 to 'utf8len' (string expected, got ".. type(s).. ")") + end + + local pos = 1 + local bytes = s:len() + local len = 0 + + while pos <= bytes and len ~= chars do + local c = s:byte(pos) + len = len + 1 + + pos = pos + utf8charbytes(s, pos) + end + + if chars ~= nil then + return pos - 1 + end + + return len +end + +-- install in the string library +if not string.utf8len then + string.utf8len = utf8len +end + + +-- functions identically to string.sub except that i and j are UTF-8 characters +-- instead of bytes +local function utf8sub (s, i, j) + -- argument defaults + j = j or -1 + + -- argument checking + if type(s) ~= "string" then + error("bad argument #1 to 'utf8sub' (string expected, got ".. type(s).. ")") + end + if type(i) ~= "number" then + error("bad argument #2 to 'utf8sub' (number expected, got ".. type(i).. ")") + end + if type(j) ~= "number" then + error("bad argument #3 to 'utf8sub' (number expected, got ".. type(j).. ")") + end + + local pos = 1 + local bytes = s:len() + local len = 0 + + -- only set l if i or j is negative + local l = (i >= 0 and j >= 0) or s:utf8len() + local startChar = (i >= 0) and i or l + i + 1 + local endChar = (j >= 0) and j or l + j + 1 + + -- can't have start before end! + if startChar > endChar then + return "" + end + + -- byte offsets to pass to string.sub + local startByte, endByte = 1, bytes + + while pos <= bytes do + len = len + 1 + + if len == startChar then + startByte = pos + end + + pos = pos + utf8charbytes(s, pos) + + if len == endChar then + endByte = pos - 1 + break + end + end + + return s:sub(startByte, endByte) +end + +-- install in the string library +if not string.utf8sub then + string.utf8sub = utf8sub +end + + +-- replace UTF-8 characters based on a mapping table +local function utf8replace (s, mapping) + -- argument checking + if type(s) ~= "string" then + error("bad argument #1 to 'utf8replace' (string expected, got ".. type(s).. ")") + end + if type(mapping) ~= "table" then + error("bad argument #2 to 'utf8replace' (table expected, got ".. type(mapping).. ")") + end + + local pos = 1 + local bytes = s:len() + local charbytes + local newstr = "" + + while pos <= bytes do + charbytes = utf8charbytes(s, pos) + local c = s:sub(pos, pos + charbytes - 1) + + newstr = newstr .. (mapping[c] or c) + + pos = pos + charbytes + end + + return newstr +end + + +-- identical to string.upper except it knows about unicode simple case conversions +local function utf8upper (s) + return utf8replace(s, utf8_lc_uc) +end + +-- install in the string library +if not string.utf8upper and utf8_lc_uc then + string.utf8upper = utf8upper +end + + +-- identical to string.lower except it knows about unicode simple case conversions +local function utf8lower (s) + return utf8replace(s, utf8_uc_lc) +end + +-- install in the string library +if not string.utf8lower and utf8_uc_lc then + string.utf8lower = utf8lower +end + + +-- identical to string.reverse except that it supports UTF-8 +local function utf8reverse (s) + -- argument checking + if type(s) ~= "string" then + error("bad argument #1 to 'utf8reverse' (string expected, got ".. type(s).. ")") + end + + local bytes = s:len() + local pos = bytes + local charbytes + local newstr = "" + + while pos > 0 do + c = s:byte(pos) + while c >= 128 and c <= 191 do + pos = pos - 1 + c = s:byte(pos) + end + + charbytes = utf8charbytes(s, pos) + + newstr = newstr .. s:sub(pos, pos + charbytes - 1) + + pos = pos - 1 + end + + return newstr +end + +-- install in the string library +if not string.utf8reverse then + string.utf8reverse = utf8reverse +end diff --git a/UTF8/utf8data.lua b/UTF8/utf8data.lua new file mode 100644 index 0000000..07bfda1 --- /dev/null +++ b/UTF8/utf8data.lua @@ -0,0 +1,1860 @@ +utf8_lc_uc = { + ["a"] = "A", + ["b"] = "B", + ["c"] = "C", + ["d"] = "D", + ["e"] = "E", + ["f"] = "F", + ["g"] = "G", + ["h"] = "H", + ["i"] = "I", + ["j"] = "J", + ["k"] = "K", + ["l"] = "L", + ["m"] = "M", + ["n"] = "N", + ["o"] = "O", + ["p"] = "P", + ["q"] = "Q", + ["r"] = "R", + ["s"] = "S", + ["t"] = "T", + ["u"] = "U", + ["v"] = "V", + ["w"] = "W", + ["x"] = "X", + ["y"] = "Y", + ["z"] = "Z", + ["µ"] = "Μ", + ["à"] = "À", + ["á"] = "Á", + ["â"] = "Â", + ["ã"] = "Ã", + ["ä"] = "Ä", + ["å"] = "Å", + ["æ"] = "Æ", + ["ç"] = "Ç", + ["è"] = "È", + ["é"] = "É", + ["ê"] = "Ê", + ["ë"] = "Ë", + ["ì"] = "Ì", + ["í"] = "Í", + ["î"] = "Î", + ["ï"] = "Ï", + ["ð"] = "Ð", + ["ñ"] = "Ñ", + ["ò"] = "Ò", + ["ó"] = "Ó", + ["ô"] = "Ô", + ["õ"] = "Õ", + ["ö"] = "Ö", + ["ø"] = "Ø", + ["ù"] = "Ù", + ["ú"] = "Ú", + ["û"] = "Û", + ["ü"] = "Ü", + ["ý"] = "Ý", + ["þ"] = "Þ", + ["ÿ"] = "Ÿ", + ["ā"] = "Ā", + ["ă"] = "Ă", + ["ą"] = "Ą", + ["ć"] = "Ć", + ["ĉ"] = "Ĉ", + ["ċ"] = "Ċ", + ["č"] = "Č", + ["ď"] = "Ď", + ["đ"] = "Đ", + ["ē"] = "Ē", + ["ĕ"] = "Ĕ", + ["ė"] = "Ė", + ["ę"] = "Ę", + ["ě"] = "Ě", + ["ĝ"] = "Ĝ", + ["ğ"] = "Ğ", + ["ġ"] = "Ġ", + ["ģ"] = "Ģ", + ["ĥ"] = "Ĥ", + ["ħ"] = "Ħ", + ["ĩ"] = "Ĩ", + ["ī"] = "Ī", + ["ĭ"] = "Ĭ", + ["į"] = "Į", + ["ı"] = "I", + ["ij"] = "IJ", + ["ĵ"] = "Ĵ", + ["ķ"] = "Ķ", + ["ĺ"] = "Ĺ", + ["ļ"] = "Ļ", + ["ľ"] = "Ľ", + ["ŀ"] = "Ŀ", + ["ł"] = "Ł", + ["ń"] = "Ń", + ["ņ"] = "Ņ", + ["ň"] = "Ň", + ["ŋ"] = "Ŋ", + ["ō"] = "Ō", + ["ŏ"] = "Ŏ", + ["ő"] = "Ő", + ["œ"] = "Œ", + ["ŕ"] = "Ŕ", + ["ŗ"] = "Ŗ", + ["ř"] = "Ř", + ["ś"] = "Ś", + ["ŝ"] = "Ŝ", + ["ş"] = "Ş", + ["š"] = "Š", + ["ţ"] = "Ţ", + ["ť"] = "Ť", + ["ŧ"] = "Ŧ", + ["ũ"] = "Ũ", + ["ū"] = "Ū", + ["ŭ"] = "Ŭ", + ["ů"] = "Ů", + ["ű"] = "Ű", + ["ų"] = "Ų", + ["ŵ"] = "Ŵ", + ["ŷ"] = "Ŷ", + ["ź"] = "Ź", + ["ż"] = "Ż", + ["ž"] = "Ž", + ["ſ"] = "S", + ["ƀ"] = "Ƀ", + ["ƃ"] = "Ƃ", + ["ƅ"] = "Ƅ", + ["ƈ"] = "Ƈ", + ["ƌ"] = "Ƌ", + ["ƒ"] = "Ƒ", + ["ƕ"] = "Ƕ", + ["ƙ"] = "Ƙ", + ["ƚ"] = "Ƚ", + ["ƞ"] = "Ƞ", + ["ơ"] = "Ơ", + ["ƣ"] = "Ƣ", + ["ƥ"] = "Ƥ", + ["ƨ"] = "Ƨ", + ["ƭ"] = "Ƭ", + ["ư"] = "Ư", + ["ƴ"] = "Ƴ", + ["ƶ"] = "Ƶ", + ["ƹ"] = "Ƹ", + ["ƽ"] = "Ƽ", + ["ƿ"] = "Ƿ", + ["Dž"] = "DŽ", + ["dž"] = "DŽ", + ["Lj"] = "LJ", + ["lj"] = "LJ", + ["Nj"] = "NJ", + ["nj"] = "NJ", + ["ǎ"] = "Ǎ", + ["ǐ"] = "Ǐ", + ["ǒ"] = "Ǒ", + ["ǔ"] = "Ǔ", + ["ǖ"] = "Ǖ", + ["ǘ"] = "Ǘ", + ["ǚ"] = "Ǚ", + ["ǜ"] = "Ǜ", + ["ǝ"] = "Ǝ", + ["ǟ"] = "Ǟ", + ["ǡ"] = "Ǡ", + ["ǣ"] = "Ǣ", + ["ǥ"] = "Ǥ", + ["ǧ"] = "Ǧ", + ["ǩ"] = "Ǩ", + ["ǫ"] = "Ǫ", + ["ǭ"] = "Ǭ", + ["ǯ"] = "Ǯ", + ["Dz"] = "DZ", + ["dz"] = "DZ", + ["ǵ"] = "Ǵ", + ["ǹ"] = "Ǹ", + ["ǻ"] = "Ǻ", + ["ǽ"] = "Ǽ", + ["ǿ"] = "Ǿ", + ["ȁ"] = "Ȁ", + ["ȃ"] = "Ȃ", + ["ȅ"] = "Ȅ", + ["ȇ"] = "Ȇ", + ["ȉ"] = "Ȉ", + ["ȋ"] = "Ȋ", + ["ȍ"] = "Ȍ", + ["ȏ"] = "Ȏ", + ["ȑ"] = "Ȑ", + ["ȓ"] = "Ȓ", + ["ȕ"] = "Ȕ", + ["ȗ"] = "Ȗ", + ["ș"] = "Ș", + ["ț"] = "Ț", + ["ȝ"] = "Ȝ", + ["ȟ"] = "Ȟ", + ["ȣ"] = "Ȣ", + ["ȥ"] = "Ȥ", + ["ȧ"] = "Ȧ", + ["ȩ"] = "Ȩ", + ["ȫ"] = "Ȫ", + ["ȭ"] = "Ȭ", + ["ȯ"] = "Ȯ", + ["ȱ"] = "Ȱ", + ["ȳ"] = "Ȳ", + ["ȼ"] = "Ȼ", + ["ɂ"] = "Ɂ", + ["ɇ"] = "Ɇ", + ["ɉ"] = "Ɉ", + ["ɋ"] = "Ɋ", + ["ɍ"] = "Ɍ", + ["ɏ"] = "Ɏ", + ["ɓ"] = "Ɓ", + ["ɔ"] = "Ɔ", + ["ɖ"] = "Ɖ", + ["ɗ"] = "Ɗ", + ["ə"] = "Ə", + ["ɛ"] = "Ɛ", + ["ɠ"] = "Ɠ", + ["ɣ"] = "Ɣ", + ["ɨ"] = "Ɨ", + ["ɩ"] = "Ɩ", + ["ɫ"] = "Ɫ", + ["ɯ"] = "Ɯ", + ["ɲ"] = "Ɲ", + ["ɵ"] = "Ɵ", + ["ɽ"] = "Ɽ", + ["ʀ"] = "Ʀ", + ["ʃ"] = "Ʃ", + ["ʈ"] = "Ʈ", + ["ʉ"] = "Ʉ", + ["ʊ"] = "Ʊ", + ["ʋ"] = "Ʋ", + ["ʌ"] = "Ʌ", + ["ʒ"] = "Ʒ", + ["ͅ"] = "Ι", + ["ͻ"] = "Ͻ", + ["ͼ"] = "Ͼ", + ["ͽ"] = "Ͽ", + ["ά"] = "Ά", + ["έ"] = "Έ", + ["ή"] = "Ή", + ["ί"] = "Ί", + ["α"] = "Α", + ["β"] = "Β", + ["γ"] = "Γ", + ["δ"] = "Δ", + ["ε"] = "Ε", + ["ζ"] = "Ζ", + ["η"] = "Η", + ["θ"] = "Θ", + ["ι"] = "Ι", + ["κ"] = "Κ", + ["λ"] = "Λ", + ["μ"] = "Μ", + ["ν"] = "Ν", + ["ξ"] = "Ξ", + ["ο"] = "Ο", + ["π"] = "Π", + ["ρ"] = "Ρ", + ["ς"] = "Σ", + ["σ"] = "Σ", + ["τ"] = "Τ", + ["υ"] = "Υ", + ["φ"] = "Φ", + ["χ"] = "Χ", + ["ψ"] = "Ψ", + ["ω"] = "Ω", + ["ϊ"] = "Ϊ", + ["ϋ"] = "Ϋ", + ["ό"] = "Ό", + ["ύ"] = "Ύ", + ["ώ"] = "Ώ", + ["ϐ"] = "Β", + ["ϑ"] = "Θ", + ["ϕ"] = "Φ", + ["ϖ"] = "Π", + ["ϙ"] = "Ϙ", + ["ϛ"] = "Ϛ", + ["ϝ"] = "Ϝ", + ["ϟ"] = "Ϟ", + ["ϡ"] = "Ϡ", + ["ϣ"] = "Ϣ", + ["ϥ"] = "Ϥ", + ["ϧ"] = "Ϧ", + ["ϩ"] = "Ϩ", + ["ϫ"] = "Ϫ", + ["ϭ"] = "Ϭ", + ["ϯ"] = "Ϯ", + ["ϰ"] = "Κ", + ["ϱ"] = "Ρ", + ["ϲ"] = "Ϲ", + ["ϵ"] = "Ε", + ["ϸ"] = "Ϸ", + ["ϻ"] = "Ϻ", + ["а"] = "А", + ["б"] = "Б", + ["в"] = "В", + ["г"] = "Г", + ["д"] = "Д", + ["е"] = "Е", + ["ж"] = "Ж", + ["з"] = "З", + ["и"] = "И", + ["й"] = "Й", + ["к"] = "К", + ["л"] = "Л", + ["м"] = "М", + ["н"] = "Н", + ["о"] = "О", + ["п"] = "П", + ["р"] = "Р", + ["с"] = "С", + ["т"] = "Т", + ["у"] = "У", + ["ф"] = "Ф", + ["х"] = "Х", + ["ц"] = "Ц", + ["ч"] = "Ч", + ["ш"] = "Ш", + ["щ"] = "Щ", + ["ъ"] = "Ъ", + ["ы"] = "Ы", + ["ь"] = "Ь", + ["э"] = "Э", + ["ю"] = "Ю", + ["я"] = "Я", + ["ѐ"] = "Ѐ", + ["ё"] = "Ё", + ["ђ"] = "Ђ", + ["ѓ"] = "Ѓ", + ["є"] = "Є", + ["ѕ"] = "Ѕ", + ["і"] = "І", + ["ї"] = "Ї", + ["ј"] = "Ј", + ["љ"] = "Љ", + ["њ"] = "Њ", + ["ћ"] = "Ћ", + ["ќ"] = "Ќ", + ["ѝ"] = "Ѝ", + ["ў"] = "Ў", + ["џ"] = "Џ", + ["ѡ"] = "Ѡ", + ["ѣ"] = "Ѣ", + ["ѥ"] = "Ѥ", + ["ѧ"] = "Ѧ", + ["ѩ"] = "Ѩ", + ["ѫ"] = "Ѫ", + ["ѭ"] = "Ѭ", + ["ѯ"] = "Ѯ", + ["ѱ"] = "Ѱ", + ["ѳ"] = "Ѳ", + ["ѵ"] = "Ѵ", + ["ѷ"] = "Ѷ", + ["ѹ"] = "Ѹ", + ["ѻ"] = "Ѻ", + ["ѽ"] = "Ѽ", + ["ѿ"] = "Ѿ", + ["ҁ"] = "Ҁ", + ["ҋ"] = "Ҋ", + ["ҍ"] = "Ҍ", + ["ҏ"] = "Ҏ", + ["ґ"] = "Ґ", + ["ғ"] = "Ғ", + ["ҕ"] = "Ҕ", + ["җ"] = "Җ", + ["ҙ"] = "Ҙ", + ["қ"] = "Қ", + ["ҝ"] = "Ҝ", + ["ҟ"] = "Ҟ", + ["ҡ"] = "Ҡ", + ["ң"] = "Ң", + ["ҥ"] = "Ҥ", + ["ҧ"] = "Ҧ", + ["ҩ"] = "Ҩ", + ["ҫ"] = "Ҫ", + ["ҭ"] = "Ҭ", + ["ү"] = "Ү", + ["ұ"] = "Ұ", + ["ҳ"] = "Ҳ", + ["ҵ"] = "Ҵ", + ["ҷ"] = "Ҷ", + ["ҹ"] = "Ҹ", + ["һ"] = "Һ", + ["ҽ"] = "Ҽ", + ["ҿ"] = "Ҿ", + ["ӂ"] = "Ӂ", + ["ӄ"] = "Ӄ", + ["ӆ"] = "Ӆ", + ["ӈ"] = "Ӈ", + ["ӊ"] = "Ӊ", + ["ӌ"] = "Ӌ", + ["ӎ"] = "Ӎ", + ["ӏ"] = "Ӏ", + ["ӑ"] = "Ӑ", + ["ӓ"] = "Ӓ", + ["ӕ"] = "Ӕ", + ["ӗ"] = "Ӗ", + ["ә"] = "Ә", + ["ӛ"] = "Ӛ", + ["ӝ"] = "Ӝ", + ["ӟ"] = "Ӟ", + ["ӡ"] = "Ӡ", + ["ӣ"] = "Ӣ", + ["ӥ"] = "Ӥ", + ["ӧ"] = "Ӧ", + ["ө"] = "Ө", + ["ӫ"] = "Ӫ", + ["ӭ"] = "Ӭ", + ["ӯ"] = "Ӯ", + ["ӱ"] = "Ӱ", + ["ӳ"] = "Ӳ", + ["ӵ"] = "Ӵ", + ["ӷ"] = "Ӷ", + ["ӹ"] = "Ӹ", + ["ӻ"] = "Ӻ", + ["ӽ"] = "Ӽ", + ["ӿ"] = "Ӿ", + ["ԁ"] = "Ԁ", + ["ԃ"] = "Ԃ", + ["ԅ"] = "Ԅ", + ["ԇ"] = "Ԇ", + ["ԉ"] = "Ԉ", + ["ԋ"] = "Ԋ", + ["ԍ"] = "Ԍ", + ["ԏ"] = "Ԏ", + ["ԑ"] = "Ԑ", + ["ԓ"] = "Ԓ", + ["ա"] = "Ա", + ["բ"] = "Բ", + ["գ"] = "Գ", + ["դ"] = "Դ", + ["ե"] = "Ե", + ["զ"] = "Զ", + ["է"] = "Է", + ["ը"] = "Ը", + ["թ"] = "Թ", + ["ժ"] = "Ժ", + ["ի"] = "Ի", + ["լ"] = "Լ", + ["խ"] = "Խ", + ["ծ"] = "Ծ", + ["կ"] = "Կ", + ["հ"] = "Հ", + ["ձ"] = "Ձ", + ["ղ"] = "Ղ", + ["ճ"] = "Ճ", + ["մ"] = "Մ", + ["յ"] = "Յ", + ["ն"] = "Ն", + ["շ"] = "Շ", + ["ո"] = "Ո", + ["չ"] = "Չ", + ["պ"] = "Պ", + ["ջ"] = "Ջ", + ["ռ"] = "Ռ", + ["ս"] = "Ս", + ["վ"] = "Վ", + ["տ"] = "Տ", + ["ր"] = "Ր", + ["ց"] = "Ց", + ["ւ"] = "Ւ", + ["փ"] = "Փ", + ["ք"] = "Ք", + ["օ"] = "Օ", + ["ֆ"] = "Ֆ", + ["ᵽ"] = "Ᵽ", + ["ḁ"] = "Ḁ", + ["ḃ"] = "Ḃ", + ["ḅ"] = "Ḅ", + ["ḇ"] = "Ḇ", + ["ḉ"] = "Ḉ", + ["ḋ"] = "Ḋ", + ["ḍ"] = "Ḍ", + ["ḏ"] = "Ḏ", + ["ḑ"] = "Ḑ", + ["ḓ"] = "Ḓ", + ["ḕ"] = "Ḕ", + ["ḗ"] = "Ḗ", + ["ḙ"] = "Ḙ", + ["ḛ"] = "Ḛ", + ["ḝ"] = "Ḝ", + ["ḟ"] = "Ḟ", + ["ḡ"] = "Ḡ", + ["ḣ"] = "Ḣ", + ["ḥ"] = "Ḥ", + ["ḧ"] = "Ḧ", + ["ḩ"] = "Ḩ", + ["ḫ"] = "Ḫ", + ["ḭ"] = "Ḭ", + ["ḯ"] = "Ḯ", + ["ḱ"] = "Ḱ", + ["ḳ"] = "Ḳ", + ["ḵ"] = "Ḵ", + ["ḷ"] = "Ḷ", + ["ḹ"] = "Ḹ", + ["ḻ"] = "Ḻ", + ["ḽ"] = "Ḽ", + ["ḿ"] = "Ḿ", + ["ṁ"] = "Ṁ", + ["ṃ"] = "Ṃ", + ["ṅ"] = "Ṅ", + ["ṇ"] = "Ṇ", + ["ṉ"] = "Ṉ", + ["ṋ"] = "Ṋ", + ["ṍ"] = "Ṍ", + ["ṏ"] = "Ṏ", + ["ṑ"] = "Ṑ", + ["ṓ"] = "Ṓ", + ["ṕ"] = "Ṕ", + ["ṗ"] = "Ṗ", + ["ṙ"] = "Ṙ", + ["ṛ"] = "Ṛ", + ["ṝ"] = "Ṝ", + ["ṟ"] = "Ṟ", + ["ṡ"] = "Ṡ", + ["ṣ"] = "Ṣ", + ["ṥ"] = "Ṥ", + ["ṧ"] = "Ṧ", + ["ṩ"] = "Ṩ", + ["ṫ"] = "Ṫ", + ["ṭ"] = "Ṭ", + ["ṯ"] = "Ṯ", + ["ṱ"] = "Ṱ", + ["ṳ"] = "Ṳ", + ["ṵ"] = "Ṵ", + ["ṷ"] = "Ṷ", + ["ṹ"] = "Ṹ", + ["ṻ"] = "Ṻ", + ["ṽ"] = "Ṽ", + ["ṿ"] = "Ṿ", + ["ẁ"] = "Ẁ", + ["ẃ"] = "Ẃ", + ["ẅ"] = "Ẅ", + ["ẇ"] = "Ẇ", + ["ẉ"] = "Ẉ", + ["ẋ"] = "Ẋ", + ["ẍ"] = "Ẍ", + ["ẏ"] = "Ẏ", + ["ẑ"] = "Ẑ", + ["ẓ"] = "Ẓ", + ["ẕ"] = "Ẕ", + ["ẛ"] = "Ṡ", + ["ạ"] = "Ạ", + ["ả"] = "Ả", + ["ấ"] = "Ấ", + ["ầ"] = "Ầ", + ["ẩ"] = "Ẩ", + ["ẫ"] = "Ẫ", + ["ậ"] = "Ậ", + ["ắ"] = "Ắ", + ["ằ"] = "Ằ", + ["ẳ"] = "Ẳ", + ["ẵ"] = "Ẵ", + ["ặ"] = "Ặ", + ["ẹ"] = "Ẹ", + ["ẻ"] = "Ẻ", + ["ẽ"] = "Ẽ", + ["ế"] = "Ế", + ["ề"] = "Ề", + ["ể"] = "Ể", + ["ễ"] = "Ễ", + ["ệ"] = "Ệ", + ["ỉ"] = "Ỉ", + ["ị"] = "Ị", + ["ọ"] = "Ọ", + ["ỏ"] = "Ỏ", + ["ố"] = "Ố", + ["ồ"] = "Ồ", + ["ổ"] = "Ổ", + ["ỗ"] = "Ỗ", + ["ộ"] = "Ộ", + ["ớ"] = "Ớ", + ["ờ"] = "Ờ", + ["ở"] = "Ở", + ["ỡ"] = "Ỡ", + ["ợ"] = "Ợ", + ["ụ"] = "Ụ", + ["ủ"] = "Ủ", + ["ứ"] = "Ứ", + ["ừ"] = "Ừ", + ["ử"] = "Ử", + ["ữ"] = "Ữ", + ["ự"] = "Ự", + ["ỳ"] = "Ỳ", + ["ỵ"] = "Ỵ", + ["ỷ"] = "Ỷ", + ["ỹ"] = "Ỹ", + ["ἀ"] = "Ἀ", + ["ἁ"] = "Ἁ", + ["ἂ"] = "Ἂ", + ["ἃ"] = "Ἃ", + ["ἄ"] = "Ἄ", + ["ἅ"] = "Ἅ", + ["ἆ"] = "Ἆ", + ["ἇ"] = "Ἇ", + ["ἐ"] = "Ἐ", + ["ἑ"] = "Ἑ", + ["ἒ"] = "Ἒ", + ["ἓ"] = "Ἓ", + ["ἔ"] = "Ἔ", + ["ἕ"] = "Ἕ", + ["ἠ"] = "Ἠ", + ["ἡ"] = "Ἡ", + ["ἢ"] = "Ἢ", + ["ἣ"] = "Ἣ", + ["ἤ"] = "Ἤ", + ["ἥ"] = "Ἥ", + ["ἦ"] = "Ἦ", + ["ἧ"] = "Ἧ", + ["ἰ"] = "Ἰ", + ["ἱ"] = "Ἱ", + ["ἲ"] = "Ἲ", + ["ἳ"] = "Ἳ", + ["ἴ"] = "Ἴ", + ["ἵ"] = "Ἵ", + ["ἶ"] = "Ἶ", + ["ἷ"] = "Ἷ", + ["ὀ"] = "Ὀ", + ["ὁ"] = "Ὁ", + ["ὂ"] = "Ὂ", + ["ὃ"] = "Ὃ", + ["ὄ"] = "Ὄ", + ["ὅ"] = "Ὅ", + ["ὑ"] = "Ὑ", + ["ὓ"] = "Ὓ", + ["ὕ"] = "Ὕ", + ["ὗ"] = "Ὗ", + ["ὠ"] = "Ὠ", + ["ὡ"] = "Ὡ", + ["ὢ"] = "Ὢ", + ["ὣ"] = "Ὣ", + ["ὤ"] = "Ὤ", + ["ὥ"] = "Ὥ", + ["ὦ"] = "Ὦ", + ["ὧ"] = "Ὧ", + ["ὰ"] = "Ὰ", + ["ά"] = "Ά", + ["ὲ"] = "Ὲ", + ["έ"] = "Έ", + ["ὴ"] = "Ὴ", + ["ή"] = "Ή", + ["ὶ"] = "Ὶ", + ["ί"] = "Ί", + ["ὸ"] = "Ὸ", + ["ό"] = "Ό", + ["ὺ"] = "Ὺ", + ["ύ"] = "Ύ", + ["ὼ"] = "Ὼ", + ["ώ"] = "Ώ", + ["ᾀ"] = "ᾈ", + ["ᾁ"] = "ᾉ", + ["ᾂ"] = "ᾊ", + ["ᾃ"] = "ᾋ", + ["ᾄ"] = "ᾌ", + ["ᾅ"] = "ᾍ", + ["ᾆ"] = "ᾎ", + ["ᾇ"] = "ᾏ", + ["ᾐ"] = "ᾘ", + ["ᾑ"] = "ᾙ", + ["ᾒ"] = "ᾚ", + ["ᾓ"] = "ᾛ", + ["ᾔ"] = "ᾜ", + ["ᾕ"] = "ᾝ", + ["ᾖ"] = "ᾞ", + ["ᾗ"] = "ᾟ", + ["ᾠ"] = "ᾨ", + ["ᾡ"] = "ᾩ", + ["ᾢ"] = "ᾪ", + ["ᾣ"] = "ᾫ", + ["ᾤ"] = "ᾬ", + ["ᾥ"] = "ᾭ", + ["ᾦ"] = "ᾮ", + ["ᾧ"] = "ᾯ", + ["ᾰ"] = "Ᾰ", + ["ᾱ"] = "Ᾱ", + ["ᾳ"] = "ᾼ", + ["ι"] = "Ι", + ["ῃ"] = "ῌ", + ["ῐ"] = "Ῐ", + ["ῑ"] = "Ῑ", + ["ῠ"] = "Ῠ", + ["ῡ"] = "Ῡ", + ["ῥ"] = "Ῥ", + ["ῳ"] = "ῼ", + ["ⅎ"] = "Ⅎ", + ["ⅰ"] = "Ⅰ", + ["ⅱ"] = "Ⅱ", + ["ⅲ"] = "Ⅲ", + ["ⅳ"] = "Ⅳ", + ["ⅴ"] = "Ⅴ", + ["ⅵ"] = "Ⅵ", + ["ⅶ"] = "Ⅶ", + ["ⅷ"] = "Ⅷ", + ["ⅸ"] = "Ⅸ", + ["ⅹ"] = "Ⅹ", + ["ⅺ"] = "Ⅺ", + ["ⅻ"] = "Ⅻ", + ["ⅼ"] = "Ⅼ", + ["ⅽ"] = "Ⅽ", + ["ⅾ"] = "Ⅾ", + ["ⅿ"] = "Ⅿ", + ["ↄ"] = "Ↄ", + ["ⓐ"] = "Ⓐ", + ["ⓑ"] = "Ⓑ", + ["ⓒ"] = "Ⓒ", + ["ⓓ"] = "Ⓓ", + ["ⓔ"] = "Ⓔ", + ["ⓕ"] = "Ⓕ", + ["ⓖ"] = "Ⓖ", + ["ⓗ"] = "Ⓗ", + ["ⓘ"] = "Ⓘ", + ["ⓙ"] = "Ⓙ", + ["ⓚ"] = "Ⓚ", + ["ⓛ"] = "Ⓛ", + ["ⓜ"] = "Ⓜ", + ["ⓝ"] = "Ⓝ", + ["ⓞ"] = "Ⓞ", + ["ⓟ"] = "Ⓟ", + ["ⓠ"] = "Ⓠ", + ["ⓡ"] = "Ⓡ", + ["ⓢ"] = "Ⓢ", + ["ⓣ"] = "Ⓣ", + ["ⓤ"] = "Ⓤ", + ["ⓥ"] = "Ⓥ", + ["ⓦ"] = "Ⓦ", + ["ⓧ"] = "Ⓧ", + ["ⓨ"] = "Ⓨ", + ["ⓩ"] = "Ⓩ", + ["ⰰ"] = "Ⰰ", + ["ⰱ"] = "Ⰱ", + ["ⰲ"] = "Ⰲ", + ["ⰳ"] = "Ⰳ", + ["ⰴ"] = "Ⰴ", + ["ⰵ"] = "Ⰵ", + ["ⰶ"] = "Ⰶ", + ["ⰷ"] = "Ⰷ", + ["ⰸ"] = "Ⰸ", + ["ⰹ"] = "Ⰹ", + ["ⰺ"] = "Ⰺ", + ["ⰻ"] = "Ⰻ", + ["ⰼ"] = "Ⰼ", + ["ⰽ"] = "Ⰽ", + ["ⰾ"] = "Ⰾ", + ["ⰿ"] = "Ⰿ", + ["ⱀ"] = "Ⱀ", + ["ⱁ"] = "Ⱁ", + ["ⱂ"] = "Ⱂ", + ["ⱃ"] = "Ⱃ", + ["ⱄ"] = "Ⱄ", + ["ⱅ"] = "Ⱅ", + ["ⱆ"] = "Ⱆ", + ["ⱇ"] = "Ⱇ", + ["ⱈ"] = "Ⱈ", + ["ⱉ"] = "Ⱉ", + ["ⱊ"] = "Ⱊ", + ["ⱋ"] = "Ⱋ", + ["ⱌ"] = "Ⱌ", + ["ⱍ"] = "Ⱍ", + ["ⱎ"] = "Ⱎ", + ["ⱏ"] = "Ⱏ", + ["ⱐ"] = "Ⱐ", + ["ⱑ"] = "Ⱑ", + ["ⱒ"] = "Ⱒ", + ["ⱓ"] = "Ⱓ", + ["ⱔ"] = "Ⱔ", + ["ⱕ"] = "Ⱕ", + ["ⱖ"] = "Ⱖ", + ["ⱗ"] = "Ⱗ", + ["ⱘ"] = "Ⱘ", + ["ⱙ"] = "Ⱙ", + ["ⱚ"] = "Ⱚ", + ["ⱛ"] = "Ⱛ", + ["ⱜ"] = "Ⱜ", + ["ⱝ"] = "Ⱝ", + ["ⱞ"] = "Ⱞ", + ["ⱡ"] = "Ⱡ", + ["ⱥ"] = "Ⱥ", + ["ⱦ"] = "Ⱦ", + ["ⱨ"] = "Ⱨ", + ["ⱪ"] = "Ⱪ", + ["ⱬ"] = "Ⱬ", + ["ⱶ"] = "Ⱶ", + ["ⲁ"] = "Ⲁ", + ["ⲃ"] = "Ⲃ", + ["ⲅ"] = "Ⲅ", + ["ⲇ"] = "Ⲇ", + ["ⲉ"] = "Ⲉ", + ["ⲋ"] = "Ⲋ", + ["ⲍ"] = "Ⲍ", + ["ⲏ"] = "Ⲏ", + ["ⲑ"] = "Ⲑ", + ["ⲓ"] = "Ⲓ", + ["ⲕ"] = "Ⲕ", + ["ⲗ"] = "Ⲗ", + ["ⲙ"] = "Ⲙ", + ["ⲛ"] = "Ⲛ", + ["ⲝ"] = "Ⲝ", + ["ⲟ"] = "Ⲟ", + ["ⲡ"] = "Ⲡ", + ["ⲣ"] = "Ⲣ", + ["ⲥ"] = "Ⲥ", + ["ⲧ"] = "Ⲧ", + ["ⲩ"] = "Ⲩ", + ["ⲫ"] = "Ⲫ", + ["ⲭ"] = "Ⲭ", + ["ⲯ"] = "Ⲯ", + ["ⲱ"] = "Ⲱ", + ["ⲳ"] = "Ⲳ", + ["ⲵ"] = "Ⲵ", + ["ⲷ"] = "Ⲷ", + ["ⲹ"] = "Ⲹ", + ["ⲻ"] = "Ⲻ", + ["ⲽ"] = "Ⲽ", + ["ⲿ"] = "Ⲿ", + ["ⳁ"] = "Ⳁ", + ["ⳃ"] = "Ⳃ", + ["ⳅ"] = "Ⳅ", + ["ⳇ"] = "Ⳇ", + ["ⳉ"] = "Ⳉ", + ["ⳋ"] = "Ⳋ", + ["ⳍ"] = "Ⳍ", + ["ⳏ"] = "Ⳏ", + ["ⳑ"] = "Ⳑ", + ["ⳓ"] = "Ⳓ", + ["ⳕ"] = "Ⳕ", + ["ⳗ"] = "Ⳗ", + ["ⳙ"] = "Ⳙ", + ["ⳛ"] = "Ⳛ", + ["ⳝ"] = "Ⳝ", + ["ⳟ"] = "Ⳟ", + ["ⳡ"] = "Ⳡ", + ["ⳣ"] = "Ⳣ", + ["ⴀ"] = "Ⴀ", + ["ⴁ"] = "Ⴁ", + ["ⴂ"] = "Ⴂ", + ["ⴃ"] = "Ⴃ", + ["ⴄ"] = "Ⴄ", + ["ⴅ"] = "Ⴅ", + ["ⴆ"] = "Ⴆ", + ["ⴇ"] = "Ⴇ", + ["ⴈ"] = "Ⴈ", + ["ⴉ"] = "Ⴉ", + ["ⴊ"] = "Ⴊ", + ["ⴋ"] = "Ⴋ", + ["ⴌ"] = "Ⴌ", + ["ⴍ"] = "Ⴍ", + ["ⴎ"] = "Ⴎ", + ["ⴏ"] = "Ⴏ", + ["ⴐ"] = "Ⴐ", + ["ⴑ"] = "Ⴑ", + ["ⴒ"] = "Ⴒ", + ["ⴓ"] = "Ⴓ", + ["ⴔ"] = "Ⴔ", + ["ⴕ"] = "Ⴕ", + ["ⴖ"] = "Ⴖ", + ["ⴗ"] = "Ⴗ", + ["ⴘ"] = "Ⴘ", + ["ⴙ"] = "Ⴙ", + ["ⴚ"] = "Ⴚ", + ["ⴛ"] = "Ⴛ", + ["ⴜ"] = "Ⴜ", + ["ⴝ"] = "Ⴝ", + ["ⴞ"] = "Ⴞ", + ["ⴟ"] = "Ⴟ", + ["ⴠ"] = "Ⴠ", + ["ⴡ"] = "Ⴡ", + ["ⴢ"] = "Ⴢ", + ["ⴣ"] = "Ⴣ", + ["ⴤ"] = "Ⴤ", + ["ⴥ"] = "Ⴥ", + ["a"] = "A", + ["b"] = "B", + ["c"] = "C", + ["d"] = "D", + ["e"] = "E", + ["f"] = "F", + ["g"] = "G", + ["h"] = "H", + ["i"] = "I", + ["j"] = "J", + ["k"] = "K", + ["l"] = "L", + ["m"] = "M", + ["n"] = "N", + ["o"] = "O", + ["p"] = "P", + ["q"] = "Q", + ["r"] = "R", + ["s"] = "S", + ["t"] = "T", + ["u"] = "U", + ["v"] = "V", + ["w"] = "W", + ["x"] = "X", + ["y"] = "Y", + ["z"] = "Z", + ["𐐨"] = "𐐀", + ["𐐩"] = "𐐁", + ["𐐪"] = "𐐂", + ["𐐫"] = "𐐃", + ["𐐬"] = "𐐄", + ["𐐭"] = "𐐅", + ["𐐮"] = "𐐆", + ["𐐯"] = "𐐇", + ["𐐰"] = "𐐈", + ["𐐱"] = "𐐉", + ["𐐲"] = "𐐊", + ["𐐳"] = "𐐋", + ["𐐴"] = "𐐌", + ["𐐵"] = "𐐍", + ["𐐶"] = "𐐎", + ["𐐷"] = "𐐏", + ["𐐸"] = "𐐐", + ["𐐹"] = "𐐑", + ["𐐺"] = "𐐒", + ["𐐻"] = "𐐓", + ["𐐼"] = "𐐔", + ["𐐽"] = "𐐕", + ["𐐾"] = "𐐖", + ["𐐿"] = "𐐗", + ["𐑀"] = "𐐘", + ["𐑁"] = "𐐙", + ["𐑂"] = "𐐚", + ["𐑃"] = "𐐛", + ["𐑄"] = "𐐜", + ["𐑅"] = "𐐝", + ["𐑆"] = "𐐞", + ["𐑇"] = "𐐟", + ["𐑈"] = "𐐠", + ["𐑉"] = "𐐡", + ["𐑊"] = "𐐢", + ["𐑋"] = "𐐣", + ["𐑌"] = "𐐤", + ["𐑍"] = "𐐥", + ["𐑎"] = "𐐦", + ["𐑏"] = "𐐧", +} + + +utf8_uc_lc = { + ["A"] = "a", + ["B"] = "b", + ["C"] = "c", + ["D"] = "d", + ["E"] = "e", + ["F"] = "f", + ["G"] = "g", + ["H"] = "h", + ["I"] = "i", + ["J"] = "j", + ["K"] = "k", + ["L"] = "l", + ["M"] = "m", + ["N"] = "n", + ["O"] = "o", + ["P"] = "p", + ["Q"] = "q", + ["R"] = "r", + ["S"] = "s", + ["T"] = "t", + ["U"] = "u", + ["V"] = "v", + ["W"] = "w", + ["X"] = "x", + ["Y"] = "y", + ["Z"] = "z", + ["À"] = "à", + ["Á"] = "á", + ["Â"] = "â", + ["Ã"] = "ã", + ["Ä"] = "ä", + ["Å"] = "å", + ["Æ"] = "æ", + ["Ç"] = "ç", + ["È"] = "è", + ["É"] = "é", + ["Ê"] = "ê", + ["Ë"] = "ë", + ["Ì"] = "ì", + ["Í"] = "í", + ["Î"] = "î", + ["Ï"] = "ï", + ["Ð"] = "ð", + ["Ñ"] = "ñ", + ["Ò"] = "ò", + ["Ó"] = "ó", + ["Ô"] = "ô", + ["Õ"] = "õ", + ["Ö"] = "ö", + ["Ø"] = "ø", + ["Ù"] = "ù", + ["Ú"] = "ú", + ["Û"] = "û", + ["Ü"] = "ü", + ["Ý"] = "ý", + ["Þ"] = "þ", + ["Ā"] = "ā", + ["Ă"] = "ă", + ["Ą"] = "ą", + ["Ć"] = "ć", + ["Ĉ"] = "ĉ", + ["Ċ"] = "ċ", + ["Č"] = "č", + ["Ď"] = "ď", + ["Đ"] = "đ", + ["Ē"] = "ē", + ["Ĕ"] = "ĕ", + ["Ė"] = "ė", + ["Ę"] = "ę", + ["Ě"] = "ě", + ["Ĝ"] = "ĝ", + ["Ğ"] = "ğ", + ["Ġ"] = "ġ", + ["Ģ"] = "ģ", + ["Ĥ"] = "ĥ", + ["Ħ"] = "ħ", + ["Ĩ"] = "ĩ", + ["Ī"] = "ī", + ["Ĭ"] = "ĭ", + ["Į"] = "į", + ["İ"] = "i", + ["IJ"] = "ij", + ["Ĵ"] = "ĵ", + ["Ķ"] = "ķ", + ["Ĺ"] = "ĺ", + ["Ļ"] = "ļ", + ["Ľ"] = "ľ", + ["Ŀ"] = "ŀ", + ["Ł"] = "ł", + ["Ń"] = "ń", + ["Ņ"] = "ņ", + ["Ň"] = "ň", + ["Ŋ"] = "ŋ", + ["Ō"] = "ō", + ["Ŏ"] = "ŏ", + ["Ő"] = "ő", + ["Œ"] = "œ", + ["Ŕ"] = "ŕ", + ["Ŗ"] = "ŗ", + ["Ř"] = "ř", + ["Ś"] = "ś", + ["Ŝ"] = "ŝ", + ["Ş"] = "ş", + ["Š"] = "š", + ["Ţ"] = "ţ", + ["Ť"] = "ť", + ["Ŧ"] = "ŧ", + ["Ũ"] = "ũ", + ["Ū"] = "ū", + ["Ŭ"] = "ŭ", + ["Ů"] = "ů", + ["Ű"] = "ű", + ["Ų"] = "ų", + ["Ŵ"] = "ŵ", + ["Ŷ"] = "ŷ", + ["Ÿ"] = "ÿ", + ["Ź"] = "ź", + ["Ż"] = "ż", + ["Ž"] = "ž", + ["Ɓ"] = "ɓ", + ["Ƃ"] = "ƃ", + ["Ƅ"] = "ƅ", + ["Ɔ"] = "ɔ", + ["Ƈ"] = "ƈ", + ["Ɖ"] = "ɖ", + ["Ɗ"] = "ɗ", + ["Ƌ"] = "ƌ", + ["Ǝ"] = "ǝ", + ["Ə"] = "ə", + ["Ɛ"] = "ɛ", + ["Ƒ"] = "ƒ", + ["Ɠ"] = "ɠ", + ["Ɣ"] = "ɣ", + ["Ɩ"] = "ɩ", + ["Ɨ"] = "ɨ", + ["Ƙ"] = "ƙ", + ["Ɯ"] = "ɯ", + ["Ɲ"] = "ɲ", + ["Ɵ"] = "ɵ", + ["Ơ"] = "ơ", + ["Ƣ"] = "ƣ", + ["Ƥ"] = "ƥ", + ["Ʀ"] = "ʀ", + ["Ƨ"] = "ƨ", + ["Ʃ"] = "ʃ", + ["Ƭ"] = "ƭ", + ["Ʈ"] = "ʈ", + ["Ư"] = "ư", + ["Ʊ"] = "ʊ", + ["Ʋ"] = "ʋ", + ["Ƴ"] = "ƴ", + ["Ƶ"] = "ƶ", + ["Ʒ"] = "ʒ", + ["Ƹ"] = "ƹ", + ["Ƽ"] = "ƽ", + ["DŽ"] = "dž", + ["Dž"] = "dž", + ["LJ"] = "lj", + ["Lj"] = "lj", + ["NJ"] = "nj", + ["Nj"] = "nj", + ["Ǎ"] = "ǎ", + ["Ǐ"] = "ǐ", + ["Ǒ"] = "ǒ", + ["Ǔ"] = "ǔ", + ["Ǖ"] = "ǖ", + ["Ǘ"] = "ǘ", + ["Ǚ"] = "ǚ", + ["Ǜ"] = "ǜ", + ["Ǟ"] = "ǟ", + ["Ǡ"] = "ǡ", + ["Ǣ"] = "ǣ", + ["Ǥ"] = "ǥ", + ["Ǧ"] = "ǧ", + ["Ǩ"] = "ǩ", + ["Ǫ"] = "ǫ", + ["Ǭ"] = "ǭ", + ["Ǯ"] = "ǯ", + ["DZ"] = "dz", + ["Dz"] = "dz", + ["Ǵ"] = "ǵ", + ["Ƕ"] = "ƕ", + ["Ƿ"] = "ƿ", + ["Ǹ"] = "ǹ", + ["Ǻ"] = "ǻ", + ["Ǽ"] = "ǽ", + ["Ǿ"] = "ǿ", + ["Ȁ"] = "ȁ", + ["Ȃ"] = "ȃ", + ["Ȅ"] = "ȅ", + ["Ȇ"] = "ȇ", + ["Ȉ"] = "ȉ", + ["Ȋ"] = "ȋ", + ["Ȍ"] = "ȍ", + ["Ȏ"] = "ȏ", + ["Ȑ"] = "ȑ", + ["Ȓ"] = "ȓ", + ["Ȕ"] = "ȕ", + ["Ȗ"] = "ȗ", + ["Ș"] = "ș", + ["Ț"] = "ț", + ["Ȝ"] = "ȝ", + ["Ȟ"] = "ȟ", + ["Ƞ"] = "ƞ", + ["Ȣ"] = "ȣ", + ["Ȥ"] = "ȥ", + ["Ȧ"] = "ȧ", + ["Ȩ"] = "ȩ", + ["Ȫ"] = "ȫ", + ["Ȭ"] = "ȭ", + ["Ȯ"] = "ȯ", + ["Ȱ"] = "ȱ", + ["Ȳ"] = "ȳ", + ["Ⱥ"] = "ⱥ", + ["Ȼ"] = "ȼ", + ["Ƚ"] = "ƚ", + ["Ⱦ"] = "ⱦ", + ["Ɂ"] = "ɂ", + ["Ƀ"] = "ƀ", + ["Ʉ"] = "ʉ", + ["Ʌ"] = "ʌ", + ["Ɇ"] = "ɇ", + ["Ɉ"] = "ɉ", + ["Ɋ"] = "ɋ", + ["Ɍ"] = "ɍ", + ["Ɏ"] = "ɏ", + ["Ά"] = "ά", + ["Έ"] = "έ", + ["Ή"] = "ή", + ["Ί"] = "ί", + ["Ό"] = "ό", + ["Ύ"] = "ύ", + ["Ώ"] = "ώ", + ["Α"] = "α", + ["Β"] = "β", + ["Γ"] = "γ", + ["Δ"] = "δ", + ["Ε"] = "ε", + ["Ζ"] = "ζ", + ["Η"] = "η", + ["Θ"] = "θ", + ["Ι"] = "ι", + ["Κ"] = "κ", + ["Λ"] = "λ", + ["Μ"] = "μ", + ["Ν"] = "ν", + ["Ξ"] = "ξ", + ["Ο"] = "ο", + ["Π"] = "π", + ["Ρ"] = "ρ", + ["Σ"] = "σ", + ["Τ"] = "τ", + ["Υ"] = "υ", + ["Φ"] = "φ", + ["Χ"] = "χ", + ["Ψ"] = "ψ", + ["Ω"] = "ω", + ["Ϊ"] = "ϊ", + ["Ϋ"] = "ϋ", + ["Ϙ"] = "ϙ", + ["Ϛ"] = "ϛ", + ["Ϝ"] = "ϝ", + ["Ϟ"] = "ϟ", + ["Ϡ"] = "ϡ", + ["Ϣ"] = "ϣ", + ["Ϥ"] = "ϥ", + ["Ϧ"] = "ϧ", + ["Ϩ"] = "ϩ", + ["Ϫ"] = "ϫ", + ["Ϭ"] = "ϭ", + ["Ϯ"] = "ϯ", + ["ϴ"] = "θ", + ["Ϸ"] = "ϸ", + ["Ϲ"] = "ϲ", + ["Ϻ"] = "ϻ", + ["Ͻ"] = "ͻ", + ["Ͼ"] = "ͼ", + ["Ͽ"] = "ͽ", + ["Ѐ"] = "ѐ", + ["Ё"] = "ё", + ["Ђ"] = "ђ", + ["Ѓ"] = "ѓ", + ["Є"] = "є", + ["Ѕ"] = "ѕ", + ["І"] = "і", + ["Ї"] = "ї", + ["Ј"] = "ј", + ["Љ"] = "љ", + ["Њ"] = "њ", + ["Ћ"] = "ћ", + ["Ќ"] = "ќ", + ["Ѝ"] = "ѝ", + ["Ў"] = "ў", + ["Џ"] = "џ", + ["А"] = "а", + ["Б"] = "б", + ["В"] = "в", + ["Г"] = "г", + ["Д"] = "д", + ["Е"] = "е", + ["Ж"] = "ж", + ["З"] = "з", + ["И"] = "и", + ["Й"] = "й", + ["К"] = "к", + ["Л"] = "л", + ["М"] = "м", + ["Н"] = "н", + ["О"] = "о", + ["П"] = "п", + ["Р"] = "р", + ["С"] = "с", + ["Т"] = "т", + ["У"] = "у", + ["Ф"] = "ф", + ["Х"] = "х", + ["Ц"] = "ц", + ["Ч"] = "ч", + ["Ш"] = "ш", + ["Щ"] = "щ", + ["Ъ"] = "ъ", + ["Ы"] = "ы", + ["Ь"] = "ь", + ["Э"] = "э", + ["Ю"] = "ю", + ["Я"] = "я", + ["Ѡ"] = "ѡ", + ["Ѣ"] = "ѣ", + ["Ѥ"] = "ѥ", + ["Ѧ"] = "ѧ", + ["Ѩ"] = "ѩ", + ["Ѫ"] = "ѫ", + ["Ѭ"] = "ѭ", + ["Ѯ"] = "ѯ", + ["Ѱ"] = "ѱ", + ["Ѳ"] = "ѳ", + ["Ѵ"] = "ѵ", + ["Ѷ"] = "ѷ", + ["Ѹ"] = "ѹ", + ["Ѻ"] = "ѻ", + ["Ѽ"] = "ѽ", + ["Ѿ"] = "ѿ", + ["Ҁ"] = "ҁ", + ["Ҋ"] = "ҋ", + ["Ҍ"] = "ҍ", + ["Ҏ"] = "ҏ", + ["Ґ"] = "ґ", + ["Ғ"] = "ғ", + ["Ҕ"] = "ҕ", + ["Җ"] = "җ", + ["Ҙ"] = "ҙ", + ["Қ"] = "қ", + ["Ҝ"] = "ҝ", + ["Ҟ"] = "ҟ", + ["Ҡ"] = "ҡ", + ["Ң"] = "ң", + ["Ҥ"] = "ҥ", + ["Ҧ"] = "ҧ", + ["Ҩ"] = "ҩ", + ["Ҫ"] = "ҫ", + ["Ҭ"] = "ҭ", + ["Ү"] = "ү", + ["Ұ"] = "ұ", + ["Ҳ"] = "ҳ", + ["Ҵ"] = "ҵ", + ["Ҷ"] = "ҷ", + ["Ҹ"] = "ҹ", + ["Һ"] = "һ", + ["Ҽ"] = "ҽ", + ["Ҿ"] = "ҿ", + ["Ӏ"] = "ӏ", + ["Ӂ"] = "ӂ", + ["Ӄ"] = "ӄ", + ["Ӆ"] = "ӆ", + ["Ӈ"] = "ӈ", + ["Ӊ"] = "ӊ", + ["Ӌ"] = "ӌ", + ["Ӎ"] = "ӎ", + ["Ӑ"] = "ӑ", + ["Ӓ"] = "ӓ", + ["Ӕ"] = "ӕ", + ["Ӗ"] = "ӗ", + ["Ә"] = "ә", + ["Ӛ"] = "ӛ", + ["Ӝ"] = "ӝ", + ["Ӟ"] = "ӟ", + ["Ӡ"] = "ӡ", + ["Ӣ"] = "ӣ", + ["Ӥ"] = "ӥ", + ["Ӧ"] = "ӧ", + ["Ө"] = "ө", + ["Ӫ"] = "ӫ", + ["Ӭ"] = "ӭ", + ["Ӯ"] = "ӯ", + ["Ӱ"] = "ӱ", + ["Ӳ"] = "ӳ", + ["Ӵ"] = "ӵ", + ["Ӷ"] = "ӷ", + ["Ӹ"] = "ӹ", + ["Ӻ"] = "ӻ", + ["Ӽ"] = "ӽ", + ["Ӿ"] = "ӿ", + ["Ԁ"] = "ԁ", + ["Ԃ"] = "ԃ", + ["Ԅ"] = "ԅ", + ["Ԇ"] = "ԇ", + ["Ԉ"] = "ԉ", + ["Ԋ"] = "ԋ", + ["Ԍ"] = "ԍ", + ["Ԏ"] = "ԏ", + ["Ԑ"] = "ԑ", + ["Ԓ"] = "ԓ", + ["Ա"] = "ա", + ["Բ"] = "բ", + ["Գ"] = "գ", + ["Դ"] = "դ", + ["Ե"] = "ե", + ["Զ"] = "զ", + ["Է"] = "է", + ["Ը"] = "ը", + ["Թ"] = "թ", + ["Ժ"] = "ժ", + ["Ի"] = "ի", + ["Լ"] = "լ", + ["Խ"] = "խ", + ["Ծ"] = "ծ", + ["Կ"] = "կ", + ["Հ"] = "հ", + ["Ձ"] = "ձ", + ["Ղ"] = "ղ", + ["Ճ"] = "ճ", + ["Մ"] = "մ", + ["Յ"] = "յ", + ["Ն"] = "ն", + ["Շ"] = "շ", + ["Ո"] = "ո", + ["Չ"] = "չ", + ["Պ"] = "պ", + ["Ջ"] = "ջ", + ["Ռ"] = "ռ", + ["Ս"] = "ս", + ["Վ"] = "վ", + ["Տ"] = "տ", + ["Ր"] = "ր", + ["Ց"] = "ց", + ["Ւ"] = "ւ", + ["Փ"] = "փ", + ["Ք"] = "ք", + ["Օ"] = "օ", + ["Ֆ"] = "ֆ", + ["Ⴀ"] = "ⴀ", + ["Ⴁ"] = "ⴁ", + ["Ⴂ"] = "ⴂ", + ["Ⴃ"] = "ⴃ", + ["Ⴄ"] = "ⴄ", + ["Ⴅ"] = "ⴅ", + ["Ⴆ"] = "ⴆ", + ["Ⴇ"] = "ⴇ", + ["Ⴈ"] = "ⴈ", + ["Ⴉ"] = "ⴉ", + ["Ⴊ"] = "ⴊ", + ["Ⴋ"] = "ⴋ", + ["Ⴌ"] = "ⴌ", + ["Ⴍ"] = "ⴍ", + ["Ⴎ"] = "ⴎ", + ["Ⴏ"] = "ⴏ", + ["Ⴐ"] = "ⴐ", + ["Ⴑ"] = "ⴑ", + ["Ⴒ"] = "ⴒ", + ["Ⴓ"] = "ⴓ", + ["Ⴔ"] = "ⴔ", + ["Ⴕ"] = "ⴕ", + ["Ⴖ"] = "ⴖ", + ["Ⴗ"] = "ⴗ", + ["Ⴘ"] = "ⴘ", + ["Ⴙ"] = "ⴙ", + ["Ⴚ"] = "ⴚ", + ["Ⴛ"] = "ⴛ", + ["Ⴜ"] = "ⴜ", + ["Ⴝ"] = "ⴝ", + ["Ⴞ"] = "ⴞ", + ["Ⴟ"] = "ⴟ", + ["Ⴠ"] = "ⴠ", + ["Ⴡ"] = "ⴡ", + ["Ⴢ"] = "ⴢ", + ["Ⴣ"] = "ⴣ", + ["Ⴤ"] = "ⴤ", + ["Ⴥ"] = "ⴥ", + ["Ḁ"] = "ḁ", + ["Ḃ"] = "ḃ", + ["Ḅ"] = "ḅ", + ["Ḇ"] = "ḇ", + ["Ḉ"] = "ḉ", + ["Ḋ"] = "ḋ", + ["Ḍ"] = "ḍ", + ["Ḏ"] = "ḏ", + ["Ḑ"] = "ḑ", + ["Ḓ"] = "ḓ", + ["Ḕ"] = "ḕ", + ["Ḗ"] = "ḗ", + ["Ḙ"] = "ḙ", + ["Ḛ"] = "ḛ", + ["Ḝ"] = "ḝ", + ["Ḟ"] = "ḟ", + ["Ḡ"] = "ḡ", + ["Ḣ"] = "ḣ", + ["Ḥ"] = "ḥ", + ["Ḧ"] = "ḧ", + ["Ḩ"] = "ḩ", + ["Ḫ"] = "ḫ", + ["Ḭ"] = "ḭ", + ["Ḯ"] = "ḯ", + ["Ḱ"] = "ḱ", + ["Ḳ"] = "ḳ", + ["Ḵ"] = "ḵ", + ["Ḷ"] = "ḷ", + ["Ḹ"] = "ḹ", + ["Ḻ"] = "ḻ", + ["Ḽ"] = "ḽ", + ["Ḿ"] = "ḿ", + ["Ṁ"] = "ṁ", + ["Ṃ"] = "ṃ", + ["Ṅ"] = "ṅ", + ["Ṇ"] = "ṇ", + ["Ṉ"] = "ṉ", + ["Ṋ"] = "ṋ", + ["Ṍ"] = "ṍ", + ["Ṏ"] = "ṏ", + ["Ṑ"] = "ṑ", + ["Ṓ"] = "ṓ", + ["Ṕ"] = "ṕ", + ["Ṗ"] = "ṗ", + ["Ṙ"] = "ṙ", + ["Ṛ"] = "ṛ", + ["Ṝ"] = "ṝ", + ["Ṟ"] = "ṟ", + ["Ṡ"] = "ṡ", + ["Ṣ"] = "ṣ", + ["Ṥ"] = "ṥ", + ["Ṧ"] = "ṧ", + ["Ṩ"] = "ṩ", + ["Ṫ"] = "ṫ", + ["Ṭ"] = "ṭ", + ["Ṯ"] = "ṯ", + ["Ṱ"] = "ṱ", + ["Ṳ"] = "ṳ", + ["Ṵ"] = "ṵ", + ["Ṷ"] = "ṷ", + ["Ṹ"] = "ṹ", + ["Ṻ"] = "ṻ", + ["Ṽ"] = "ṽ", + ["Ṿ"] = "ṿ", + ["Ẁ"] = "ẁ", + ["Ẃ"] = "ẃ", + ["Ẅ"] = "ẅ", + ["Ẇ"] = "ẇ", + ["Ẉ"] = "ẉ", + ["Ẋ"] = "ẋ", + ["Ẍ"] = "ẍ", + ["Ẏ"] = "ẏ", + ["Ẑ"] = "ẑ", + ["Ẓ"] = "ẓ", + ["Ẕ"] = "ẕ", + ["Ạ"] = "ạ", + ["Ả"] = "ả", + ["Ấ"] = "ấ", + ["Ầ"] = "ầ", + ["Ẩ"] = "ẩ", + ["Ẫ"] = "ẫ", + ["Ậ"] = "ậ", + ["Ắ"] = "ắ", + ["Ằ"] = "ằ", + ["Ẳ"] = "ẳ", + ["Ẵ"] = "ẵ", + ["Ặ"] = "ặ", + ["Ẹ"] = "ẹ", + ["Ẻ"] = "ẻ", + ["Ẽ"] = "ẽ", + ["Ế"] = "ế", + ["Ề"] = "ề", + ["Ể"] = "ể", + ["Ễ"] = "ễ", + ["Ệ"] = "ệ", + ["Ỉ"] = "ỉ", + ["Ị"] = "ị", + ["Ọ"] = "ọ", + ["Ỏ"] = "ỏ", + ["Ố"] = "ố", + ["Ồ"] = "ồ", + ["Ổ"] = "ổ", + ["Ỗ"] = "ỗ", + ["Ộ"] = "ộ", + ["Ớ"] = "ớ", + ["Ờ"] = "ờ", + ["Ở"] = "ở", + ["Ỡ"] = "ỡ", + ["Ợ"] = "ợ", + ["Ụ"] = "ụ", + ["Ủ"] = "ủ", + ["Ứ"] = "ứ", + ["Ừ"] = "ừ", + ["Ử"] = "ử", + ["Ữ"] = "ữ", + ["Ự"] = "ự", + ["Ỳ"] = "ỳ", + ["Ỵ"] = "ỵ", + ["Ỷ"] = "ỷ", + ["Ỹ"] = "ỹ", + ["Ἀ"] = "ἀ", + ["Ἁ"] = "ἁ", + ["Ἂ"] = "ἂ", + ["Ἃ"] = "ἃ", + ["Ἄ"] = "ἄ", + ["Ἅ"] = "ἅ", + ["Ἆ"] = "ἆ", + ["Ἇ"] = "ἇ", + ["Ἐ"] = "ἐ", + ["Ἑ"] = "ἑ", + ["Ἒ"] = "ἒ", + ["Ἓ"] = "ἓ", + ["Ἔ"] = "ἔ", + ["Ἕ"] = "ἕ", + ["Ἠ"] = "ἠ", + ["Ἡ"] = "ἡ", + ["Ἢ"] = "ἢ", + ["Ἣ"] = "ἣ", + ["Ἤ"] = "ἤ", + ["Ἥ"] = "ἥ", + ["Ἦ"] = "ἦ", + ["Ἧ"] = "ἧ", + ["Ἰ"] = "ἰ", + ["Ἱ"] = "ἱ", + ["Ἲ"] = "ἲ", + ["Ἳ"] = "ἳ", + ["Ἴ"] = "ἴ", + ["Ἵ"] = "ἵ", + ["Ἶ"] = "ἶ", + ["Ἷ"] = "ἷ", + ["Ὀ"] = "ὀ", + ["Ὁ"] = "ὁ", + ["Ὂ"] = "ὂ", + ["Ὃ"] = "ὃ", + ["Ὄ"] = "ὄ", + ["Ὅ"] = "ὅ", + ["Ὑ"] = "ὑ", + ["Ὓ"] = "ὓ", + ["Ὕ"] = "ὕ", + ["Ὗ"] = "ὗ", + ["Ὠ"] = "ὠ", + ["Ὡ"] = "ὡ", + ["Ὢ"] = "ὢ", + ["Ὣ"] = "ὣ", + ["Ὤ"] = "ὤ", + ["Ὥ"] = "ὥ", + ["Ὦ"] = "ὦ", + ["Ὧ"] = "ὧ", + ["ᾈ"] = "ᾀ", + ["ᾉ"] = "ᾁ", + ["ᾊ"] = "ᾂ", + ["ᾋ"] = "ᾃ", + ["ᾌ"] = "ᾄ", + ["ᾍ"] = "ᾅ", + ["ᾎ"] = "ᾆ", + ["ᾏ"] = "ᾇ", + ["ᾘ"] = "ᾐ", + ["ᾙ"] = "ᾑ", + ["ᾚ"] = "ᾒ", + ["ᾛ"] = "ᾓ", + ["ᾜ"] = "ᾔ", + ["ᾝ"] = "ᾕ", + ["ᾞ"] = "ᾖ", + ["ᾟ"] = "ᾗ", + ["ᾨ"] = "ᾠ", + ["ᾩ"] = "ᾡ", + ["ᾪ"] = "ᾢ", + ["ᾫ"] = "ᾣ", + ["ᾬ"] = "ᾤ", + ["ᾭ"] = "ᾥ", + ["ᾮ"] = "ᾦ", + ["ᾯ"] = "ᾧ", + ["Ᾰ"] = "ᾰ", + ["Ᾱ"] = "ᾱ", + ["Ὰ"] = "ὰ", + ["Ά"] = "ά", + ["ᾼ"] = "ᾳ", + ["Ὲ"] = "ὲ", + ["Έ"] = "έ", + ["Ὴ"] = "ὴ", + ["Ή"] = "ή", + ["ῌ"] = "ῃ", + ["Ῐ"] = "ῐ", + ["Ῑ"] = "ῑ", + ["Ὶ"] = "ὶ", + ["Ί"] = "ί", + ["Ῠ"] = "ῠ", + ["Ῡ"] = "ῡ", + ["Ὺ"] = "ὺ", + ["Ύ"] = "ύ", + ["Ῥ"] = "ῥ", + ["Ὸ"] = "ὸ", + ["Ό"] = "ό", + ["Ὼ"] = "ὼ", + ["Ώ"] = "ώ", + ["ῼ"] = "ῳ", + ["Ω"] = "ω", + ["K"] = "k", + ["Å"] = "å", + ["Ⅎ"] = "ⅎ", + ["Ⅰ"] = "ⅰ", + ["Ⅱ"] = "ⅱ", + ["Ⅲ"] = "ⅲ", + ["Ⅳ"] = "ⅳ", + ["Ⅴ"] = "ⅴ", + ["Ⅵ"] = "ⅵ", + ["Ⅶ"] = "ⅶ", + ["Ⅷ"] = "ⅷ", + ["Ⅸ"] = "ⅸ", + ["Ⅹ"] = "ⅹ", + ["Ⅺ"] = "ⅺ", + ["Ⅻ"] = "ⅻ", + ["Ⅼ"] = "ⅼ", + ["Ⅽ"] = "ⅽ", + ["Ⅾ"] = "ⅾ", + ["Ⅿ"] = "ⅿ", + ["Ↄ"] = "ↄ", + ["Ⓐ"] = "ⓐ", + ["Ⓑ"] = "ⓑ", + ["Ⓒ"] = "ⓒ", + ["Ⓓ"] = "ⓓ", + ["Ⓔ"] = "ⓔ", + ["Ⓕ"] = "ⓕ", + ["Ⓖ"] = "ⓖ", + ["Ⓗ"] = "ⓗ", + ["Ⓘ"] = "ⓘ", + ["Ⓙ"] = "ⓙ", + ["Ⓚ"] = "ⓚ", + ["Ⓛ"] = "ⓛ", + ["Ⓜ"] = "ⓜ", + ["Ⓝ"] = "ⓝ", + ["Ⓞ"] = "ⓞ", + ["Ⓟ"] = "ⓟ", + ["Ⓠ"] = "ⓠ", + ["Ⓡ"] = "ⓡ", + ["Ⓢ"] = "ⓢ", + ["Ⓣ"] = "ⓣ", + ["Ⓤ"] = "ⓤ", + ["Ⓥ"] = "ⓥ", + ["Ⓦ"] = "ⓦ", + ["Ⓧ"] = "ⓧ", + ["Ⓨ"] = "ⓨ", + ["Ⓩ"] = "ⓩ", + ["Ⰰ"] = "ⰰ", + ["Ⰱ"] = "ⰱ", + ["Ⰲ"] = "ⰲ", + ["Ⰳ"] = "ⰳ", + ["Ⰴ"] = "ⰴ", + ["Ⰵ"] = "ⰵ", + ["Ⰶ"] = "ⰶ", + ["Ⰷ"] = "ⰷ", + ["Ⰸ"] = "ⰸ", + ["Ⰹ"] = "ⰹ", + ["Ⰺ"] = "ⰺ", + ["Ⰻ"] = "ⰻ", + ["Ⰼ"] = "ⰼ", + ["Ⰽ"] = "ⰽ", + ["Ⰾ"] = "ⰾ", + ["Ⰿ"] = "ⰿ", + ["Ⱀ"] = "ⱀ", + ["Ⱁ"] = "ⱁ", + ["Ⱂ"] = "ⱂ", + ["Ⱃ"] = "ⱃ", + ["Ⱄ"] = "ⱄ", + ["Ⱅ"] = "ⱅ", + ["Ⱆ"] = "ⱆ", + ["Ⱇ"] = "ⱇ", + ["Ⱈ"] = "ⱈ", + ["Ⱉ"] = "ⱉ", + ["Ⱊ"] = "ⱊ", + ["Ⱋ"] = "ⱋ", + ["Ⱌ"] = "ⱌ", + ["Ⱍ"] = "ⱍ", + ["Ⱎ"] = "ⱎ", + ["Ⱏ"] = "ⱏ", + ["Ⱐ"] = "ⱐ", + ["Ⱑ"] = "ⱑ", + ["Ⱒ"] = "ⱒ", + ["Ⱓ"] = "ⱓ", + ["Ⱔ"] = "ⱔ", + ["Ⱕ"] = "ⱕ", + ["Ⱖ"] = "ⱖ", + ["Ⱗ"] = "ⱗ", + ["Ⱘ"] = "ⱘ", + ["Ⱙ"] = "ⱙ", + ["Ⱚ"] = "ⱚ", + ["Ⱛ"] = "ⱛ", + ["Ⱜ"] = "ⱜ", + ["Ⱝ"] = "ⱝ", + ["Ⱞ"] = "ⱞ", + ["Ⱡ"] = "ⱡ", + ["Ɫ"] = "ɫ", + ["Ᵽ"] = "ᵽ", + ["Ɽ"] = "ɽ", + ["Ⱨ"] = "ⱨ", + ["Ⱪ"] = "ⱪ", + ["Ⱬ"] = "ⱬ", + ["Ⱶ"] = "ⱶ", + ["Ⲁ"] = "ⲁ", + ["Ⲃ"] = "ⲃ", + ["Ⲅ"] = "ⲅ", + ["Ⲇ"] = "ⲇ", + ["Ⲉ"] = "ⲉ", + ["Ⲋ"] = "ⲋ", + ["Ⲍ"] = "ⲍ", + ["Ⲏ"] = "ⲏ", + ["Ⲑ"] = "ⲑ", + ["Ⲓ"] = "ⲓ", + ["Ⲕ"] = "ⲕ", + ["Ⲗ"] = "ⲗ", + ["Ⲙ"] = "ⲙ", + ["Ⲛ"] = "ⲛ", + ["Ⲝ"] = "ⲝ", + ["Ⲟ"] = "ⲟ", + ["Ⲡ"] = "ⲡ", + ["Ⲣ"] = "ⲣ", + ["Ⲥ"] = "ⲥ", + ["Ⲧ"] = "ⲧ", + ["Ⲩ"] = "ⲩ", + ["Ⲫ"] = "ⲫ", + ["Ⲭ"] = "ⲭ", + ["Ⲯ"] = "ⲯ", + ["Ⲱ"] = "ⲱ", + ["Ⲳ"] = "ⲳ", + ["Ⲵ"] = "ⲵ", + ["Ⲷ"] = "ⲷ", + ["Ⲹ"] = "ⲹ", + ["Ⲻ"] = "ⲻ", + ["Ⲽ"] = "ⲽ", + ["Ⲿ"] = "ⲿ", + ["Ⳁ"] = "ⳁ", + ["Ⳃ"] = "ⳃ", + ["Ⳅ"] = "ⳅ", + ["Ⳇ"] = "ⳇ", + ["Ⳉ"] = "ⳉ", + ["Ⳋ"] = "ⳋ", + ["Ⳍ"] = "ⳍ", + ["Ⳏ"] = "ⳏ", + ["Ⳑ"] = "ⳑ", + ["Ⳓ"] = "ⳓ", + ["Ⳕ"] = "ⳕ", + ["Ⳗ"] = "ⳗ", + ["Ⳙ"] = "ⳙ", + ["Ⳛ"] = "ⳛ", + ["Ⳝ"] = "ⳝ", + ["Ⳟ"] = "ⳟ", + ["Ⳡ"] = "ⳡ", + ["Ⳣ"] = "ⳣ", + ["A"] = "a", + ["B"] = "b", + ["C"] = "c", + ["D"] = "d", + ["E"] = "e", + ["F"] = "f", + ["G"] = "g", + ["H"] = "h", + ["I"] = "i", + ["J"] = "j", + ["K"] = "k", + ["L"] = "l", + ["M"] = "m", + ["N"] = "n", + ["O"] = "o", + ["P"] = "p", + ["Q"] = "q", + ["R"] = "r", + ["S"] = "s", + ["T"] = "t", + ["U"] = "u", + ["V"] = "v", + ["W"] = "w", + ["X"] = "x", + ["Y"] = "y", + ["Z"] = "z", + ["𐐀"] = "𐐨", + ["𐐁"] = "𐐩", + ["𐐂"] = "𐐪", + ["𐐃"] = "𐐫", + ["𐐄"] = "𐐬", + ["𐐅"] = "𐐭", + ["𐐆"] = "𐐮", + ["𐐇"] = "𐐯", + ["𐐈"] = "𐐰", + ["𐐉"] = "𐐱", + ["𐐊"] = "𐐲", + ["𐐋"] = "𐐳", + ["𐐌"] = "𐐴", + ["𐐍"] = "𐐵", + ["𐐎"] = "𐐶", + ["𐐏"] = "𐐷", + ["𐐐"] = "𐐸", + ["𐐑"] = "𐐹", + ["𐐒"] = "𐐺", + ["𐐓"] = "𐐻", + ["𐐔"] = "𐐼", + ["𐐕"] = "𐐽", + ["𐐖"] = "𐐾", + ["𐐗"] = "𐐿", + ["𐐘"] = "𐑀", + ["𐐙"] = "𐑁", + ["𐐚"] = "𐑂", + ["𐐛"] = "𐑃", + ["𐐜"] = "𐑄", + ["𐐝"] = "𐑅", + ["𐐞"] = "𐑆", + ["𐐟"] = "𐑇", + ["𐐠"] = "𐑈", + ["𐐡"] = "𐑉", + ["𐐢"] = "𐑊", + ["𐐣"] = "𐑋", + ["𐐤"] = "𐑌", + ["𐐥"] = "𐑍", + ["𐐦"] = "𐑎", + ["𐐧"] = "𐑏", +} + diff --git a/embeds.xml b/embeds.xml new file mode 100644 index 0000000..82994ad --- /dev/null +++ b/embeds.xml @@ -0,0 +1,29 @@ + + +