From 37e450baee0f1e838d91d42fb99f396810b9b4f5 Mon Sep 17 00:00:00 2001 From: Kayla Glick Date: Sat, 23 Mar 2024 11:29:39 -0400 Subject: [PATCH] fix DB generation errors + mp5 regex --- assets/database/db.bin | Bin 5756921 -> 5757131 bytes assets/database/db.json | 985 +++++++++++++++-------------- assets/database/leftover_db.bin | Bin 8221993 -> 8221993 bytes assets/database/leftover_db.json | 18 +- sim/core/apl.go | 12 +- tools/database/gen_db/main.go | 36 +- tools/database/wowhead_tooltips.go | 3 +- 7 files changed, 535 insertions(+), 519 deletions(-) diff --git a/assets/database/db.bin b/assets/database/db.bin index cd67a607d60ca1b98b46b817d186aab6c6d7e6a9..3e7a5270f183808a506cc0b5bfa6e8145e2b6a47 100644 GIT binary patch delta 15211 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 delta 14553 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 Sc5mhX)}h5SJm-6{7XAlvcIV3g delta 591 zcmXxbJ4{ny07vm$ik6396%hr67QterR(ur^EmENt-->TV#RtCN7R6Stnn3bT8WIy^ z;Y&CRH+rJ zQngkppjBF}8m&>S)~ZhHv|jaU&<1T(qnZ>{NX^=$7PV@#!fMl&50O_TW-?Um+J&j$ zoMXcNNP}4@jbzQc={ncC?>lFle9#}kR{ri@l*4$9(;qt1!R5=4 zTP!^DhRo}!f#KPnDm#|)-a4i+=C#;2?OwglW}3Y}j>)96W%gr-*I)a;%v0hyUU0qq G6#WNJl;q<8 diff --git a/assets/database/leftover_db.json b/assets/database/leftover_db.json index 17d3ebfe50..63e37a900d 100644 --- a/assets/database/leftover_db.json +++ b/assets/database/leftover_db.json @@ -4324,8 +4324,8 @@ {"id":15045,"name":"Green Dragonscale Breastplate","icon":"inv_chest_chain_06","type":5,"armorType":3,"stats":[0,0,9,12,0,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,311,0,0,0,0,0,0,0,0,0,0,0,11,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,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,"setName":"Green Dragon Mail","expansion":2,"sources":[{"crafted":{"profession":8,"spellId":19050}}]}, {"id":15046,"name":"Green Dragonscale Leggings","icon":"inv_pants_05","type":9,"armorType":3,"stats":[0,0,9,13,0,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,282,0,0,0,0,0,0,0,0,0,0,0,11,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,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":19060}}]}, {"id":15047,"name":"Red Dragonscale Breastplate","icon":"inv_chest_chain_06","type":5,"armorType":3,"stats":[0,0,0,0,0,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,360,0,0,0,0,0,0,0,0,0,12,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,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":2,"sources":[{"crafted":{"profession":8,"spellId":19054}}]}, -{"id":15048,"name":"Blue Dragonscale Breastplate","icon":"inv_chest_chain_04","type":5,"armorType":3,"stats":[0,0,0,25,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,338,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,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,"setName":"Blue Dragon Mail","expansion":2,"sources":[{"crafted":{"profession":8,"spellId":19077}}]}, -{"id":15049,"name":"Blue Dragonscale Shoulders","icon":"inv_shoulder_18","type":3,"armorType":3,"stats":[0,0,0,18,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,262,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,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,"setName":"Blue Dragon Mail","expansion":2,"sources":[{"crafted":{"profession":8,"spellId":19089}}]}, +{"id":15048,"name":"Blue Dragonscale Breastplate","icon":"inv_chest_chain_04","type":5,"armorType":3,"stats":[0,0,0,25,0,15,5,0,0,0,0,0,0,0,0,0,0,0,0,0,338,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,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,"setName":"Blue Dragon Mail","expansion":2,"sources":[{"crafted":{"profession":8,"spellId":19077}}]}, +{"id":15049,"name":"Blue Dragonscale Shoulders","icon":"inv_shoulder_18","type":3,"armorType":3,"stats":[0,0,0,18,0,13,4,0,0,0,0,0,0,0,0,0,0,0,0,0,262,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,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,"setName":"Blue Dragon Mail","expansion":2,"sources":[{"crafted":{"profession":8,"spellId":19089}}]}, {"id":15050,"name":"Black Dragonscale Breastplate","icon":"inv_chest_plate06","type":5,"armorType":3,"stats":[0,13,10,0,0,0,0,0,0,0,0,50,0,0,0,0,0,0,0,0,344,50,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":58,"phase":1,"quality":3,"setName":"Black Dragon Mail","expansion":3,"sources":[{"crafted":{"profession":8,"spellId":19085}}]}, {"id":15051,"name":"Black Dragonscale Shoulders","icon":"inv_shoulder_01","type":3,"armorType":3,"stats":[0,0,9,0,0,0,0,8,0,0,0,40,8,0,0,0,0,0,0,0,266,40,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,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":"Black Dragon Mail","expansion":3,"sources":[{"crafted":{"profession":8,"spellId":19094}}]}, {"id":15052,"name":"Black Dragonscale Leggings","icon":"inv_pants_03","type":9,"armorType":3,"stats":[0,0,12,0,0,0,0,0,11,0,0,54,0,11,0,0,0,0,0,0,310,54,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,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":"Black Dragon Mail","expansion":3,"sources":[{"crafted":{"profession":8,"spellId":19107}}]}, @@ -6140,7 +6140,7 @@ {"id":20264,"name":"Peacekeeper Gauntlets","icon":"inv_gauntlets_10","type":7,"armorType":4,"stats":[0,0,7,12,0,32,5,0,0,0,0,0,0,0,0,0,0,0,0,0,550,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,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}, {"id":20265,"name":"Peacekeeper Boots","icon":"inv_boots_plate_03","type":10,"armorType":4,"stats":[0,0,10,12,0,12,8,0,0,0,0,0,0,0,0,0,0,0,0,0,486,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,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":14517,"zoneId":1977}}]}, {"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,0,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":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":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}}]}, @@ -6845,7 +6845,7 @@ {"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"}, -{"id":22099,"name":"Gauntlets of The Five Thunders","icon":"inv_gauntlets_11","type":7,"armorType":3,"stats":[10,0,13,15,0,13,0,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":60,"phase":1,"quality":4,"setName":"The Five Thunders"}, +{"id":22099,"name":"Gauntlets of The Five Thunders","icon":"inv_gauntlets_11","type":7,"armorType":3,"stats":[10,0,13,15,0,13,6,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":60,"phase":1,"quality":4,"setName":"The Five Thunders"}, {"id":22100,"name":"Kilt of The Five Thunders","icon":"inv_pants_03","type":9,"armorType":3,"stats":[10,0,17,17,16,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,339,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,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":"The Five Thunders"}, {"id":22101,"name":"Pauldrons of The Five Thunders","icon":"inv_shoulder_29","type":3,"armorType":3,"stats":[10,0,11,11,10,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,286,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,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":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"}, @@ -12116,8 +12116,8 @@ {"id":38415,"name":"Frostscale Gloves","icon":"inv_gauntlets_30","type":7,"armorType":3,"stats":[0,30,28,20,0,0,0,0,0,0,0,58,0,0,0,0,0,0,0,0,454,58,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":142,"phase":1,"quality":2,"setName":"Frostscale Binding","expansion":3,"sources":[{"crafted":{"profession":8,"spellId":50953}}]}, {"id":38416,"name":"Frostscale Leggings","icon":"inv_pants_mail_15","type":9,"armorType":3,"stats":[0,50,0,0,0,0,0,0,33,0,0,68,0,33,0,0,0,0,0,0,635,68,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":142,"phase":1,"quality":2,"setName":"Frostscale Binding","expansion":3,"sources":[{"crafted":{"profession":8,"spellId":50951}}]}, {"id":38418,"name":"Nerubian Belt","icon":"inv_belt_02","type":8,"armorType":3,"stats":[0,0,35,24,0,42,0,0,0,0,0,0,0,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":138,"phase":1,"quality":2,"setName":"Nerubian Hive","expansion":3,"sources":[{"crafted":{"profession":8,"spellId":50961}}]}, -{"id":38419,"name":"Nerubian Boots","icon":"inv_boots_chain_07","type":10,"armorType":3,"stats":[0,0,27,0,0,45,0,0,0,0,0,0,0,0,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":142,"phase":1,"quality":2,"setName":"Nerubian Hive","expansion":3,"sources":[{"crafted":{"profession":8,"spellId":50960}}]}, -{"id":38420,"name":"Nerubian Chestguard","icon":"inv_chest_chain_13","type":5,"armorType":3,"stats":[0,0,0,32,0,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,706,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,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,"setName":"Nerubian Hive","expansion":3,"sources":[{"crafted":{"profession":8,"spellId":50956}}]}, +{"id":38419,"name":"Nerubian Boots","icon":"inv_boots_chain_07","type":10,"armorType":3,"stats":[0,0,27,0,0,45,15,0,0,0,0,0,0,0,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":142,"phase":1,"quality":2,"setName":"Nerubian Hive","expansion":3,"sources":[{"crafted":{"profession":8,"spellId":50960}}]}, +{"id":38420,"name":"Nerubian Chestguard","icon":"inv_chest_chain_13","type":5,"armorType":3,"stats":[0,0,0,32,0,56,16,0,0,0,0,0,0,0,0,0,0,0,0,0,706,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,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,"setName":"Nerubian Hive","expansion":3,"sources":[{"crafted":{"profession":8,"spellId":50956}}]}, {"id":38421,"name":"Nerubian Gloves","icon":"inv_gauntlets_05","type":7,"armorType":3,"stats":[0,0,0,22,0,41,0,0,23,0,0,0,0,23,0,0,0,0,0,0,429,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":134,"phase":1,"quality":2,"setName":"Nerubian Hive","expansion":3,"sources":[{"crafted":{"profession":8,"spellId":50959}}]}, {"id":38422,"name":"Nerubian Legguards","icon":"inv_pants_leather_09","type":9,"armorType":3,"stats":[0,0,0,34,0,56,0,0,30,0,0,0,0,30,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":138,"phase":1,"quality":2,"setName":"Nerubian Hive","expansion":3,"sources":[{"crafted":{"profession":8,"spellId":50957}}]}, {"id":38424,"name":"Frostscale Shoulders","icon":"inv_shoulder_76","type":3,"armorType":3,"stats":[0,38,19,0,0,0,0,0,0,0,0,63,0,0,0,0,0,0,0,0,544,63,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":142,"phase":1,"quality":2,"setName":"Frostscale Binding","expansion":3,"sources":[{"crafted":{"profession":8,"spellId":50952}}]}, @@ -12355,9 +12355,9 @@ {"id":44219,"name":"Darkmoon Magestaff","icon":"inv_staff_11","type":13,"weaponType":8,"handType":4,"stats":[0,0,0,0,0,30,0,0,0,0,0,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":101,"weaponDamageMax":152,"weaponSpeed":3.2,"ilvl":45,"phase":1,"quality":3,"sources":[{"quest":{"id":13311,"name":"Demons Deck"}}]}, {"id":44346,"name":"Warchief's Leggings of Wisdom","icon":"inv_pants_cloth_12","type":9,"armorType":1,"stats":[0,0,34,35,0,55,0,0,0,47,0,0,0,0,47,0,0,0,0,0,193,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":146,"phase":1,"quality":3,"sources":[{"quest":{"id":13267,"name":"The Battle For The Undercity"}}],"factionRestriction":2}, {"id":44347,"name":"Warchief's Legguards of Heroism","icon":"inv_pants_leather_01","type":9,"armorType":2,"stats":[0,0,34,46,37,55,0,0,0,0,0,0,0,0,0,0,0,0,0,0,362,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":146,"phase":1,"quality":3,"sources":[{"quest":{"id":13267,"name":"The Battle For The Undercity"}}],"factionRestriction":2}, -{"id":44348,"name":"Warchief's Leggings of Valor","icon":"inv_pants_mail_02","type":9,"armorType":3,"stats":[0,0,52,46,0,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0,805,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":146,"phase":1,"quality":3,"sources":[{"quest":{"id":13267,"name":"The Battle For The Undercity"}}],"factionRestriction":2}, +{"id":44348,"name":"Warchief's Leggings of Valor","icon":"inv_pants_mail_02","type":9,"armorType":3,"stats":[0,0,52,46,0,54,11,0,0,0,0,0,0,0,0,0,0,0,0,0,805,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":146,"phase":1,"quality":3,"sources":[{"quest":{"id":13267,"name":"The Battle For The Undercity"}}],"factionRestriction":2}, {"id":44349,"name":"Warchief's Legplates of Carnage","icon":"inv_pants_plate_30","type":9,"armorType":4,"stats":[37,0,0,0,0,0,0,28,65,0,0,0,28,65,0,0,0,0,0,0,1438,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":146,"phase":1,"quality":3,"sources":[{"quest":{"id":13267,"name":"The Battle For The Undercity"}}],"factionRestriction":2}, -{"id":44400,"name":"Necklace of Calm Skies","icon":"inv_jewelry_necklace_16","type":2,"stats":[0,0,22,26,0,30,0,0,0,0,0,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":146,"phase":1,"quality":3,"sources":[{"quest":{"id":13206,"name":"Disarmament"}}]}, +{"id":44400,"name":"Necklace of Calm Skies","icon":"inv_jewelry_necklace_16","type":2,"stats":[0,0,22,26,0,30,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,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":146,"phase":1,"quality":3,"sources":[{"quest":{"id":13206,"name":"Disarmament"}}]}, {"id":44401,"name":"Hundred Tooth Necklace","icon":"inv_jewelry_necklace_22","type":2,"stats":[0,17,39,0,0,0,0,0,0,0,0,52,0,0,0,18,0,0,0,0,0,52,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":146,"phase":1,"quality":3,"sources":[{"quest":{"id":13206,"name":"Disarmament"}}]}, {"id":44402,"name":"Tiled-Stone Pendant","icon":"inv_jewelry_necklace_06","type":2,"stats":[20,0,39,0,0,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,0,0,26,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":146,"phase":1,"quality":3,"sources":[{"quest":{"id":13206,"name":"Disarmament"}}]}, {"id":44403,"name":"Amulet of Constrained Power","icon":"inv_jewelry_necklace_07","type":2,"stats":[0,0,16,21,0,30,0,0,26,0,0,0,0,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":146,"phase":1,"quality":3,"sources":[{"quest":{"id":13206,"name":"Disarmament"}}]}, @@ -12366,7 +12366,7 @@ {"id":44583,"name":"Warchief's Legguards of Brutality","icon":"inv_pants_leather_02","type":9,"armorType":2,"stats":[0,47,39,0,0,0,0,0,34,0,0,94,0,34,0,0,0,0,0,0,362,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":146,"phase":1,"quality":3,"sources":[{"quest":{"id":13267,"name":"The Battle For The Undercity"}}],"factionRestriction":2}, {"id":44590,"name":"Warchief's Leggings of Foresight","icon":"inv_pants_mail_13","type":9,"armorType":3,"stats":[0,47,38,33,0,0,0,0,0,26,0,70,0,0,26,0,0,0,0,0,805,70,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":146,"phase":1,"quality":3,"sources":[{"quest":{"id":13267,"name":"The Battle For The Undercity"}}],"factionRestriction":2}, {"id":44591,"name":"Wrynn's Leggings of Foresight","icon":"inv_pants_mail_13","type":9,"armorType":3,"stats":[0,47,38,33,0,0,0,0,0,26,0,70,0,0,26,0,0,0,0,0,805,70,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":146,"phase":1,"quality":3,"sources":[{"quest":{"id":13377,"name":"The Battle For The Undercity"}}],"factionRestriction":1}, -{"id":44592,"name":"Wrynn's Leggings of Valor","icon":"inv_pants_mail_02","type":9,"armorType":3,"stats":[0,0,52,46,0,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0,805,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":146,"phase":1,"quality":3,"sources":[{"quest":{"id":13377,"name":"The Battle For The Undercity"}}],"factionRestriction":1}, +{"id":44592,"name":"Wrynn's Leggings of Valor","icon":"inv_pants_mail_02","type":9,"armorType":3,"stats":[0,0,52,46,0,54,11,0,0,0,0,0,0,0,0,0,0,0,0,0,805,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":146,"phase":1,"quality":3,"sources":[{"quest":{"id":13377,"name":"The Battle For The Undercity"}}],"factionRestriction":1}, {"id":44593,"name":"Wrynn's Leggings of Wisdom","icon":"inv_pants_cloth_12","type":9,"armorType":1,"stats":[0,0,34,35,0,55,0,0,0,47,0,0,0,0,47,0,0,0,0,0,193,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":146,"phase":1,"quality":3,"sources":[{"quest":{"id":13377,"name":"The Battle For The Undercity"}}],"factionRestriction":1}, {"id":44594,"name":"Wrynn's Legguards of Brutality","icon":"inv_pants_leather_02","type":9,"armorType":2,"stats":[0,47,39,0,0,0,0,0,34,0,0,94,0,34,0,0,0,0,0,0,362,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":146,"phase":1,"quality":3,"sources":[{"quest":{"id":13377,"name":"The Battle For The Undercity"}}],"factionRestriction":1}, {"id":44595,"name":"Wrynn's Legguards of Heroism","icon":"inv_pants_leather_01","type":9,"armorType":2,"stats":[0,0,34,46,37,55,0,0,0,0,0,0,0,0,0,0,0,0,0,0,362,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"socketBonus":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":146,"phase":1,"quality":3,"sources":[{"quest":{"id":13377,"name":"The Battle For The Undercity"}}],"factionRestriction":1}, diff --git a/sim/core/apl.go b/sim/core/apl.go index 15cc3c8084..dcee34836f 100644 --- a/sim/core/apl.go +++ b/sim/core/apl.go @@ -173,7 +173,17 @@ func (rot *APLRotation) getStats() *proto.APLStats { // Returns all action objects as an unstructured list. Used for easily finding specific actions. func (rot *APLRotation) allAPLActions() []*APLAction { - return Flatten(MapSlice(rot.priorityList, func(action *APLAction) []*APLAction { return action.GetAllActions() })) + if rot == nil || rot.priorityList == nil { + return []*APLAction{} + } + + return Flatten(MapSlice(rot.priorityList, func(action *APLAction) []*APLAction { + // Check if action is nil before calling GetAllActions + if action == nil { + return []*APLAction{} + } + return action.GetAllActions() + })) } // Returns all action objects from the prepull as an unstructured list. Used for easily finding specific actions. diff --git a/tools/database/gen_db/main.go b/tools/database/gen_db/main.go index b8931d749f..0b641a9465 100644 --- a/tools/database/gen_db/main.go +++ b/tools/database/gen_db/main.go @@ -458,98 +458,98 @@ func GetAllRotationSpellIds() map[string][]int32 { Class: proto.Class_ClassDruid, Equipment: &proto.EquipmentSpec{}, TalentsString: "5102233115331303213305311031--205003002", - }, &proto.Player_BalanceDruid{BalanceDruid: &proto.BalanceDruid{Options: &proto.BalanceDruid_Options{}, Rotation: &proto.BalanceDruid_Rotation{}}}), nil, nil, nil)}, + }, &proto.Player_BalanceDruid{BalanceDruid: &proto.BalanceDruid{Options: &proto.BalanceDruid_Options{}}}), nil, nil, nil)}, {Name: "guardian", Raid: core.SinglePlayerRaidProto(core.WithSpec(&proto.Player{ Class: proto.Class_ClassDruid, Equipment: &proto.EquipmentSpec{}, TalentsString: "-503232132322010353120300313511-20350001", - }, &proto.Player_FeralTankDruid{FeralTankDruid: &proto.FeralTankDruid{Options: &proto.FeralTankDruid_Options{}, Rotation: &proto.FeralTankDruid_Rotation{}}}), nil, nil, nil)}, + }, &proto.Player_FeralTankDruid{FeralTankDruid: &proto.FeralTankDruid{Options: &proto.FeralTankDruid_Options{}}}), nil, nil, nil)}, {Name: "restodruid", Raid: core.SinglePlayerRaidProto(core.WithSpec(&proto.Player{ Class: proto.Class_ClassDruid, Equipment: &proto.EquipmentSpec{}, TalentsString: "05320031103--230023312131502331050313051", - }, &proto.Player_RestorationDruid{RestorationDruid: &proto.RestorationDruid{Options: &proto.RestorationDruid_Options{}, Rotation: &proto.RestorationDruid_Rotation{}}}), nil, nil, nil)}, + }, &proto.Player_RestorationDruid{RestorationDruid: &proto.RestorationDruid{Options: &proto.RestorationDruid_Options{}}}), nil, nil, nil)}, {Name: "elemental", Raid: core.SinglePlayerRaidProto(core.WithSpec(&proto.Player{ Class: proto.Class_ClassShaman, Race: proto.Race_RaceTroll, Equipment: &proto.EquipmentSpec{}, TalentsString: "0532001523212351322301351-005052031", - }, &proto.Player_ElementalShaman{ElementalShaman: &proto.ElementalShaman{Options: &proto.ElementalShaman_Options{}, Rotation: &proto.ElementalShaman_Rotation{}}}), nil, nil, nil)}, + }, &proto.Player_ElementalShaman{ElementalShaman: &proto.ElementalShaman{Options: &proto.ElementalShaman_Options{}}}), nil, nil, nil)}, {Name: "enhance", Raid: core.SinglePlayerRaidProto(core.WithSpec(&proto.Player{ Class: proto.Class_ClassShaman, Race: proto.Race_RaceTroll, Equipment: &proto.EquipmentSpec{}, TalentsString: "053030152-30405003105021333031131031051", - }, &proto.Player_EnhancementShaman{EnhancementShaman: &proto.EnhancementShaman{Options: &proto.EnhancementShaman_Options{}, Rotation: &proto.EnhancementShaman_Rotation{}}}), nil, nil, nil)}, + }, &proto.Player_EnhancementShaman{EnhancementShaman: &proto.EnhancementShaman{Options: &proto.EnhancementShaman_Options{}}}), nil, nil, nil)}, {Name: "restosham", Raid: core.SinglePlayerRaidProto(core.WithSpec(&proto.Player{ Class: proto.Class_ClassShaman, Race: proto.Race_RaceTroll, Equipment: &proto.EquipmentSpec{}, TalentsString: "-3020503-50005331335310501122331251", - }, &proto.Player_RestorationShaman{RestorationShaman: &proto.RestorationShaman{Options: &proto.RestorationShaman_Options{}, Rotation: &proto.RestorationShaman_Rotation{}}}), nil, nil, nil)}, + }, &proto.Player_RestorationShaman{RestorationShaman: &proto.RestorationShaman{Options: &proto.RestorationShaman_Options{}}}), nil, nil, nil)}, {Name: "hunter", Raid: core.SinglePlayerRaidProto(core.WithSpec(&proto.Player{ Class: proto.Class_ClassHunter, Race: proto.Race_RaceTroll, Equipment: &proto.EquipmentSpec{}, TalentsString: "-015305101-5000032500033330532135301311", - }, &proto.Player_Hunter{Hunter: &proto.Hunter{Options: &proto.Hunter_Options{}, Rotation: &proto.Hunter_Rotation{}}}), nil, nil, nil)}, + }, &proto.Player_Hunter{Hunter: &proto.Hunter{Options: &proto.Hunter_Options{}}}), nil, nil, nil)}, {Name: "mage", Raid: core.SinglePlayerRaidProto(core.WithSpec(&proto.Player{ Class: proto.Class_ClassMage, Race: proto.Race_RaceTroll, Equipment: &proto.EquipmentSpec{}, TalentsString: "23000513310033015032310250532-03-023303001", - }, &proto.Player_Mage{Mage: &proto.Mage{Options: &proto.Mage_Options{}, Rotation: &proto.Mage_Rotation{}}}), nil, nil, nil)}, + }, &proto.Player_Mage{Mage: &proto.Mage{Options: &proto.Mage_Options{}}}), nil, nil, nil)}, {Name: "healingpriest", Raid: core.SinglePlayerRaidProto(core.WithSpec(&proto.Player{ Class: proto.Class_ClassPriest, Equipment: &proto.EquipmentSpec{}, TalentsString: "0503203130300512301313231251-2351010303", - }, &proto.Player_HealingPriest{HealingPriest: &proto.HealingPriest{Options: &proto.HealingPriest_Options{}, Rotation: &proto.HealingPriest_Rotation{}}}), nil, nil, nil)}, + }, &proto.Player_HealingPriest{HealingPriest: &proto.HealingPriest{Options: &proto.HealingPriest_Options{}}}), nil, nil, nil)}, {Name: "shadow", Raid: core.SinglePlayerRaidProto(core.WithSpec(&proto.Player{ Class: proto.Class_ClassPriest, Equipment: &proto.EquipmentSpec{}, TalentsString: "05032031--325023051223010323151301351", - }, &proto.Player_ShadowPriest{ShadowPriest: &proto.ShadowPriest{Options: &proto.ShadowPriest_Options{}, Rotation: &proto.ShadowPriest_Rotation{}}}), nil, nil, nil)}, + }, &proto.Player_ShadowPriest{ShadowPriest: &proto.ShadowPriest{Options: &proto.ShadowPriest_Options{}}}), nil, nil, nil)}, {Name: "rogue", Raid: core.SinglePlayerRaidProto(core.WithSpec(&proto.Player{ Class: proto.Class_ClassRogue, Equipment: &proto.EquipmentSpec{}, TalentsString: "00532000523-0252051050035010223100501251", - }, &proto.Player_Rogue{Rogue: &proto.Rogue{Options: &proto.Rogue_Options{}, Rotation: &proto.Rogue_Rotation{}}}), nil, nil, nil)}, + }, &proto.Player_Rogue{Rogue: &proto.Rogue{Options: &proto.Rogue_Options{}}}), nil, nil, nil)}, {Name: "warrior", Raid: core.SinglePlayerRaidProto(core.WithSpec(&proto.Player{ Class: proto.Class_ClassWarrior, Equipment: &proto.EquipmentSpec{}, TalentsString: "302023102331-305053000520310053120500351", - }, &proto.Player_Warrior{Warrior: &proto.Warrior{Options: &proto.Warrior_Options{}, Rotation: &proto.Warrior_Rotation{}}}), nil, nil, nil)}, + }, &proto.Player_Warrior{Warrior: &proto.Warrior{Options: &proto.Warrior_Options{}}}), nil, nil, nil)}, {Name: "protwarrior", Raid: core.SinglePlayerRaidProto(core.WithSpec(&proto.Player{ Class: proto.Class_ClassWarrior, Equipment: &proto.EquipmentSpec{}, TalentsString: "2500030023-302-053351225000012521030113321", - }, &proto.Player_ProtectionWarrior{ProtectionWarrior: &proto.ProtectionWarrior{Options: &proto.ProtectionWarrior_Options{}, Rotation: &proto.ProtectionWarrior_Rotation{}}}), nil, nil, nil)}, + }, &proto.Player_ProtectionWarrior{ProtectionWarrior: &proto.ProtectionWarrior{Options: &proto.ProtectionWarrior_Options{}}}), nil, nil, nil)}, {Name: "holypally", Raid: core.SinglePlayerRaidProto(core.WithSpec(&proto.Player{ Class: proto.Class_ClassPaladin, Equipment: &proto.EquipmentSpec{}, TalentsString: "50350151020013053100515221-50023131203", - }, &proto.Player_HolyPaladin{HolyPaladin: &proto.HolyPaladin{Options: &proto.HolyPaladin_Options{}, Rotation: &proto.HolyPaladin_Rotation{}}}), nil, nil, nil)}, + }, &proto.Player_HolyPaladin{HolyPaladin: &proto.HolyPaladin{Options: &proto.HolyPaladin_Options{}}}), nil, nil, nil)}, {Name: "protpally", Raid: core.SinglePlayerRaidProto(core.WithSpec(&proto.Player{ Class: proto.Class_ClassPaladin, Equipment: &proto.EquipmentSpec{}, TalentsString: "-05005135200132311333312321-511302012003", - }, &proto.Player_ProtectionPaladin{ProtectionPaladin: &proto.ProtectionPaladin{Options: &proto.ProtectionPaladin_Options{}, Rotation: &proto.ProtectionPaladin_Rotation{}}}), nil, nil, nil)}, + }, &proto.Player_ProtectionPaladin{ProtectionPaladin: &proto.ProtectionPaladin{Options: &proto.ProtectionPaladin_Options{}}}), nil, nil, nil)}, {Name: "ret", Raid: core.SinglePlayerRaidProto(core.WithSpec(&proto.Player{ Class: proto.Class_ClassPaladin, Race: proto.Race_RaceBloodElf, Equipment: &proto.EquipmentSpec{}, TalentsString: "050501-05-05232051203331302133231331", - }, &proto.Player_RetributionPaladin{RetributionPaladin: &proto.RetributionPaladin{Options: &proto.RetributionPaladin_Options{}, Rotation: &proto.RetributionPaladin_Rotation{}}}), nil, nil, nil)}, + }, &proto.Player_RetributionPaladin{RetributionPaladin: &proto.RetributionPaladin{Options: &proto.RetributionPaladin_Options{}}}), nil, nil, nil)}, {Name: "warlock", Raid: core.SinglePlayerRaidProto(core.WithSpec(&proto.Player{ Class: proto.Class_ClassWarlock, Equipment: &proto.EquipmentSpec{}, TalentsString: "2350002030023510253500331151--550000051", - }, &proto.Player_Warlock{Warlock: &proto.Warlock{Options: &proto.Warlock_Options{}, Rotation: &proto.Warlock_Rotation{}}}), nil, nil, nil)}, + }, &proto.Player_Warlock{Warlock: &proto.Warlock{Options: &proto.Warlock_Options{}}}), nil, nil, nil)}, {Name: "dk", Raid: core.SinglePlayerRaidProto(core.WithSpec(&proto.Player{ Class: proto.Class_ClassDeathknight, Equipment: &proto.EquipmentSpec{}, TalentsString: "-320043500002-2300303050032152000150013133051", - }, &proto.Player_Deathknight{Deathknight: &proto.Deathknight{Options: &proto.Deathknight_Options{}, Rotation: &proto.Deathknight_Rotation{}}}), nil, nil, nil)}, + }, &proto.Player_Deathknight{Deathknight: &proto.Deathknight{Options: &proto.Deathknight_Options{}}}), nil, nil, nil)}, {Name: "tankdk", Raid: core.SinglePlayerRaidProto(core.WithSpec(&proto.Player{ Class: proto.Class_ClassDeathknight, Equipment: &proto.EquipmentSpec{}, diff --git a/tools/database/wowhead_tooltips.go b/tools/database/wowhead_tooltips.go index 480f82cabc..01a69e3124 100644 --- a/tools/database/wowhead_tooltips.go +++ b/tools/database/wowhead_tooltips.go @@ -177,6 +177,7 @@ var hasteRegex = regexp.MustCompile(`Improves haste rating by ([0-9] var spellPenetrationRegex = regexp.MustCompile(`Increases your spell penetration by ([0-9]+)\.`) var mp5Regex = regexp.MustCompile(`Restores ([0-9]+) mana per 5 sec\.`) +var mp5Regex2 = regexp.MustCompile(`Restores ([0-9]+) mana per 5 sec\.`) var attackPowerRegex = regexp.MustCompile(`Increases attack power by ([0-9]+)\.`) var attackPowerRegex2 = regexp.MustCompile(`Increases attack power by ([0-9]+)\.`) @@ -229,7 +230,7 @@ func (item WowheadItemResponse) GetStats() Stats { proto.Stat_StatSpellHaste: float64(item.GetIntValue(hasteRegex)), proto.Stat_StatMeleeHaste: float64(item.GetIntValue(hasteRegex)), proto.Stat_StatSpellPenetration: float64(item.GetIntValue(spellPenetrationRegex)), - proto.Stat_StatMP5: float64(item.GetIntValue(mp5Regex)), + proto.Stat_StatMP5: float64(item.GetIntValue(mp5Regex)) + float64(item.GetIntValue(mp5Regex2)), proto.Stat_StatAttackPower: baseAP, proto.Stat_StatRangedAttackPower: baseAP + float64(item.GetIntValue(rangedAttackPowerRegex)) + float64(item.GetIntValue(rangedAttackPowerRegex2)), proto.Stat_StatArmorPenetration: float64(item.GetIntValue(armorPenetrationRegex) + item.GetIntValue(armorPenetrationRegex2)),