From 20a101684a3ff97e43e4b7584a5f93e889b8faa7 Mon Sep 17 00:00:00 2001 From: Kayla Glick Date: Tue, 2 Apr 2024 02:00:25 -0400 Subject: [PATCH 1/5] port two SoD updates --- assets/database/db.bin | Bin 5757131 -> 5757139 bytes assets/database/db.json | 8 +- assets/database/leftover_db.bin | Bin 8221993 -> 8222305 bytes assets/database/leftover_db.json | 164 +++--- tools/database/wotlk_tooltips.go | 38 -- tools/database/wowhead_db.go | 79 ++- tools/database/wowhead_tooltips.go | 33 -- .../individual_sim_ui/apl_helpers.ts | 554 +++++++++++------- 8 files changed, 486 insertions(+), 390 deletions(-) diff --git a/assets/database/db.bin b/assets/database/db.bin index 3e7a5270f183808a506cc0b5bfa6e8145e2b6a47..74683389668e77dee572e4cbbba72f815b77be90 100644 GIT binary patch delta 407 zcmWN=IZgsm9KhkcKcf#&krCYYbr4)oa2MQAaaUBVyaA0?8X60dxq^i@gbSE3d517o z7KF;H`1_LY`|D4B`BqVN$u!i5$u{Iwq^ex6DfH1|3tOq_XMjPrvE6vhj%dPC+UGYv zR_IeiX}6?9>}1%Kw4Hxa@5XzvpT(*w6?C1l%`Qe5WjA}+%RcsVfP)<3Fh@AbF^+SB zlbqr-XXr4-S;m>*9Ot>fMJBn#Wu}c5;#T delta 399 zcmWl|IZi@B0D$4l@MLfU9_}a#?uz(aKt%+>6*q9V@(xI)p|LP|7oeb_;{qlo6T%Uw z3dg#>!WoF+*S=ZmqqO`4&Ngsze%n^=qjN_c3pOc(ofYY2|kRi@;j`LjL zBA2+#6|OSOHAc8jiyPeJ7PlE?j62-r9^>3+f(J}8#Y3i<;SrB{!c(5{oLOG*l2^Ru W4Rg%%mUq1810VUsXKj^UYOnud6_YLi diff --git a/assets/database/db.json b/assets/database/db.json index b1445a8c37..d3dd17bc5c 100644 --- a/assets/database/db.json +++ b/assets/database/db.json @@ -282,7 +282,7 @@ {"id":32375,"name":"Bulwark of Azzinoth","icon":"inv_shield_32","type":13,"weaponType":7,"handType":3,"stats":[29,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6336,0,26,0,174,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":151,"phase":1,"quality":4,"expansion":2,"sources":[{"drop":{"difficulty":1,"npcId":22917,"zoneId":3959}}]}, {"id":32376,"name":"Forest Prowler's Helm","icon":"inv_helmet_95","type":1,"armorType":3,"stats":[0,42,29,28,0,0,0,0,20,0,0,100,0,20,0,0,0,0,0,0,803,100,0,0,0,0,0,0,0,0,0,0,0,0,0],"gemSockets":[2,1],"socketBonus":[0,0,0,0,0,0,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],"ilvl":141,"phase":1,"quality":4,"expansion":2,"sources":[{"drop":{"difficulty":1,"npcId":23426,"zoneId":3959}}]}, {"id":32377,"name":"Mantle of Darkness","icon":"inv_shoulder_67","type":3,"armorType":2,"stats":[0,0,34,0,0,0,0,22,33,0,0,94,22,33,0,0,0,0,0,0,333,94,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":141,"phase":1,"quality":4,"expansion":2,"sources":[{"drop":{"difficulty":1,"npcId":22887,"zoneId":3959}}]}, -{"id":32387,"name":"Idol of the Raven Goddess","icon":"inv-mount_raven_54","type":14,"rangedWeaponType":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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":115,"phase":1,"quality":3,"unique":true,"sources":[{"quest":{"id":11001,"name":"Vanquish the Raven God"}}]}, +{"id":32387,"name":"Idol of the Raven Goddess","icon":"inv-mount_raven_54","type":14,"rangedWeaponType":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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":115,"phase":1,"quality":3,"unique":true,"classAllowlist":[1],"sources":[{"quest":{"id":11001,"name":"Vanquish the Raven God"}}]}, {"id":32419,"name":"Tom's Legs 3","icon":"inv_pants_plate_05","type":9,"armorType":4,"stats":[54,0,79,0,0,0,0,26,41,0,0,0,26,41,0,0,0,0,0,0,1587,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":145,"phase":1,"quality":4,"classAllowlist":[9]}, {"id":32471,"name":"Shard of Azzinoth","icon":"inv_weapon_shortblade_62","type":13,"weaponType":2,"handType":2,"stats":[0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":161,"weaponDamageMax":242,"weaponSpeed":1.9,"ilvl":151,"phase":1,"quality":4,"unique":true,"expansion":2,"sources":[{"drop":{"difficulty":1,"npcId":22917,"zoneId":3959}}]}, {"id":32483,"name":"The Skull of Gul'dan","icon":"inv_misc_bone_elfskull_01","type":12,"stats":[0,0,0,0,0,55,0,25,0,0,0,0,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":151,"phase":1,"quality":4,"unique":true,"expansion":2,"sources":[{"drop":{"difficulty":1,"npcId":22917,"zoneId":3959}}]}, @@ -1394,8 +1394,8 @@ {"id":37733,"name":"Mojo Masked Crusher","icon":"inv_mace_63","type":13,"weaponType":4,"handType":4,"stats":[78,45,84,0,0,0,0,0,0,77,0,0,0,0,77,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":457,"weaponDamageMax":762,"weaponSpeed":3.6,"ilvl":200,"phase":1,"quality":3,"expansion":3,"sources":[{"drop":{"difficulty":2,"npcId":26632,"zoneId":4196}},{"drop":{"difficulty":7,"npcId":26632,"zoneId":4196}}]}, {"id":37734,"name":"Talisman of Troll Divinity","icon":"racial_troll_berserk","type":12,"stats":[0,0,0,0,73,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":200,"phase":1,"quality":3,"unique":true,"expansion":3,"sources":[{"drop":{"difficulty":2,"npcId":26632,"zoneId":4196}},{"drop":{"difficulty":7,"npcId":26632,"zoneId":4196}}]}, {"id":37735,"name":"Ziggurat Imprinted Chestguard","icon":"inv_chest_plate13","type":5,"armorType":4,"stats":[76,0,117,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2166,0,49,0,0,0,56,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":200,"phase":1,"quality":3,"expansion":3,"sources":[{"drop":{"difficulty":2,"npcId":26632,"zoneId":4196}},{"drop":{"difficulty":7,"npcId":26632,"zoneId":4196}}]}, -{"id":37739,"name":"Brutal Gladiator's Blade of Alacrity","icon":"inv_weapon_shortblade_73","type":13,"weaponType":2,"handType":1,"stats":[0,0,32,21,0,0,0,18,0,227,0,0,18,0,227,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":10,"weaponDamageMax":115,"weaponSpeed":1.6,"ilvl":154,"phase":1,"quality":4,"classAllowlist":[5,7,3,8,1]}, -{"id":37740,"name":"Brutal Gladiator's Swift Judgement","icon":"inv_mace_71","type":13,"weaponType":4,"handType":1,"stats":[0,0,38,25,0,0,0,0,0,227,0,0,0,0,227,0,0,0,0,0,0,0,0,0,0,0,0,21,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":10,"weaponDamageMax":115,"weaponSpeed":1.6,"ilvl":154,"phase":1,"quality":4,"classAllowlist":[4,5,7,1]}, +{"id":37739,"name":"Brutal Gladiator's Blade of Alacrity","icon":"inv_weapon_shortblade_73","type":13,"weaponType":2,"handType":1,"stats":[0,0,32,21,0,0,0,18,0,227,0,0,18,0,227,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":10,"weaponDamageMax":115,"weaponSpeed":1.6,"ilvl":154,"phase":1,"quality":4,"classAllowlist":[5,1,7,3,8]}, +{"id":37740,"name":"Brutal Gladiator's Swift Judgement","icon":"inv_mace_71","type":13,"weaponType":4,"handType":1,"stats":[0,0,38,25,0,0,0,0,0,227,0,0,0,0,227,0,0,0,0,0,0,0,0,0,0,0,0,21,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":10,"weaponDamageMax":115,"weaponSpeed":1.6,"ilvl":154,"phase":1,"quality":4,"classAllowlist":[4,5,1,7]}, {"id":37756,"name":"Zoe's Comforting Cape","icon":"inv_misc_cape_04","type":4,"stats":[0,0,0,17,23,32,0,0,23,0,0,0,0,23,0,0,0,0,0,0,113,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":150,"phase":1,"quality":3}, {"id":37757,"name":"Charlotte's Chastizing Pauldrons","icon":"inv_shoulder_96","type":3,"armorType":1,"stats":[0,0,36,27,0,40,0,0,37,0,0,0,0,37,0,0,0,0,0,0,175,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":154,"phase":1,"quality":3}, {"id":37758,"name":"Raine's Choker of Combustion","icon":"inv_jewelry_necklace_27","type":2,"stats":[0,0,0,27,0,32,0,0,21,19,0,0,0,21,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":158,"phase":1,"quality":3,"setName":"Raine's Revenge"}, @@ -1743,7 +1743,7 @@ {"id":39198,"name":"Frostblight Pauldrons","icon":"inv_shoulder_75","type":3,"armorType":4,"stats":[0,0,49,52,0,76,19,0,0,48,0,0,0,0,48,0,0,0,0,0,1681,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":200,"phase":1,"quality":4,"expansion":3,"sources":[{"drop":{"difficulty":7,"npcId":27977,"zoneId":4264}},{"drop":{"difficulty":8,"npcId":27977,"zoneId":4264}}]}, {"id":39199,"name":"Watchful Eye","icon":"inv_offhand_naxxramas_03","type":13,"weaponType":5,"handType":3,"stats":[0,0,37,38,36,59,0,28,0,0,0,0,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":200,"phase":1,"quality":4,"expansion":3,"sources":[{"drop":{"difficulty":7,"npcId":27977,"zoneId":4264}},{"drop":{"difficulty":8,"npcId":27977,"zoneId":4264}}]}, {"id":39200,"name":"Grieving Spellblade","icon":"inv_sword_61","type":13,"weaponType":9,"handType":1,"stats":[0,0,33,40,0,408,0,0,37,27,0,0,0,37,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":71,"weaponDamageMax":227,"weaponSpeed":1.8,"ilvl":200,"phase":1,"quality":4,"unique":true,"expansion":3,"sources":[{"drop":{"difficulty":7,"npcId":28234,"zoneId":4264}},{"drop":{"difficulty":8,"npcId":28234,"zoneId":4264}}]}, -{"id":39208,"name":"Sigil of the Dark Rider","icon":"inv_shield_56","type":14,"rangedWeaponType":9,"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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":3,"unique":true,"sources":[{"quest":{"id":12687,"name":"Into the Realm of Shadows"}}]}, +{"id":39208,"name":"Sigil of the Dark Rider","icon":"inv_shield_56","type":14,"rangedWeaponType":9,"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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":3,"unique":true,"classAllowlist":[10],"sources":[{"quest":{"id":12687,"name":"Into the Realm of Shadows"}}]}, {"id":39215,"name":"Boots of the Follower","icon":"inv_boots_08","type":10,"armorType":2,"stats":[0,0,37,44,66,77,0,0,0,32,0,0,0,0,32,0,0,0,0,0,388,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":200,"phase":1,"quality":4,"expansion":3,"sources":[{"drop":{"difficulty":7,"npcId":27975,"zoneId":4264}},{"drop":{"difficulty":8,"npcId":27975,"zoneId":4264}}]}, {"id":39216,"name":"Sash of Mortal Desire","icon":"inv_belt_03","type":8,"armorType":1,"stats":[0,0,49,51,38,76,0,0,48,0,0,0,0,48,0,0,0,0,0,0,169,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":200,"phase":1,"quality":4,"expansion":3,"sources":[{"drop":{"difficulty":7,"npcId":27975,"zoneId":4264}},{"drop":{"difficulty":8,"npcId":27975,"zoneId":4264}}]}, {"id":39217,"name":"Avenging Combat Leggings","icon":"inv_pants_mail_17","type":9,"armorType":3,"stats":[0,0,67,69,0,85,19,0,0,63,0,0,0,0,63,0,0,0,0,0,1097,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"gemSockets":[4,3],"socketBonus":[0,0,0,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],"ilvl":200,"phase":1,"quality":4,"expansion":3,"sources":[{"drop":{"difficulty":7,"npcId":29932,"zoneId":4416}},{"drop":{"difficulty":8,"npcId":29932,"zoneId":4416}}]}, diff --git a/assets/database/leftover_db.bin b/assets/database/leftover_db.bin index bb49234cc510ab99e673bf28fea88c4e1d128c6c..c05813f2a346f78aab24c9b56deeb19ffbb88a72 100644 GIT binary patch delta 2203 zcmajgX;2hL6bJC?VP`KCmQ#^K4sRt&l&HfP*O_ru6j6f`O;lJwMbK3QX~2|F zY!5t%8l>d3cv0h(q*BJCv`QZ^8ByQ_Yx|7lxE3)v5)Ew&w;;V2H`)1`?}loILOq`9c1c{2B3jx5E_hzpm_8a8j6OY1oSo)JoqjVat*#vjk&$z(T-{81?B zG8;Jn*Y62y^>qO&32~7Q$eNMl za4#(>o3r33ll2sDZe@}4lN6RgyG>;FyTSzKcgJX9SI*2^4AY*-{RmrK7SF@k*-0E= zvFB~#Qf*QFt$`dQPL0Bqw&0O38zJVVlGi}jiMiT%Jtv<+`+9M`mKa!B zg&0Gs;6R1Aq-#G$F_^UJgI~xCc3o9%%b;+ zQQSHn?EAc<^oSgV%hh6emqCzuNPOr=j=-dPag&zo)w>@xif9aa7mbBSjrMfA#na^0 z7Y6eMcI&BKW|z(x?97%F@kL8?NCeq^(QIT5&+TS?*i(b~B1>quk71Xd^lIK_p9VHQ zJdU_y+wBnBK8~Cs>!DALq&JR*B{WN6aN?L$(+&G`aVKxWgJ(|gZR0WrWF8Oexznr^%6(!eJ)i5;0&?6yg-|oXTDZB5{{YVq+o1;`{8n~*0-r~atO?g zl8t{t+b)6iA-#%9- z>y4l#F)*=SKG;M~!Nd8=a*o*^IAU0lQ;8%eVTV)6_a+fJN^f!;#2h70PvEPCifSb_ zFsVRsam@bG5zcNFD&fY1y!m7UVatn^5VmBeVq=F_D}l_uEzArGaqs-#T zVQ|zc`YG_Ntx@U0uGJ}Fc=!HPr(|ivz482dC6rXd%6dhAU%VSfqw&arCZLIE5=w@) z#>tN#ktVphcZz<48{BEtQ&0+|RZl%uN}A!X(9~Vp0!DXbSSp%^rlT3?J(PxKqFE>% zy^m(2Ip_oQA)1Tkq4_8SWkO|`Gw28MG1UCw)Q`&u{(n08T=EZuWMt|0rNLd|%tF~H z2Q5Gg(IO~u=FWVLzqXs1i_1L?m5^zil85 z&@Y&7({^ZO8DZ3OWOqX8W<3E++5_&cD+c1o- z@g|nxv@bT)(BX8IH#uBN2at_$Cz0y6l2yNNAuG^d%Et@0Bw8xS$;@*V6rN>05pHeOPDjv)4Ln@3Vio z+t%g8pKV<>7|h^C7sF(jjjo25VKKTH-bQz$htbpUF?>JrD>=g?m7ek2&E5Vje&A33 zE!J!YtEAO0tlPNT)NX}d5CDM?1i{c7LLd~vpbzwgaOej%GPOsP4>5Ulu`qYl;QkN^ z1E^~7K=;p`kHfqMxx>5$!w?t>!ypQxVK|I{kuVBkU^K+S7z*=>`(zxdZ%v3>!zoRT zd+f!wkz;Dya_(+PiG#858jOSS)RJO%+V~3-g{`o=c*t265NfqFBwBmU%yHS0N{b6! zwrQ>s?q_jQYy-uvvFC6?(CEcBQ|dEG{EvllGS&1etvd-zRlsvEXr{euJXP`wpsDn-0XeQY-y31i{f>;SoBDi zH}3=_OW)S67OJkXOLlZ#JfU#rujFxB)k|3tjY*vAhSlq^o&b}QY@tbzjf zDfwLb)GFb;-9*Q$G1d{W12nu=+0+@(wL0at538k58UB0wcH>GY?xP`RR+MI? zN8#F`9;}>Xlvd1T@&qlA29D6q2YJf)P4`SoQ?(GvovdYMp?}|;(9plc1}z-#ENalO z6P|$nYSa!kvlH~rVjVR#x%9p=!m0OVM=8OnV-lVy>=4~`>G&|uFo_)9@Md-NvQWp0 zD~t8fteWbJb!7AtdMw`5g}$<5Bv@W8)g##Z^q^EXUL}-o>$?W9dKz}fld#~Pqc_oE zeYTm^kk1D?TD74;ABDT9xj}b!1i^A-lODwOk)z3z1H-}YOU*h=0tZZnWS9a|=~DBw z?|)|}=|FV~F0<&`6qruYwW&u+StETHoc1nv=Z2<1I=l`u;0>4wvtTyNfw}M|%!B!` z05V`9EP}<5Nx7j}y?$bwXnk82`n4`Ky(_gn$!gDGPpNIOGn>0JoKDCF7c7CdAcr!X zOJ}v?u%5|Uwu!sPyOu#NEQb}42l=oP3ZM{HK@k+gY8vla)7r#7B%eUBlgso_(FfiC zB3Nwagy6A1+fS3D1#XoKBSe3;n{JN~g|A;|2D)3(b< T?k>0@pae>xj0&!-y?^W<`mV>m diff --git a/assets/database/leftover_db.json b/assets/database/leftover_db.json index 63e37a900d..a92f6a667a 100644 --- a/assets/database/leftover_db.json +++ b/assets/database/leftover_db.json @@ -1730,7 +1730,7 @@ {"id":4922,"name":"Jagged Chain Vest","icon":"inv_chest_chain","type":5,"armorType":3,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":5,"phase":1,"quality":1,"sources":[{"quest":{"id":794,"name":"Burning Blade Medallion"}}]}, {"id":4923,"name":"Primitive Hatchet","icon":"inv_throwingaxe_01","type":13,"weaponType":1,"handType":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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":3,"weaponDamageMax":6,"weaponSpeed":2.2,"ilvl":5,"phase":1,"quality":1,"sources":[{"quest":{"id":792,"name":"Vile Familiars"}}]}, {"id":4924,"name":"Primitive Club","icon":"inv_mace_10","type":13,"weaponType":4,"handType":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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":3,"weaponDamageMax":6,"weaponSpeed":2.1,"ilvl":5,"phase":1,"quality":1,"sources":[{"quest":{"id":792,"name":"Vile Familiars"}}]}, -{"id":4925,"name":"Primitive Hand Blade","icon":"inv_weapon_shortblade_05","type":13,"weaponType":2,"handType":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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":2,"weaponDamageMax":5,"weaponSpeed":1.7,"ilvl":5,"phase":1,"quality":1,"sources":[{"quest":{}}]}, +{"id":4925,"name":"Primitive Hand Blade","icon":"inv_weapon_shortblade_05","type":13,"weaponType":2,"handType":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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":2,"weaponDamageMax":5,"weaponSpeed":1.7,"ilvl":5,"phase":1,"quality":1,"classAllowlist":[8],"sources":[{"quest":{}}]}, {"id":4928,"name":"Sandrunner Wristguards","icon":"inv_bracer_12","type":6,"armorType":2,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":8,"phase":1,"quality":1,"sources":[{"quest":{"id":825,"name":"From The Wreckage...."}}]}, {"id":4929,"name":"Light Scorpid Armor","icon":"inv_chest_leather_01","type":5,"armorType":2,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":9,"phase":1,"quality":1,"sources":[{"quest":{"id":812,"name":"Need for a Cure"}}]}, {"id":4931,"name":"Hickory Shortbow","icon":"inv_weapon_bow_05","type":14,"rangedWeaponType":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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":8,"weaponDamageMax":16,"weaponSpeed":2,"ilvl":11,"phase":1,"quality":1,"sources":[{"quest":{"id":835,"name":"Securing the Lines"}}]}, @@ -1961,7 +1961,7 @@ {"id":5770,"name":"Robes of Arcana","icon":"inv_chest_cloth_29","type":5,"armorType":1,"stats":[0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":30,"phase":1,"quality":2,"expansion":2,"sources":[{"crafted":{"profession":11,"spellId":6692}}]}, {"id":5776,"name":"Elder's Cane","icon":"inv_staff_17","type":13,"weaponType":8,"handType":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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":7,"weaponDamageMax":11,"weaponSpeed":3.5,"ilvl":5,"phase":1,"quality":1,"sources":[{"quest":{"id":757,"name":"Rite of Strength"}}]}, {"id":5777,"name":"Brave's Axe","icon":"inv_throwingaxe_05","type":13,"weaponType":1,"handType":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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":7,"weaponDamageMax":11,"weaponSpeed":3.3,"ilvl":5,"phase":1,"quality":1,"sources":[{"quest":{"id":757,"name":"Rite of Strength"}}]}, -{"id":5778,"name":"Primitive Walking Stick","icon":"inv_staff_02","type":13,"weaponType":8,"handType":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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":6,"weaponDamageMax":10,"weaponSpeed":3.1,"ilvl":5,"phase":1,"quality":1,"sources":[{"quest":{}}]}, +{"id":5778,"name":"Primitive Walking Stick","icon":"inv_staff_02","type":13,"weaponType":8,"handType":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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":6,"weaponDamageMax":10,"weaponSpeed":3.1,"ilvl":5,"phase":1,"quality":1,"classAllowlist":[8],"sources":[{"quest":{}}]}, {"id":5779,"name":"Forsaken Bastard Sword","icon":"inv_sword_06","type":13,"weaponType":9,"handType":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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":7,"weaponDamageMax":11,"weaponSpeed":3.3,"ilvl":5,"phase":1,"quality":1,"sources":[{"quest":{"id":381,"name":"The Scarlet Crusade"}}]}, {"id":5780,"name":"Murloc Scale Belt","icon":"inv_belt_02","type":8,"armorType":2,"stats":[0,3,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,42,4,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":18,"phase":1,"quality":2,"expansion":2,"sources":[{"crafted":{"profession":8,"spellId":6702}}]}, {"id":5781,"name":"Murloc Scale Breastplate","icon":"inv_chest_chain_12","type":5,"armorType":2,"stats":[0,3,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,76,10,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":19,"phase":1,"quality":2,"expansion":2,"sources":[{"crafted":{"profession":8,"spellId":6703}}]}, @@ -3510,7 +3510,7 @@ {"id":12651,"name":"Blackcrow","icon":"inv_weapon_crossbow_04","type":14,"rangedWeaponType":2,"stats":[0,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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":99,"weaponDamageMax":149,"weaponSpeed":3.2,"ilvl":59,"phase":1,"quality":3,"expansion":1,"sources":[{"drop":{"difficulty":1,"npcId":9236,"zoneId":1583}}]}, {"id":12653,"name":"Riphook","icon":"inv_weapon_bow_08","type":14,"rangedWeaponType":1,"stats":[0,0,0,0,0,0,0,0,0,0,0,22,0,0,0,0,0,0,0,0,0,22,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":59,"weaponDamageMax":111,"weaponSpeed":2.2,"ilvl":59,"phase":1,"quality":3,"expansion":1,"sources":[{"drop":{"difficulty":1,"npcId":9236,"zoneId":1583}}]}, {"id":12709,"name":"Pip's Skinner","icon":"inv_sword_33","type":13,"weaponType":2,"handType":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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":37,"weaponDamageMax":70,"weaponSpeed":1.3,"ilvl":63,"phase":1,"quality":3,"expansion":1,"sources":[{"drop":{"difficulty":1,"npcId":10430,"zoneId":1583}}]}, -{"id":12752,"name":"Cap of the Scarlet Savant","icon":"inv_helmet_59","type":1,"armorType":1,"stats":[0,0,17,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,89,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":62,"phase":1,"quality":4,"classAllowlist":[5,7,3,8,1],"sources":[{"quest":{"id":5063,"name":"Cap of the Scarlet Savant"}}]}, +{"id":12752,"name":"Cap of the Scarlet Savant","icon":"inv_helmet_59","type":1,"armorType":1,"stats":[0,0,17,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,89,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":62,"phase":1,"quality":4,"classAllowlist":[5,1,7,3,8],"sources":[{"quest":{"id":5063,"name":"Cap of the Scarlet Savant"}}]}, {"id":12756,"name":"Leggings of Arcana","icon":"inv_pants_05","type":9,"armorType":2,"stats":[0,0,0,20,30,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,190,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":62,"phase":1,"quality":4,"sources":[{"quest":{"id":5067,"name":"Leggings of Arcana"}}]}, {"id":12757,"name":"Breastplate of Bloodthirst","icon":"inv_chest_chain_13","type":5,"armorType":2,"stats":[13,0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,217,0,0,0,0,12,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":62,"phase":1,"quality":4,"sources":[{"quest":{"id":5068,"name":"Breastplate of Bloodthirst"}}]}, {"id":12764,"name":"Thorium Greatsword","icon":"inv_sword_22","type":13,"weaponType":9,"handType":4,"stats":[22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":116,"weaponDamageMax":175,"weaponSpeed":3.6,"ilvl":52,"phase":1,"quality":2,"expansion":3,"sources":[{"crafted":{"profession":2,"spellId":16960}}]}, @@ -3907,7 +3907,7 @@ {"id":13965,"name":"Blackhand's Breadth","icon":"inv_misc_armorkit_09","type":12,"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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":63,"phase":1,"quality":3,"sources":[{"quest":{}}]}, {"id":13966,"name":"Mark of Tyranny","icon":"inv_jewelry_talisman_09","type":12,"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,12,0,0,0,10,0,0,0,0,180],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":63,"phase":1,"quality":3,"sources":[{"quest":{}}]}, {"id":13967,"name":"Windreaver Greaves","icon":"inv_boots_plate_04","type":10,"armorType":3,"stats":[0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,247,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":61,"phase":1,"quality":3,"expansion":1,"sources":[{"drop":{"difficulty":1,"npcId":10506,"zoneId":2057}}]}, -{"id":13968,"name":"Eye of the Beast","icon":"inv_jewelry_talisman_08","type":12,"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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":63,"phase":1,"quality":3,"classAllowlist":[5,7,3,8,1],"sources":[{"quest":{}}]}, +{"id":13968,"name":"Eye of the Beast","icon":"inv_jewelry_talisman_08","type":12,"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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":63,"phase":1,"quality":3,"classAllowlist":[5,1,7,3,8],"sources":[{"quest":{}}]}, {"id":13969,"name":"Loomguard Armbraces","icon":"inv_bracer_16","type":6,"armorType":3,"stats":[0,0,6,7,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,157,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":61,"phase":1,"quality":3,"expansion":1,"sources":[{"drop":{"difficulty":1,"npcId":10506,"zoneId":2057}}]}, {"id":13982,"name":"Warblade of Caer Darrow","icon":"inv_sword_39","type":13,"weaponType":9,"handType":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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":142,"weaponDamageMax":214,"weaponSpeed":3.3,"ilvl":63,"phase":1,"quality":3,"sources":[{"quest":{"id":5466,"name":"The Lich, Ras Frostwhisper"}}]}, {"id":13983,"name":"Gravestone War Axe","icon":"inv_weapon_halberd_09","type":13,"weaponType":1,"handType":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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":144,"weaponDamageMax":217,"weaponSpeed":3.4,"ilvl":62,"phase":1,"quality":3,"expansion":1,"sources":[{"drop":{"difficulty":1,"npcId":10506,"zoneId":2057}}]}, @@ -5453,11 +5453,11 @@ {"id":18759,"name":"Malicious Axe","icon":"inv_axe_18","type":13,"weaponType":1,"handType":4,"stats":[0,0,30,0,0,0,0,0,0,0,0,26,0,0,0,0,0,0,0,0,0,26,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":131,"weaponDamageMax":197,"weaponSpeed":3.1,"ilvl":62,"phase":1,"quality":3,"expansion":1,"sources":[{"drop":{"difficulty":1,"npcId":14516,"zoneId":2057}}]}, {"id":18760,"name":"Necromantic Band","icon":"inv_jewelry_ring_09","type":11,"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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":62,"phase":1,"quality":3,"unique":true,"expansion":1,"sources":[{"drop":{"difficulty":1,"npcId":14516,"zoneId":2057}}]}, {"id":18761,"name":"Oblivion's Touch","icon":"inv_wand_12","type":14,"rangedWeaponType":8,"stats":[0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":78,"weaponDamageMax":147,"weaponSpeed":1.8,"ilvl":62,"phase":1,"quality":3,"expansion":1,"sources":[{"drop":{"difficulty":1,"npcId":14516,"zoneId":2057}}]}, -{"id":18762,"name":"Shard of the Green Flame","icon":"inv_misc_shadowegg","type":13,"weaponType":5,"handType":3,"stats":[0,0,12,0,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":54,"phase":1,"quality":3,"sources":[{"quest":{"id":7603,"name":"Kroshius' Infernal Core"}}]}, +{"id":18762,"name":"Shard of the Green Flame","icon":"inv_misc_shadowegg","type":13,"weaponType":5,"handType":3,"stats":[0,0,12,0,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":54,"phase":1,"quality":3,"classAllowlist":[8],"sources":[{"quest":{"id":7603,"name":"Kroshius' Infernal Core"}}]}, {"id":18803,"name":"Hyperthermically Insulated Lava Dredger","icon":"inv_gizmo_02","type":13,"weaponType":4,"handType":4,"stats":[0,0,25,24,0,0,11,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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":155,"weaponDamageMax":234,"weaponSpeed":2.9,"ilvl":70,"phase":1,"quality":4,"expansion":1,"sources":[{"drop":{"difficulty":1,"npcId":12018,"zoneId":2717}}]}, {"id":18805,"name":"Core Hound Tooth","icon":"inv_weapon_shortblade_11","type":13,"weaponType":2,"handType":2,"stats":[0,0,9,0,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":57,"weaponDamageMax":107,"weaponSpeed":1.6,"ilvl":70,"phase":1,"quality":4,"unique":true,"expansion":1,"sources":[{"drop":{"difficulty":1,"npcId":12018,"zoneId":2717}}]}, {"id":18806,"name":"Core Forged Greaves","icon":"inv_boots_plate_09","type":10,"armorType":4,"stats":[0,0,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,621,0,6,0,0,0,0,0,0,0,12,0,0,8,90],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":4,"expansion":1,"sources":[{"drop":{"difficulty":1,"npcId":12018,"zoneId":2717}}]}, -{"id":18807,"name":"Helm of Latent Power","icon":"inv_helmet_24","type":1,"armorType":3,"stats":[0,0,12,14,12,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,297,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":62,"phase":1,"quality":3,"sources":[{"quest":{"id":7668,"name":"The Darkreaver Menace"}}]}, +{"id":18807,"name":"Helm of Latent Power","icon":"inv_helmet_24","type":1,"armorType":3,"stats":[0,0,12,14,12,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,297,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":62,"phase":1,"quality":3,"classAllowlist":[7],"sources":[{"quest":{"id":7668,"name":"The Darkreaver Menace"}}]}, {"id":18808,"name":"Gloves of the Hypnotic Flame","icon":"inv_gauntlets_03","type":7,"armorType":1,"stats":[0,0,18,19,8,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":4,"expansion":1,"sources":[{"drop":{"difficulty":1,"npcId":12018,"zoneId":2717}}]}, {"id":18809,"name":"Sash of Whispered Secrets","icon":"inv_belt_12","type":8,"armorType":1,"stats":[0,0,20,0,0,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":71,"phase":1,"quality":4,"expansion":1,"sources":[{"drop":{"difficulty":1,"npcId":12018,"zoneId":2717}}]}, {"id":18810,"name":"Wild Growth Spaulders","icon":"inv_shoulder_18","type":3,"armorType":2,"stats":[0,0,11,12,10,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,182,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":71,"phase":1,"quality":4,"expansion":1,"sources":[{"drop":{"difficulty":1,"npcId":12018,"zoneId":2717}}]}, @@ -5968,21 +5968,21 @@ {"id":19970,"name":"Arcanite Fishing Pole","icon":"inv_fishingpole_01","type":13,"handType":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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":42,"weaponDamageMax":63,"weaponSpeed":3,"ilvl":20,"phase":1,"quality":3,"unique":true,"sources":[{"quest":{"id":8193,"name":"Master Angler"}}]}, {"id":19972,"name":"Lucky Fishing Hat","icon":"inv_helmet_31","type":1,"armorType":1,"stats":[0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":40,"phase":1,"quality":2,"sources":[{"quest":{"id":8221,"name":"Rare Fish - Keefer's Angelfish"}}]}, {"id":19979,"name":"Hook of the Master Angler","icon":"trade_fishing","type":12,"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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"sources":[{"quest":{"id":8193,"name":"Master Angler"}}]}, -{"id":19982,"name":"Duskbat Drape","icon":"inv_misc_cape_20","type":4,"stats":[0,14,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,0,0,0,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"sources":[{"quest":{"id":8236,"name":"The Azure Key"}}]}, -{"id":19984,"name":"Ebon Mask","icon":"inv_helmet_30","type":1,"armorType":2,"stats":[0,0,11,0,0,0,0,0,0,0,0,36,0,0,0,0,0,0,0,0,122,36,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"sources":[{"quest":{"id":8236,"name":"The Azure Key"}}]}, -{"id":19990,"name":"Blessed Prayer Beads","icon":"inv_jewelry_necklace_11","type":12,"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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"sources":[{"quest":{"id":8257,"name":"Blood of Morphaz"}}]}, -{"id":19991,"name":"Devilsaur Eye","icon":"inv_misc_eye_01","type":12,"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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"sources":[{"quest":{"id":8232,"name":"The Green Drake"}}]}, -{"id":19992,"name":"Devilsaur Tooth","icon":"inv_misc_bone_07","type":12,"stats":[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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"sources":[{"quest":{"id":8232,"name":"The Green Drake"}}]}, +{"id":19982,"name":"Duskbat Drape","icon":"inv_misc_cape_20","type":4,"stats":[0,14,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,0,0,0,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"classAllowlist":[6],"sources":[{"quest":{"id":8236,"name":"The Azure Key"}}]}, +{"id":19984,"name":"Ebon Mask","icon":"inv_helmet_30","type":1,"armorType":2,"stats":[0,0,11,0,0,0,0,0,0,0,0,36,0,0,0,0,0,0,0,0,122,36,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"classAllowlist":[6],"sources":[{"quest":{"id":8236,"name":"The Azure Key"}}]}, +{"id":19990,"name":"Blessed Prayer Beads","icon":"inv_jewelry_necklace_11","type":12,"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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"classAllowlist":[5],"sources":[{"quest":{"id":8257,"name":"Blood of Morphaz"}}]}, +{"id":19991,"name":"Devilsaur Eye","icon":"inv_misc_eye_01","type":12,"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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"classAllowlist":[2],"sources":[{"quest":{"id":8232,"name":"The Green Drake"}}]}, +{"id":19992,"name":"Devilsaur Tooth","icon":"inv_misc_bone_07","type":12,"stats":[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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"classAllowlist":[2],"sources":[{"quest":{"id":8232,"name":"The Green Drake"}}]}, {"id":19993,"name":"Hoodoo Hunting Bow","icon":"inv_waepon_bow_zulgrub_d_02","type":14,"rangedWeaponType":1,"stats":[0,10,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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":86,"weaponDamageMax":160,"weaponSpeed":2.8,"ilvl":68,"phase":1,"quality":3,"expansion":1,"sources":[{"drop":{"difficulty":1,"npcId":15085,"zoneId":1977}}]}, {"id":19998,"name":"Bloodvine Lens","icon":"inv_helmet_44","type":1,"armorType":2,"stats":[0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,147,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"expansion":3,"sources":[{"crafted":{"profession":4,"spellId":24357}}]}, {"id":19999,"name":"Bloodvine Goggles","icon":"inv_helmet_47","type":1,"armorType":1,"stats":[0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,75,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"expansion":3,"sources":[{"crafted":{"profession":4,"spellId":24356}}]}, -{"id":20006,"name":"Circle of Hope","icon":"inv_jewelry_ring_32","type":11,"stats":[0,0,0,0,0,0,0,0,14,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"sources":[{"quest":{"id":8257,"name":"Blood of Morphaz"}}]}, +{"id":20006,"name":"Circle of Hope","icon":"inv_jewelry_ring_32","type":11,"stats":[0,0,0,0,0,0,0,0,14,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"classAllowlist":[5],"sources":[{"quest":{"id":8257,"name":"Blood of Morphaz"}}]}, {"id":20032,"name":"Flowing Ritual Robes","icon":"inv_chest_cloth_25","type":5,"armorType":1,"stats":[0,0,15,23,24,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,114,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":4,"unique":true,"expansion":1,"sources":[{"drop":{"difficulty":1,"npcId":14510,"zoneId":1977}}]}, {"id":20033,"name":"Zandalar Demoniac's Robe","icon":"inv_chest_cloth_12","type":5,"armorType":1,"stats":[0,0,35,0,0,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,114,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":4,"unique":true,"classAllowlist":[8],"setName":"Demoniac's Threads","sources":[{"quest":{"id":8077,"name":"Paragons of Power: The Demoniac's Robes"}}]}, {"id":20034,"name":"Zandalar Illusionist's Robe","icon":"inv_chest_cloth_12","type":5,"armorType":1,"stats":[0,0,23,24,0,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,114,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":4,"unique":true,"classAllowlist":[3],"setName":"Illusionist's Attire","sources":[{"quest":{"id":8069,"name":"Paragons of Power: The Illusionist's Robes"}}]}, -{"id":20035,"name":"Glacial Spike","icon":"inv_weapon_shortblade_06","type":13,"weaponType":2,"handType":2,"stats":[0,0,0,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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":31,"weaponDamageMax":59,"weaponSpeed":1.3,"ilvl":52,"phase":1,"quality":3,"sources":[{"quest":{"id":8253,"name":"Destroy Morphaz"}}]}, -{"id":20036,"name":"Fire Ruby","icon":"inv_misc_gem_bloodstone_02","type":12,"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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"sources":[{"quest":{"id":8253,"name":"Destroy Morphaz"}}]}, -{"id":20037,"name":"Arcane Crystal Pendant","icon":"inv_misc_gem_topaz_01","type":2,"stats":[0,0,0,6,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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"sources":[{"quest":{"id":8253,"name":"Destroy Morphaz"}}]}, +{"id":20035,"name":"Glacial Spike","icon":"inv_weapon_shortblade_06","type":13,"weaponType":2,"handType":2,"stats":[0,0,0,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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":31,"weaponDamageMax":59,"weaponSpeed":1.3,"ilvl":52,"phase":1,"quality":3,"classAllowlist":[3],"sources":[{"quest":{"id":8253,"name":"Destroy Morphaz"}}]}, +{"id":20036,"name":"Fire Ruby","icon":"inv_misc_gem_bloodstone_02","type":12,"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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"classAllowlist":[3],"sources":[{"quest":{"id":8253,"name":"Destroy Morphaz"}}]}, +{"id":20037,"name":"Arcane Crystal Pendant","icon":"inv_misc_gem_topaz_01","type":2,"stats":[0,0,0,6,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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"classAllowlist":[3],"sources":[{"quest":{"id":8253,"name":"Destroy Morphaz"}}]}, {"id":20038,"name":"Mandokir's Sting","icon":"inv_waepon_bow_zulgrub_d_01","type":14,"rangedWeaponType":1,"stats":[0,11,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":84,"weaponDamageMax":157,"weaponSpeed":2.6,"ilvl":66,"phase":1,"quality":4,"expansion":1,"sources":[{"drop":{"difficulty":1,"npcId":11382,"zoneId":1977}}]}, {"id":20041,"name":"Highlander's Plate Girdle","icon":"inv_belt_14","type":8,"armorType":4,"stats":[17,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,369,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":63,"phase":1,"quality":3,"unique":true,"classAllowlist":[9,4],"setName":"The Highlander's Resolution","sources":[{"soldBy":{"npcId":15127,"npcName":"Samuel Hawke","zoneId":45}}]}, {"id":20042,"name":"Highlander's Lamellar Girdle","icon":"inv_belt_14","type":8,"armorType":4,"stats":[15,0,6,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,369,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":63,"phase":1,"quality":3,"unique":true,"classAllowlist":[4],"setName":"The Highlander's Resolve","sources":[{"soldBy":{"npcId":15127,"npcName":"Samuel Hawke","zoneId":45}}]}, @@ -6011,8 +6011,8 @@ {"id":20071,"name":"Talisman of Arathor","icon":"inv_jewelry_talisman_05","type":12,"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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":63,"phase":1,"quality":3,"unique":true,"sources":[{"soldBy":{"npcId":15127,"npcName":"Samuel Hawke","zoneId":45}}]}, {"id":20072,"name":"Defiler's Talisman","icon":"inv_jewelry_talisman_05","type":12,"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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":63,"phase":1,"quality":3,"unique":true,"sources":[{"soldBy":{"npcId":15126,"npcName":"Rutherford Twing","zoneId":45}}]}, {"id":20073,"name":"Cloak of the Honor Guard","icon":"inv_misc_cape_02","type":4,"stats":[0,5,11,0,0,0,0,0,0,0,0,34,0,0,0,0,0,0,0,0,57,34,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":4,"sources":[{"soldBy":{"npcId":15127,"npcName":"Samuel Hawke","zoneId":45}}]}, -{"id":20082,"name":"Woestave","icon":"inv_wand_09","type":14,"rangedWeaponType":8,"stats":[0,0,3,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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":68,"weaponDamageMax":127,"weaponSpeed":1.9,"ilvl":52,"phase":1,"quality":3,"sources":[{"quest":{"id":8257,"name":"Blood of Morphaz"}}]}, -{"id":20083,"name":"Hunting Spear","icon":"inv_spear_02","type":13,"weaponType":6,"handType":4,"stats":[0,0,17,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":111,"weaponDamageMax":168,"weaponSpeed":3.1,"ilvl":52,"phase":1,"quality":3,"sources":[{"quest":{"id":8232,"name":"The Green Drake"}}]}, +{"id":20082,"name":"Woestave","icon":"inv_wand_09","type":14,"rangedWeaponType":8,"stats":[0,0,3,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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":68,"weaponDamageMax":127,"weaponSpeed":1.9,"ilvl":52,"phase":1,"quality":3,"classAllowlist":[5],"sources":[{"quest":{"id":8257,"name":"Blood of Morphaz"}}]}, +{"id":20083,"name":"Hunting Spear","icon":"inv_spear_02","type":13,"weaponType":6,"handType":4,"stats":[0,0,17,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":111,"weaponDamageMax":168,"weaponSpeed":3.1,"ilvl":52,"phase":1,"quality":3,"classAllowlist":[2],"sources":[{"quest":{"id":8232,"name":"The Green Drake"}}]}, {"id":20084,"name":"Hunting Net","icon":"inv_misc_net_01","type":12,"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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3}, {"id":20088,"name":"Highlander's Chain Girdle","icon":"inv_belt_20","type":8,"armorType":3,"stats":[0,0,8,0,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,0,178,20,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":53,"phase":1,"quality":3,"unique":true,"classAllowlist":[2,7],"sources":[{"soldBy":{"npcId":15127,"npcName":"Samuel Hawke","zoneId":45}}]}, {"id":20089,"name":"Highlander's Chain Girdle","icon":"inv_belt_20","type":8,"armorType":3,"stats":[0,0,6,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,149,8,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":43,"phase":1,"quality":3,"unique":true,"classAllowlist":[2,7],"sources":[{"soldBy":{"npcId":15127,"npcName":"Samuel Hawke","zoneId":45}}]}, @@ -6056,8 +6056,8 @@ {"id":20127,"name":"Highlander's Plate Greaves","icon":"inv_boots_plate_04","type":10,"armorType":4,"stats":[11,10,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,383,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":53,"phase":1,"quality":3,"unique":true,"classAllowlist":[9,4],"sources":[{"soldBy":{"npcId":15127,"npcName":"Samuel Hawke","zoneId":45}}]}, {"id":20128,"name":"Highlander's Plate Greaves","icon":"inv_boots_plate_04","type":10,"armorType":4,"stats":[8,8,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,289,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":43,"phase":1,"quality":3,"unique":true,"classAllowlist":[9,4],"sources":[{"soldBy":{"npcId":15127,"npcName":"Samuel Hawke","zoneId":45}}]}, {"id":20129,"name":"Highlander's Mail Greaves","icon":"inv_boots_plate_04","type":10,"armorType":3,"stats":[6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,157,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":33,"phase":1,"quality":3,"unique":true,"classAllowlist":[9,4],"sources":[{"soldBy":{"npcId":15127,"npcName":"Samuel Hawke","zoneId":45}}]}, -{"id":20130,"name":"Diamond Flask","icon":"inv_drink_01","type":12,"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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"sources":[{"quest":{"id":8425,"name":"Voodoo Feathers"}}]}, -{"id":20134,"name":"Skyfury Helm","icon":"inv_helmet_57","type":1,"armorType":3,"stats":[13,0,14,0,12,0,0,0,34,0,0,0,0,34,0,0,0,0,0,0,370,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":62,"phase":1,"quality":4}, +{"id":20130,"name":"Diamond Flask","icon":"inv_drink_01","type":12,"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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"classAllowlist":[9],"sources":[{"quest":{"id":8425,"name":"Voodoo Feathers"}}]}, +{"id":20134,"name":"Skyfury Helm","icon":"inv_helmet_57","type":1,"armorType":3,"stats":[13,0,14,0,12,0,0,0,34,0,0,0,0,34,0,0,0,0,0,0,370,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":62,"phase":1,"quality":4,"classAllowlist":[7]}, {"id":20150,"name":"Defiler's Chain Girdle","icon":"inv_belt_20","type":8,"armorType":3,"stats":[0,0,10,0,0,0,0,0,0,0,0,34,0,0,0,0,0,0,0,0,208,34,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":63,"phase":1,"quality":3,"unique":true,"classAllowlist":[2,7],"setName":"The Defiler's Determination","sources":[{"soldBy":{"npcId":15126,"npcName":"Rutherford Twing","zoneId":45}}]}, {"id":20151,"name":"Defiler's Chain Girdle","icon":"inv_belt_20","type":8,"armorType":3,"stats":[0,0,8,0,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,0,178,20,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":53,"phase":1,"quality":3,"unique":true,"classAllowlist":[2,7],"sources":[{"soldBy":{"npcId":15126,"npcName":"Rutherford Twing","zoneId":45}}]}, {"id":20152,"name":"Defiler's Chain Girdle","icon":"inv_belt_20","type":8,"armorType":2,"stats":[0,0,5,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,0,61,24,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":33,"phase":1,"quality":3,"unique":true,"classAllowlist":[2,7],"sources":[{"soldBy":{"npcId":15126,"npcName":"Rutherford Twing","zoneId":45}}]}, @@ -6129,7 +6129,7 @@ {"id":20218,"name":"Faded Hakkari Cloak","icon":"inv_misc_cape_13","type":4,"stats":[0,0,5,8,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":59,"phase":1,"quality":3,"sources":[{"quest":{"id":8181,"name":"Confront Yeh'kinya"}}]}, {"id":20219,"name":"Tattered Hakkari Cape","icon":"inv_misc_cape_14","type":4,"stats":[7,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":59,"phase":1,"quality":3,"sources":[{"quest":{"id":8181,"name":"Confront Yeh'kinya"}}]}, {"id":20220,"name":"Ironbark Staff","icon":"inv_wand_04","type":13,"weaponType":8,"handType":4,"stats":[0,0,19,10,0,41,0,0,0,0,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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":137,"weaponDamageMax":243,"weaponSpeed":3.4,"ilvl":65,"phase":1,"quality":4,"sources":[{"soldBy":{"npcId":15126,"npcName":"Rutherford Twing","zoneId":45}}]}, -{"id":20255,"name":"Whisperwalk Boots","icon":"inv_boots_cloth_05","type":10,"armorType":2,"stats":[0,18,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,104,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"sources":[{"quest":{"id":8236,"name":"The Azure Key"}}]}, +{"id":20255,"name":"Whisperwalk Boots","icon":"inv_boots_cloth_05","type":10,"armorType":2,"stats":[0,18,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,104,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"classAllowlist":[6],"sources":[{"quest":{"id":8236,"name":"The Azure Key"}}]}, {"id":20257,"name":"Seafury Gauntlets","icon":"inv_gauntlets_30","type":7,"armorType":3,"stats":[10,0,9,9,0,0,9,0,21,0,0,0,0,21,0,0,0,0,0,0,310,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":68,"phase":1,"quality":4,"expansion":1,"sources":[{"drop":{"difficulty":1,"npcId":14834,"zoneId":1977}}]}, {"id":20258,"name":"Zulian Ceremonial Staff","icon":"inv_staff_34","type":13,"weaponType":8,"handType":4,"stats":[0,0,13,16,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":112,"weaponDamageMax":171,"weaponSpeed":2.6,"ilvl":65,"phase":1,"quality":3,"unique":true,"expansion":1,"sources":[{"drop":{"difficulty":1,"zoneId":1977,"otherName":"Trash"}}]}, {"id":20259,"name":"Shadow Panther Hide Gloves","icon":"inv_gauntlets_25","type":7,"armorType":2,"stats":[15,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,113,0,0,0,0,0,0,0,0,0,0,0,0,0,60],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"expansion":1,"sources":[{"drop":{"difficulty":1,"zoneId":1977,"otherName":"Trash"}}]}, @@ -6142,7 +6142,7 @@ {"id":20266,"name":"Peacekeeper Leggings","icon":"inv_pants_plate_04","type":9,"armorType":4,"stats":[0,0,14,18,0,20,9,0,0,0,0,0,0,0,0,0,0,0,0,0,618,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":68,"phase":1,"quality":3,"expansion":1,"sources":[{"drop":{"difficulty":1,"npcId":14509,"zoneId":1977}}]}, {"id":20295,"name":"Blue Dragonscale Leggings","icon":"inv_pants_mail_15","type":9,"armorType":3,"stats":[0,0,0,23,0,17,8,0,0,0,0,0,0,0,0,0,0,0,0,0,310,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":60,"phase":1,"quality":3,"setName":"Blue Dragon Mail","expansion":2,"sources":[{"crafted":{"profession":8,"spellId":24654}}]}, {"id":20296,"name":"Green Dragonscale Gauntlets","icon":"inv_gauntlets_12","type":7,"armorType":3,"stats":[0,0,7,10,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,201,0,0,0,0,0,0,0,0,0,0,0,9,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":54,"phase":1,"quality":3,"setName":"Green Dragon Mail","expansion":2,"sources":[{"crafted":{"profession":8,"spellId":24655}}]}, -{"id":20369,"name":"Azurite Fists","icon":"inv_gauntlets_30","type":7,"armorType":3,"stats":[0,6,7,7,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,195,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"sources":[{"quest":{"id":8413,"name":"Da Voodoo"}}]}, +{"id":20369,"name":"Azurite Fists","icon":"inv_gauntlets_30","type":7,"armorType":3,"stats":[0,6,7,7,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,195,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"classAllowlist":[7],"sources":[{"quest":{"id":8413,"name":"Da Voodoo"}}]}, {"id":20380,"name":"Dreamscale Breastplate","icon":"inv_chest_plate08","type":5,"armorType":3,"stats":[0,15,15,14,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,496,0,0,0,0,0,0,0,0,0,0,0,30,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":68,"phase":1,"quality":4,"expansion":3,"sources":[{"crafted":{"profession":8,"spellId":24703}}]}, {"id":20391,"name":"Flimsy Male Gnome Mask","icon":"inv_misc_head_gnome_01","type":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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":1,"phase":1,"quality":1}, {"id":20392,"name":"Flimsy Female Gnome Mask","icon":"inv_misc_head_gnome_02","type":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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":1,"phase":1,"quality":1}, @@ -6174,24 +6174,24 @@ {"id":20480,"name":"Spitfire Gauntlets","icon":"inv_gauntlets_11","type":7,"armorType":3,"stats":[0,12,0,12,0,11,6,0,0,0,0,0,0,0,0,0,0,0,0,0,228,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":62,"phase":1,"quality":3,"expansion":2,"sources":[{"crafted":{"profession":8,"spellId":24847}}]}, {"id":20481,"name":"Spitfire Bracers","icon":"inv_bracer_05","type":6,"armorType":3,"stats":[0,9,0,9,0,8,5,0,0,0,0,0,0,0,0,0,0,0,0,0,160,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":62,"phase":1,"quality":3,"expansion":2,"sources":[{"crafted":{"profession":8,"spellId":24846}}]}, {"id":20487,"name":"Lok'delar, Stave of the Ancient Keepers DEP","icon":"inv_staff_21","type":13,"weaponType":8,"handType":4,"stats":[0,0,26,15,0,0,0,0,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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":187,"weaponDamageMax":282,"weaponSpeed":3.2,"ilvl":75,"phase":1,"quality":4,"unique":true,"classAllowlist":[2]}, -{"id":20503,"name":"Enamored Water Spirit","icon":"inv_wand_01","type":12,"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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"sources":[{"quest":{"id":8413,"name":"Da Voodoo"}}]}, -{"id":20504,"name":"Lightforged Blade","icon":"inv_sword_39","type":13,"weaponType":9,"handType":4,"stats":[9,0,9,0,0,13,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,10,0,10,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":118,"weaponDamageMax":178,"weaponSpeed":3.3,"ilvl":52,"phase":1,"quality":3,"sources":[{"quest":{"id":8418,"name":"Forging the Mightstone"}}]}, -{"id":20505,"name":"Chivalrous Signet","icon":"inv_jewelry_ring_43","type":11,"stats":[7,0,7,7,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"sources":[{"quest":{"id":8418,"name":"Forging the Mightstone"}}]}, -{"id":20512,"name":"Sanctified Orb","icon":"inv_misc_gem_pearl_04","type":12,"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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"sources":[{"quest":{"id":8418,"name":"Forging the Mightstone"}}]}, -{"id":20517,"name":"Razorsteel Shoulders","icon":"inv_shoulder_16","type":3,"armorType":4,"stats":[10,10,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,410,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"sources":[{"quest":{"id":8425,"name":"Voodoo Feathers"}}]}, -{"id":20521,"name":"Fury Visor","icon":"inv_helmet_01","type":1,"armorType":4,"stats":[18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,445,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"sources":[{"quest":{"id":8425,"name":"Voodoo Feathers"}}]}, +{"id":20503,"name":"Enamored Water Spirit","icon":"inv_wand_01","type":12,"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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"classAllowlist":[7],"sources":[{"quest":{"id":8413,"name":"Da Voodoo"}}]}, +{"id":20504,"name":"Lightforged Blade","icon":"inv_sword_39","type":13,"weaponType":9,"handType":4,"stats":[9,0,9,0,0,13,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,10,0,10,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":118,"weaponDamageMax":178,"weaponSpeed":3.3,"ilvl":52,"phase":1,"quality":3,"classAllowlist":[4],"sources":[{"quest":{"id":8418,"name":"Forging the Mightstone"}}]}, +{"id":20505,"name":"Chivalrous Signet","icon":"inv_jewelry_ring_43","type":11,"stats":[7,0,7,7,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"classAllowlist":[4],"sources":[{"quest":{"id":8418,"name":"Forging the Mightstone"}}]}, +{"id":20512,"name":"Sanctified Orb","icon":"inv_misc_gem_pearl_04","type":12,"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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"classAllowlist":[4],"sources":[{"quest":{"id":8418,"name":"Forging the Mightstone"}}]}, +{"id":20517,"name":"Razorsteel Shoulders","icon":"inv_shoulder_16","type":3,"armorType":4,"stats":[10,10,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,410,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"classAllowlist":[9],"sources":[{"quest":{"id":8425,"name":"Voodoo Feathers"}}]}, +{"id":20521,"name":"Fury Visor","icon":"inv_helmet_01","type":1,"armorType":4,"stats":[18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,445,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"classAllowlist":[9],"sources":[{"quest":{"id":8425,"name":"Voodoo Feathers"}}]}, {"id":20522,"name":"Feral Staff","icon":"inv_staff_20","type":13,"weaponType":8,"handType":4,"stats":[17,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,110],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":108,"weaponDamageMax":162,"weaponSpeed":3,"ilvl":52,"phase":1,"quality":3,"unique":true}, {"id":20525,"name":"Earthen Sigil","icon":"spell_nature_nullward","type":12,"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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3}, -{"id":20530,"name":"Robes of Servitude","icon":"inv_chest_cloth_10","type":5,"armorType":1,"stats":[0,0,15,10,0,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,75,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"sources":[{"quest":{"id":8422,"name":"Trolls of a Feather"}}]}, -{"id":20534,"name":"Abyss Shard","icon":"inv_misc_gem_02","type":12,"stats":[0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"sources":[{"quest":{"id":8422,"name":"Trolls of a Feather"}}]}, -{"id":20536,"name":"Soul Harvester","icon":"inv_sword_48","type":13,"weaponType":8,"handType":4,"stats":[0,0,16,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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":118,"weaponDamageMax":178,"weaponSpeed":3.3,"ilvl":52,"phase":1,"quality":3,"sources":[{"quest":{"id":8422,"name":"Trolls of a Feather"}}]}, +{"id":20530,"name":"Robes of Servitude","icon":"inv_chest_cloth_10","type":5,"armorType":1,"stats":[0,0,15,10,0,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,75,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"classAllowlist":[8],"sources":[{"quest":{"id":8422,"name":"Trolls of a Feather"}}]}, +{"id":20534,"name":"Abyss Shard","icon":"inv_misc_gem_02","type":12,"stats":[0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"classAllowlist":[8],"sources":[{"quest":{"id":8422,"name":"Trolls of a Feather"}}]}, +{"id":20536,"name":"Soul Harvester","icon":"inv_sword_48","type":13,"weaponType":8,"handType":4,"stats":[0,0,16,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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":118,"weaponDamageMax":178,"weaponSpeed":3.3,"ilvl":52,"phase":1,"quality":3,"classAllowlist":[8],"sources":[{"quest":{"id":8422,"name":"Trolls of a Feather"}}]}, {"id":20537,"name":"Runed Stygian Boots","icon":"inv_boots_05","type":10,"armorType":1,"stats":[0,0,8,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,61,0,0,0,0,0,0,0,0,0,0,0,0,20,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":63,"phase":1,"quality":3,"expansion":2,"sources":[{"crafted":{"profession":11,"spellId":24903}}]}, {"id":20538,"name":"Runed Stygian Leggings","icon":"inv_pants_cloth_05","type":9,"armorType":1,"stats":[0,0,13,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,78,0,0,0,0,0,0,0,0,0,0,0,0,25,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":63,"phase":1,"quality":3,"expansion":2,"sources":[{"crafted":{"profession":11,"spellId":24901}}]}, {"id":20539,"name":"Runed Stygian Belt","icon":"inv_belt_14","type":8,"armorType":1,"stats":[0,0,10,0,0,0,4,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,20,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":63,"phase":1,"quality":3,"expansion":2,"sources":[{"crafted":{"profession":11,"spellId":24902}}]}, {"id":20549,"name":"Darkrune Gauntlets","icon":"inv_gauntlets_27","type":7,"armorType":4,"stats":[0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,410,0,0,0,0,0,0,0,0,0,0,0,0,20,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":63,"phase":1,"quality":3,"expansion":2,"sources":[{"crafted":{"profession":2,"spellId":24912}}]}, {"id":20550,"name":"Darkrune Breastplate","icon":"inv_chest_plate06","type":5,"armorType":4,"stats":[0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,657,0,0,0,0,12,0,0,0,0,0,0,0,25,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":63,"phase":1,"quality":3,"expansion":2,"sources":[{"crafted":{"profession":2,"spellId":24914}}]}, {"id":20551,"name":"Darkrune Helm","icon":"inv_helmet_10","type":1,"armorType":4,"stats":[0,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,534,0,0,0,0,0,0,0,0,0,0,0,0,25,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":63,"phase":1,"quality":3,"expansion":2,"sources":[{"crafted":{"profession":2,"spellId":24913}}]}, -{"id":20556,"name":"Wildstaff","icon":"inv_staff_goldfeathered_01","type":13,"weaponType":8,"handType":4,"stats":[10,0,10,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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":90,"weaponDamageMax":135,"weaponSpeed":2.5,"ilvl":52,"phase":1,"quality":3,"sources":[{"quest":{"id":8413,"name":"Da Voodoo"}}]}, +{"id":20556,"name":"Wildstaff","icon":"inv_staff_goldfeathered_01","type":13,"weaponType":8,"handType":4,"stats":[10,0,10,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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":90,"weaponDamageMax":135,"weaponSpeed":2.5,"ilvl":52,"phase":1,"quality":3,"classAllowlist":[7],"sources":[{"quest":{"id":8413,"name":"Da Voodoo"}}]}, {"id":20561,"name":"Flimsy Male Dwarf Mask","icon":"inv_misc_head_dwarf_01","type":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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":1,"phase":1,"quality":1}, {"id":20562,"name":"Flimsy Female Dwarf Mask","icon":"inv_misc_head_dwarf_02","type":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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":1,"phase":1,"quality":1}, {"id":20563,"name":"Flimsy Female Night Elf Mask","icon":"inv_misc_head_elf_02","type":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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":1,"phase":1,"quality":1}, @@ -6616,8 +6616,8 @@ {"id":21543,"name":"Festive Teal Pant Suit","icon":"inv_chest_cloth_54","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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":1,"phase":1,"quality":1,"sources":[{"quest":{"id":8865,"name":"Festive Lunar Pant Suits"}},{"soldBy":{"npcId":15864,"npcName":"Valadar Starsong","zoneId":493}}]}, {"id":21544,"name":"Festive Blue Pant Suit","icon":"inv_chest_cloth_52","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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":1,"phase":1,"quality":1,"sources":[{"quest":{"id":8865,"name":"Festive Lunar Pant Suits"}},{"soldBy":{"npcId":15864,"npcName":"Valadar Starsong","zoneId":493}}]}, {"id":21563,"name":"Don Rodrigo's Band","icon":"inv_jewelry_ring_34","type":11,"stats":[0,0,7,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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":4,"unique":true}, -{"id":21565,"name":"Rune of Perfection","icon":"inv_misc_rune_05","type":12,"stats":[0,0,7,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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":45,"phase":1,"quality":3,"unique":true,"classAllowlist":[5,7,3,8,1]}, -{"id":21566,"name":"Rune of Perfection","icon":"inv_misc_rune_05","type":12,"stats":[0,0,4,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":25,"phase":1,"quality":3,"unique":true,"classAllowlist":[5,7,3,8,1]}, +{"id":21565,"name":"Rune of Perfection","icon":"inv_misc_rune_05","type":12,"stats":[0,0,7,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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":45,"phase":1,"quality":3,"unique":true,"classAllowlist":[5,1,7,3,8]}, +{"id":21566,"name":"Rune of Perfection","icon":"inv_misc_rune_05","type":12,"stats":[0,0,4,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":25,"phase":1,"quality":3,"unique":true,"classAllowlist":[5,1,7,3,8]}, {"id":21567,"name":"Rune of Duty","icon":"inv_misc_rune_02","type":12,"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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":45,"phase":1,"quality":3,"unique":true,"classAllowlist":[9,4,2,6]}, {"id":21568,"name":"Rune of Duty","icon":"inv_misc_rune_02","type":12,"stats":[0,0,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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":25,"phase":1,"quality":3,"unique":true,"classAllowlist":[9,4,2,6]}, {"id":21579,"name":"Vanquished Tentacle of C'Thun","icon":"inv_misc_ahnqirajtrinket_05","type":12,"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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":88,"phase":1,"quality":4,"unique":true,"expansion":1,"sources":[{"drop":{"difficulty":1,"npcId":15727,"zoneId":3428}}]}, @@ -6787,22 +6787,22 @@ {"id":21934,"name":"Ornate Tigerseye Necklace","icon":"inv_jewelry_necklace_02","type":2,"stats":[0,0,0,0,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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":20,"phase":1,"quality":2,"expansion":2,"sources":[{"crafted":{"profession":7,"spellId":26928}}]}, {"id":21994,"name":"Belt of Heroism","icon":"inv_belt_34","type":8,"armorType":4,"stats":[15,9,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,380,0,10,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"setName":"Battlegear of Heroism"}, {"id":21995,"name":"Boots of Heroism","icon":"inv_boots_plate_03","type":10,"armorType":4,"stats":[20,0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,537,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":60,"phase":1,"quality":4,"setName":"Battlegear of Heroism"}, -{"id":21996,"name":"Bracers of Heroism","icon":"inv_bracer_18","type":6,"armorType":4,"stats":[9,5,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,296,0,4,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"setName":"Battlegear of Heroism"}, +{"id":21996,"name":"Bracers of Heroism","icon":"inv_bracer_18","type":6,"armorType":4,"stats":[9,5,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,296,0,4,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"classAllowlist":[9],"setName":"Battlegear of Heroism"}, {"id":21997,"name":"Breastplate of Heroism","icon":"inv_chest_plate03","type":5,"armorType":4,"stats":[21,13,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,781,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":60,"phase":1,"quality":4,"setName":"Battlegear of Heroism"}, {"id":21998,"name":"Gauntlets of Heroism","icon":"inv_gauntlets_26","type":7,"armorType":4,"stats":[20,0,13,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,0,0,488,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":60,"phase":1,"quality":4,"setName":"Battlegear of Heroism"}, {"id":21999,"name":"Helm of Heroism","icon":"inv_helmet_02","type":1,"armorType":4,"stats":[18,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,634,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":60,"phase":1,"quality":4,"setName":"Battlegear of Heroism"}, {"id":22000,"name":"Legplates of Heroism","icon":"inv_pants_04","type":9,"armorType":4,"stats":[25,11,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,601,0,8,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":66,"phase":1,"quality":3,"setName":"Battlegear of Heroism"}, {"id":22001,"name":"Spaulders of Heroism","icon":"inv_shoulder_30","type":3,"armorType":4,"stats":[12,12,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,507,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"setName":"Battlegear of Heroism"}, -{"id":22002,"name":"Darkmantle Belt","icon":"inv_belt_03","type":8,"armorType":2,"stats":[10,17,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,102,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"setName":"Darkmantle Armor"}, +{"id":22002,"name":"Darkmantle Belt","icon":"inv_belt_03","type":8,"armorType":2,"stats":[10,17,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,102,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"classAllowlist":[6],"setName":"Darkmantle Armor"}, {"id":22003,"name":"Darkmantle Boots","icon":"inv_boots_08","type":10,"armorType":2,"stats":[0,24,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":60,"phase":1,"quality":4,"setName":"Darkmantle Armor"}, -{"id":22004,"name":"Darkmantle Bracers","icon":"inv_bracer_07","type":6,"armorType":2,"stats":[7,15,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,79,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"setName":"Darkmantle Armor"}, +{"id":22004,"name":"Darkmantle Bracers","icon":"inv_bracer_07","type":6,"armorType":2,"stats":[7,15,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,79,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"classAllowlist":[6],"setName":"Darkmantle Armor"}, {"id":22005,"name":"Darkmantle Cap","icon":"inv_helmet_41","type":1,"armorType":2,"stats":[13,26,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":60,"phase":1,"quality":4,"setName":"Darkmantle Armor"}, -{"id":22006,"name":"Darkmantle Gloves","icon":"inv_gauntlets_24","type":7,"armorType":2,"stats":[13,24,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":60,"phase":1,"quality":4,"setName":"Darkmantle Armor"}, +{"id":22006,"name":"Darkmantle Gloves","icon":"inv_gauntlets_24","type":7,"armorType":2,"stats":[13,24,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":60,"phase":1,"quality":4,"classAllowlist":[6],"setName":"Darkmantle Armor"}, {"id":22007,"name":"Darkmantle Pants","icon":"inv_pants_02","type":9,"armorType":2,"stats":[15,25,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":66,"phase":1,"quality":3,"setName":"Darkmantle Armor"}, {"id":22008,"name":"Darkmantle Spaulders","icon":"inv_shoulder_07","type":3,"armorType":2,"stats":[0,24,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"setName":"Darkmantle Armor"}, {"id":22009,"name":"Darkmantle Tunic","icon":"inv_chest_leather_07","type":5,"armorType":2,"stats":[0,31,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,211,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":60,"phase":1,"quality":4,"setName":"Darkmantle Armor"}, {"id":22010,"name":"Beastmaster's Belt","icon":"inv_belt_28","type":8,"armorType":3,"stats":[0,11,16,10,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,0,214,20,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"setName":"Beastmaster Armor"}, -{"id":22011,"name":"Beastmaster's Bindings","icon":"inv_bracer_17","type":6,"armorType":3,"stats":[0,11,7,5,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,0,167,20,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"setName":"Beastmaster Armor"}, +{"id":22011,"name":"Beastmaster's Bindings","icon":"inv_bracer_17","type":6,"armorType":3,"stats":[0,11,7,5,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,0,167,20,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"classAllowlist":[2],"setName":"Beastmaster Armor"}, {"id":22013,"name":"Beastmaster's Cap","icon":"inv_helmet_24","type":1,"armorType":3,"stats":[0,15,21,12,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,0,359,28,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":60,"phase":1,"quality":4,"setName":"Beastmaster Armor"}, {"id":22015,"name":"Beastmaster's Gloves","icon":"inv_gauntlets_10","type":7,"armorType":3,"stats":[0,11,13,11,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,0,276,20,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":60,"phase":1,"quality":4,"setName":"Beastmaster Armor"}, {"id":22016,"name":"Beastmaster's Mantle","icon":"inv_shoulder_10","type":3,"armorType":3,"stats":[0,8,18,10,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,286,16,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"setName":"Beastmaster Armor","sources":[{"quest":{"id":9017,"name":"Anthion's Parting Words"}}]}, @@ -6810,7 +6810,7 @@ {"id":22060,"name":"Beastmaster's Tunic","icon":"inv_chest_chain_03","type":5,"armorType":3,"stats":[0,17,16,13,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,441,32,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":60,"phase":1,"quality":4,"setName":"Beastmaster Armor"}, {"id":22061,"name":"Beastmaster's Boots","icon":"inv_boots_plate_07","type":10,"armorType":3,"stats":[0,16,9,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,303,32,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":60,"phase":1,"quality":4,"setName":"Beastmaster Armor"}, {"id":22062,"name":"Sorcerer's Belt","icon":"inv_belt_08","type":8,"armorType":1,"stats":[0,0,12,14,7,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"setName":"Sorcerer's Regalia"}, -{"id":22063,"name":"Sorcerer's Bindings","icon":"inv_jewelry_ring_23","type":6,"armorType":1,"stats":[0,0,8,12,5,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"setName":"Sorcerer's Regalia"}, +{"id":22063,"name":"Sorcerer's Bindings","icon":"inv_jewelry_ring_23","type":6,"armorType":1,"stats":[0,0,8,12,5,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"classAllowlist":[3],"setName":"Sorcerer's Regalia"}, {"id":22064,"name":"Sorcerer's Boots","icon":"inv_boots_02","type":10,"armorType":1,"stats":[0,0,14,16,10,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,73,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":60,"phase":1,"quality":4,"setName":"Sorcerer's Regalia"}, {"id":22065,"name":"Sorcerer's Crown","icon":"inv_crown_02","type":1,"armorType":1,"stats":[0,0,16,25,14,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,86,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":60,"phase":1,"quality":4,"setName":"Sorcerer's Regalia"}, {"id":22066,"name":"Sorcerer's Gloves","icon":"inv_gauntlets_17","type":7,"armorType":1,"stats":[0,0,13,15,11,13,0,9,0,0,0,0,9,0,0,0,0,0,0,0,66,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":60,"phase":1,"quality":4,"setName":"Sorcerer's Regalia"}, @@ -6818,7 +6818,7 @@ {"id":22068,"name":"Sorcerer's Mantle","icon":"inv_shoulder_23","type":3,"armorType":1,"stats":[0,0,11,17,7,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,69,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"setName":"Sorcerer's Regalia","sources":[{"quest":{"id":8953,"name":"Anthion's Parting Words"}}]}, {"id":22069,"name":"Sorcerer's Robes","icon":"inv_chest_cloth_25","type":5,"armorType":1,"stats":[0,0,14,25,9,16,0,0,0,0,20,0,0,0,0,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":60,"phase":1,"quality":4,"setName":"Sorcerer's Regalia"}, {"id":22070,"name":"Deathmist Belt","icon":"inv_belt_12","type":8,"armorType":1,"stats":[0,0,16,16,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"setName":"Deathmist Raiment"}, -{"id":22071,"name":"Deathmist Bracers","icon":"inv_bracer_13","type":6,"armorType":1,"stats":[0,0,12,12,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"setName":"Deathmist Raiment"}, +{"id":22071,"name":"Deathmist Bracers","icon":"inv_bracer_13","type":6,"armorType":1,"stats":[0,0,12,12,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"classAllowlist":[8],"setName":"Deathmist Raiment"}, {"id":22072,"name":"Deathmist Leggings","icon":"inv_pants_08","type":9,"armorType":1,"stats":[0,0,22,21,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,81,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":66,"phase":1,"quality":3,"setName":"Deathmist Raiment"}, {"id":22073,"name":"Deathmist Mantle","icon":"inv_misc_bone_taurenskull_01","type":3,"armorType":1,"stats":[0,0,16,16,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,69,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"setName":"Deathmist Raiment"}, {"id":22074,"name":"Deathmist Mask","icon":"inv_helmet_29","type":1,"armorType":1,"stats":[0,0,24,24,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,86,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":60,"phase":1,"quality":4,"setName":"Deathmist Raiment"}, @@ -6826,7 +6826,7 @@ {"id":22076,"name":"Deathmist Sandals","icon":"inv_boots_05","type":10,"armorType":1,"stats":[0,0,24,14,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,73,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":60,"phase":1,"quality":4,"setName":"Deathmist Raiment"}, {"id":22077,"name":"Deathmist Wraps","icon":"inv_gauntlets_32","type":7,"armorType":1,"stats":[0,0,18,14,0,14,0,9,0,0,0,0,9,0,0,0,0,0,0,0,66,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":60,"phase":1,"quality":4,"setName":"Deathmist Raiment"}, {"id":22078,"name":"Virtuous Belt","icon":"inv_belt_10","type":8,"armorType":1,"stats":[0,0,12,13,12,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"setName":"Vestments of the Virtuous"}, -{"id":22079,"name":"Virtuous Bracers","icon":"inv_belt_31","type":6,"armorType":1,"stats":[0,0,8,8,8,9,3,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"setName":"Vestments of the Virtuous"}, +{"id":22079,"name":"Virtuous Bracers","icon":"inv_belt_31","type":6,"armorType":1,"stats":[0,0,8,8,8,9,3,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"classAllowlist":[5],"setName":"Vestments of the Virtuous"}, {"id":22080,"name":"Virtuous Crown","icon":"inv_crown_01","type":1,"armorType":1,"stats":[0,0,16,17,16,11,8,0,0,0,0,0,0,0,0,0,0,0,0,0,86,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":60,"phase":1,"quality":4,"setName":"Vestments of the Virtuous"}, {"id":22081,"name":"Virtuous Gloves","icon":"inv_gauntlets_14","type":7,"armorType":1,"stats":[0,0,15,17,13,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":60,"phase":1,"quality":4,"setName":"Vestments of the Virtuous"}, {"id":22082,"name":"Virtuous Mantle","icon":"inv_shoulder_02","type":3,"armorType":1,"stats":[0,0,12,13,12,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,69,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"setName":"Vestments of the Virtuous","sources":[{"quest":{"id":9019,"name":"Anthion's Parting Words"}}]}, @@ -6835,13 +6835,13 @@ {"id":22085,"name":"Virtuous Skirt","icon":"inv_pants_08","type":9,"armorType":1,"stats":[0,0,13,14,12,16,8,0,0,0,0,0,0,0,0,0,0,0,0,0,81,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":66,"phase":1,"quality":3,"setName":"Vestments of the Virtuous"}, {"id":22086,"name":"Soulforge Belt","icon":"inv_belt_11","type":8,"armorType":4,"stats":[10,0,11,11,0,12,5,0,0,0,0,0,0,0,0,0,0,0,0,0,380,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"setName":"Soulforge Armor"}, {"id":22087,"name":"Soulforge Boots","icon":"inv_boots_plate_03","type":10,"armorType":4,"stats":[12,0,13,12,10,12,5,0,0,0,0,0,0,0,0,0,0,0,0,0,537,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":60,"phase":1,"quality":4,"setName":"Soulforge Armor"}, -{"id":22088,"name":"Soulforge Bracers","icon":"inv_bracer_14","type":6,"armorType":4,"stats":[9,0,10,9,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,296,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"setName":"Soulforge Armor"}, +{"id":22088,"name":"Soulforge Bracers","icon":"inv_bracer_14","type":6,"armorType":4,"stats":[9,0,10,9,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,296,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"classAllowlist":[4],"setName":"Soulforge Armor"}, {"id":22089,"name":"Soulforge Breastplate","icon":"inv_chest_plate03","type":5,"armorType":4,"stats":[16,0,17,17,12,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,781,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":60,"phase":1,"quality":4,"setName":"Soulforge Armor"}, {"id":22090,"name":"Soulforge Gauntlets","icon":"inv_gauntlets_19","type":7,"armorType":4,"stats":[10,0,11,11,0,12,0,0,15,0,0,0,0,15,0,0,0,0,0,0,488,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":60,"phase":1,"quality":4,"setName":"Soulforge Armor"}, {"id":22091,"name":"Soulforge Helm","icon":"inv_helmet_08","type":1,"armorType":4,"stats":[16,0,17,17,12,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,634,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":60,"phase":1,"quality":4,"setName":"Soulforge Armor"}, {"id":22092,"name":"Soulforge Legplates","icon":"inv_pants_04","type":9,"armorType":4,"stats":[16,0,17,17,10,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,601,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":66,"phase":1,"quality":3,"setName":"Soulforge Armor"}, {"id":22093,"name":"Soulforge Spaulders","icon":"inv_shoulder_10","type":3,"armorType":4,"stats":[10,0,11,11,0,12,5,0,0,0,0,0,0,0,0,0,0,0,0,0,507,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"setName":"Soulforge Armor","sources":[{"quest":{"id":8954,"name":"Anthion's Parting Words"}}]}, -{"id":22095,"name":"Bindings of The Five Thunders","icon":"inv_bracer_02","type":6,"armorType":3,"stats":[0,0,10,9,9,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,167,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"setName":"The Five Thunders"}, +{"id":22095,"name":"Bindings of The Five Thunders","icon":"inv_bracer_02","type":6,"armorType":3,"stats":[0,0,10,9,9,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,167,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"classAllowlist":[7],"setName":"The Five Thunders"}, {"id":22096,"name":"Boots of The Five Thunders","icon":"inv_boots_wolf","type":10,"armorType":3,"stats":[12,0,13,12,10,12,5,0,0,0,0,0,0,0,0,0,0,0,0,0,303,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":60,"phase":1,"quality":4,"setName":"The Five Thunders"}, {"id":22097,"name":"Coif of The Five Thunders","icon":"inv_helmet_04","type":1,"armorType":3,"stats":[0,0,22,21,12,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,359,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":60,"phase":1,"quality":4,"setName":"The Five Thunders"}, {"id":22098,"name":"Cord of The Five Thunders","icon":"inv_belt_16","type":8,"armorType":3,"stats":[10,0,11,11,0,12,5,0,0,0,0,0,0,0,0,0,0,0,0,0,214,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"setName":"The Five Thunders"}, @@ -6851,7 +6851,7 @@ {"id":22102,"name":"Vest of The Five Thunders","icon":"inv_chest_chain_11","type":5,"armorType":3,"stats":[12,0,17,17,16,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,441,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":60,"phase":1,"quality":4,"setName":"The Five Thunders"}, {"id":22106,"name":"Feralheart Belt","icon":"inv_belt_15","type":8,"armorType":2,"stats":[6,7,9,12,8,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,102,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"setName":"Feralheart Raiment"}, {"id":22107,"name":"Feralheart Boots","icon":"inv_boots_08","type":10,"armorType":2,"stats":[12,7,13,12,10,11,3,0,0,0,0,0,0,0,0,0,0,0,0,0,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":60,"phase":1,"quality":4,"setName":"Feralheart Raiment"}, -{"id":22108,"name":"Feralheart Bracers","icon":"inv_bracer_09","type":6,"armorType":2,"stats":[6,6,6,12,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,79,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"setName":"Feralheart Raiment"}, +{"id":22108,"name":"Feralheart Bracers","icon":"inv_bracer_09","type":6,"armorType":2,"stats":[6,6,6,12,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,79,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"classAllowlist":[1],"setName":"Feralheart Raiment"}, {"id":22109,"name":"Feralheart Cowl","icon":"inv_helmet_27","type":1,"armorType":2,"stats":[14,9,17,17,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":60,"phase":1,"quality":4,"setName":"Feralheart Raiment"}, {"id":22110,"name":"Feralheart Gloves","icon":"inv_gauntlets_17","type":7,"armorType":2,"stats":[11,10,11,13,11,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":60,"phase":1,"quality":4,"setName":"Feralheart Raiment"}, {"id":22111,"name":"Feralheart Kilt","icon":"inv_pants_08","type":9,"armorType":2,"stats":[14,12,14,14,14,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":66,"phase":1,"quality":3,"setName":"Feralheart Raiment"}, @@ -6891,8 +6891,8 @@ {"id":22269,"name":"Shadow Prowler's Cloak","icon":"inv_misc_cape_20","type":4,"stats":[0,17,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":63,"phase":1,"quality":3,"expansion":1,"sources":[{"drop":{"difficulty":1,"npcId":10363,"zoneId":1583}}]}, {"id":22270,"name":"Entrenching Boots","icon":"inv_boots_plate_02","type":10,"armorType":4,"stats":[11,10,10,0,0,0,0,8,0,0,0,0,8,0,0,0,0,0,0,0,397,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":55,"phase":1,"quality":3,"expansion":1,"sources":[{"drop":{"difficulty":1,"npcId":9028,"zoneId":1584}}]}, {"id":22271,"name":"Leggings of Frenzied Magic","icon":"inv_pants_leather_21","type":9,"armorType":2,"stats":[0,0,15,15,0,16,6,0,0,0,0,0,0,0,0,0,0,0,0,0,142,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":57,"phase":1,"quality":3,"expansion":1,"sources":[{"drop":{"difficulty":1,"npcId":9027,"zoneId":1584}}]}, -{"id":22272,"name":"Forest's Embrace","icon":"inv_chest_leather_08","type":5,"armorType":2,"stats":[0,0,0,8,7,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,151,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"sources":[{"quest":{"id":9053,"name":"A Better Ingredient"}}]}, -{"id":22274,"name":"Grizzled Pelt","icon":"inv_chest_leather_08","type":5,"armorType":2,"stats":[17,16,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,151,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"sources":[{"quest":{"id":9053,"name":"A Better Ingredient"}}]}, +{"id":22272,"name":"Forest's Embrace","icon":"inv_chest_leather_08","type":5,"armorType":2,"stats":[0,0,0,8,7,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,151,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"classAllowlist":[1],"sources":[{"quest":{"id":9053,"name":"A Better Ingredient"}}]}, +{"id":22274,"name":"Grizzled Pelt","icon":"inv_chest_leather_08","type":5,"armorType":2,"stats":[17,16,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,151,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"classAllowlist":[1],"sources":[{"quest":{"id":9053,"name":"A Better Ingredient"}}]}, {"id":22275,"name":"Firemoss Boots","icon":"inv_boots_08","type":10,"armorType":2,"stats":[0,0,8,18,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":57,"phase":1,"quality":3,"expansion":1,"sources":[{"drop":{"difficulty":1,"npcId":9537,"zoneId":1584,"category":"Hurley Blackbreath"}}]}, {"id":22276,"name":"Lovely Red Dress","icon":"inv_chest_cloth_24","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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":1,"phase":1,"quality":1,"sources":[{"quest":{"id":9029,"name":"A Bubbling Cauldron"}}]}, {"id":22277,"name":"Red Dinner Suit","icon":"inv_shirt_red_01","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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":1,"phase":1,"quality":1,"sources":[{"quest":{"id":9029,"name":"A Bubbling Cauldron"}}]}, @@ -6962,17 +6962,17 @@ {"id":22410,"name":"Gauntlets of Deftness","icon":"inv_gauntlets_11","type":7,"armorType":3,"stats":[0,23,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,231,0,0,0,0,0,0,0,0,0,0,0,0,0,80],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":63,"phase":1,"quality":3,"expansion":1,"sources":[{"drop":{"difficulty":1,"npcId":10440,"zoneId":2017}}]}, {"id":22411,"name":"Helm of the Executioner","icon":"inv_helmet_01","type":1,"armorType":4,"stats":[14,0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,534,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":63,"phase":1,"quality":3,"expansion":1,"sources":[{"drop":{"difficulty":1,"npcId":10440,"zoneId":2017}}]}, {"id":22412,"name":"Thuzadin Mantle","icon":"inv_shoulder_02","type":3,"armorType":1,"stats":[0,0,11,18,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":63,"phase":1,"quality":3,"expansion":1,"sources":[{"drop":{"difficulty":1,"npcId":10440,"zoneId":2017}}]}, -{"id":22420,"name":"Dreadnaught Sabatons","icon":"inv_boots_plate_06","type":10,"armorType":4,"stats":[15,0,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,756,0,13,0,0,12,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":86,"phase":1,"quality":4,"setName":"Dreadnaught's Battlegear","sources":[{"quest":{"id":9039,"name":"Dreadnaught Sabatons"}}]}, -{"id":22422,"name":"Dreadnaught Waistguard","icon":"inv_belt_27","type":8,"armorType":4,"stats":[20,0,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,632,0,13,0,36,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":88,"phase":1,"quality":4,"setName":"Dreadnaught's Battlegear","sources":[{"quest":{"id":9041,"name":"Dreadnaught Waistguard"}}]}, -{"id":22423,"name":"Dreadnaught Bracers","icon":"inv_bracer_15","type":6,"armorType":4,"stats":[14,0,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,492,0,7,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":88,"phase":1,"quality":4,"setName":"Dreadnaught's Battlegear","sources":[{"quest":{"id":9042,"name":"Dreadnaught Bracers"}}]}, +{"id":22420,"name":"Dreadnaught Sabatons","icon":"inv_boots_plate_06","type":10,"armorType":4,"stats":[15,0,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,756,0,13,0,0,12,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":86,"phase":1,"quality":4,"classAllowlist":[9],"setName":"Dreadnaught's Battlegear","sources":[{"quest":{"id":9039,"name":"Dreadnaught Sabatons"}}]}, +{"id":22422,"name":"Dreadnaught Waistguard","icon":"inv_belt_27","type":8,"armorType":4,"stats":[20,0,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,632,0,13,0,36,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":88,"phase":1,"quality":4,"classAllowlist":[9],"setName":"Dreadnaught's Battlegear","sources":[{"quest":{"id":9041,"name":"Dreadnaught Waistguard"}}]}, +{"id":22423,"name":"Dreadnaught Bracers","icon":"inv_bracer_15","type":6,"armorType":4,"stats":[14,0,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,492,0,7,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":88,"phase":1,"quality":4,"classAllowlist":[9],"setName":"Dreadnaught's Battlegear","sources":[{"quest":{"id":9042,"name":"Dreadnaught Bracers"}}]}, {"id":22424,"name":"Redemption Wristguards","icon":"inv_bracer_02","type":6,"armorType":4,"stats":[0,0,22,15,0,16,5,0,0,0,0,0,0,0,0,0,0,0,0,0,492,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":88,"phase":1,"quality":4,"setName":"Redemption Armor","sources":[{"quest":{"id":9050,"name":"Redemption Wristguards"}}]}, {"id":22430,"name":"Redemption Boots","icon":"inv_boots_chain_05","type":10,"armorType":4,"stats":[0,0,22,18,0,22,6,0,0,0,0,0,0,0,0,0,0,0,0,0,756,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":86,"phase":1,"quality":4,"setName":"Redemption Armor","sources":[{"quest":{"id":9047,"name":"Redemption Boots"}}]}, {"id":22431,"name":"Redemption Girdle","icon":"inv_belt_22","type":8,"armorType":4,"stats":[0,0,19,29,0,21,6,0,0,0,0,0,0,0,0,0,0,0,0,0,632,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":88,"phase":1,"quality":4,"setName":"Redemption Armor","sources":[{"quest":{"id":9049,"name":"Redemption Girdle"}}]}, {"id":22433,"name":"Don Mauricio's Band of Domination","icon":"inv_jewelry_ring_16","type":11,"stats":[0,0,5,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":63,"phase":1,"quality":3,"unique":true,"expansion":1,"sources":[{"drop":{"difficulty":1,"npcId":1853,"zoneId":2057}}]}, -{"id":22440,"name":"Cryptstalker Boots","icon":"inv_boots_chain_05","type":10,"armorType":3,"stats":[0,22,19,8,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,425,44,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":86,"phase":1,"quality":4,"setName":"Cryptstalker Armor","sources":[{"quest":{"id":9058,"name":"Cryptstalker Boots"}}]}, -{"id":22442,"name":"Cryptstalker Girdle","icon":"inv_belt_22","type":8,"armorType":3,"stats":[0,16,22,12,0,0,4,0,0,0,0,30,0,0,0,0,0,0,0,0,355,30,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":88,"phase":1,"quality":4,"setName":"Cryptstalker Armor","sources":[{"quest":{"id":9060,"name":"Cryptstalker Girdle"}}]}, -{"id":22443,"name":"Cryptstalker Wristguards","icon":"inv_bracer_02","type":6,"armorType":3,"stats":[0,18,16,0,0,0,0,0,0,0,0,34,0,0,0,0,0,0,0,0,276,34,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":88,"phase":1,"quality":4,"setName":"Cryptstalker Armor","sources":[{"quest":{"id":9061,"name":"Cryptstalker Wristguards"}}]}, -{"id":22458,"name":"Moonshadow Stave","icon":"inv_staff_28","type":13,"weaponType":8,"handType":4,"stats":[0,0,0,0,0,18,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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":133,"weaponDamageMax":200,"weaponSpeed":3.7,"ilvl":52,"phase":1,"quality":3,"sources":[{"quest":{"id":9053,"name":"A Better Ingredient"}}]}, +{"id":22440,"name":"Cryptstalker Boots","icon":"inv_boots_chain_05","type":10,"armorType":3,"stats":[0,22,19,8,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,425,44,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":86,"phase":1,"quality":4,"classAllowlist":[2],"setName":"Cryptstalker Armor","sources":[{"quest":{"id":9058,"name":"Cryptstalker Boots"}}]}, +{"id":22442,"name":"Cryptstalker Girdle","icon":"inv_belt_22","type":8,"armorType":3,"stats":[0,16,22,12,0,0,4,0,0,0,0,30,0,0,0,0,0,0,0,0,355,30,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":88,"phase":1,"quality":4,"classAllowlist":[2],"setName":"Cryptstalker Armor","sources":[{"quest":{"id":9060,"name":"Cryptstalker Girdle"}}]}, +{"id":22443,"name":"Cryptstalker Wristguards","icon":"inv_bracer_02","type":6,"armorType":3,"stats":[0,18,16,0,0,0,0,0,0,0,0,34,0,0,0,0,0,0,0,0,276,34,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":88,"phase":1,"quality":4,"classAllowlist":[2],"setName":"Cryptstalker Armor","sources":[{"quest":{"id":9061,"name":"Cryptstalker Wristguards"}}]}, +{"id":22458,"name":"Moonshadow Stave","icon":"inv_staff_28","type":13,"weaponType":8,"handType":4,"stats":[0,0,0,0,0,18,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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":133,"weaponDamageMax":200,"weaponSpeed":3.7,"ilvl":52,"phase":1,"quality":3,"classAllowlist":[1],"sources":[{"quest":{"id":9053,"name":"A Better Ingredient"}}]}, {"id":22468,"name":"Earthshatter Boots","icon":"inv_boots_chain_05","type":10,"armorType":3,"stats":[0,0,20,25,0,20,8,0,0,0,0,0,0,0,0,0,0,0,0,0,425,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":86,"phase":1,"quality":4,"setName":"The Earthshatterer","sources":[{"quest":{"id":9072,"name":"Earthshatter Boots"}}]}, {"id":22470,"name":"Earthshatter Girdle","icon":"inv_belt_22","type":8,"armorType":3,"stats":[0,0,18,25,0,22,9,0,0,0,0,0,0,0,0,0,0,0,0,0,355,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":88,"phase":1,"quality":4,"setName":"The Earthshatterer","sources":[{"quest":{"id":9074,"name":"Earthshatter Girdle"}}]}, {"id":22471,"name":"Earthshatter Wristguards","icon":"inv_bracer_02","type":6,"armorType":3,"stats":[0,0,17,18,0,18,5,0,0,0,0,0,0,0,0,0,0,0,0,0,276,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":88,"phase":1,"quality":4,"setName":"The Earthshatterer","sources":[{"quest":{"id":9075,"name":"Earthshatter Wristguards"}}]}, @@ -6987,12 +6987,12 @@ {"id":22500,"name":"Frostfire Sandals","icon":"inv_boots_fabric_01","type":10,"armorType":1,"stats":[0,0,17,18,10,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,102,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":86,"phase":1,"quality":4,"setName":"Frostfire Regalia","sources":[{"quest":{"id":9099,"name":"Frostfire Sandals"}}]}, {"id":22502,"name":"Frostfire Belt","icon":"inv_belt_03","type":8,"armorType":1,"stats":[0,0,19,21,10,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":88,"phase":1,"quality":4,"setName":"Frostfire Regalia","sources":[{"quest":{"id":9101,"name":"Frostfire Belt"}}]}, {"id":22503,"name":"Frostfire Bindings","icon":"inv_bracer_13","type":6,"armorType":1,"stats":[0,0,14,15,0,27,0,0,0,0,10,0,0,0,0,0,0,0,0,0,66,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":88,"phase":1,"quality":4,"setName":"Frostfire Regalia","sources":[{"quest":{"id":9102,"name":"Frostfire Bindings"}}]}, -{"id":22508,"name":"Plagueheart Sandals","icon":"inv_boots_fabric_01","type":10,"armorType":1,"stats":[0,0,20,16,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,102,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":86,"phase":1,"quality":4,"setName":"Plagueheart Raiment","sources":[{"quest":{"id":9107,"name":"Plagueheart Sandals"}}]}, +{"id":22508,"name":"Plagueheart Sandals","icon":"inv_boots_fabric_01","type":10,"armorType":1,"stats":[0,0,20,16,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,102,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":86,"phase":1,"quality":4,"classAllowlist":[8],"setName":"Plagueheart Raiment","sources":[{"quest":{"id":9107,"name":"Plagueheart Sandals"}}]}, {"id":22510,"name":"Plagueheart Belt","icon":"inv_belt_03","type":8,"armorType":1,"stats":[0,0,23,12,0,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":88,"phase":1,"quality":4,"setName":"Plagueheart Raiment","sources":[{"quest":{"id":9109,"name":"Plagueheart Belt"}}]}, {"id":22511,"name":"Plagueheart Bindings","icon":"inv_bracer_13","type":6,"armorType":1,"stats":[0,0,23,14,0,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":88,"phase":1,"quality":4,"setName":"Plagueheart Raiment","sources":[{"quest":{"id":9110,"name":"Plagueheart Bindings"}}]}, -{"id":22516,"name":"Sandals of Faith","icon":"inv_boots_fabric_01","type":10,"armorType":1,"stats":[0,0,19,22,13,23,8,0,0,0,0,0,0,0,0,0,0,0,0,0,102,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":86,"phase":1,"quality":4,"setName":"Vestments of Faith","sources":[{"quest":{"id":9115,"name":"Sandals of Faith"}}]}, -{"id":22518,"name":"Belt of Faith","icon":"inv_belt_08","type":8,"armorType":1,"stats":[0,0,18,23,17,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":88,"phase":1,"quality":4,"setName":"Vestments of Faith","sources":[{"quest":{"id":9117,"name":"Belt of Faith"}}]}, -{"id":22519,"name":"Bindings of Faith","icon":"inv_bracer_13","type":6,"armorType":1,"stats":[0,0,11,15,17,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":88,"phase":1,"quality":4,"setName":"Vestments of Faith","sources":[{"quest":{"id":9118,"name":"Bindings of Faith"}}]}, +{"id":22516,"name":"Sandals of Faith","icon":"inv_boots_fabric_01","type":10,"armorType":1,"stats":[0,0,19,22,13,23,8,0,0,0,0,0,0,0,0,0,0,0,0,0,102,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":86,"phase":1,"quality":4,"classAllowlist":[5],"setName":"Vestments of Faith","sources":[{"quest":{"id":9115,"name":"Sandals of Faith"}}]}, +{"id":22518,"name":"Belt of Faith","icon":"inv_belt_08","type":8,"armorType":1,"stats":[0,0,18,23,17,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":88,"phase":1,"quality":4,"classAllowlist":[5],"setName":"Vestments of Faith","sources":[{"quest":{"id":9117,"name":"Belt of Faith"}}]}, +{"id":22519,"name":"Bindings of Faith","icon":"inv_bracer_13","type":6,"armorType":1,"stats":[0,0,11,15,17,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":88,"phase":1,"quality":4,"classAllowlist":[5],"setName":"Vestments of Faith","sources":[{"quest":{"id":9118,"name":"Bindings of Faith"}}]}, {"id":22589,"name":"Atiesh, Greatstaff of the Guardian","icon":"inv_staff_medivh","type":13,"weaponType":8,"handType":4,"stats":[0,0,31,32,24,150,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":130,"weaponDamageMax":243,"weaponSpeed":2.9,"ilvl":90,"phase":1,"quality":5,"classAllowlist":[3],"sources":[{"quest":{"id":9270,"name":"Atiesh, Greatstaff of the Guardian"}}]}, {"id":22630,"name":"Atiesh, Greatstaff of the Guardian","icon":"inv_staff_medivh","type":13,"weaponType":8,"handType":4,"stats":[0,0,30,29,0,150,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":130,"weaponDamageMax":243,"weaponSpeed":2.9,"ilvl":90,"phase":1,"quality":5,"classAllowlist":[8],"sources":[{"quest":{"id":9271,"name":"Atiesh, Greatstaff of the Guardian"}}]}, {"id":22631,"name":"Atiesh, Greatstaff of the Guardian","icon":"inv_staff_medivh","type":13,"weaponType":8,"handType":4,"stats":[0,0,28,28,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":130,"weaponDamageMax":243,"weaponSpeed":2.9,"ilvl":90,"phase":1,"quality":5,"classAllowlist":[5],"sources":[{"quest":{"id":9257,"name":"Atiesh, Greatstaff of the Guardian"}}]}, @@ -7787,7 +7787,7 @@ {"id":25407,"name":"The Movable Object","icon":"inv_shield_09","type":13,"weaponType":7,"handType":3,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1842,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":69,"phase":1}, {"id":25438,"name":"Malachite Pendant","icon":"inv_jewelry_necklace_01","type":2,"stats":[0,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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":18,"phase":1,"quality":2,"expansion":2,"sources":[{"crafted":{"profession":7,"spellId":32178}}]}, {"id":25439,"name":"Tigerseye Band","icon":"inv_jewelry_ring_21","type":11,"stats":[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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":18,"phase":1,"quality":2,"unique":true,"expansion":2,"sources":[{"crafted":{"profession":7,"spellId":32179}}]}, -{"id":25464,"name":"Blood-Tempered Ranseur","icon":"inv_spear_10","type":13,"weaponType":6,"handType":4,"stats":[8,0,8,0,0,0,0,0,7,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":60,"weaponDamageMax":91,"weaponSpeed":3.4,"ilvl":27,"phase":1,"quality":3,"sources":[{"quest":{"id":9710,"name":"The Blood-Tempered Ranseur"}}]}, +{"id":25464,"name":"Blood-Tempered Ranseur","icon":"inv_spear_10","type":13,"weaponType":6,"handType":4,"stats":[8,0,8,0,0,0,0,0,7,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":60,"weaponDamageMax":91,"weaponSpeed":3.4,"ilvl":27,"phase":1,"quality":3,"classAllowlist":[4],"sources":[{"quest":{"id":9710,"name":"The Blood-Tempered Ranseur"}}]}, {"id":25478,"name":"Defender's Gauntlets","icon":"inv_gauntlets_31","type":7,"armorType":4,"stats":[17,16,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,540,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":93,"phase":1,"quality":2,"sources":[{"quest":{"id":9490,"name":"The Rock Flayer Matriarch"}}]}, {"id":25479,"name":"Boots of the Earthcaller","icon":"inv_boots_chain_06","type":10,"armorType":3,"stats":[0,0,25,17,0,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,333,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":93,"phase":1,"quality":2,"sources":[{"quest":{"id":9490,"name":"The Rock Flayer Matriarch"}}]}, {"id":25480,"name":"Wastewalker's Sash","icon":"inv_belt_10","type":8,"armorType":1,"stats":[0,0,18,17,11,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":93,"phase":1,"quality":2,"sources":[{"quest":{"id":9490,"name":"The Rock Flayer Matriarch"}}]}, @@ -8036,7 +8036,7 @@ {"id":25875,"name":"Deadly Throwing Axe","icon":"inv_throwingaxe_05","type":14,"rangedWeaponType":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,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":23,"weaponDamageMax":44,"weaponSpeed":2,"ilvl":27,"phase":1,"quality":1}, {"id":25876,"name":"Gleaming Throwing Axe","icon":"inv_throwingaxe_06","type":14,"rangedWeaponType":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,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":33,"weaponDamageMax":63,"weaponSpeed":1.8,"ilvl":40,"phase":1,"quality":1}, {"id":25877,"name":"Master's Throwing Dagger","icon":"inv_throwingknife_03","type":14,"rangedWeaponType":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,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":73,"weaponDamageMax":137,"weaponSpeed":2.2,"ilvl":65,"phase":1,"quality":1}, -{"id":25878,"name":"Dusksteel Throwing Knife","icon":"inv_throwingknife_03","type":14,"rangedWeaponType":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,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":50,"weaponDamageMax":95,"weaponSpeed":1.8,"ilvl":52,"phase":1,"quality":2,"unique":true,"sources":[{"quest":{"id":8249,"name":"Junkboxes Needed"}}]}, +{"id":25878,"name":"Dusksteel Throwing Knife","icon":"inv_throwingknife_03","type":14,"rangedWeaponType":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,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":50,"weaponDamageMax":95,"weaponSpeed":1.8,"ilvl":52,"phase":1,"quality":2,"unique":true,"classAllowlist":[6],"sources":[{"quest":{"id":8249,"name":"Junkboxes Needed"}}]}, {"id":25913,"name":"Ring of the Slain Anchorite","icon":"inv_jewelry_ring_35","type":11,"stats":[0,0,0,12,0,15,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":93,"phase":1,"quality":2,"unique":true,"sources":[{"quest":{"id":9387,"name":"Source of the Corruption"}}]}, {"id":25914,"name":"Broken Choker","icon":"inv_jewelry_necklace_03","type":2,"stats":[13,0,18,0,0,0,0,12,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":93,"phase":1,"quality":2,"sources":[{"quest":{"id":9387,"name":"Source of the Corruption"}}]}, {"id":25915,"name":"Fallen Vindicator's Blade","icon":"inv_sword_27","type":13,"weaponType":9,"handType":1,"stats":[0,0,13,10,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":68,"weaponDamageMax":127,"weaponSpeed":2,"ilvl":93,"phase":1,"quality":2,"unique":true,"sources":[{"quest":{"id":9387,"name":"Source of the Corruption"}}]}, @@ -10019,7 +10019,7 @@ {"id":30497,"name":"Sentinel's Mail Leggings","icon":"inv_pants_03","type":9,"armorType":3,"stats":[14,0,22,22,0,0,8,0,21,0,0,0,0,21,0,0,0,0,0,0,415,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":4,"sources":[{"soldBy":{"npcId":14753,"npcName":"Illiyana Moonblaze","zoneId":331}}]}, {"id":30498,"name":"Outrider's Lamellar Legguards","icon":"inv_pants_plate_15","type":9,"armorType":4,"stats":[21,0,21,0,0,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,737,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":4,"sources":[{"soldBy":{"npcId":14754,"npcName":"Kelm Hargunth","zoneId":17}}]}, {"id":30504,"name":"Leafblade Dagger","icon":"inv_weapon_shortblade_26","type":13,"weaponType":2,"handType":2,"stats":[0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":12,"weaponDamageMax":24,"weaponSpeed":1.9,"ilvl":19,"phase":1,"quality":2,"unique":true,"classAllowlist":[6],"sources":[{"quest":{"id":10548,"name":"The Sad Truth"}}]}, -{"id":30505,"name":"Ghostclaw Tunic","icon":"inv_shirt_green_01","type":5,"armorType":2,"stats":[0,5,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":19,"phase":1,"quality":2,"sources":[{"quest":{"id":10548,"name":"The Sad Truth"}}]}, +{"id":30505,"name":"Ghostclaw Tunic","icon":"inv_shirt_green_01","type":5,"armorType":2,"stats":[0,5,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":19,"phase":1,"quality":2,"classAllowlist":[6],"sources":[{"quest":{"id":10548,"name":"The Sad Truth"}}]}, {"id":30514,"name":"Nether Guards","icon":"inv_shoulder_23","type":3,"armorType":1,"stats":[0,0,24,11,0,33,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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":108,"phase":1,"quality":2,"sources":[{"quest":{"id":10221,"name":"Dr. Boom!"}}]}, {"id":30515,"name":"Junior Technician 3rd Grade Goggles","icon":"inv_helmet_47","type":1,"armorType":1,"stats":[0,0,21,15,14,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":108,"phase":1,"quality":2,"sources":[{"quest":{"id":10186,"name":"You're Hired!"}}]}, {"id":30516,"name":"Chief Engineer's Belt","icon":"inv_misc_bandana_01","type":8,"armorType":1,"stats":[0,0,16,11,10,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,75,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":108,"phase":1,"quality":2,"sources":[{"quest":{"id":10226,"name":"Elemental Power Extraction"}}]}, @@ -10061,7 +10061,7 @@ {"id":30668,"name":"Grasp of the Dead","icon":"inv_gauntlets_17","type":7,"armorType":1,"stats":[0,0,0,24,21,37,0,17,0,0,0,0,17,0,0,0,0,0,0,0,121,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":115,"phase":1,"quality":4,"expansion":2,"sources":[{"drop":{"difficulty":1,"zoneId":3457,"otherName":"Trash"}}]}, {"id":30673,"name":"Inferno Waist Cord","icon":"inv_belt_03","type":8,"armorType":1,"stats":[0,0,0,18,0,49,0,0,24,0,0,0,0,24,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":115,"phase":1,"quality":4,"expansion":2,"sources":[{"drop":{"difficulty":1,"zoneId":3457,"otherName":"Trash"}}]}, {"id":30674,"name":"Zierhut's Lost Treads","icon":"inv_boots_plate_06","type":10,"armorType":2,"stats":[34,28,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,250,0,0,0,0,10,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":115,"phase":1,"quality":4,"expansion":2,"sources":[{"drop":{"difficulty":1,"zoneId":3457,"otherName":"Trash"}}]}, -{"id":30696,"name":"Scourgebane","icon":"inv_misc_rune_10","type":12,"stats":[0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"sources":[{"quest":{"id":10593,"name":"Ancient Evil"}}]}, +{"id":30696,"name":"Scourgebane","icon":"inv_misc_rune_10","type":12,"stats":[0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":52,"phase":1,"quality":3,"classAllowlist":[4],"sources":[{"quest":{"id":10593,"name":"Ancient Evil"}}]}, {"id":30705,"name":"Spaulders of Slaughter","icon":"inv_shoulder_26","type":3,"armorType":4,"stats":[30,0,22,0,0,0,0,0,27,0,0,0,0,27,0,0,0,0,0,0,873,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":115,"phase":1,"quality":3,"expansion":2,"sources":[{"drop":{"difficulty":2,"npcId":20923,"zoneId":3714}}]}, {"id":30707,"name":"Nimble-foot Treads","icon":"inv_boots_05","type":10,"armorType":2,"stats":[0,32,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,201,0,0,0,0,25,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":115,"phase":1,"quality":3,"expansion":2,"sources":[{"drop":{"difficulty":2,"npcId":20923,"zoneId":3714}}]}, {"id":30708,"name":"Belt of Flowing Thought","icon":"inv_belt_03","type":8,"armorType":3,"stats":[0,0,0,32,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,367,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":115,"phase":1,"quality":3,"expansion":2,"sources":[{"drop":{"difficulty":2,"npcId":20923,"zoneId":3714}}]}, @@ -10762,7 +10762,7 @@ {"id":32478,"name":"Deathblow X11 Goggles","icon":"inv_gizmo_newgoggles","type":1,"armorType":2,"stats":[0,48,28,0,0,0,0,11,0,0,0,76,11,0,0,0,0,0,0,0,326,76,0,0,0,0,0,0,0,0,0,0,0,0,0],"gemSockets":[1,3],"socketBonus":[0,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],"ilvl":127,"phase":1,"quality":4,"expansion":2,"sources":[{"crafted":{"profession":4,"spellId":41317}}]}, {"id":32479,"name":"Wonderheal XT40 Shades","icon":"inv_gizmo_newgoggles","type":1,"armorType":2,"stats":[0,0,15,38,22,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,326,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"gemSockets":[1,3],"socketBonus":[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,0],"ilvl":127,"phase":1,"quality":4,"expansion":2,"sources":[{"crafted":{"profession":4,"spellId":41318}}]}, {"id":32480,"name":"Magnified Moon Specs","icon":"inv_gizmo_newgoggles","type":1,"armorType":2,"stats":[0,0,22,24,0,50,0,0,41,0,0,0,0,41,0,0,0,0,0,0,326,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"gemSockets":[1,3],"socketBonus":[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,0],"ilvl":127,"phase":1,"quality":4,"classAllowlist":[1],"expansion":2,"sources":[{"crafted":{"profession":4,"spellId":41319}}]}, -{"id":32481,"name":"Charm of Swift Flight","icon":"spell_nature_giftofthewaterspirit","type":12,"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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":3,"unique":true,"sources":[{"quest":{"id":10992,"name":"The Hawk's Essence"}}]}, +{"id":32481,"name":"Charm of Swift Flight","icon":"spell_nature_giftofthewaterspirit","type":12,"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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":3,"unique":true,"classAllowlist":[1],"sources":[{"quest":{"id":10992,"name":"The Hawk's Essence"}}]}, {"id":32482,"name":"Touch of Victory","icon":"inv_wand_09","type":14,"rangedWeaponType":8,"stats":[0,0,18,13,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":231,"weaponDamageMax":429,"weaponSpeed":1.9,"ilvl":130,"phase":1,"quality":4}, {"id":32494,"name":"Destruction Holo-gogs","icon":"inv_gizmo_newgoggles","type":1,"armorType":1,"stats":[0,0,22,24,0,64,0,0,29,0,0,0,0,29,0,0,0,0,0,0,174,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"gemSockets":[1,3],"socketBonus":[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,0],"ilvl":127,"phase":1,"quality":4,"classAllowlist":[3,5,8],"expansion":2,"sources":[{"crafted":{"profession":4,"spellId":41320}}]}, {"id":32495,"name":"Powerheal 4000 Lens","icon":"inv_gizmo_newgoggles","type":1,"armorType":1,"stats":[0,0,14,38,28,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0,174,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"gemSockets":[1,3],"socketBonus":[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,0],"ilvl":127,"phase":1,"quality":4,"expansion":2,"sources":[{"crafted":{"profession":4,"spellId":41321}}]}, @@ -12146,8 +12146,8 @@ {"id":38579,"name":"Venomous Tome","icon":"inv_misc_book_11","type":13,"weaponType":5,"handType":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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":25,"phase":1,"quality":2,"sources":[{"soldBy":{"npcId":28347,"npcName":"Miles Sidney","zoneId":1519}}]}, {"id":38588,"name":"Medallion of the Horde","icon":"inv_jewelry_trinketpvp_02","type":12,"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,20,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":115,"phase":1,"quality":3,"unique":true,"classAllowlist":[10],"factionRestriction":2}, {"id":38589,"name":"Medallion of the Alliance","icon":"inv_jewelry_trinketpvp_01","type":12,"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,20,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":115,"phase":1,"quality":3,"unique":true,"classAllowlist":[10],"factionRestriction":1}, -{"id":38632,"name":"Greatsword of the Ebon Blade","icon":"inv_sword_126","type":13,"weaponType":9,"handType":4,"stats":[30,0,24,0,0,0,0,12,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":164,"weaponDamageMax":247,"weaponSpeed":3.4,"ilvl":70,"phase":1,"quality":3,"sources":[{"quest":{"id":12801,"name":"The Light of Dawn"}}]}, -{"id":38633,"name":"Greataxe of the Ebon Blade","icon":"inv_axe_95","type":13,"weaponType":1,"handType":4,"stats":[22,0,30,0,0,0,0,0,21,0,0,0,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":164,"weaponDamageMax":247,"weaponSpeed":3.4,"ilvl":70,"phase":1,"quality":3,"sources":[{"quest":{"id":12801,"name":"The Light of Dawn"}}]}, +{"id":38632,"name":"Greatsword of the Ebon Blade","icon":"inv_sword_126","type":13,"weaponType":9,"handType":4,"stats":[30,0,24,0,0,0,0,12,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":164,"weaponDamageMax":247,"weaponSpeed":3.4,"ilvl":70,"phase":1,"quality":3,"classAllowlist":[10],"sources":[{"quest":{"id":12801,"name":"The Light of Dawn"}}]}, +{"id":38633,"name":"Greataxe of the Ebon Blade","icon":"inv_axe_95","type":13,"weaponType":1,"handType":4,"stats":[22,0,30,0,0,0,0,0,21,0,0,0,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":164,"weaponDamageMax":247,"weaponSpeed":3.4,"ilvl":70,"phase":1,"quality":3,"classAllowlist":[10],"sources":[{"quest":{"id":12801,"name":"The Light of Dawn"}}]}, {"id":38645,"name":"Bone-Plated Armor","icon":"inv_chest_plate04","type":5,"armorType":4,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,456,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":50,"quality":1,"sources":[{"soldBy":{"npcId":28500,"npcName":"Master Siegesmith Corvus"}}]}, {"id":38646,"name":"Bone-Plated Belt","icon":"inv_belt_15","type":8,"armorType":4,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,257,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":50,"quality":1,"sources":[{"soldBy":{"npcId":28500,"npcName":"Master Siegesmith Corvus"}}]}, {"id":38647,"name":"Bone-Plated Boots","icon":"inv_boots_plate_08","type":10,"armorType":4,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,314,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":50,"quality":1,"sources":[{"soldBy":{"npcId":28500,"npcName":"Master Siegesmith Corvus"}}]}, @@ -12155,24 +12155,24 @@ {"id":38649,"name":"Bone-Plated Gloves","icon":"inv_gauntlets_29","type":7,"armorType":4,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,285,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":50,"quality":1,"sources":[{"soldBy":{"npcId":28500,"npcName":"Master Siegesmith Corvus"}}]}, {"id":38650,"name":"Bone-Plated Helm","icon":"inv_helmet_03","type":1,"armorType":4,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,371,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":50,"quality":1,"sources":[{"soldBy":{"npcId":28500,"npcName":"Master Siegesmith Corvus"}}]}, {"id":38651,"name":"Bone-Plated Leggings","icon":"inv_pants_04","type":9,"armorType":4,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,399,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":50,"quality":1,"sources":[{"soldBy":{"npcId":28500,"npcName":"Master Siegesmith Corvus"}}]}, -{"id":38661,"name":"Greathelm of the Scourge Champion","icon":"inv_helmet_06","type":1,"armorType":4,"stats":[27,0,19,0,0,0,0,0,20,0,0,0,0,20,0,0,0,0,0,0,590,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":3,"sources":[{"quest":{"id":12779,"name":"An End To All Things..."}}]}, -{"id":38662,"name":"Bladed Ebon Amulet","icon":"inv_jewelry_necklace_17","type":2,"stats":[16,0,18,0,0,0,0,7,0,0,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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":3,"sources":[{"quest":{"id":12657,"name":"The Might Of The Scourge"}}]}, -{"id":38663,"name":"Blood-soaked Saronite Plated Spaulders","icon":"inv_shoulder_78","type":3,"armorType":4,"stats":[23,0,15,0,0,0,0,10,0,0,0,0,10,0,0,0,0,0,0,0,544,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":3,"sources":[{"quest":{"id":12757,"name":"Scarlet Armies Approach..."}}]}, -{"id":38664,"name":"Sky Darkener's Shroud of the Unholy","icon":"inv_misc_cape_21","type":4,"stats":[15,0,13,0,0,0,0,0,14,0,0,0,0,14,0,0,0,0,0,0,49,0,0,0,0,0,0,0,0,0,0,0,5,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":3,"sources":[{"quest":{"id":12679,"name":"Tonight We Dine In Havenshire"}}]}, -{"id":38665,"name":"Saronite War Plate","icon":"inv_chest_plate18","type":5,"armorType":4,"stats":[29,0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,726,0,0,0,0,0,15,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":3,"sources":[{"quest":{"id":12727,"name":"Bloody Breakout"}}]}, -{"id":38666,"name":"Plated Saronite Bracers","icon":"inv_bracer_17","type":6,"armorType":4,"stats":[12,0,18,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,0,0,318,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":3,"sources":[{"quest":{"id":12701,"name":"Massacre At Light's Point"}}]}, -{"id":38667,"name":"Bloodbane's Gauntlets of Command","icon":"inv_gauntlets_71","type":7,"armorType":4,"stats":[17,15,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,454,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":3,"sources":[{"quest":{"id":12724,"name":"The Path Of The Righteous Crusader"}}]}, -{"id":38668,"name":"The Plaguebringer's Girdle","icon":"inv_belt_36","type":8,"armorType":4,"stats":[23,0,18,0,0,0,0,9,0,0,0,0,9,0,0,0,0,0,0,0,408,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":3,"sources":[{"quest":{"id":12716,"name":"The Plaguebringer's Request"}}]}, -{"id":38669,"name":"Engraved Saronite Legplates","icon":"inv_pants_cloth_27","type":9,"armorType":4,"stats":[30,16,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,635,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":3,"sources":[{"quest":{"id":12706,"name":"Victory At Death's Breach!"}}]}, -{"id":38670,"name":"Greaves of the Slaughter","icon":"inv_boots_plate_03","type":10,"armorType":4,"stats":[20,0,16,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,0,0,499,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":3,"sources":[{"quest":{"id":12722,"name":"Lambs To The Slaughter"}}]}, -{"id":38671,"name":"Valanar's Signet Ring","icon":"inv_jewelry_ring_38","type":11,"stats":[12,0,18,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":3,"sources":[{"quest":{"id":12678,"name":"If Chaos Drives, Let Suffering Hold The Reins"}}]}, -{"id":38672,"name":"Keleseth's Signet Ring","icon":"inv_jewelry_ring_56","type":11,"stats":[18,0,15,0,0,0,0,6,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":3,"sources":[{"quest":{"id":12720,"name":"How To Win Friends And Influence Enemies"}}]}, -{"id":38674,"name":"Soul Harvester's Charm","icon":"inv_crown_15","type":12,"stats":[0,0,0,0,0,0,0,0,20,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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":3,"sources":[{"quest":{"id":12698,"name":"The Gift That Keeps On Giving"}}]}, -{"id":38675,"name":"Signet of the Dark Brotherhood","icon":"inv_misc_statue_04","type":12,"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,20,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":3,"sources":[{"quest":{"id":12751,"name":"A Sort Of Homecoming"}}]}, +{"id":38661,"name":"Greathelm of the Scourge Champion","icon":"inv_helmet_06","type":1,"armorType":4,"stats":[27,0,19,0,0,0,0,0,20,0,0,0,0,20,0,0,0,0,0,0,590,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":3,"classAllowlist":[10],"sources":[{"quest":{"id":12779,"name":"An End To All Things..."}}]}, +{"id":38662,"name":"Bladed Ebon Amulet","icon":"inv_jewelry_necklace_17","type":2,"stats":[16,0,18,0,0,0,0,7,0,0,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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":3,"classAllowlist":[10],"sources":[{"quest":{"id":12657,"name":"The Might Of The Scourge"}}]}, +{"id":38663,"name":"Blood-soaked Saronite Plated Spaulders","icon":"inv_shoulder_78","type":3,"armorType":4,"stats":[23,0,15,0,0,0,0,10,0,0,0,0,10,0,0,0,0,0,0,0,544,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":3,"classAllowlist":[10],"sources":[{"quest":{"id":12757,"name":"Scarlet Armies Approach..."}}]}, +{"id":38664,"name":"Sky Darkener's Shroud of the Unholy","icon":"inv_misc_cape_21","type":4,"stats":[15,0,13,0,0,0,0,0,14,0,0,0,0,14,0,0,0,0,0,0,49,0,0,0,0,0,0,0,0,0,0,0,5,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":3,"classAllowlist":[10],"sources":[{"quest":{"id":12679,"name":"Tonight We Dine In Havenshire"}}]}, +{"id":38665,"name":"Saronite War Plate","icon":"inv_chest_plate18","type":5,"armorType":4,"stats":[29,0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,726,0,0,0,0,0,15,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":3,"classAllowlist":[10],"sources":[{"quest":{"id":12727,"name":"Bloody Breakout"}}]}, +{"id":38666,"name":"Plated Saronite Bracers","icon":"inv_bracer_17","type":6,"armorType":4,"stats":[12,0,18,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,0,0,318,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":3,"classAllowlist":[10],"sources":[{"quest":{"id":12701,"name":"Massacre At Light's Point"}}]}, +{"id":38667,"name":"Bloodbane's Gauntlets of Command","icon":"inv_gauntlets_71","type":7,"armorType":4,"stats":[17,15,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,454,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":3,"classAllowlist":[10],"sources":[{"quest":{"id":12724,"name":"The Path Of The Righteous Crusader"}}]}, +{"id":38668,"name":"The Plaguebringer's Girdle","icon":"inv_belt_36","type":8,"armorType":4,"stats":[23,0,18,0,0,0,0,9,0,0,0,0,9,0,0,0,0,0,0,0,408,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":3,"classAllowlist":[10],"sources":[{"quest":{"id":12716,"name":"The Plaguebringer's Request"}}]}, +{"id":38669,"name":"Engraved Saronite Legplates","icon":"inv_pants_cloth_27","type":9,"armorType":4,"stats":[30,16,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,635,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":3,"classAllowlist":[10],"sources":[{"quest":{"id":12706,"name":"Victory At Death's Breach!"}}]}, +{"id":38670,"name":"Greaves of the Slaughter","icon":"inv_boots_plate_03","type":10,"armorType":4,"stats":[20,0,16,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,0,0,499,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":3,"classAllowlist":[10],"sources":[{"quest":{"id":12722,"name":"Lambs To The Slaughter"}}]}, +{"id":38671,"name":"Valanar's Signet Ring","icon":"inv_jewelry_ring_38","type":11,"stats":[12,0,18,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":3,"classAllowlist":[10],"sources":[{"quest":{"id":12678,"name":"If Chaos Drives, Let Suffering Hold The Reins"}}]}, +{"id":38672,"name":"Keleseth's Signet Ring","icon":"inv_jewelry_ring_56","type":11,"stats":[18,0,15,0,0,0,0,6,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":3,"classAllowlist":[10],"sources":[{"quest":{"id":12720,"name":"How To Win Friends And Influence Enemies"}}]}, +{"id":38674,"name":"Soul Harvester's Charm","icon":"inv_crown_15","type":12,"stats":[0,0,0,0,0,0,0,0,20,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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":3,"classAllowlist":[10],"sources":[{"quest":{"id":12698,"name":"The Gift That Keeps On Giving"}}]}, +{"id":38675,"name":"Signet of the Dark Brotherhood","icon":"inv_misc_statue_04","type":12,"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,20,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":3,"classAllowlist":[10],"sources":[{"quest":{"id":12751,"name":"A Sort Of Homecoming"}}]}, {"id":38683,"name":"Sigil of the Dark Rider (OLD)","icon":"inv_misc_rune_14","type":14,"rangedWeaponType":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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":3,"unique":true}, {"id":38692,"name":"Warbranch of Cenarius","icon":"inv_staff_50","type":13,"weaponType":8,"handType":4,"stats":[0,68,68,0,0,0,0,0,0,0,0,0,0,0,0,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":313,"weaponDamageMax":470,"weaponSpeed":3.5,"ilvl":1,"phase":1,"quality":3}, {"id":38693,"name":"Tirisfal Spellblade","icon":"inv_sword_39","type":13,"weaponType":9,"handType":1,"stats":[0,0,63,75,0,343,0,0,32,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":201,"weaponDamageMax":374,"weaponSpeed":2.4,"ilvl":1,"phase":1,"quality":3}, -{"id":38707,"name":"Runed Soulblade","icon":"inv_sword_2h_blood_b_01","type":13,"weaponType":9,"handType":4,"stats":[29,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":142,"weaponDamageMax":214,"weaponSpeed":3.2,"ilvl":65,"phase":1,"quality":3,"unique":true}, +{"id":38707,"name":"Runed Soulblade","icon":"inv_sword_2h_blood_b_01","type":13,"weaponType":9,"handType":4,"stats":[29,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":142,"weaponDamageMax":214,"weaponSpeed":3.2,"ilvl":65,"phase":1,"quality":3,"unique":true,"classAllowlist":[10]}, {"id":39072,"name":"Blacksoul Protector's Hauberk","icon":"inv_chest_plate10","type":5,"armorType":4,"stats":[32,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1262,0,48,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":138,"phase":1,"quality":2,"sources":[{"quest":{"id":11319,"name":"Seeds of the Blacksouled Keepers"}}]}, {"id":39073,"name":"Root of the Everlasting","icon":"inv_wand_05","type":14,"rangedWeaponType":8,"stats":[0,0,0,18,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":174,"weaponDamageMax":324,"weaponSpeed":1.6,"ilvl":138,"phase":1,"quality":2,"sources":[{"quest":{"id":11319,"name":"Seeds of the Blacksouled Keepers"}}]}, {"id":39074,"name":"Drape of Distilled Hatred","icon":"inv_misc_cape_02","type":4,"stats":[0,0,0,0,26,20,0,0,0,18,0,0,0,0,18,0,0,0,0,0,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":138,"phase":1,"quality":2,"sources":[{"quest":{"id":11319,"name":"Seeds of the Blacksouled Keepers"}}]}, @@ -12185,8 +12185,8 @@ {"id":39147,"name":"113 Pound Swordfish","icon":"inv_misc_fish_23","type":13,"weaponType":5,"handType":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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":85,"quality":1}, {"id":39202,"name":"Rusted Pitchfork","icon":"inv_spear_04","type":13,"weaponType":6,"handType":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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":5,"weaponDamageMax":8,"weaponSpeed":2.1,"ilvl":7}, {"id":39205,"name":"Sole-Less Boots","icon":"inv_boots_07","type":10,"armorType":1,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":5}, -{"id":39320,"name":"Sky Darkener's Shroud of Blood","icon":"inv_misc_cape_08","type":4,"stats":[15,0,13,0,0,0,0,0,14,0,0,0,0,14,0,0,0,0,0,0,49,0,0,0,0,0,0,0,0,0,0,0,0,5,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":3,"sources":[{"quest":{"id":12679,"name":"Tonight We Dine In Havenshire"}}]}, -{"id":39322,"name":"Shroud of the North Wind","icon":"inv_misc_cape_05","type":4,"stats":[15,0,13,0,0,0,0,0,14,0,0,0,0,14,0,0,0,0,0,0,49,0,0,0,0,0,0,0,0,0,0,5,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":3,"sources":[{"quest":{"id":12679,"name":"Tonight We Dine In Havenshire"}}]}, +{"id":39320,"name":"Sky Darkener's Shroud of Blood","icon":"inv_misc_cape_08","type":4,"stats":[15,0,13,0,0,0,0,0,14,0,0,0,0,14,0,0,0,0,0,0,49,0,0,0,0,0,0,0,0,0,0,0,0,5,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":3,"classAllowlist":[10],"sources":[{"quest":{"id":12679,"name":"Tonight We Dine In Havenshire"}}]}, +{"id":39322,"name":"Shroud of the North Wind","icon":"inv_misc_cape_05","type":4,"stats":[15,0,13,0,0,0,0,0,14,0,0,0,0,14,0,0,0,0,0,0,49,0,0,0,0,0,0,0,0,0,0,5,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":3,"classAllowlist":[10],"sources":[{"quest":{"id":12679,"name":"Tonight We Dine In Havenshire"}}]}, {"id":39370,"name":"Keleseth's Persuader","icon":"inv_sword_2h_blood_b_01","type":13,"weaponType":9,"handType":4,"stats":[30,0,24,0,0,0,0,12,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":164,"weaponDamageMax":247,"weaponSpeed":3.4,"ilvl":70,"phase":1,"quality":3}, {"id":39371,"name":"Keleseth's Persuader","icon":"inv_sword_01","type":13,"weaponType":9,"handType":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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":35,"weaponDamageMax":66,"weaponSpeed":1.3,"ilvl":70,"quality":1}, {"id":39522,"name":"Wolvar Shortbow","icon":"inv_weapon_bow_01","type":14,"rangedWeaponType":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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":66,"weaponDamageMax":124,"weaponSpeed":2.4,"ilvl":70,"quality":1,"sources":[{"soldBy":{"npcId":29014,"npcName":"Grakjek","zoneId":3711}}]}, @@ -12218,7 +12218,7 @@ {"id":40354,"name":"Monster Slayer's Kit","icon":"inv_misc_bag_08","type":12,"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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":115,"phase":1,"quality":3,"sources":[{"quest":{"id":12616,"name":"Chamber of Secrets"}}]}, {"id":40476,"name":"Insignia of the Alliance","icon":"inv_jewelry_trinketpvp_01","type":12,"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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":60,"phase":1,"quality":3,"unique":true,"sources":[{"quest":{"id":13408,"name":"Hellfire Fortifications"}}],"factionRestriction":1}, {"id":40477,"name":"Insignia of the Horde","icon":"inv_jewelry_trinketpvp_02","type":12,"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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":60,"phase":1,"quality":3,"unique":true,"sources":[{"quest":{"id":13409,"name":"Hellfire Fortifications"}}],"factionRestriction":2}, -{"id":40483,"name":"Insignia of the Scourge","icon":"inv_jewelry_talisman_12","type":12,"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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"phase":1,"quality":3,"unique":true,"sources":[{"quest":{"id":12733,"name":"Death's Challenge"}}]}, +{"id":40483,"name":"Insignia of the Scourge","icon":"inv_jewelry_talisman_12","type":12,"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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"phase":1,"quality":3,"unique":true,"classAllowlist":[10],"sources":[{"quest":{"id":12733,"name":"Death's Challenge"}}]}, {"id":40492,"name":"Argent War Horn","icon":"inv_misc_horn_03","type":12,"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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":115,"phase":1,"quality":3}, {"id":40593,"name":"Argent Tome","icon":"inv_misc_book_13","type":12,"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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":115,"phase":1,"quality":3}, {"id":40601,"name":"Argent Dawn Banner","icon":"inv_bannerpvp_03","type":12,"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],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":115,"phase":1,"quality":3}, diff --git a/tools/database/wotlk_tooltips.go b/tools/database/wotlk_tooltips.go index 7dbf870d64..58429e3456 100644 --- a/tools/database/wotlk_tooltips.go +++ b/tools/database/wotlk_tooltips.go @@ -174,44 +174,6 @@ func (item WotlkItemResponse) GetStats() Stats { } } -var classPatternsWotlkdb = []classPattern{ - // Warrior - // Shaman - // Death Knight - {class: proto.Class_ClassWarrior, pattern: regexp.MustCompile("Warrior")}, - {class: proto.Class_ClassWarrior, pattern: regexp.MustCompile("Warrior")}, - {class: proto.Class_ClassPaladin, pattern: regexp.MustCompile("Paladin")}, - {class: proto.Class_ClassPaladin, pattern: regexp.MustCompile("Paladin")}, - {class: proto.Class_ClassHunter, pattern: regexp.MustCompile("Hunter")}, - {class: proto.Class_ClassHunter, pattern: regexp.MustCompile("Hunter")}, - {class: proto.Class_ClassRogue, pattern: regexp.MustCompile("Rogue")}, - {class: proto.Class_ClassRogue, pattern: regexp.MustCompile("Rogue")}, - {class: proto.Class_ClassPriest, pattern: regexp.MustCompile("Priest")}, - {class: proto.Class_ClassPriest, pattern: regexp.MustCompile("Priest")}, - {class: proto.Class_ClassDeathknight, pattern: regexp.MustCompile("Death Knight")}, - {class: proto.Class_ClassDeathknight, pattern: regexp.MustCompile("Death Knight")}, - {class: proto.Class_ClassShaman, pattern: regexp.MustCompile("Shaman")}, - {class: proto.Class_ClassShaman, pattern: regexp.MustCompile("Shaman")}, - {class: proto.Class_ClassMage, pattern: regexp.MustCompile("Mage")}, - {class: proto.Class_ClassMage, pattern: regexp.MustCompile("Mage")}, - {class: proto.Class_ClassWarlock, pattern: regexp.MustCompile("Warlock")}, - {class: proto.Class_ClassWarlock, pattern: regexp.MustCompile("Warlock")}, - {class: proto.Class_ClassDruid, pattern: regexp.MustCompile("Druid")}, - {class: proto.Class_ClassDruid, pattern: regexp.MustCompile("Druid")}, -} - -func (item WotlkItemResponse) GetClassAllowlist() []proto.Class { - var allowlist []proto.Class - - for _, entry := range classPatternsWotlkdb { - if entry.pattern.MatchString(item.Tooltip) { - allowlist = append(allowlist, entry.class) - } - } - - return allowlist -} - func (item WotlkItemResponse) IsPattern() bool { for _, pattern := range patternRegexes { if pattern.MatchString(item.Tooltip) { diff --git a/tools/database/wowhead_db.go b/tools/database/wowhead_db.go index 72c2b85064..e7261c4c42 100644 --- a/tools/database/wowhead_db.go +++ b/tools/database/wowhead_db.go @@ -69,6 +69,9 @@ type WowheadItem struct { Ilvl int32 `json:"itemLevel"` Phase int32 `json:"contentPhase"` + RaceMask uint16 `json:"raceMask"` + ClassMask uint16 `json:"classMask"` + Stats WowheadItemStats `json:"stats"` SourceTypes []int32 `json:"source"` // 1 = Crafted, 2 = Dropped by, 3 = sold by zone vendor? barely used, 4 = Quest, 5 = Sold by @@ -124,11 +127,75 @@ func (wi WowheadItem) ToProto() *proto.UIItem { } return &proto.UIItem{ - Id: wi.ID, - Name: wi.Name, - Icon: wi.Icon, - Ilvl: wi.Ilvl, - Phase: wi.Phase, - Sources: sources, + Id: wi.ID, + Name: wi.Name, + Icon: wi.Icon, + Ilvl: wi.Ilvl, + Phase: wi.Phase, + FactionRestriction: wi.getFactionRstriction(), + ClassAllowlist: wi.getClassRestriction(), + Sources: sources, + } +} + +func (wi WowheadItem) getFactionRstriction() proto.UIItem_FactionRestriction { + if wi.RaceMask == 1101 { + return proto.UIItem_FACTION_RESTRICTION_ALLIANCE_ONLY + } else if wi.RaceMask == 690 { + return proto.UIItem_FACTION_RESTRICTION_HORDE_ONLY + } else { + return proto.UIItem_FACTION_RESTRICTION_UNSPECIFIED + } +} + +type ClassMask uint16 + +const ( + ClassMaskWarrior ClassMask = 1 << iota + ClassMaskPaladin // 2 + ClassMaskHunter // 4 + ClassMaskRogue // 8 + ClassMaskPriest // 16 + ClassMaskDeathKnight // 32 + ClassMaskShaman // 64 + ClassMaskMage // 128 + ClassMaskWarlock // 256 + ClassMaskUnknown // 512 seemingly unused? + ClassMaskDruid // 1024 +) + +func (wi WowheadItem) getClassRestriction() []proto.Class { + classAllowlist := []proto.Class{} + if wi.ClassMask&uint16(ClassMaskWarrior) != 0 { + classAllowlist = append(classAllowlist, proto.Class_ClassWarrior) + } + if wi.ClassMask&uint16(ClassMaskPaladin) != 0 { + classAllowlist = append(classAllowlist, proto.Class_ClassPaladin) } + if wi.ClassMask&uint16(ClassMaskHunter) != 0 { + classAllowlist = append(classAllowlist, proto.Class_ClassHunter) + } + if wi.ClassMask&uint16(ClassMaskRogue) != 0 { + classAllowlist = append(classAllowlist, proto.Class_ClassRogue) + } + if wi.ClassMask&uint16(ClassMaskPriest) != 0 { + classAllowlist = append(classAllowlist, proto.Class_ClassPriest) + } + if wi.ClassMask&uint16(ClassMaskDruid) != 0 { + classAllowlist = append(classAllowlist, proto.Class_ClassDruid) + } + if wi.ClassMask&uint16(ClassMaskShaman) != 0 { + classAllowlist = append(classAllowlist, proto.Class_ClassShaman) + } + if wi.ClassMask&uint16(ClassMaskMage) != 0 { + classAllowlist = append(classAllowlist, proto.Class_ClassMage) + } + if wi.ClassMask&uint16(ClassMaskWarlock) != 0 { + classAllowlist = append(classAllowlist, proto.Class_ClassWarlock) + } + if wi.ClassMask&uint16(ClassMaskDeathKnight) != 0 { + classAllowlist = append(classAllowlist, proto.Class_ClassDeathknight) + } + + return classAllowlist } diff --git a/tools/database/wowhead_tooltips.go b/tools/database/wowhead_tooltips.go index 01a69e3124..dc62f961b9 100644 --- a/tools/database/wowhead_tooltips.go +++ b/tools/database/wowhead_tooltips.go @@ -52,7 +52,6 @@ type ItemResponse interface { GetTooltipRegexValue(pattern *regexp.Regexp, matchIdx int) int GetIntValue(pattern *regexp.Regexp) int GetStats() Stats - GetClassAllowlist() []proto.Class IsEquippable() bool GetItemLevel() int GetPhase() int @@ -249,37 +248,6 @@ func (item WowheadItemResponse) GetStats() Stats { } } -type classPattern struct { - class proto.Class - pattern *regexp.Regexp -} - -// Detects class-locked items, e.g. tier sets and pvp gear. -var classPatternsWowhead = []classPattern{ - {class: proto.Class_ClassWarrior, pattern: regexp.MustCompile(`Warrior`)}, - {class: proto.Class_ClassPaladin, pattern: regexp.MustCompile(`Paladin`)}, - {class: proto.Class_ClassHunter, pattern: regexp.MustCompile(`Hunter`)}, - {class: proto.Class_ClassRogue, pattern: regexp.MustCompile(`Rogue`)}, - {class: proto.Class_ClassPriest, pattern: regexp.MustCompile(`Priest`)}, - {class: proto.Class_ClassDeathknight, pattern: regexp.MustCompile(`Death Knight`)}, - {class: proto.Class_ClassShaman, pattern: regexp.MustCompile(`Shaman`)}, - {class: proto.Class_ClassMage, pattern: regexp.MustCompile(`Mage`)}, - {class: proto.Class_ClassWarlock, pattern: regexp.MustCompile(`Warlock`)}, - {class: proto.Class_ClassDruid, pattern: regexp.MustCompile(`Druid`)}, -} - -func (item WowheadItemResponse) GetClassAllowlist() []proto.Class { - var allowlist []proto.Class - - for _, entry := range classPatternsWowhead { - if entry.pattern.MatchString(item.Tooltip) { - allowlist = append(allowlist, entry.class) - } - } - - return allowlist -} - var patternRegexes = []*regexp.Regexp{ regexp.MustCompile(`Design:`), regexp.MustCompile(`Recipe:`), @@ -648,7 +616,6 @@ func (item WowheadItemResponse) ToItemProto() *proto.UIItem { Unique: item.GetUnique(), Heroic: item.IsHeroic(), - ClassAllowlist: item.GetClassAllowlist(), RequiredProfession: item.GetRequiredProfession(), SetName: item.GetItemSetName(), } diff --git a/ui/core/components/individual_sim_ui/apl_helpers.ts b/ui/core/components/individual_sim_ui/apl_helpers.ts index cf65abc599..7c3dbe729a 100644 --- a/ui/core/components/individual_sim_ui/apl_helpers.ts +++ b/ui/core/components/individual_sim_ui/apl_helpers.ts @@ -1,27 +1,39 @@ -import { OtherAction, UnitReference, UnitReference_Type as UnitType } from '../../proto/common.js'; -import { ActionId, defaultTargetIcon, getPetIconFromName } from '../../proto_utils/action_id.js'; import { Player, UnitMetadata } from '../../player.js'; +import { APLValueRuneSlot, APLValueRuneType } from '../../proto/apl.js'; +import { ActionID, OtherAction, UnitReference, UnitReference_Type as UnitType } from '../../proto/common.js'; +import { FeralDruid_Rotation_AplType } from '../../proto/druid.js'; +import { ActionId, defaultTargetIcon, getPetIconFromName } from '../../proto_utils/action_id.js'; import { EventID, TypedEvent } from '../../typed_event.js'; import { bucket } from '../../utils.js'; -import { AdaptiveStringPicker } from '../string_picker.js'; -import { NumberPicker, NumberPickerConfig } from '../number_picker.js'; +import { BooleanPicker } from '../boolean_picker.js'; import { DropdownPicker, DropdownPickerConfig, DropdownValueConfig, TextDropdownPicker } from '../dropdown_picker.js'; -import { UnitPicker, UnitPickerConfig, UnitValue } from '../unit_picker.js'; import { Input, InputConfig } from '../input.js'; -import { ActionID } from '../../proto/common.js'; -import { BooleanPicker } from '../boolean_picker.js'; -import { APLValueRuneSlot, APLValueRuneType } from '../../proto/apl.js'; -import { FeralDruid_Rotation_AplType } from '../../proto/druid.js'; - -export type ACTION_ID_SET = 'auras' | 'stackable_auras' | 'icd_auras' | 'exclusive_effect_auras' | 'spells' | 'castable_spells' | 'channel_spells' | 'dot_spells' | 'shield_spells' | 'non_instant_spells'; +import { NumberPicker, NumberPickerConfig } from '../number_picker.js'; +import { AdaptiveStringPicker } from '../string_picker.js'; +import { UnitPicker, UnitPickerConfig, UnitValue } from '../unit_picker.js'; -const actionIdSets: Record Promise>>, -}> = { - 'auras': { +export type ACTION_ID_SET = + | 'auras' + | 'stackable_auras' + | 'icd_auras' + | 'exclusive_effect_auras' + | 'spells' + | 'castable_spells' + | 'channel_spells' + | 'dot_spells' + | 'shield_spells' + | 'non_instant_spells'; + +const actionIdSets: Record< + ACTION_ID_SET, + { + defaultLabel: string; + getActionIDs: (metadata: UnitMetadata) => Promise>>; + } +> = { + auras: { defaultLabel: 'Aura', - getActionIDs: async (metadata) => { + getActionIDs: async metadata => { return metadata.getAuras().map(actionId => { return { value: actionId.id, @@ -29,97 +41,113 @@ const actionIdSets: Record { - return metadata.getAuras().filter(aura => aura.data.maxStacks > 0).map(actionId => { - return { - value: actionId.id, - }; - }); + getActionIDs: async metadata => { + return metadata + .getAuras() + .filter(aura => aura.data.maxStacks > 0) + .map(actionId => { + return { + value: actionId.id, + }; + }); }, }, - 'icd_auras': { + icd_auras: { defaultLabel: 'Aura', - getActionIDs: async (metadata) => { - return metadata.getAuras().filter(aura => aura.data.hasIcd).map(actionId => { - return { - value: actionId.id, - }; - }); + getActionIDs: async metadata => { + return metadata + .getAuras() + .filter(aura => aura.data.hasIcd) + .map(actionId => { + return { + value: actionId.id, + }; + }); }, }, - 'exclusive_effect_auras': { + exclusive_effect_auras: { defaultLabel: 'Aura', - getActionIDs: async (metadata) => { - return metadata.getAuras().filter(aura => aura.data.hasExclusiveEffect).map(actionId => { - return { - value: actionId.id, - }; - }); + getActionIDs: async metadata => { + return metadata + .getAuras() + .filter(aura => aura.data.hasExclusiveEffect) + .map(actionId => { + return { + value: actionId.id, + }; + }); }, }, // Used for non categorized lists - 'spells': { + spells: { defaultLabel: 'Spell', - getActionIDs: async (metadata) => { - return metadata.getSpells().filter(spell => spell.data.isCastable).map(actionId => { - return { - value: actionId.id, - }; - }); + getActionIDs: async metadata => { + return metadata + .getSpells() + .filter(spell => spell.data.isCastable) + .map(actionId => { + return { + value: actionId.id, + }; + }); }, }, - 'castable_spells': { + castable_spells: { defaultLabel: 'Spell', - getActionIDs: async (metadata) => { + getActionIDs: async metadata => { const castableSpells = metadata.getSpells().filter(spell => spell.data.isCastable); // Split up non-cooldowns and cooldowns into separate sections for easier browsing. - const { 'spells': spells, 'cooldowns': cooldowns } = bucket(castableSpells, spell => spell.data.isMajorCooldown ? 'cooldowns' : 'spells'); + const { spells: spells, cooldowns: cooldowns } = bucket(castableSpells, spell => (spell.data.isMajorCooldown ? 'cooldowns' : 'spells')); - const placeholders: Array = [ - ActionId.fromOtherId(OtherAction.OtherActionPotion), - ]; + const placeholders: Array = [ActionId.fromOtherId(OtherAction.OtherActionPotion)]; return [ - [{ - value: ActionId.fromEmpty(), - headerText: 'Spells', - submenu: ['Spells'], - }], + [ + { + value: ActionId.fromEmpty(), + headerText: 'Spells', + submenu: ['Spells'], + }, + ], (spells || []).map(actionId => { return { value: actionId.id, submenu: ['Spells'], - extraCssClasses: (actionId.data.prepullOnly + extraCssClasses: actionId.data.prepullOnly ? ['apl-prepull-actions-only'] - : (actionId.data.encounterOnly - ? ['apl-priority-list-only'] - : [])), + : actionId.data.encounterOnly + ? ['apl-priority-list-only'] + : [], }; }), - [{ - value: ActionId.fromEmpty(), - headerText: 'Cooldowns', - submenu: ['Cooldowns'], - }], + [ + { + value: ActionId.fromEmpty(), + headerText: 'Cooldowns', + submenu: ['Cooldowns'], + }, + ], (cooldowns || []).map(actionId => { return { value: actionId.id, submenu: ['Cooldowns'], - extraCssClasses: (actionId.data.prepullOnly + extraCssClasses: actionId.data.prepullOnly ? ['apl-prepull-actions-only'] - : (actionId.data.encounterOnly - ? ['apl-priority-list-only'] - : [])), + : actionId.data.encounterOnly + ? ['apl-priority-list-only'] + : [], }; }), - [{ - value: ActionId.fromEmpty(), - headerText: 'Placeholders', - submenu: ['Placeholders'], - }], + [ + { + value: ActionId.fromEmpty(), + headerText: 'Placeholders', + submenu: ['Placeholders'], + }, + ], placeholders.map(actionId => { return { value: actionId, @@ -130,56 +158,69 @@ const actionIdSets: Record { - return metadata.getSpells().filter(spell => spell.data.isCastable && spell.data.hasCastTime).map(actionId => { - return { - value: actionId.id, - }; - }); + getActionIDs: async metadata => { + return metadata + .getSpells() + .filter(spell => spell.data.isCastable && spell.data.hasCastTime) + .map(actionId => { + return { + value: actionId.id, + }; + }); }, }, - 'channel_spells': { + channel_spells: { defaultLabel: 'Channeled Spell', - getActionIDs: async (metadata) => { - return metadata.getSpells().filter(spell => spell.data.isCastable && spell.data.isChanneled).map(actionId => { - return { - value: actionId.id, - }; - }); + getActionIDs: async metadata => { + return metadata + .getSpells() + .filter(spell => spell.data.isCastable && spell.data.isChanneled) + .map(actionId => { + return { + value: actionId.id, + }; + }); }, }, - 'dot_spells': { + dot_spells: { defaultLabel: 'DoT Spell', - getActionIDs: async (metadata) => { - return metadata.getSpells().filter(spell => spell.data.hasDot).map(actionId => { - return { - value: actionId.id, - }; - }); + getActionIDs: async metadata => { + return metadata + .getSpells() + .filter(spell => spell.data.hasDot) + .map(actionId => { + return { + value: actionId.id, + }; + }); }, }, - 'shield_spells': { + shield_spells: { defaultLabel: 'Shield Spell', - getActionIDs: async (metadata) => { - return metadata.getSpells().filter(spell => spell.data.hasShield).map(actionId => { - return { - value: actionId.id, - }; - }); + getActionIDs: async metadata => { + return metadata + .getSpells() + .filter(spell => spell.data.hasShield) + .map(actionId => { + return { + value: actionId.id, + }; + }); }, }, }; export type DEFAULT_UNIT_REF = 'self' | 'currentTarget'; -export interface APLActionIDPickerConfig extends Omit, 'defaultLabel' | 'equals' | 'setOptionContent' | 'values' | 'getValue' | 'setValue'> { - actionIdSet: ACTION_ID_SET, - getUnitRef: (player: Player) => UnitReference, - defaultUnitRef: DEFAULT_UNIT_REF, - getValue: (obj: ModObject) => ActionID, - setValue: (eventID: EventID, obj: ModObject, newValue: ActionID) => void, +export interface APLActionIDPickerConfig + extends Omit, 'defaultLabel' | 'equals' | 'setOptionContent' | 'values' | 'getValue' | 'setValue'> { + actionIdSet: ACTION_ID_SET; + getUnitRef: (player: Player) => UnitReference; + defaultUnitRef: DEFAULT_UNIT_REF; + getValue: (obj: ModObject) => ActionID; + setValue: (eventID: EventID, obj: ModObject, newValue: ActionID) => void; } export class APLActionIDPicker extends DropdownPicker, ActionID, ActionId> { @@ -187,10 +228,10 @@ export class APLActionIDPicker extends DropdownPicker, ActionID, Act const actionIdSet = actionIdSets[config.actionIdSet]; super(parent, player, { ...config, - sourceToValue: (src: ActionID) => src ? ActionId.fromProto(src) : ActionId.fromEmpty(), + sourceToValue: (src: ActionID) => (src ? ActionId.fromProto(src) : ActionId.fromEmpty()), valueToSource: (val: ActionId) => val.toProto(), defaultLabel: actionIdSet.defaultLabel, - equals: (a, b) => ((a == null) == (b == null)) && (!a || a.equals(b!)), + equals: (a, b) => (a == null) == (b == null) && (!a || a.equals(b!)), setOptionContent: (button, valueConfig) => { const actionId = valueConfig.value; @@ -202,20 +243,29 @@ export class APLActionIDPicker extends DropdownPicker, ActionID, Act const textElem = document.createTextNode(actionId.name); button.appendChild(textElem); }, - createMissingValue: value => value.fill().then(filledId => { - return { - value: filledId, - }; - }), + createMissingValue: value => { + if (value.anyId() == 0) { + return new Promise>(() => { + value: actionIdSet.defaultLabel; + }); + } + + return value.fill().then(filledId => { + return { + value: filledId, + }; + }); + }, values: [], }); const getUnitRef = config.getUnitRef; - const defaultRef = config.defaultUnitRef == 'self' ? UnitReference.create({type: UnitType.Self}) : UnitReference.create({type: UnitType.CurrentTarget}); + const defaultRef = + config.defaultUnitRef == 'self' ? UnitReference.create({ type: UnitType.Self }) : UnitReference.create({ type: UnitType.CurrentTarget }); const getActionIDs = actionIdSet.getActionIDs; const updateValues = async () => { const unitRef = getUnitRef(player); - const metadata = player.sim.getUnitMetadata(unitRef, player, defaultRef) + const metadata = player.sim.getUnitMetadata(unitRef, player, defaultRef); if (metadata) { const values = await getActionIDs(metadata); this.setOptions(values); @@ -228,45 +278,54 @@ export class APLActionIDPicker extends DropdownPicker, ActionID, Act export type UNIT_SET = 'aura_sources' | 'aura_sources_targets_first' | 'targets'; -const unitSets: Record) => Array, -}> = { - 'aura_sources': { - getUnits: (player) => { +const unitSets: Record< + UNIT_SET, + { + // Uses target icon by default instead of person icon. This should be set to true for inputs that default to CurrentTarget. + targetUI?: boolean; + getUnits: (player: Player) => Array; + } +> = { + aura_sources: { + getUnits: player => { return [ undefined, - player.getPetMetadatas().asList().map((petMetadata, i) => UnitReference.create({type: UnitType.Pet, index: i, owner: UnitReference.create({type: UnitType.Self})})), - UnitReference.create({type: UnitType.CurrentTarget}), - player.sim.encounter.targetsMetadata.asList().map((targetMetadata, i) => UnitReference.create({type: UnitType.Target, index: i})), + player + .getPetMetadatas() + .asList() + .map((petMetadata, i) => UnitReference.create({ type: UnitType.Pet, index: i, owner: UnitReference.create({ type: UnitType.Self }) })), + UnitReference.create({ type: UnitType.CurrentTarget }), + player.sim.encounter.targetsMetadata.asList().map((targetMetadata, i) => UnitReference.create({ type: UnitType.Target, index: i })), ].flat(); }, }, - 'aura_sources_targets_first': { + aura_sources_targets_first: { targetUI: true, - getUnits: (player) => { + getUnits: player => { return [ undefined, - player.sim.encounter.targetsMetadata.asList().map((targetMetadata, i) => UnitReference.create({type: UnitType.Target, index: i})), - UnitReference.create({type: UnitType.Self}), - player.getPetMetadatas().asList().map((petMetadata, i) => UnitReference.create({type: UnitType.Pet, index: i, owner: UnitReference.create({type: UnitType.Self})})), + player.sim.encounter.targetsMetadata.asList().map((targetMetadata, i) => UnitReference.create({ type: UnitType.Target, index: i })), + UnitReference.create({ type: UnitType.Self }), + player + .getPetMetadatas() + .asList() + .map((petMetadata, i) => UnitReference.create({ type: UnitType.Pet, index: i, owner: UnitReference.create({ type: UnitType.Self }) })), ].flat(); }, }, - 'targets': { + targets: { targetUI: true, - getUnits: (player) => { + getUnits: player => { return [ undefined, - player.sim.encounter.targetsMetadata.asList().map((targetMetadata, i) => UnitReference.create({type: UnitType.Target, index: i})), + player.sim.encounter.targetsMetadata.asList().map((targetMetadata, i) => UnitReference.create({ type: UnitType.Target, index: i })), ].flat(); }, }, }; export interface APLUnitPickerConfig extends Omit>, 'values'> { - unitSet: UNIT_SET, + unitSet: UNIT_SET; } export class APLUnitPicker extends UnitPicker> { @@ -276,7 +335,7 @@ export class APLUnitPicker extends UnitPicker> { const targetUI = !!unitSets[config.unitSet].targetUI; super(parent, player, { ...config, - sourceToValue: (src: UnitReference|undefined) => APLUnitPicker.refToValue(src, player, targetUI), + sourceToValue: (src: UnitReference | undefined) => APLUnitPicker.refToValue(src, player, targetUI), valueToSource: (val: UnitValue) => val.value, values: [], hideLabelWhenDefaultSelected: true, @@ -288,7 +347,7 @@ export class APLUnitPicker extends UnitPicker> { player.sim.unitMetadataEmitter.on(() => this.updateValues()); } - private static refToValue(ref: UnitReference|undefined, thisPlayer: Player, targetUI: boolean|undefined): UnitValue { + private static refToValue(ref: UnitReference | undefined, thisPlayer: Player, targetUI: boolean | undefined): UnitValue { if (!ref || ref.type == UnitType.Unknown) { return { value: ref, @@ -318,7 +377,7 @@ export class APLUnitPicker extends UnitPicker> { }; } } else if (ref.type == UnitType.Target) { - const targetMetadata = thisPlayer.sim.encounter.targetsMetadata.asList()[ref.index] + const targetMetadata = thisPlayer.sim.encounter.targetsMetadata.asList()[ref.index]; if (targetMetadata) { return { value: ref, @@ -327,9 +386,9 @@ export class APLUnitPicker extends UnitPicker> { }; } } else if (ref.type == UnitType.Pet) { - const petMetadata = thisPlayer.sim.getUnitMetadata(ref, thisPlayer, UnitReference.create({type: UnitType.Self})); + const petMetadata = thisPlayer.sim.getUnitMetadata(ref, thisPlayer, UnitReference.create({ type: UnitType.Self })); let name = `Pet ${ref.index + 1}`; - let icon: string|ActionId = 'fa-paw'; + let icon: string | ActionId = 'fa-paw'; if (petMetadata) { const petName = petMetadata.getName(); if (petName) { @@ -354,40 +413,47 @@ export class APLUnitPicker extends UnitPicker> { const unitSet = unitSets[this.unitSet]; const values = unitSet.getUnits(this.modObject); - this.setOptions(values.map(v => { - const valueConfig: DropdownValueConfig = { - value: APLUnitPicker.refToValue(v, this.modObject, unitSet.targetUI), - }; - if (v && v.type == UnitType.Pet) { - if (unitSet.targetUI) { - valueConfig.submenu = [APLUnitPicker.refToValue(v.owner!, this.modObject, unitSet.targetUI)]; - } else { - valueConfig.submenu = [APLUnitPicker.refToValue(undefined, this.modObject, unitSet.targetUI)]; + this.setOptions( + values.map(v => { + const valueConfig: DropdownValueConfig = { + value: APLUnitPicker.refToValue(v, this.modObject, unitSet.targetUI), + }; + if (v && v.type == UnitType.Pet) { + if (unitSet.targetUI) { + valueConfig.submenu = [APLUnitPicker.refToValue(v.owner!, this.modObject, unitSet.targetUI)]; + } else { + valueConfig.submenu = [APLUnitPicker.refToValue(undefined, this.modObject, unitSet.targetUI)]; + } } - } - return valueConfig; - })); + return valueConfig; + }), + ); } } -type APLPickerBuilderFieldFactory = (parent: HTMLElement, player: Player, config: InputConfig, F>, getParentValue: () => any) => Input, F>; +type APLPickerBuilderFieldFactory = ( + parent: HTMLElement, + player: Player, + config: InputConfig, F>, + getParentValue: () => any, +) => Input, F>; export interface APLPickerBuilderFieldConfig { - field: F, - newValue: () => T[F], - factory: APLPickerBuilderFieldFactory, + field: F; + newValue: () => T[F]; + factory: APLPickerBuilderFieldFactory; - label?: string, - labelTooltip?: string, + label?: string; + labelTooltip?: string; } export interface APLPickerBuilderConfig extends InputConfig, T> { - newValue: () => T, - fields: Array>, + newValue: () => T; + fields: Array>; } export interface APLPickerBuilderField extends APLPickerBuilderFieldConfig { - picker: Input, T[F]>, + picker: Input, T[F]>; } export class APLPickerBuilder extends Input, T> { @@ -403,27 +469,35 @@ export class APLPickerBuilder extends Input, T> { this.init(); } - private static makeFieldPicker(builder: APLPickerBuilder, fieldConfig: APLPickerBuilderFieldConfig): APLPickerBuilderField { - const field: F = fieldConfig.field - const picker = fieldConfig.factory(builder.rootElem, builder.modObject, { - label: fieldConfig.label, - labelTooltip: fieldConfig.labelTooltip, - changedEvent: (player: Player) => player.rotationChangeEmitter, - getValue: () => { - const source = builder.getSourceValue(); - if (!source[field]) { - source[field] = fieldConfig.newValue(); - } - return source[field]; + private static makeFieldPicker( + builder: APLPickerBuilder, + fieldConfig: APLPickerBuilderFieldConfig, + ): APLPickerBuilderField { + const field: F = fieldConfig.field; + const picker = fieldConfig.factory( + builder.rootElem, + builder.modObject, + { + label: fieldConfig.label, + labelTooltip: fieldConfig.labelTooltip, + changedEvent: (player: Player) => player.rotationChangeEmitter, + getValue: () => { + const source = builder.getSourceValue(); + if (!source[field]) { + source[field] = fieldConfig.newValue(); + } + return source[field]; + }, + setValue: (eventID: EventID, player: Player, newValue: any) => { + builder.getSourceValue()[field] = newValue; + player.rotationChangeEmitter.emit(eventID); + }, }, - setValue: (eventID: EventID, player: Player, newValue: any) => { - builder.getSourceValue()[field] = newValue; - player.rotationChangeEmitter.emit(eventID); - }, - }, () => builder.getSourceValue()) + () => builder.getSourceValue(), + ); if (field === 'vals' || field === 'actions') { - picker.rootElem.classList.add('apl-picker-builder-multi') + picker.rootElem.classList.add('apl-picker-builder-multi'); } return { @@ -451,33 +525,49 @@ export class APLPickerBuilder extends Input, T> { } } -export function actionIdFieldConfig(field: string, actionIdSet: ACTION_ID_SET, unitRefField?: string, defaultUnitRef?: DEFAULT_UNIT_REF, options?: Partial>): APLPickerBuilderFieldConfig { +export function actionIdFieldConfig( + field: string, + actionIdSet: ACTION_ID_SET, + unitRefField?: string, + defaultUnitRef?: DEFAULT_UNIT_REF, + options?: Partial>, +): APLPickerBuilderFieldConfig { return { field: field, newValue: () => ActionID.create(), - factory: (parent, player, config, getParentValue) => new APLActionIDPicker(parent, player, { - ...config, - actionIdSet: actionIdSet, - getUnitRef: () => unitRefField ? getParentValue()[unitRefField] : UnitReference.create(), - defaultUnitRef: defaultUnitRef || 'self', - }), + factory: (parent, player, config, getParentValue) => + new APLActionIDPicker(parent, player, { + ...config, + actionIdSet: actionIdSet, + getUnitRef: () => (unitRefField ? getParentValue()[unitRefField] : UnitReference.create()), + defaultUnitRef: defaultUnitRef || 'self', + }), ...(options || {}), }; } -export function unitFieldConfig(field: string, unitSet: UNIT_SET, options?: Partial>): APLPickerBuilderFieldConfig { +export function unitFieldConfig( + field: string, + unitSet: UNIT_SET, + options?: Partial>, +): APLPickerBuilderFieldConfig { return { field: field, newValue: () => undefined, - factory: (parent, player, config) => new APLUnitPicker(parent, player, { - ...config, - unitSet: unitSet, - }), + factory: (parent, player, config) => + new APLUnitPicker(parent, player, { + ...config, + unitSet: unitSet, + }), ...(options || {}), }; } -export function booleanFieldConfig(field: string, label?:string, options?: Partial>): APLPickerBuilderFieldConfig { +export function booleanFieldConfig( + field: string, + label?: string, + options?: Partial>, +): APLPickerBuilderFieldConfig { return { field: field, newValue: () => false, @@ -490,7 +580,11 @@ export function booleanFieldConfig(field: string, label?:string, options?: Parti }; } -export function numberFieldConfig(field: string, float: boolean, options?: Partial>): APLPickerBuilderFieldConfig { +export function numberFieldConfig( + field: string, + float: boolean, + options?: Partial>, +): APLPickerBuilderFieldConfig { return { field: field, newValue: () => 0, @@ -517,25 +611,26 @@ export function stringFieldConfig(field: string, options?: Partial { - let values = [ + const values = [ { value: APLValueRuneType.RuneBlood, label: 'Blood' }, { value: APLValueRuneType.RuneFrost, label: 'Frost' }, { value: APLValueRuneType.RuneUnholy, label: 'Unholy' }, - ] + ]; if (includeDeath) { - values.push({ value: APLValueRuneType.RuneDeath, label: 'Death' }) + values.push({ value: APLValueRuneType.RuneDeath, label: 'Death' }); } return { field: field, newValue: () => APLValueRuneType.RuneBlood, - factory: (parent, player, config) => new TextDropdownPicker(parent, player, { - ...config, - defaultLabel: 'None', - equals: (a, b) => a == b, - values: values, - }), + factory: (parent, player, config) => + new TextDropdownPicker(parent, player, { + ...config, + defaultLabel: 'None', + equals: (a, b) => a == b, + values: values, + }), }; } @@ -543,47 +638,52 @@ export function runeSlotFieldConfig(field: string): APLPickerBuilderFieldConfig< return { field: field, newValue: () => APLValueRuneSlot.SlotLeftBlood, - factory: (parent, player, config) => new TextDropdownPicker(parent, player, { - ...config, - defaultLabel: 'None', - equals: (a, b) => a == b, - values: [ - { value: APLValueRuneSlot.SlotLeftBlood, label: 'Blood Left' }, - { value: APLValueRuneSlot.SlotRightBlood, label: 'Blood Right' }, - { value: APLValueRuneSlot.SlotLeftFrost, label: 'Frost Left' }, - { value: APLValueRuneSlot.SlotRightFrost, label: 'Frost Right' }, - { value: APLValueRuneSlot.SlotLeftUnholy, label: 'Unholy Left' }, - { value: APLValueRuneSlot.SlotRightUnholy, label: 'Unholy Right' }, - ], - }), + factory: (parent, player, config) => + new TextDropdownPicker(parent, player, { + ...config, + defaultLabel: 'None', + equals: (a, b) => a == b, + values: [ + { value: APLValueRuneSlot.SlotLeftBlood, label: 'Blood Left' }, + { value: APLValueRuneSlot.SlotRightBlood, label: 'Blood Right' }, + { value: APLValueRuneSlot.SlotLeftFrost, label: 'Frost Left' }, + { value: APLValueRuneSlot.SlotRightFrost, label: 'Frost Right' }, + { value: APLValueRuneSlot.SlotLeftUnholy, label: 'Unholy Left' }, + { value: APLValueRuneSlot.SlotRightUnholy, label: 'Unholy Right' }, + ], + }), }; } export function rotationTypeFieldConfig(field: string): APLPickerBuilderFieldConfig { - let values = [ + const values = [ { value: FeralDruid_Rotation_AplType.SingleTarget, label: 'Single Target' }, { value: FeralDruid_Rotation_AplType.Aoe, label: 'AOE' }, - ] + ]; return { field: field, label: 'Type', newValue: () => FeralDruid_Rotation_AplType.SingleTarget, - factory: (parent, player, config) => new TextDropdownPicker(parent, player, { - ...config, - defaultLabel: 'Single Target', - equals: (a, b) => a == b, - values: values, - }), + factory: (parent, player, config) => + new TextDropdownPicker(parent, player, { + ...config, + defaultLabel: 'Single Target', + equals: (a, b) => a == b, + values: values, + }), }; } -export function aplInputBuilder(newValue: () => T, fields: Array>): (parent: HTMLElement, player: Player, config: InputConfig, T>) => Input, T> { +export function aplInputBuilder( + newValue: () => T, + fields: Array>, +): (parent: HTMLElement, player: Player, config: InputConfig, T>) => Input, T> { return (parent, player, config) => { return new APLPickerBuilder(parent, player, { ...config, newValue: newValue, fields: fields, - }) - } + }); + }; } From 5ab96a60f497411b7c6d0714095e25ece8d57210 Mon Sep 17 00:00:00 2001 From: Kayla Glick Date: Sun, 14 Apr 2024 13:44:24 -0400 Subject: [PATCH 2/5] fix icon enum tooltips --- ui/core/components/icon_enum_picker.tsx | 88 +++++++++++-------------- 1 file changed, 40 insertions(+), 48 deletions(-) diff --git a/ui/core/components/icon_enum_picker.tsx b/ui/core/components/icon_enum_picker.tsx index 63fd94ba7d..c4f24368c5 100644 --- a/ui/core/components/icon_enum_picker.tsx +++ b/ui/core/components/icon_enum_picker.tsx @@ -4,7 +4,6 @@ import { element, fragment } from 'tsx-vanilla'; import { ActionId } from '../proto_utils/action_id.js'; import { TypedEvent } from '../typed_event.js'; - import { Input, InputConfig } from './input.js'; export enum IconEnumPickerDirection { @@ -13,32 +12,32 @@ export enum IconEnumPickerDirection { } export interface IconEnumValueConfig { - value: T, + value: T; // One of these should be set. If actionId is set, shows the icon for that id. If // color is set, shows that color. - actionId?: ActionId, - color?: string, + actionId?: ActionId; + color?: string; // Text to be displayed on the icon. - text?: string, + text?: string; // Hover tooltip. - tooltip?: string, + tooltip?: string; - showWhen?: (obj: ModObject) => boolean, + showWhen?: (obj: ModObject) => boolean; } export interface IconEnumPickerConfig extends InputConfig { - numColumns?: number, + numColumns?: number; values: Array>; // Value that will be considered inactive. - zeroValue: T, + zeroValue: T; // Function for comparing two values. // Tooltip that will be shown whne hovering over the icon-picker-button - tooltip?: string, + tooltip?: string; // The direction the menu will open in relative to the root element - direction?: IconEnumPickerDirection, - equals: (a: T, b: T) => boolean, - backupIconUrl?: (value: T) => ActionId, - showWhen?: (obj: ModObject) => boolean, + direction?: IconEnumPickerDirection; + equals: (a: T, b: T) => boolean; + backupIconUrl?: (value: T) => ActionId; + showWhen?: (obj: ModObject) => boolean; } // Icon-based UI for picking enum values. @@ -60,15 +59,14 @@ export class IconEnumPicker extends Input { if (config.showWhen) { config.changedEvent(this.modObject).on(_eventID => { const show = config.showWhen && config.showWhen(this.modObject); - if (!show) - this.rootElem.classList.add('hide'); + if (!show) this.rootElem.classList.add('hide'); }); } if (config.tooltip) { Tooltip.getOrCreateInstance(this.rootElem, { html: true, - title: config.tooltip + title: config.tooltip, }); } this.rootElem.appendChild( @@ -77,46 +75,44 @@ export class IconEnumPicker extends Input { href="javascript:void(0)" className="icon-picker-button" attributes={{ - 'aria-expanded':"false", - role: 'button' + 'aria-expanded': 'false', + role: 'button', }} dataset={{ bsToggle: 'dropdown', bsPlacement: 'bottom', - whtticon:"false", - disableWowheadTouchTooltip:'true' - }} - > - + whtticon: 'false', + disableWowheadTouchTooltip: 'true', + }}> +
    - - ) + , + ); this.buttonElem = this.rootElem.querySelector('.icon-picker-button') as HTMLAnchorElement; this.buttonText = this.buttonElem.querySelector('.icon-picker-label') as HTMLElement; const dropdownMenu = this.rootElem.querySelector('.dropdown-menu') as HTMLElement; - if (this.config.numColumns) - dropdownMenu.style.gridTemplateColumns = `repeat(${this.config.numColumns}, 1fr)`; + if (this.config.numColumns) dropdownMenu.style.gridTemplateColumns = `repeat(${this.config.numColumns}, 1fr)`; - if (this.config.direction == IconEnumPickerDirection.Horizontal) - dropdownMenu.style.gridAutoFlow = 'column'; + if (this.config.direction == IconEnumPickerDirection.Horizontal) dropdownMenu.style.gridAutoFlow = 'column'; config.values.forEach((valueConfig, _i) => { const optionContainer = document.createElement('li'); - optionContainer.classList.add('icon-dropdown-option', 'dropdown-option') + optionContainer.classList.add('icon-dropdown-option', 'dropdown-option'); dropdownMenu.appendChild(optionContainer); const option = document.createElement('a'); option.classList.add('icon-picker-button'); - option.dataset.disableWowheadTouchTooltip='true'; + option.dataset.whtticon = 'false'; + option.dataset.disableWowheadTouchTooltip = 'true'; optionContainer.appendChild(option); this.setImage(option, valueConfig); if (valueConfig.text != undefined) { const optionText = document.createElement('div'); - optionText.classList.add("icon-picker-label"); + optionText.classList.add('icon-picker-label'); optionText.textContent = valueConfig.text; option.append(optionText); } @@ -124,20 +120,18 @@ export class IconEnumPicker extends Input { if (valueConfig.tooltip) { Tooltip.getOrCreateInstance(option, { html: true, - title: valueConfig.tooltip + title: valueConfig.tooltip, }); } const show = !valueConfig.showWhen || valueConfig.showWhen(this.modObject); - if (!show) optionContainer.classList.add('hide') + if (!show) optionContainer.classList.add('hide'); if (valueConfig.showWhen) { config.changedEvent(this.modObject).on(_eventID => { const show = valueConfig.showWhen && valueConfig.showWhen(this.modObject); - if (show) - optionContainer.classList.remove('hide'); - else - optionContainer.classList.add('hide'); + if (show) optionContainer.classList.remove('hide'); + else optionContainer.classList.add('hide'); }); } @@ -179,17 +173,17 @@ export class IconEnumPicker extends Input { setInputValue(newValue: T) { this.currentValue = newValue; - this.setActive(this.enabled && !this.config.equals(this.currentValue, this.config.zeroValue)) + this.setActive(this.enabled && !this.config.equals(this.currentValue, this.config.zeroValue)); - this.buttonText.textContent = '' - this.buttonText.style.display = 'none' + this.buttonText.textContent = ''; + this.buttonText.style.display = 'none'; const valueConfig = this.config.values.find(valueConfig => this.config.equals(valueConfig.value, this.currentValue))!; if (valueConfig) { this.setImage(this.buttonElem, valueConfig); if (valueConfig.text != undefined) { - this.buttonText.style.display = 'block' - this.buttonText.textContent = valueConfig.text + this.buttonText.style.display = 'block'; + this.buttonText.textContent = valueConfig.text; } } else if (this.config.backupIconUrl) { const backupId = this.config.backupIconUrl(this.currentValue); @@ -199,9 +193,7 @@ export class IconEnumPicker extends Input { } setActive(active: boolean) { - if (active) - this.buttonElem.classList.add('active'); - else - this.buttonElem.classList.remove('active'); + if (active) this.buttonElem.classList.add('active'); + else this.buttonElem.classList.remove('active'); } } From 4e90b93dc93d211d3bef41c8665417e5836fe1e5 Mon Sep 17 00:00:00 2001 From: Kayla Glick Date: Sun, 14 Apr 2024 14:12:30 -0400 Subject: [PATCH 3/5] gear picker style tweaks from sod --- ui/core/components/gear_picker.tsx | 396 +++++++--------------- ui/scss/core/components/_gear_picker.scss | 221 ++++++------ 2 files changed, 225 insertions(+), 392 deletions(-) diff --git a/ui/core/components/gear_picker.tsx b/ui/core/components/gear_picker.tsx index f4c10925c6..7674bae0f4 100644 --- a/ui/core/components/gear_picker.tsx +++ b/ui/core/components/gear_picker.tsx @@ -6,12 +6,7 @@ import { setItemQualityCssClass } from '../css_utils'; import { IndividualSimUI } from '../individual_sim_ui.js'; import { Player } from '../player'; import { Class, GemColor, ItemQuality, ItemSlot, ItemSpec, ItemType } from '../proto/common'; -import { - DatabaseFilters, - UIEnchant as Enchant, - UIGem as Gem, - UIItem as Item, -} from '../proto/ui.js'; +import { DatabaseFilters, UIEnchant as Enchant, UIGem as Gem, UIItem as Item } from '../proto/ui.js'; import { ActionId } from '../proto_utils/action_id'; import { getEnchantDescription, getUniqueEnchantString } from '../proto_utils/enchants'; import { EquippedItem } from '../proto_utils/equipped_item'; @@ -123,25 +118,12 @@ export class ItemRenderer extends Component { const sce = ref(); this.rootElem.appendChild( <> - +
    - -
    - + +
    , ); @@ -205,10 +187,7 @@ export class ItemRenderer extends Component { newItem.allSocketColors().forEach((socketColor, gemIdx) => { const gemContainer = createGemContainer(socketColor, newItem.gems[gemIdx]); - if ( - gemIdx == newItem.numPossibleSockets - 1 && - [ItemType.ItemTypeWrist, ItemType.ItemTypeHands].includes(newItem.item.type) - ) { + if (gemIdx == newItem.numPossibleSockets - 1 && [ItemType.ItemTypeWrist, ItemType.ItemTypeHands].includes(newItem.item.type)) { const updateProfession = () => { if (this.player.isBlacksmithing()) { gemContainer.classList.remove('hide'); @@ -290,9 +269,7 @@ export class ItemPicker extends Component { if (newItem != null) { this.itemElem.update(newItem); } else { - this.itemElem.iconElem.style.backgroundImage = `url('${getEmptySlotIconUrl( - this.slot, - )}')`; + this.itemElem.iconElem.style.backgroundImage = `url('${getEmptySlotIconUrl(this.slot)}')`; } this._equippedItem = newItem; @@ -377,9 +354,7 @@ export class IconItemSwapPicker extends Component { this.player.setWowheadData(newItem, this.iconAnchor); newItem.allSocketColors().forEach((socketColor, gemIdx) => { - this.socketsContainerElem.appendChild( - createGemContainer(socketColor, newItem.gems[gemIdx]), - ); + this.socketsContainerElem.appendChild(createGemContainer(socketColor, newItem.gems[gemIdx])); }); } else { this.iconAnchor.classList.remove('active'); @@ -419,12 +394,7 @@ export class SelectorModal extends BaseModal { private readonly tabsElem: HTMLElement; private readonly contentElem: HTMLElement; - constructor( - parent: HTMLElement, - simUI: SimUI, - player: Player, - config: SelectorModalConfig, - ) { + constructor(parent: HTMLElement, simUI: SimUI, player: Player, config: SelectorModalConfig) { super(parent, 'selector-modal'); this.simUI = simUI; @@ -434,17 +404,12 @@ export class SelectorModal extends BaseModal { window.scrollTo({ top: 0 }); - this.header!.insertAdjacentElement( - 'afterbegin', -
      , - ); + this.header!.insertAdjacentElement('afterbegin',
        ); this.body.appendChild(
        ); this.tabsElem = this.rootElem.querySelector('.selector-modal-tabs') as HTMLElement; - this.contentElem = this.rootElem.querySelector( - '.selector-modal-tab-content', - ) as HTMLElement; + this.contentElem = this.rootElem.querySelector('.selector-modal-tab-content') as HTMLElement; this.setData(); @@ -464,13 +429,11 @@ export class SelectorModal extends BaseModal { // Could be 'Items' 'Enchants' or 'Gem1'-'Gem3' openTabName(name: string) { - Array.from(this.tabsElem.getElementsByClassName('selector-modal-item-tab')).forEach( - elem => { - if (elem.getAttribute('data-content-id') == name + '-tab') { - (elem as HTMLElement).click(); - } - }, - ); + Array.from(this.tabsElem.getElementsByClassName('selector-modal-item-tab')).forEach(elem => { + if (elem.getAttribute('data-content-id') == name + '-tab') { + (elem as HTMLElement).click(); + } + }); } openTab(idx: number) { @@ -522,9 +485,7 @@ export class SelectorModal extends BaseModal { return { item: enchant, id: enchant.effectId, - actionId: enchant.spellId - ? ActionId.fromSpellId(enchant.spellId) - : ActionId.fromItemId(enchant.itemId), + actionId: enchant.spellId ? ActionId.fromSpellId(enchant.spellId) : ActionId.fromItemId(enchant.itemId), name: enchant.name, quality: enchant.quality, phase: enchant.phase || 1, @@ -533,8 +494,7 @@ export class SelectorModal extends BaseModal { heroic: false, onEquip: (eventID, enchant: Enchant) => { const equippedItem = gearData.getEquippedItem(); - if (equippedItem) - gearData.equipItem(eventID, equippedItem.withEnchant(enchant)); + if (equippedItem) gearData.equipItem(eventID, equippedItem.withEnchant(enchant)); }, }; }), @@ -566,80 +526,71 @@ export class SelectorModal extends BaseModal { return; } - const socketBonusEP = - this.player.computeStatsEP(new Stats(equippedItem.item.socketBonus)) / - (equippedItem.item.gemSockets.length || 1); - equippedItem - .curSocketColors(this.player.isBlacksmithing()) - .forEach((socketColor, socketIdx) => { - this.addTab( - 'Gem ' + (socketIdx + 1), - this.player.getGems(socketColor).map((gem: Gem) => { - return { - item: gem, - id: gem.id, - actionId: ActionId.fromItemId(gem.id), - name: gem.name, - quality: gem.quality, - phase: gem.phase, - heroic: false, - baseEP: this.player.computeStatsEP(new Stats(gem.stats)), - ignoreEPFilter: true, - onEquip: (eventID, gem: Gem) => { - const equippedItem = gearData.getEquippedItem(); - if (equippedItem) - gearData.equipItem( - eventID, - equippedItem.withGem(gem, socketIdx), - ); - }, - }; - }), - gem => { - let gemEP = this.player.computeGemEP(gem); - if (gemMatchesSocket(gem, socketColor)) { - gemEP += socketBonusEP; - } - return gemEP; - }, - equippedItem => equippedItem?.gems[socketIdx], - socketColor, - eventID => { - const equippedItem = gearData.getEquippedItem(); - if (equippedItem) - gearData.equipItem(eventID, equippedItem.withGem(null, socketIdx)); - }, - tabAnchor => { - const gemContainer = createGemContainer(socketColor, null); - tabAnchor.appendChild(gemContainer); - tabAnchor.classList.add('selector-modal-tab-gem'); + const socketBonusEP = this.player.computeStatsEP(new Stats(equippedItem.item.socketBonus)) / (equippedItem.item.gemSockets.length || 1); + equippedItem.curSocketColors(this.player.isBlacksmithing()).forEach((socketColor, socketIdx) => { + this.addTab( + 'Gem ' + (socketIdx + 1), + this.player.getGems(socketColor).map((gem: Gem) => { + return { + item: gem, + id: gem.id, + actionId: ActionId.fromItemId(gem.id), + name: gem.name, + quality: gem.quality, + phase: gem.phase, + heroic: false, + baseEP: this.player.computeStatsEP(new Stats(gem.stats)), + ignoreEPFilter: true, + onEquip: (eventID, gem: Gem) => { + const equippedItem = gearData.getEquippedItem(); + if (equippedItem) gearData.equipItem(eventID, equippedItem.withGem(gem, socketIdx)); + }, + }; + }), + gem => { + let gemEP = this.player.computeGemEP(gem); + if (gemMatchesSocket(gem, socketColor)) { + gemEP += socketBonusEP; + } + return gemEP; + }, + equippedItem => equippedItem?.gems[socketIdx], + socketColor, + eventID => { + const equippedItem = gearData.getEquippedItem(); + if (equippedItem) gearData.equipItem(eventID, equippedItem.withGem(null, socketIdx)); + }, + tabAnchor => { + const gemContainer = createGemContainer(socketColor, null); + tabAnchor.appendChild(gemContainer); + tabAnchor.classList.add('selector-modal-tab-gem'); - const gemElem = tabAnchor.querySelector('.gem-icon') as HTMLElement; - const emptySocketUrl = getEmptyGemSocketIconUrl(socketColor); + const gemElem = tabAnchor.querySelector('.gem-icon') as HTMLElement; + const emptySocketUrl = getEmptyGemSocketIconUrl(socketColor); - const updateGemIcon = () => { - const equippedItem = gearData.getEquippedItem(); - const gem = equippedItem?.gems[socketIdx]; - - if (gem) { - gemElem.classList.remove('hide'); - ActionId.fromItemId(gem.id) - .fill() - .then(filledId => { - gemElem.setAttribute('src', filledId.iconUrl); - }); - } else { - gemElem.classList.add('hide'); - gemElem.setAttribute('src', emptySocketUrl); - } - }; - - gearData.changeEvent.on(updateGemIcon); - this.addOnDisposeCallback(() => gearData.changeEvent.off(updateGemIcon)); - updateGemIcon(); - }, - ); - }); + const updateGemIcon = () => { + const equippedItem = gearData.getEquippedItem(); + const gem = equippedItem?.gems[socketIdx]; + + if (gem) { + gemElem.classList.remove('hide'); + ActionId.fromItemId(gem.id) + .fill() + .then(filledId => { + gemElem.setAttribute('src', filledId.iconUrl); + }); + } else { + gemElem.classList.add('hide'); + gemElem.setAttribute('src', emptySocketUrl); + } + }; + + gearData.changeEvent.on(updateGemIcon); + this.addOnDisposeCallback(() => gearData.changeEvent.off(updateGemIcon)); + updateGemIcon(); + }, + ); + }); } /** @@ -755,9 +706,7 @@ export class SelectorModal extends BaseModal { .call(this.tabsElem.getElementsByClassName('selector-modal-item-tab')) .filter(tab => tab.dataset.label.includes(labelSubstring)); - const contentElems = tabElems - .map(tabElem => document.getElementById(tabElem.dataset.contentId!)) - .filter(tabElem => Boolean(tabElem)); + const contentElems = tabElems.map(tabElem => document.getElementById(tabElem.dataset.contentId!)).filter(tabElem => Boolean(tabElem)); tabElems.forEach(elem => elem.parentElement.remove()); contentElems.forEach(elem => elem!.remove()); @@ -853,33 +802,17 @@ export class ItemList { const epButton = ref(); this.tabContent = ( -
        +
        - - {label == 'Items' && ( - - )} + + {label == 'Items' && }
        - - + +