From 5371c82f7eea841c63e26a6944486eb69c410122 Mon Sep 17 00:00:00 2001 From: Kayla Glick Date: Sun, 29 Dec 2024 16:37:29 -0500 Subject: [PATCH] update enchant description script, add lifestealing --- assets/database/db.bin | Bin 5098042 -> 5100997 bytes assets/database/db.json | 38 ++- assets/database/leftover_db.bin | Bin 849828 -> 852239 bytes assets/database/leftover_db.json | 20 +- assets/enchants/descriptions.json | 397 +++++++++++--------------- sim/common/vanilla/enchant_effects.go | 43 +++ tools/database/enchant_overrides.go | 36 ++- tools/scrape_enchant_descriptions.py | 84 +++--- 8 files changed, 308 insertions(+), 310 deletions(-) diff --git a/assets/database/db.bin b/assets/database/db.bin index 7af5b78ad624136d0c06236749591709609741a4..9b4766d01d9f6b7fa9f0f8a3e40ff91bf641eb97 100644 GIT binary patch delta 1209 zcmaJ6dD4`ZcNNq-{Jo+V#Jy^}o}!_RC4)-=>agQ1eR z{O91LB0{CXf^sd&c14t;n2NBZSAI)z#+%&FGG>@hJY`{V!)BIOxy0`lSb!gW$!hrZ z2x}4pS@wOia#2Y7QQY7vx#ic2KPhI5HJTbuj^+)P$tFjPE+d|^lX)@gXB!m$Vy>dE zGojGaD!J{~UQ2nKqukCJA1CwUIa}O0#k!SK16tYI?n)@)%6-=9Y5P_sQvu%}LeZul zE2h5F9!qD^_GrpBvipquux)&r%8uuT>>hsi8r#o*QP)4=zIK&%B;52Hm7EFqO455? zdbLex>y))A5-hR*;^16fX?HfO@y;o+aE8!NuK4d5A8&(iG zg*r~)6GtpPY_22nJaqok@CUzH!3MLJ$Ze?8Cj7f;OE=6lM4pPydnSHv&eDn5PhP#L zrY$^TSV7+Sm{lJy6qzU#qrWe%=p)7bl>ZfHA^v5RrMp*?l8oe&SUqnZiiU)XT1}On zRirpVHQudTI-d($n)pn&9(gWjR6;9z?fk-hz&aQ-9jB(kdW rXYfwF{GaKqM7Gm0Q~Te8kDommlZZ$J2B7{1GQI7`bh@cVAU?7SnG@}KrXhSHP?(txsljAsJ(XTwTMCz_G7H)4a%%p= z;_3$XHdr&N(yv{m{lF%+p>61{g4We72|Y+B}`U)9*jaWnK|}| zNc;jyYl5X&{1Qt_x4+%RW5GDlK>(yoYr0=658L*WZ+JA=G<%sjW{V2^-p(ko_!*;; zWKe2xW=>{mUUI5Jewso_Myf(^a(-!1daA*6!RtIy6CDDkFZj*9XrhDLbgmzaLfRfI zLOskJb3_IH0!>%}G(o~Gzo;a$q%;M)0h1@J?3(DXYU^d8rfc)~*A{+)tfIRPn UWWY6$fDn@h%k~eSc($+r07QDAaR2}S delta 126 zcmV-^0D=FHf;6P>Gk}BvgaU*Egam{Iga(8Mgb0KQgbIWUv~Iw+~nhmmLA_x2JUsX$b-4w-J8~s|2@4g$$Jex4eT4ivhRX gh71NC0qU0#e+(73_@oTZN4Na%3@Zk=T>K2P1k~v+Y5)KL diff --git a/assets/database/leftover_db.json b/assets/database/leftover_db.json index e6175bad83..bddefab052 100644 --- a/assets/database/leftover_db.json +++ b/assets/database/leftover_db.json @@ -1477,13 +1477,13 @@ {"effectId":851,"spellId":20024,"name":"Enchant Boots - Spirit","type":10,"stats":[0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2}, {"effectId":852,"spellId":13648,"name":"Enchant Bracer - Stamina","type":6,"stats":[0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, {"effectId":852,"spellId":13836,"name":"Enchant Boots - Stamina","type":10,"stats":[0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, -{"effectId":852,"itemId":11202,"spellId":13818,"name":"Enchant Shield - Stamina","type":13,"enchantType":2,"stats":[0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2}, +{"effectId":852,"itemId":11202,"spellId":13817,"name":"Enchant Shield - Stamina","type":13,"enchantType":2,"stats":[0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2}, {"effectId":853,"spellId":13653,"name":"Enchant Weapon - Lesser Beastslayer","type":13,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2}, {"effectId":854,"spellId":13655,"name":"Enchant Weapon - Lesser Elemental Slayer","type":13,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2}, {"effectId":856,"spellId":13661,"name":"Enchant Bracer - Strength","type":6,"stats":[5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, {"effectId":856,"spellId":13887,"name":"Enchant Gloves - Strength","type":7,"stats":[5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, {"effectId":857,"spellId":13663,"name":"Enchant Chest - Greater Mana","type":5,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2}, -{"effectId":863,"itemId":11168,"spellId":13691,"name":"Enchant Shield - Lesser Block","type":13,"enchantType":2,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2}, +{"effectId":863,"itemId":11168,"spellId":13689,"name":"Enchant Shield - Lesser Block","type":13,"enchantType":2,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2}, {"effectId":865,"spellId":13698,"name":"Enchant Gloves - Skinning","type":7,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2}, {"effectId":866,"spellId":13700,"name":"Enchant Chest - Lesser Stats","type":5,"stats":[2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, {"effectId":884,"spellId":13746,"name":"Enchant Cloak - Greater Defense","type":4,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,0,0],"quality":1}, @@ -1502,17 +1502,17 @@ {"effectId":923,"spellId":13931,"name":"Enchant Bracer - Deflection","type":6,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2}, {"effectId":924,"spellId":7428,"name":"Enchant Bracer - Minor Deflect","type":6,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, {"effectId":925,"spellId":13646,"name":"Enchant Bracer - Lesser Deflection","type":6,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2}, -{"effectId":926,"itemId":11224,"spellId":13934,"name":"Enchant Shield - Frost Resistance","type":13,"enchantType":2,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0],"quality":2}, +{"effectId":926,"itemId":11224,"spellId":13933,"name":"Enchant Shield - Frost Resistance","type":13,"enchantType":2,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0],"quality":2}, {"effectId":927,"spellId":13939,"name":"Enchant Bracer - Greater Strength","type":6,"stats":[7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, {"effectId":927,"spellId":20013,"name":"Enchant Gloves - Greater Strength","type":7,"stats":[7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, {"effectId":928,"spellId":13941,"name":"Enchant Chest - Stats","type":5,"stats":[3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, {"effectId":929,"spellId":13945,"name":"Enchant Bracer - Greater Stamina","type":6,"stats":[0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2}, {"effectId":929,"spellId":20020,"name":"Enchant Boots - Greater Stamina","type":10,"stats":[0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2}, -{"effectId":929,"itemId":16217,"spellId":20069,"name":"Enchant Shield - Greater Stamina","type":13,"enchantType":2,"stats":[0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, +{"effectId":929,"itemId":16217,"spellId":20017,"name":"Enchant Shield - Greater Stamina","type":13,"enchantType":2,"stats":[0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, {"effectId":930,"spellId":13947,"name":"Enchant Gloves - Riding Skill","type":7,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2}, {"effectId":931,"spellId":13948,"name":"Enchant Gloves - Minor Haste","type":7,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, -{"effectId":943,"spellId":13529,"name":"Enchant 2H Weapon - Lesser Impact","type":13,"enchantType":1,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, {"effectId":943,"spellId":13693,"name":"Enchant Weapon - Striking","type":13,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, +{"effectId":943,"spellId":13529,"name":"Enchant 2H Weapon - Lesser Impact","type":13,"enchantType":1,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, {"effectId":963,"spellId":13937,"name":"Enchant 2H Weapon - Greater Impact","type":13,"enchantType":1,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, {"effectId":1483,"itemId":11622,"spellId":15340,"name":"Lesser Arcanum of Rumination","type":1,"extraTypes":[9],"enchantType":3,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,150,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2}, {"effectId":1503,"itemId":11642,"spellId":15389,"name":"Lesser Arcanum of Constitution","type":1,"extraTypes":[9],"enchantType":3,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,0,0,0,0,0,0,0,0,0],"quality":2}, @@ -1532,14 +1532,14 @@ {"effectId":1887,"spellId":20023,"name":"Enchant Boots - Greater Agility","type":10,"stats":[0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2}, {"effectId":1888,"spellId":20014,"name":"Enchant Cloak - Greater Resistance","type":4,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,0,0,0,0],"quality":1}, {"effectId":1889,"spellId":20015,"name":"Enchant Cloak - Superior Defense","type":4,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,0,0,0],"quality":1}, -{"effectId":1890,"itemId":16222,"spellId":20074,"name":"Enchant Shield - Superior Spirit","type":13,"enchantType":2,"stats":[0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2}, +{"effectId":1890,"itemId":16222,"spellId":20016,"name":"Enchant Shield - Superior Spirit","type":13,"enchantType":2,"stats":[0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2}, {"effectId":1891,"spellId":20025,"name":"Enchant Chest - Greater Stats","type":5,"stats":[4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, {"effectId":1892,"spellId":20026,"name":"Enchant Chest - Major Health","type":5,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,0,0,0,0,0,0,0,0,0],"quality":1}, {"effectId":1893,"spellId":20028,"name":"Enchant Chest - Major Mana","type":5,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2}, {"effectId":1894,"spellId":20029,"name":"Enchant Weapon - Icy Chill","type":13,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2}, {"effectId":1896,"spellId":20030,"name":"Enchant 2H Weapon - Superior Impact","type":13,"enchantType":1,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2}, -{"effectId":1897,"spellId":20031,"name":"Enchant Weapon - Superior Striking","type":13,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2}, {"effectId":1897,"spellId":13695,"name":"Enchant 2H Weapon - Impact","type":13,"enchantType":1,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, +{"effectId":1897,"spellId":20031,"name":"Enchant Weapon - Superior Striking","type":13,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2}, {"effectId":1898,"spellId":20032,"name":"Enchant Weapon - Lifestealing","type":13,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":3}, {"effectId":1899,"spellId":20033,"name":"Enchant Weapon - Unholy Weapon","type":13,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2}, {"effectId":1900,"spellId":20034,"name":"Enchant Weapon - Crusader","type":13,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2}, @@ -1578,10 +1578,16 @@ {"effectId":2615,"spellId":25074,"name":"Enchant Gloves - Frost Power","type":7,"stats":[0,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":3}, {"effectId":2616,"spellId":25078,"name":"Enchant Gloves - Fire Power","type":7,"stats":[0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":3}, {"effectId":2617,"spellId":25079,"name":"Enchant Gloves - Healing Power","type":7,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0],"quality":3}, +{"effectId":2619,"spellId":25081,"name":"Enchant Cloak - Greater Fire Resistance","type":4,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0],"quality":1}, +{"effectId":2620,"spellId":25082,"name":"Enchant Cloak - Greater Nature Resistance","type":4,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,0],"quality":1}, {"effectId":2621,"spellId":25084,"name":"Enchant Cloak - Subtlety","type":4,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":3}, {"effectId":2622,"spellId":25086,"name":"Enchant Cloak - Dodge","type":4,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],"quality":3}, {"effectId":2646,"spellId":27837,"name":"Enchant 2H Weapon - Agility","type":13,"enchantType":1,"stats":[0,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, {"effectId":2681,"itemId":22635,"spellId":28161,"name":"Savage Guard","type":1,"extraTypes":[9],"enchantType":3,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0],"quality":3}, +{"effectId":2715,"itemId":23547,"spellId":29475,"name":"Resilience of the Scourge","type":3,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0],"quality":4}, +{"effectId":2716,"itemId":23549,"spellId":29480,"name":"Fortitude of the Scourge","type":3,"stats":[0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,0,0,0],"quality":4}, +{"effectId":2717,"itemId":23548,"spellId":29483,"name":"Might of the Scourge","type":3,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,0,0.01,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":4}, +{"effectId":2721,"itemId":23545,"spellId":29467,"name":"Power of the Scourge","type":3,"stats":[0,0,0,0,0,15,0,0,0,0,0,0,0,0,0.01,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0],"quality":4}, {"effectId":7210,"spellId":435481,"name":"Enchant Weapon - Dismantle","type":13,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":4}, {"effectId":7223,"spellId":435903,"name":"Enchant Chest - Retricutioner","type":5,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":4}, {"effectId":7603,"itemId":228982,"spellId":463871,"name":"Enchant Shield - Law of Nature","type":13,"enchantType":2,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,55,30,0],"quality":2} diff --git a/assets/enchants/descriptions.json b/assets/enchants/descriptions.json index 15e2cfab18..fc03b56782 100644 --- a/assets/enchants/descriptions.json +++ b/assets/enchants/descriptions.json @@ -1,226 +1,175 @@ { - "3329": "+12 Stamina", - "3330": "+18 Stamina", - "3795": "+50 Attack Power and +20 Resilience Rating", - "3796": "+29 Spell Power and +20 Resilience Rating", - "3842": "+30 Stamina and +25 Resilience Rating", - "3812": "+25 Frost Resistance and +30 Stamina", - "3813": "+25 Nature Resistance and +30 Stamina", - "3814": "+25 Shadow Resistance and +30 Stamina", - "3815": "+25 Arcane Resistance and +30 Stamina", - "3816": "+25 Fire Resistance and +30 Stamina", - "3819": "+30 Spell Power and 10 mana per 5 seconds.", - "3820": "+30 Spell Power and 20 Critical strike rating.", - "3818": "+37 Stamina and +20 Defense Rating", - "3817": "+50 Attack Power and +20 Critical Strike Rating", - "3878": "Mind Amplification Dish", - "3793": "+40 Attack Power and +15 Resilience Rating", - "3794": "+23 Spell Power and +15 Resilience Rating", - "3852": "+30 Stamina and +15 Resilience Rating", - "3806": "+18 Spell Power and +10 Critical Strike Rating", - "3807": "+18 Spell Power and +5 Mana per 5 sec", - "3875": "+30 Attack Power and +10 Critical Strike Rating", - "3876": "+15 Dodge Rating and +10 Defense Rating", - "3810": "+24 Spell Power and +15 Critical Strike Rating", - "3809": "+24 Spell Power and +8 Mana per 5 sec", - "3808": "+40 Attack Power and +15 Crit Rating", - "3811": "+20 Dodge Rating and +15 Defense Rating", - "3838": "+70 Spell Power and +15 Crit Rating", - "3836": "+70 Spell Power and +8 Mana/5 seconds", - "3835": "+120 Attack Power and +15 Crit Rating", - "3837": "+60 Dodge Rating and +15 Defense Rating", - "1262": "+20 Arcane Resistance", - "1354": "+20 Fire Resistance", - "3230": "+20 Frost Resistance", - "1400": "+20 Nature Resistance", - "1446": "+20 Shadow Resistance", - "1951": "+16 Defense Rating", - "3256": "Increased Stealth and +10 Agility", - "3294": "+225 Armor", - "3831": "+23 Haste Rating", - "3296": "+10 Spirit and 2% Reduced Threat", - "3243": "+35 Spell Penetration", - "3825": "+15 Haste Rating", - "983": "+16 Agility", - "1099": "+22 Agility", - "3605": "Flexweave Underlay", - "3722": "Lightweave Embroidery", - "3728": "Darkglow Embroidery", - "3730": "Swordguard Embroidery", - "3859": "+27 Spell Power", - "3245": "+20 Resilience Rating", - "3252": "+8 All Stats", - "3832": "+10 All Stats", - "3233": "+250 Mana", - "3236": "+200 Health", - "3297": "+275 Health", - "2381": "+10 mana every 5 sec.", - "1953": "+22 Defense Rating", - "3845": "+50 Attack Power", - "2332": "+30 Spell Power", - "3850": "+40 Stamina", - "1119": "+16 Intellect", - "1147": "+18 Spirit", - "3231": "+15 Expertise Rating", - "2661": "+6 All Stats", - "2326": "+23 Spell Power", - "1600": "+38 Attack Power", - "3756": "+130 Attack Power", - "3757": "+102 Stamina", - "3758": "+76 Spell Power", - "3759": "+70 Fire Resistance", - "3760": "+70 Frost Resistance", - "3761": "+70 Shadow Resistance", - "3762": "+70 Nature Resistance", - "3763": "+70 Arcane Resistance", - "3253": "+2% Threat and 10 Parry Rating", - "1603": "+44 Attack Power", - "3246": "+28 Spell Power", - "3231": "+15 Expertise Rating", - "3238": "Gatherer", - "3829": "+35 Attack Power", - "3222": "+20 Agility", - "3234": "+20 Hit Rating", - "3603": "Hand-Mounted Pyro Rocket", - "3604": "Hyperspeed Accelerators", - "3860": "+885 Armor", - "3599": "Electromagnetic Pulse Generator", - "3601": "Frag Belt", - "3325": "+45 Stamina and +15 Agility", - "3326": "+55 Attack Power and +15 Critical Strike Rating", - "3822": "+55 Stamina and +22 Agility", - "3823": "+75 Attack Power and +22 Critical Strike Rating", - "3853": "+40 Resilience Rating and +28 Stamina", - "3718": "+35 Spell Power and +12 Spirit", - "3719": "+50 Spell Power and +20 Spirit", - "3720": "+35 Spell Power and +20 Stamina", - "3721": "+50 Spell Power and +30 Stamina", - "3327": "+55 Stamina and +22 Agility", - "3328": "+75 Attack Power and +22 Critical Strike Rating", - "3873": "+50 Spell Power and +30 Stamina", - "3872": "+50 Spell Power and +20 Spirit", - "1597": "+32 Attack Power", - "3232": "+15 Stamina and Minor Speed Increase", - "3824": "+24 Attack Power", - "1075": "+22 Stamina", - "1147": "+18 Spirit", - "3244": "+7 Health and Mana every 5 sec", - "3826": "+12 Hit Rating and +12 Critical Strike Rating", - "983": "+16 Agility", - "3606": "+24 Critical Strike Rating", - "1103": "+26 Agility", - "3844": "+45 Spirit", - "3251": "Giantslaying", - "3239": "Icebreaker Weapon", - "3731": "Titanium Weapon Chain", - "3833": "+65 Attack Power", - "3834": "+63 Spell Power", - "3854": "+81 Spell Power", - "3789": "Berserking", - "3241": "Lifeward", - "3790": "Black Magic", - "3788": "+25 Hit Rating and +25 Critical Strike Rating", - "3830": "+50 Spell Power", - "1606": "+50 Attack Power", - "3370": "Rune of Razorice", - "3369": "Rune of Cinderglacier", - "3366": "Rune of Lichbane", - "3595": "Rune of Spellbreaking", - "3594": "Rune of Swordbreaking", - "3368": "Rune of the Fallen Crusader", - "3883": "Rune of the Nerubian Carapace", - "3247": "+140 Attack Power versus Undead", - "3827": "+110 Attack Power", - "3828": "+85 Attack Power", - "3367": "Rune of Spellshattering", - "3365": "Rune of Swordshattering", - "3847": "Rune of the Stoneskin Gargoyle", - "1952": "+20 Defense Rating", - "1128": "+25 Intellect", - "3748": "Titanium Spike (45-67)", - "3849": "Titanium Plating", - "3839": "+40 Attack Power", - "3840": "+23 Spell Power", - "3791": "+30 Stamina", - "3607": "+40 Ranged Haste Rating", - "3608": "+40 Ranged Critical Strike", - "3843": "Scope (+15 Damage)", - "2999": "+16 Defense Rating and +17 Dodge Rating", - "3002": "+22 Spell Power and +14 Hit Rating", - "3003": "+34 Attack Power and +16 Hit Rating", - "3096": "+17 Strength and +16 Intellect", - "3004": "+18 Stamina and +20 Resilience Rating", - "2583": "+10 Defense Rating +10 Stamina +30 Block Value", - "2982": "+18 Spell Power and +10 Critical Strike Rating", - "2986": "+30 Attack Power and +10 Critical Strike Rating", - "2978": "+15 Dodge Rating and +10 Defense Rating", - "2995": "+15 Critical Strike Rating and +12 Spell Power", - "2997": "+15 Critical Strike Rating and +20 Attack Power", - "2991": "+15 Defense Rating and +10 Dodge Rating", - "2605": "+18 Spell Power", - "2721": "+15 Spell Power and +14 Critical Strike Rating", - "2717": "+26 Attack Power and +14 Critical Strike Rating", - "2716": "+16 Stamina and +100 Armor", - "2622": "+12 Dodge Rating", - "2621": "2% Reduced Threat", - "849": "+3 Agility", - "368": "+12 Agility", - "2938": "+20 Spell Penetration", - "1441": "+15 Shadow Resistance", - "2648": "+12 Defense Rating", - "2659": "+150 Health", - "2660": "+250 Mana", - "2661": "+6 All Stats", - "2933": "+15 Resilience Rating", - "1144": "+15 Spirit", - "3150": "+7 mana every 5 sec.", - "1950": "+16 Defense Rating", - "2649": "+12 Stamina", - "2650": "+15 Spell Power", - "369": "+12 Intellect", - "2647": "+12 Strength", - "1593": "+24 Attack Power", - "1891": "+4 All Stats", - "2614": "+20 Shadow Spell Power", - "2935": "+15 Hit Rating", - "2937": "+20 Spell Power", - "684": "+15 Strength", - "2564": "+15 Agility", - "2613": "+2% Threat", - "2748": "+35 Spell Power and +20 Stamina", - "2747": "+25 Spell Power and +15 Stamina", - "3010": "+40 Attack Power and +10 Critical Strike Rating", - "3012": "+50 Attack Power and +12 Critical Strike Rating", - "3013": "+40 Stamina and +12 Agility", - "851": "+5 Spirit", - "2940": "Minor Speed and +9 Stamina", - "2656": "+5 Health and Mana every 5 sec", - "2649": "+12 Stamina", - "2657": "+12 Agility", - "2939": "Minor Speed and +6 Agility", - "2658": "+10 Hit Rating and +10 Critical Strike Rating", - "1897": "+5 Weapon Damage", - "963": "+7 Weapon Damage", + "15": "Reinforced Armor +8", + "16": "Reinforced Armor +16", + "17": "Reinforced Armor +24", + "18": "Reinforced Armor +32", + "1843": "Reinforced Armor +40", + "2503": "Defense +3", + "1503": "HP +100", + "1505": "+20 Fire Resistance", + "1483": "Mana +150", + "1504": "Armor +125", + "1506": "Strength +8", + "1507": "Stamina +8", + "1508": "Agility +8", + "1509": "Intellect +8", + "1510": "Spirit +8", + "2544": "Healing and Spell Damage +8", + "2545": "Dodge +1%", + "2543": "Attack Speed +1%", + "2681": "+10 Nature Resistance", + "2591": "Intellect +10/Stamina +10/Healing Spells +24", + "2586": "Ranged Attack Power +24/Stamina +10/Hit +1%", + "2588": "Healing and Spell Damage +18/Spell Hit +1%", + "2584": "Defense +7/Stamina +10/Healing Spells +24", + "2590": "Mana Regen +4/Stamina +10/Healing Spells +24", + "2585": "Attack Power +28/Dodge +1%", + "2587": "Healing and Spell Damage +13/Intellect +15", + "2589": "Healing and Spell Damage +18/Stamina +10", + "2583": "Defense +7/Stamina +10/Block Value +15", + "2604": "+33 Healing Spells", + "2605": "+18 Spell Damage and Healing", + "2606": "+30 Attack Power", + "2715": "Healing +31 and 5 mana per 5 sec.", + "2717": "Attack Power +26 and +1% Critical Strike", + "2716": "Stamina +16 and Armor +100", + "2721": "Spell Damage +15 and +1% Spell Critical Strike", + "2": "+1 All Resistances", + "783": "Armor +10", + "247": "Agility +1", + "744": "Armor +20", + "256": "+5 Fire Resistance", + "804": "+10 Shadow Resistance", + "848": "Armor +30", + "2463": "+7 Fire Resistance", + "884": "Armor +50", + "903": "+3 All Resistances", + "849": "Agility +3", + "1888": "+5 All Resistances", + "1889": "Armor +70", + "2619": "+15 Fire Resistance", + "2620": "+15 Nature Resistance", + "910": "Increased Stealth", + "2621": "Subtlety", + "2622": "Dodge +1%", + "41": "Health +5", + "24": "Mana +5", + "44": "Absorption (10)", + "242": "Health +15", + "246": "Mana +20", + "254": "Health +25", + "63": "Absorption (25)", + "843": "Mana +30", + "847": "All Stats +1", + "850": "Health +35", + "857": "Mana +50", + "7223": "Retricutioner", + "866": "All Stats +2", + "908": "Health +50", + "913": "Mana +65", + "928": "All Stats +3", + "1892": "Health +100", + "1893": "Mana +100", + "1891": "All Stats +4", + "66": "Stamina +1", + "243": "Spirit +1", + "41": "Health +5", + "924": "Defense +1", + "247": "Agility +1", + "248": "Strength +1", + "255": "Spirit +3", + "724": "Stamina +3", + "823": "Strength +3", + "723": "Intellect +3", + "851": "Spirit +5", + "925": "Defense +2", + "852": "Stamina +5", + "856": "Strength +5", + "905": "Intellect +5", + "907": "Spirit +7", + "923": "Defense +3", + "927": "Strength +7", + "929": "Stamina +7", + "1883": "Intellect +7", + "1884": "Spirit +9", + "2565": "Mana Regen 4 per 5 sec.", + "1885": "Strength +9", + "2566": "Healing Spells +24", + "1886": "Stamina +9", + "846": "Fishing +2", + "845": "Herbalism +2", + "844": "Mining +2", + "865": "Skinning +5", + "904": "Agility +5", + "906": "Mining +5", + "909": "Herbalism +5", + "856": "Strength +5", + "931": "Attack Speed +1%", + "930": "Minor Mount Speed Increase", + "1887": "Agility +7", + "927": "Strength +7", + "2616": "Fire Damage +20", + "2615": "Frost Damage +20", + "2617": "Healing Spells +30", + "2614": "Shadow Damage +20", + "2564": "Agility +15", + "2613": "Threat +2%", + "247": "Agility +1", + "66": "Stamina +1", + "849": "Agility +3", + "724": "Stamina +3", + "255": "Spirit +3", + "852": "Stamina +5", + "911": "Minor Speed Increase", + "904": "Agility +5", + "929": "Stamina +7", + "851": "Spirit +5", + "1887": "Agility +7", + "36": "Enchant: Fiery Blaze", + "249": "Beastslaying +2", + "250": "Weapon Damage +1", + "241": "Weapon Damage +2", + "853": "Beastslaying +6", + "854": "Elemental Slayer +6", + "2443": "Frost Spell Damage +7", + "943": "Weapon Damage +3", + "7210": "Dismantle", + "912": "Demonslaying", + "805": "Weapon Damage +4", + "803": "Fiery Weapon", + "1894": "Icy Weapon", + "2564": "Agility +15", + "2563": "Strength +15", + "1899": "Unholy Weapon", "1900": "Crusader", - "2666": "+30 Intellect", - "2667": "+70 Attack Power", - "2669": "+40 Spell Power", - "2671": "+50 Arcane and Fire Spell Power", - "2672": "+54 Shadow and Frost Spell Power", - "2673": "Mongoose", - "2564": "+15 Agility", - "3222": "+20 Agility", - "2670": "+35 Agility", - "3225": "Executioner", - "3273": "Deathfrost", - "2654": "+12 Intellect", - "1071": "+18 Stamina", - "3229": "+12 Resilience Rating", - "2929": "+2 Weapon Damage", - "2928": "+12 Spell Power", - "2931": "+4 All Stats", - "2523": "+30 Ranged Hit Rating", - "2723": "Scope (+12 Damage)", - "2724": "Scope (+28 Critical Strike Rating)", - "3870": "Blood Draining" -} + "2505": "Healing Spells +55", + "1898": "Lifestealing", + "2568": "Intellect +22", + "2567": "Spirit +20", + "2504": "Spell Damage +30", + "1897": "Weapon Damage +5", + "34": "Counterweight +3% Attack Speed", + "723": "Intellect +3", + "241": "Weapon Damage +2", + "255": "Spirit +3", + "943": "Weapon Damage +3", + "1897": "Weapon Damage +5", + "963": "Weapon Damage +7", + "2646": "Agility +25", + "1896": "Weapon Damage +9", + "1904": "Intellect +9", + "1903": "Spirit +9", + "848": "Armor +30", + "863": "Blocking +2%", + "852": "Stamina +5", + "926": "+8 Frost Resistance", + "929": "Stamina +7", + "1890": "Spirit +9", + "7603": "Law of Nature", + "30": "Scope (+1 Damage)", + "32": "Scope (+2 Damage)", + "33": "Scope (+3 Damage)", + "663": "Scope (+5 Damage)", + "664": "Scope (+7 Damage)", + "2523": "+3% Hit" +} \ No newline at end of file diff --git a/sim/common/vanilla/enchant_effects.go b/sim/common/vanilla/enchant_effects.go index f154b7bc56..f8a38ba8f3 100644 --- a/sim/common/vanilla/enchant_effects.go +++ b/sim/common/vanilla/enchant_effects.go @@ -207,6 +207,49 @@ func init() { w.BaseDamageMax += 5 }) + // Weapon - Lifestealing + core.AddWeaponEffect(1898, func(agent core.Agent, slot proto.ItemSlot) { + character := agent.GetCharacter() + + isMH := slot == proto.ItemSlot_ItemSlotMainHand + procMask := character.GetProcMaskForEnchant(1898) + ppmm := character.AutoAttacks.NewPPMManager(6.66, procMask) + + procMaskOnAuto := core.ProcMaskDamageProc // Both spell and melee proc combo + procMaskOnSpecial := core.ProcMaskSpellDamage // TODO: check if core.ProcMaskSpellDamage remains on special + + procSpell := character.RegisterSpell(core.SpellConfig{ + ActionID: core.ActionID{SpellID: 20004}.WithTag(core.TernaryInt32(isMH, 1, 2)), + SpellSchool: core.SpellSchoolShadow, + DefenseType: core.DefenseTypeMagic, + ProcMask: procMaskOnAuto, + Flags: core.SpellFlagNoOnCastComplete | core.SpellFlagPassiveSpell, + + DamageMultiplier: 1, + ThreatMultiplier: 1, + + ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { + spell.CalcAndDealDamage(sim, target, 3, spell.OutcomeMagicHitAndCrit) + }, + }) + + aura := core.MakePermanent(character.GetOrRegisterAura(core.Aura{ + Label: "Lifestealing Weapon", + OnSpellHitDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { + if result.Landed() && !spell.Flags.Matches(core.SpellFlagSuppressWeaponProcs) && ppmm.Proc(sim, spell.ProcMask, "Lifestealing Weapon") { + if spell.ProcMask.Matches(core.ProcMaskMeleeSpecial) { + procSpell.ProcMask = procMaskOnSpecial + } else { + procSpell.ProcMask = procMaskOnAuto + } + procSpell.Cast(sim, result.Target) + } + }, + })) + + character.ItemSwap.RegisterOnSwapItemForEffectWithPPMManager(1898, 6.66, &ppmm, aura) + }) + // TODO: Crusader, Mongoose, and Executioner could also be modelled as AddWeaponEffect instead // ApplyCrusaderEffect will be applied twice if there is two weapons with this enchant. // However, it will automatically overwrite one of them, so it should be ok. diff --git a/tools/database/enchant_overrides.go b/tools/database/enchant_overrides.go index 4ac0a05fd0..3f72cd465e 100644 --- a/tools/database/enchant_overrides.go +++ b/tools/database/enchant_overrides.go @@ -38,9 +38,8 @@ var EnchantOverrides = []*proto.UIEnchant{ // Melee Haste isn't actually a stat, so use Pseudostats.MeleeSpeedMultiplier {EffectId: 2543, ItemId: 18329, SpellId: 22840, Name: "Arcanum of Rapidity", Quality: proto.ItemQuality_ItemQualityUncommon, Stats: stats.Stats{}.ToFloatArray(), Type: proto.ItemType_ItemTypeHead, ExtraTypes: []proto.ItemType{proto.ItemType_ItemTypeLegs}, EnchantType: proto.EnchantType_EnchantTypeKit}, - // Drop in ZG - {EffectId: 2681, ItemId: 22635, SpellId: 28161, Name: "Savage Guard", Quality: proto.ItemQuality_ItemQualityRare, Stats: stats.Stats{stats.NatureResistance: 10}.ToFloatArray(), Type: proto.ItemType_ItemTypeHead, ExtraTypes: []proto.ItemType{proto.ItemType_ItemTypeLegs}, EnchantType: proto.EnchantType_EnchantTypeKit}, // ZG Enchants + {EffectId: 2681, ItemId: 22635, SpellId: 28161, Name: "Savage Guard", Quality: proto.ItemQuality_ItemQualityRare, Stats: stats.Stats{stats.NatureResistance: 10}.ToFloatArray(), Type: proto.ItemType_ItemTypeHead, ExtraTypes: []proto.ItemType{proto.ItemType_ItemTypeLegs}, EnchantType: proto.EnchantType_EnchantTypeKit}, // Druid {EffectId: 2591, ItemId: 19790, SpellId: 24168, Name: "Animist's Caress", Quality: proto.ItemQuality_ItemQualityRare, Stats: stats.Stats{stats.Stamina: 10, stats.Intellect: 10, stats.HealingPower: 24}.ToFloatArray(), Type: proto.ItemType_ItemTypeHead, ExtraTypes: []proto.ItemType{proto.ItemType_ItemTypeLegs}, EnchantType: proto.EnchantType_EnchantTypeKit, ClassAllowlist: []proto.Class{proto.Class_ClassDruid}}, // Hunter @@ -68,10 +67,10 @@ var EnchantOverrides = []*proto.UIEnchant{ {EffectId: 2605, ItemId: 20076, SpellId: 24421, Name: "Zandalar Signet of Mojo", Quality: proto.ItemQuality_ItemQualityRare, Stats: stats.Stats{stats.SpellPower: 18, stats.HealingPower: 18}.ToFloatArray(), Type: proto.ItemType_ItemTypeShoulder}, {EffectId: 2606, ItemId: 20077, SpellId: 24422, Name: "Zandalar Signet of Might", Quality: proto.ItemQuality_ItemQualityRare, Stats: stats.Stats{stats.AttackPower: 30, stats.RangedAttackPower: 30}.ToFloatArray(), Type: proto.ItemType_ItemTypeShoulder}, // Drop in naxxramas - // {EffectId: 2715, ItemId: 23547, SpellId: 29475, Name: "Resilience of the Scourge", Quality: proto.ItemQuality_ItemQualityEpic, Stats: stats.Stats{stats.HealingPower: 31, stats.MP5: 5}.ToFloatArray(), Type: proto.ItemType_ItemTypeShoulder}, - // {EffectId: 2717, ItemId: 23548, SpellId: 29483, Name: "Might of the Scourge", Quality: proto.ItemQuality_ItemQualityEpic, Stats: stats.Stats{stats.AttackPower: 26, stats.MeleeCrit: 0.01}.ToFloatArray(), Type: proto.ItemType_ItemTypeShoulder}, - // {EffectId: 2716, ItemId: 23549, SpellId: 29480, Name: "Fortitude of the Scourge", Quality: proto.ItemQuality_ItemQualityEpic, Stats: stats.Stats{stats.Stamina: 16, stats.BonusArmor: 100}.ToFloatArray(), Type: proto.ItemType_ItemTypeShoulder}, - // {EffectId: 2721, ItemId: 23545, SpellId: 29467, Name: "Power of the Scourge", Quality: proto.ItemQuality_ItemQualityEpic, Stats: stats.Stats{stats.SpellPower: 15, stats.HealingPower: 15, stats.SpellCrit: 0.01}.ToFloatArray(), Type: proto.ItemType_ItemTypeShoulder}, + {EffectId: 2715, ItemId: 23547, SpellId: 29475, Name: "Resilience of the Scourge", Quality: proto.ItemQuality_ItemQualityEpic, Stats: stats.Stats{stats.HealingPower: 31, stats.MP5: 5}.ToFloatArray(), Type: proto.ItemType_ItemTypeShoulder}, + {EffectId: 2717, ItemId: 23548, SpellId: 29483, Name: "Might of the Scourge", Quality: proto.ItemQuality_ItemQualityEpic, Stats: stats.Stats{stats.AttackPower: 26, stats.MeleeCrit: 0.01}.ToFloatArray(), Type: proto.ItemType_ItemTypeShoulder}, + {EffectId: 2716, ItemId: 23549, SpellId: 29480, Name: "Fortitude of the Scourge", Quality: proto.ItemQuality_ItemQualityEpic, Stats: stats.Stats{stats.Stamina: 16, stats.BonusArmor: 100}.ToFloatArray(), Type: proto.ItemType_ItemTypeShoulder}, + {EffectId: 2721, ItemId: 23545, SpellId: 29467, Name: "Power of the Scourge", Quality: proto.ItemQuality_ItemQualityEpic, Stats: stats.Stats{stats.SpellPower: 15, stats.HealingPower: 15, stats.SpellCrit: 0.01}.ToFloatArray(), Type: proto.ItemType_ItemTypeShoulder}, // Back {EffectId: 2, SpellId: 7454, Name: "Enchant Cloak - Minor Resistance", Quality: proto.ItemQuality_ItemQualityCommon, Stats: stats.Stats{stats.ArcaneResistance: 1, stats.FrostResistance: 1, stats.FireResistance: 1, stats.NatureResistance: 1, stats.ShadowResistance: 1}.ToFloatArray(), Type: proto.ItemType_ItemTypeBack}, @@ -87,16 +86,13 @@ var EnchantOverrides = []*proto.UIEnchant{ {EffectId: 849, SpellId: 13882, Name: "Enchant Cloak - Lesser Agility", Quality: proto.ItemQuality_ItemQualityUncommon, Stats: stats.Stats{stats.Agility: 3}.ToFloatArray(), Type: proto.ItemType_ItemTypeBack}, {EffectId: 1888, SpellId: 20014, Name: "Enchant Cloak - Greater Resistance", Quality: proto.ItemQuality_ItemQualityCommon, Stats: stats.Stats{stats.ArcaneResistance: 5, stats.FireResistance: 5, stats.FrostResistance: 5, stats.NatureResistance: 5, stats.ShadowResistance: 5}.ToFloatArray(), Type: proto.ItemType_ItemTypeBack}, {EffectId: 1889, SpellId: 20015, Name: "Enchant Cloak - Superior Defense", Quality: proto.ItemQuality_ItemQualityCommon, Stats: stats.Stats{stats.BonusArmor: 70}.ToFloatArray(), Type: proto.ItemType_ItemTypeBack}, - // Drop in AQ - {EffectId: 2622, SpellId: 25086, Name: "Enchant Cloak - Dodge", Quality: proto.ItemQuality_ItemQualityRare, Stats: stats.Stats{stats.Dodge: 1 * core.DodgeRatingPerDodgeChance}.ToFloatArray(), Type: proto.ItemType_ItemTypeBack}, - // Requires Cenarion Circle - Friendly which doesn't seem doable until phase 4 - // {EffectId: 2619, SpellId: 25081, Name: "Enchant Cloak - Greater Fire Resistance", Quality: proto.ItemQuality_ItemQualityCommon, Stats: stats.Stats{stats.FireResistance: 15}.ToFloatArray(), Type: proto.ItemType_ItemTypeBack}, - // Requires Cenarion Circle - Honored which doesn't seem doable until phase 4 - // {EffectId: 2620, SpellId: 25082, Name: "Enchant Cloak - Greater Nature Resistance", Quality: proto.ItemQuality_ItemQualityCommon, Stats: stats.Stats{stats.NatureResistance: 15}.ToFloatArray(), Type: proto.ItemType_ItemTypeBack}, + // Requires Cenarion Circle - Friendly + {EffectId: 2619, SpellId: 25081, Name: "Enchant Cloak - Greater Fire Resistance", Quality: proto.ItemQuality_ItemQualityCommon, Stats: stats.Stats{stats.FireResistance: 15}.ToFloatArray(), Type: proto.ItemType_ItemTypeBack}, + {EffectId: 2620, SpellId: 25082, Name: "Enchant Cloak - Greater Nature Resistance", Quality: proto.ItemQuality_ItemQualityCommon, Stats: stats.Stats{stats.NatureResistance: 15}.ToFloatArray(), Type: proto.ItemType_ItemTypeBack}, // Drop in AQ {EffectId: 910, SpellId: 25083, Name: "Enchant Cloak - Stealth", Quality: proto.ItemQuality_ItemQualityRare, Stats: stats.Stats{}.ToFloatArray(), Type: proto.ItemType_ItemTypeBack}, - // Drop in AQ {EffectId: 2621, SpellId: 25084, Name: "Enchant Cloak - Subtlety", Quality: proto.ItemQuality_ItemQualityRare, Stats: stats.Stats{}.ToFloatArray(), Type: proto.ItemType_ItemTypeBack}, + {EffectId: 2622, SpellId: 25086, Name: "Enchant Cloak - Dodge", Quality: proto.ItemQuality_ItemQualityRare, Stats: stats.Stats{stats.Dodge: 1 * core.DodgeRatingPerDodgeChance}.ToFloatArray(), Type: proto.ItemType_ItemTypeBack}, // Chest {EffectId: 41, SpellId: 7420, Name: "Enchant Chest - Minor Health", Quality: proto.ItemQuality_ItemQualityCommon, Stats: stats.Stats{stats.Health: 5}.ToFloatArray(), Type: proto.ItemType_ItemTypeChest}, @@ -182,6 +178,7 @@ var EnchantOverrides = []*proto.UIEnchant{ {EffectId: 1887, SpellId: 20023, Name: "Enchant Boots - Greater Agility", Quality: proto.ItemQuality_ItemQualityUncommon, Stats: stats.Stats{stats.Agility: 7}.ToFloatArray(), Type: proto.ItemType_ItemTypeFeet}, // Weapon + {EffectId: 36, SpellId: 6296, Name: "Fiery Blaze Enchantment", Quality: proto.ItemQuality_ItemQualityCommon, Stats: stats.Stats{}.ToFloatArray(), Type: proto.ItemType_ItemTypeWeapon}, {EffectId: 249, SpellId: 7786, Name: "Enchant Weapon - Minor Beastslayer", Quality: proto.ItemQuality_ItemQualityUncommon, Stats: stats.Stats{}.ToFloatArray(), Type: proto.ItemType_ItemTypeWeapon}, {EffectId: 250, SpellId: 7788, Name: "Enchant Weapon - Minor Striking", Quality: proto.ItemQuality_ItemQualityCommon, Stats: stats.Stats{}.ToFloatArray(), Type: proto.ItemType_ItemTypeWeapon}, {EffectId: 241, SpellId: 13503, Name: "Enchant Weapon - Lesser Striking", Quality: proto.ItemQuality_ItemQualityCommon, Stats: stats.Stats{}.ToFloatArray(), Type: proto.ItemType_ItemTypeWeapon}, @@ -204,9 +201,9 @@ var EnchantOverrides = []*proto.UIEnchant{ {EffectId: 2567, SpellId: 23803, Name: "Enchant Weapon - Mighty Spirit", Quality: proto.ItemQuality_ItemQualityCommon, Stats: stats.Stats{stats.Spirit: 20}.ToFloatArray(), Type: proto.ItemType_ItemTypeWeapon}, {EffectId: 2504, SpellId: 22749, Name: "Enchant Weapon - Spell Power", Quality: proto.ItemQuality_ItemQualityRare, Stats: stats.Stats{stats.SpellDamage: 30}.ToFloatArray(), Type: proto.ItemType_ItemTypeWeapon}, {EffectId: 1897, SpellId: 20031, Name: "Enchant Weapon - Superior Striking", Quality: proto.ItemQuality_ItemQualityUncommon, Stats: stats.Stats{}.ToFloatArray(), Type: proto.ItemType_ItemTypeWeapon}, - {EffectId: 36, SpellId: 6296, Name: "Fiery Blaze Enchantment", Quality: proto.ItemQuality_ItemQualityCommon, Stats: stats.Stats{}.ToFloatArray(), Type: proto.ItemType_ItemTypeWeapon}, // 2H Weapon + {EffectId: 34, SpellId: 7218, Name: "Iron Counterweight", Quality: proto.ItemQuality_ItemQualityCommon, Stats: stats.Stats{stats.MeleeHaste: 3}.ToFloatArray(), Type: proto.ItemType_ItemTypeWeapon, EnchantType: proto.EnchantType_EnchantTypeTwoHand}, {EffectId: 723, SpellId: 7793, Name: "Enchant 2H Weapon - Lesser Intellect", Quality: proto.ItemQuality_ItemQualityCommon, Stats: stats.Stats{stats.Intellect: 3}.ToFloatArray(), Type: proto.ItemType_ItemTypeWeapon, EnchantType: proto.EnchantType_EnchantTypeTwoHand}, {EffectId: 241, SpellId: 7745, Name: "Enchant 2H Weapon - Minor Impact", Quality: proto.ItemQuality_ItemQualityCommon, Stats: stats.Stats{}.ToFloatArray(), Type: proto.ItemType_ItemTypeWeapon, EnchantType: proto.EnchantType_EnchantTypeTwoHand}, {EffectId: 255, SpellId: 13380, Name: "Enchant 2H Weapon - Lesser Spirit", Quality: proto.ItemQuality_ItemQualityUncommon, Stats: stats.Stats{stats.Spirit: 3}.ToFloatArray(), Type: proto.ItemType_ItemTypeWeapon, EnchantType: proto.EnchantType_EnchantTypeTwoHand}, @@ -217,15 +214,14 @@ var EnchantOverrides = []*proto.UIEnchant{ {EffectId: 1896, SpellId: 20030, Name: "Enchant 2H Weapon - Superior Impact", Quality: proto.ItemQuality_ItemQualityUncommon, Stats: stats.Stats{}.ToFloatArray(), Type: proto.ItemType_ItemTypeWeapon, EnchantType: proto.EnchantType_EnchantTypeTwoHand}, {EffectId: 1904, SpellId: 20036, Name: "Enchant 2H Weapon - Major Intellect", Quality: proto.ItemQuality_ItemQualityUncommon, Stats: stats.Stats{stats.Intellect: 9}.ToFloatArray(), Type: proto.ItemType_ItemTypeWeapon, EnchantType: proto.EnchantType_EnchantTypeTwoHand}, {EffectId: 1903, SpellId: 20035, Name: "Enchant 2H Weapon - Major Spirit", Quality: proto.ItemQuality_ItemQualityUncommon, Stats: stats.Stats{stats.Spirit: 9}.ToFloatArray(), Type: proto.ItemType_ItemTypeWeapon, EnchantType: proto.EnchantType_EnchantTypeTwoHand}, - {EffectId: 34, SpellId: 7218, Name: "Iron Counterweight", Quality: proto.ItemQuality_ItemQualityCommon, Stats: stats.Stats{stats.MeleeHaste: 3}.ToFloatArray(), Type: proto.ItemType_ItemTypeWeapon, EnchantType: proto.EnchantType_EnchantTypeTwoHand}, // Shields {EffectId: 848, ItemId: 11081, SpellId: 13464, Name: "Enchant Shield - Lesser Protection", Quality: proto.ItemQuality_ItemQualityUncommon, Stats: stats.Stats{stats.Armor: 30}.ToFloatArray(), Type: proto.ItemType_ItemTypeWeapon, EnchantType: proto.EnchantType_EnchantTypeShield}, - {EffectId: 863, ItemId: 11168, SpellId: 13691, Name: "Enchant Shield - Lesser Block", Quality: proto.ItemQuality_ItemQualityUncommon, Stats: stats.Stats{stats.Block: 2 * core.BlockRatingPerBlockChance}.ToFloatArray(), Type: proto.ItemType_ItemTypeWeapon, EnchantType: proto.EnchantType_EnchantTypeShield}, - {EffectId: 852, ItemId: 11202, SpellId: 13818, Name: "Enchant Shield - Stamina", Quality: proto.ItemQuality_ItemQualityUncommon, Stats: stats.Stats{stats.Stamina: 5}.ToFloatArray(), Type: proto.ItemType_ItemTypeWeapon, EnchantType: proto.EnchantType_EnchantTypeShield}, - {EffectId: 926, ItemId: 11224, SpellId: 13934, Name: "Enchant Shield - Frost Resistance", Quality: proto.ItemQuality_ItemQualityUncommon, Stats: stats.Stats{stats.FrostResistance: 8}.ToFloatArray(), Type: proto.ItemType_ItemTypeWeapon, EnchantType: proto.EnchantType_EnchantTypeShield}, - {EffectId: 929, ItemId: 16217, SpellId: 20069, Name: "Enchant Shield - Greater Stamina", Quality: proto.ItemQuality_ItemQualityCommon, Stats: stats.Stats{stats.Stamina: 7}.ToFloatArray(), Type: proto.ItemType_ItemTypeWeapon, EnchantType: proto.EnchantType_EnchantTypeShield}, - {EffectId: 1890, ItemId: 16222, SpellId: 20074, Name: "Enchant Shield - Superior Spirit", Quality: proto.ItemQuality_ItemQualityUncommon, Stats: stats.Stats{stats.Spirit: 9}.ToFloatArray(), Type: proto.ItemType_ItemTypeWeapon, EnchantType: proto.EnchantType_EnchantTypeShield}, + {EffectId: 863, ItemId: 11168, SpellId: 13689, Name: "Enchant Shield - Lesser Block", Quality: proto.ItemQuality_ItemQualityUncommon, Stats: stats.Stats{stats.Block: 2 * core.BlockRatingPerBlockChance}.ToFloatArray(), Type: proto.ItemType_ItemTypeWeapon, EnchantType: proto.EnchantType_EnchantTypeShield}, + {EffectId: 852, ItemId: 11202, SpellId: 13817, Name: "Enchant Shield - Stamina", Quality: proto.ItemQuality_ItemQualityUncommon, Stats: stats.Stats{stats.Stamina: 5}.ToFloatArray(), Type: proto.ItemType_ItemTypeWeapon, EnchantType: proto.EnchantType_EnchantTypeShield}, + {EffectId: 926, ItemId: 11224, SpellId: 13933, Name: "Enchant Shield - Frost Resistance", Quality: proto.ItemQuality_ItemQualityUncommon, Stats: stats.Stats{stats.FrostResistance: 8}.ToFloatArray(), Type: proto.ItemType_ItemTypeWeapon, EnchantType: proto.EnchantType_EnchantTypeShield}, + {EffectId: 929, ItemId: 16217, SpellId: 20017, Name: "Enchant Shield - Greater Stamina", Quality: proto.ItemQuality_ItemQualityCommon, Stats: stats.Stats{stats.Stamina: 7}.ToFloatArray(), Type: proto.ItemType_ItemTypeWeapon, EnchantType: proto.EnchantType_EnchantTypeShield}, + {EffectId: 1890, ItemId: 16222, SpellId: 20016, Name: "Enchant Shield - Superior Spirit", Quality: proto.ItemQuality_ItemQualityUncommon, Stats: stats.Stats{stats.Spirit: 9}.ToFloatArray(), Type: proto.ItemType_ItemTypeWeapon, EnchantType: proto.EnchantType_EnchantTypeShield}, {EffectId: 7603, ItemId: 228982, SpellId: 463871, Name: "Enchant Shield - Law of Nature", Quality: proto.ItemQuality_ItemQualityUncommon, Stats: stats.Stats{stats.SpellDamage: 30, stats.HealingPower: 55}.ToFloatArray(), Type: proto.ItemType_ItemTypeWeapon, EnchantType: proto.EnchantType_EnchantTypeShield}, // Ranged Scopes diff --git a/tools/scrape_enchant_descriptions.py b/tools/scrape_enchant_descriptions.py index 0d6650d193..23d448ed8a 100644 --- a/tools/scrape_enchant_descriptions.py +++ b/tools/scrape_enchant_descriptions.py @@ -1,7 +1,7 @@ #!/usr/bin/python # Usage example: -# python3 ./tools/scrape_enchant_descriptions.py ./sim/core/items/all_enchants.go ./assets/enchants/descriptions.json +# python3 ./tools/scrape_enchant_descriptions.py ./tools/database/enchant_overrides.go ./assets/enchants/descriptions.json import json import re @@ -9,75 +9,63 @@ from selenium import webdriver from selenium.webdriver.chrome.service import Service +from selenium.webdriver.support.ui import WebDriverWait +from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By -from selenium.webdriver.common.desired_capabilities import DesiredCapabilities -from selenium.webdriver.common.keys import Keys from webdriver_manager.chrome import ChromeDriverManager +from selenium.webdriver.chrome.options import Options if len(sys.argv) < 3: - raise Exception("Missing arguments, expected input_file_path and output_file_path") + raise Exception("Missing arguments, expected input_file_path and output_file_path") input_file_path = sys.argv[1] output_file_path = sys.argv[2] -input_file = open("sim/core/items/all_enchants.go", 'r') +input_file = open(input_file_path, 'r') input_lines = input_file.readlines() enchants = [] for line in input_lines: - id_match = re.search(r"ID:\s*(\d+)", line) - if id_match is None: - continue - enchant_id = int(id_match.group(1)) + spell_id_match = re.search(r"SpellId:\s*(\d+)", line) + if spell_id_match is None: + continue + spell_id = int(spell_id_match.group(1)) - effect_id_match = re.search(r"EffectID:\s*(\d+)", line) - effect_id = int(effect_id_match.group(1)) + effect_id_match = re.search(r"EffectId:\s*(\d+)", line) + effect_id = int(effect_id_match.group(1)) - is_spell_id = "IsSpellID" in line + enchants.append({ + "spell_id": spell_id, + "effect_id": effect_id, + }) - enchants.append({ - "id": enchant_id, - "effect_id": effect_id, - "is_spell_id": is_spell_id, - }) +# Added these options so that chrome would run in a docker container +chrome_options = Options() +chrome_options.add_argument("--headless") +chrome_options.add_argument("--no-sandbox") +chrome_options.add_argument("--disable-dev-shm-usage") -def get_spell_url(item_id): - driver.get("https://wowhead.com/classic/item=" + str(item_id)) - tooltips = driver.find_elements(By.CLASS_NAME, "wowhead-tooltip") - tooltip = tooltips[0] - anchors = tooltip.find_elements(By.TAG_NAME, "a") - for anchor in anchors: - href = anchor.get_attribute("href") - if "/classic/spell=" in href: - print("Item {} has spell url {}\n".format(item_id, href)) - return href - raise Exception("No results for id " + str(item_id)) +driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options) +wait = WebDriverWait(driver, 10) +element_locator = (By.ID, "data-tree-switcher") def get_spell_effect_description(spell_url): - driver.get(spell_url) - details_table = driver.find_elements(By.ID, "spelldetails")[0] - effect_elem = details_table.find_elements(By.CLASS_NAME, "q2")[0] - print("Spell {} has description {}".format(spell_url, effect_elem.text)) - return effect_elem.text + driver.get(spell_url) + wait.until(EC.presence_of_element_located(element_locator)) + details_table = driver.find_elements(By.ID, "spelldetails")[0] + effect_elem = details_table.find_elements(By.CLASS_NAME, "q2")[0] + print("Spell {} has description {}".format(spell_url, effect_elem.text)) + return effect_elem.text def get_enchant_description(enchant): - if enchant["is_spell_id"]: - return get_spell_effect_description("https://wowhead.com/classic/spell={}".format(enchant["id"])) - else: - spell_url = get_spell_url(enchant["id"]) - return get_spell_effect_description(spell_url) - -caps = DesiredCapabilities().CHROME -caps["pageLoadStrategy"] = "eager" # Do not wait for full page load -driver = webdriver.Chrome(desired_capabilities=caps, service=Service(ChromeDriverManager().install())) -driver.implicitly_wait(2) + return get_spell_effect_description("https://wowhead.com/classic/spell={}".format(enchant["spell_id"])) for enchant in enchants: - enchant["description"] = get_enchant_description(enchant) + enchant["description"] = get_enchant_description(enchant) driver.quit() with open(output_file_path, "w") as outfile: - outfile.write("{\n") - for i, enchant in enumerate(enchants): - outfile.write("\t\"{}\": \"{}\"{}\n".format(enchant["effect_id"], enchant["description"], "" if i == len(enchants) - 1 else ",")) - outfile.write("}") + outfile.write("{\n") + for i, enchant in enumerate(enchants): + outfile.write("\t\"{}\": \"{}\"{}\n".format(enchant["effect_id"], enchant["description"], "" if i == len(enchants) - 1 else ",")) + outfile.write("}")