diff --git a/assets/database/db.bin b/assets/database/db.bin
index 3e7a5270f1..7468338966 100644
Binary files a/assets/database/db.bin and b/assets/database/db.bin differ
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 bb49234cc5..c05813f2a3 100644
Binary files a/assets/database/leftover_db.bin and b/assets/database/leftover_db.bin differ
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,
- })
- }
+ });
+ };
}