diff --git a/Modules/Data/Constants.lua b/Modules/Data/Constants.lua index 0eb541b5..9239fd25 100755 --- a/Modules/Data/Constants.lua +++ b/Modules/Data/Constants.lua @@ -20,28 +20,58 @@ Data.MAGE = 8 Data.WARLOCK = 9 Data.DRUID = 11 +Data.BEAST = 1 +Data.DRAGONKIN = 2 +Data.DEMON = 3 +Data.ELEMENTAL = 4 +Data.GIANT = 5 +Data.UNDEAD = 6 +Data.HUMANOID = 7 +Data.MECHANICAL = 9 +Data.UNCATEGORIZED = 10 + Data.setNames = { + AUGURS_REGALIA = "Augur's Regalia", BATTLEGEAR_OF_MIGHT = "Battlegear of Might", + CHAIN_OF_THE_SCARLET_CRUSADE = "Chain of the Scarlet Crusade", + FREETHINKERS_ARMOR = "Freethinker's Armor", + HARUSPEXS_GARB = "Haruspex's Garb", STORMRAGE_RAIMENT = "Stormrage Raiment", - VESTMENTS_OF_TRANSCENDENCE = "Vestments of Transcendence", TEN_STORMS = "The Ten Storms", THE_EARTHSHATTERER = "The Earthshatterer", - HARUSPEXS_GARB = "Haruspex's Garb", - AUGURS_REGALIA = "Augur's Regalia", - FREETHINKERS_ARMOR = "Freethinker's Armor" + THE_TWIN_BLADES_OF_AZZINOTH = "The Twin Blades of Azzinoth", + VESTMENTS_OF_TRANSCENDENCE = "Vestments of Transcendence", } Data.enchantIds = { + BEASTSLAYER = "249", -- +2 physical/spell damage vs beasts BIZNICK_SCOPE = "2523", -- 3% Hit from Biznicks 247x128 Accurascope BRACER_MANA_REGENERATION = "2565", -- 4 MP5 on bracer - PROPHETIC_AURA = "2590", -- 4 MP5 for priest ZG Enchant - RESILIENCE_OF_THE_SCOURGE = "2715", -- 4 MP5 for priest ZG Enchant - INSCRIPTION_OF_FAITH = "2980", -- 4 MP5 from aldor enchant - GLYPH_OF_RENEWAL = "3001", -- 7 MP5 from Honor Hold/Thrallmar enchant - RESTORE_MANA_PRIME = "3150", -- 6 MP5 on chest BRILLIANT_MANA_OIL = "2629", -- 12 MP5 + GLYPH_OF_RENEWAL = "3001", -- 7 MP5 from Honor Hold/Thrallmar enchant + INCREASED_DAMAGE_BEAST_10 = "192", -- +10 physical/spell vs beasts + INCREASED_DAMAGE_BEAST_12 = "193", -- +12 physical/spell vs beasts + INCREASED_DAMAGE_BEAST_14 = "194", -- +14 physical/spell vs beasts + INCREASED_DAMAGE_BEAST_2 = "188", -- +2 physical/spell vs beasts + INCREASED_DAMAGE_BEAST_4 = "189", -- +4 physical/spell vs beasts + INCREASED_DAMAGE_BEAST_6 = "190", -- +6 physical/spell vs beasts + INCREASED_DAMAGE_BEAST_8 = "191", -- +8 physical/spell vs beasts + INCREASE_SPELL_DAM_UNDEAD_100 = "3592", -- 100 spellpower vs undead (wotlk) + INCREASE_SPELL_DAM_UNDEAD_60 = "2685", -- 60 spell power vs undead + INSCRIPTION_OF_FAITH = "2980", -- 4 MP5 from aldor enchant + LESSER_BEAST_SLAYER = "853", -- +6 physical/spell vs beasts + LESSER_ELEMENTAL_SLAYER = "854", -- +6 physical/spell vs elementals LESSER_MANA_OIL = "2625", -- 8 MP5 + MINOR_BEAST_SLAYER = "31", -- +2 physical/spell vs beasts MINOR_MANA_OIL = "2624", -- 4 MP5 + PROPHETIC_AURA = "2590", -- 4 MP5 for priest ZG Enchant + RESILIENCE_OF_THE_SCOURGE = "2715", -- 4 MP5 for priest ZG Enchant + RESTORE_MANA_PRIME = "3150", -- 6 MP5 on chest + UNDEAD_DEMON_SLAYER_150 = "3093", -- +150 melee/ranged attack power vs undead and demons (tbc) + UNDEAD_SLAYER = "3247", -- 140 melee/ranged attack power vs undead (wotlk) + UNDEAD_SLAYER_100 = "2684", -- +100 melee/ranged Attack Power vs Undead + UNDEAD_SLAYER_170 = "3593", -- 170 melee/ranged attack power vs undead (wotlk) + UNDEAD_SLAYER_200 = "7896", -- 200 melee/ranged attack power vs undead (SoD) } Data.gemIds = { @@ -50,3 +80,30 @@ Data.gemIds = { TWO_MP5_GEMS = {"30589", "32225", "24065", "30594", "31865", "32214", "30606", "23121", "24057", "32216", "30603", "30560", "30550"}, ONE_MP5_GEMS = {"23106", "31864", "28465", "23109"} } + +Data.itemIds = { + BEAST_SLAYING_24 = {11628, 11629}, + BEAST_SLAYING_30 = {11906, 7756, 3566}, + BEAST_SLAYING_33 = {15783, 15782}, + BEAST_SLAYING_60 = {7710, 19946}, + BEAST_SLAYING_99 = {231272, 231849}, -- sod + DEMON_SLAYING_33 = {10697, 10696}, + DEMON_SLAYING_45 = {18715, 20487}, + DEMON_SLAYING_141 = {231277, 231864}, -- sod + DRAGON_SLAYING_60 = {231274, 231847}, -- sod + DRAGON_SLAYING_141 = {231273, 231846}, -- sod + INCREASE_SPELL_DAM_UNDEAD_26 = {236722, 236739, 236723, 236738, 236724, 236737}, + INCREASE_SPELL_DAM_UNDEAD_35 = {23084, 18346}, + INCREASE_SPELL_DAM_UNDEAD_35_SOD = {236716, 236734, 236725}, + INCREASE_SPELL_DAM_UNDEAD_48 = {23085, 24198}, + INCREASE_SPELL_DAM_UNDEAD_48_SOD = {236717, 236735, 236726}, + INCREASE_SPELL_DAM_UNDEAD_62 = {236736, 236718, 236727}, + UNDEAD_SLAYER_30 = {867, 10805}, + UNDEAD_SLAYER_45_SOD = {236746, 236748, 236747, 236732, 236733, 236731}, + UNDEAD_SLAYER_45 = {23090, 23092, 23093}, -- without specter's blade + UNDEAD_SLAYER_60_SOD = {236712, 236710, 236711}, + UNDEAD_SLAYER_60 = {23078, 23082, 23081}, + UNDEAD_SLAYER_81_SOD = {236714, 236715, 236713}, + UNDEAD_SLAYER_81 = {23087, 23088, 23089}, + UNDEAD_SLAYER_108 = {236708, 236709, 236707}, -- sod +} diff --git a/Modules/Data/ItemSets.lua b/Modules/Data/ItemSets.lua index 3cd5ca8b..aab97513 100755 --- a/Modules/Data/ItemSets.lua +++ b/Modules/Data/ItemSets.lua @@ -77,8 +77,31 @@ local itemSets = { [19827] = true, [19952] = true }, + [setNames.CHAIN_OF_THE_SCARLET_CRUSADE] = { + [10328] = true, + [10329] = true, + [10330] = true, + [10331] = true, + [10332] = true, + [10333] = true + }, + [setNames.THE_TWIN_BLADES_OF_AZZINOTH] = { + [32837] = true, + [32838] = true + }, } +function Data:HasDemonSlaying200() + if classId == Data.ROGUE or classId == Data.WARRIOR then + return Data:IsSetBonusActive(setNames.THE_TWIN_BLADES_OF_AZZINOTH, 2) + end + return false +end + +function Data:HasUndeadSlayer15() + return Data:IsSetBonusActive(setNames.CHAIN_OF_THE_SCARLET_CRUSADE, 5) +end + function Data:HasSetBonusModifierMP5() if classId == Data.PRIEST then return Data:IsSetBonusActive(setNames.VESTMENTS_OF_TRANSCENDENCE, 3) @@ -126,4 +149,4 @@ function Data:IsSetBonusActive(setName, bonusLevel) end end return (equippedPieces >= bonusLevel) -end \ No newline at end of file +end diff --git a/Modules/Data/Melee.lua b/Modules/Data/Melee.lua index 0f0642c7..a3cf5176 100755 --- a/Modules/Data/Melee.lua +++ b/Modules/Data/Melee.lua @@ -8,12 +8,269 @@ local Utils = ECSLoader:ImportModule("Utils") local _Melee = {} local _, _, classId = UnitClass("player") +local w1Id, _ = GetInventoryItemID("player", 16) +local w2Id, _ = GetInventoryItemID("player", 17) +local weaponsId = {w1Id, w2Id} + ---@return string function Data:GetMeleeAttackPower() local melee, posBuff, negBuff = UnitAttackPower("player") return melee + posBuff + negBuff end +---@param creature number +---@return string +function Data:GetMeleeAttackPowerVsCreature(creature) + local dmg = 0 + if creature == Data.UNDEAD then + -- enchants + for i = 1, 18 do + local itemLink = GetInventoryItemLink("player", i) + if itemLink then + local enchant = DataUtils:GetEnchantFromItemLink(itemLink) + if enchant and enchant == Data.enchantIds.UNDEAD_SLAYER_100 then dmg = dmg + 100 end + end + end + -- auras + if C_UnitAuras.GetPlayerAuraBySpellID(24833) then dmg = dmg + 300 end -- holy mightstone + if C_UnitAuras.GetPlayerAuraBySpellID(17352) then dmg = dmg + 200 end -- Argent Avenger + -- sets + if Data:HasUndeadSlayer15() then dmg = dmg + 15 end + -- items + for _, i in pairs(Data.itemIds.UNDEAD_SLAYER_30) do + if C_Item.IsEquippedItem(i) then dmg = dmg + 30 end + end + for _, i in pairs(Data.itemIds.UNDEAD_SLAYER_45) do + if C_Item.IsEquippedItem(i) then dmg = dmg + 45 end + end + for _, i in pairs(Data.itemIds.UNDEAD_SLAYER_60) do + if C_Item.IsEquippedItem(i) then dmg = dmg + 60 end + end + for _, i in pairs(Data.itemIds.UNDEAD_SLAYER_81) do + if C_Item.IsEquippedItem(i) then dmg = dmg + 81 end + end + if C_Item.IsEquippedItem(13209) then dmg = dmg + 81 end -- Seal of the Dawn + -- weapons + for _, i in pairs(weaponsId) do + if i and i == 13017 then dmg = dmg + 66 end -- Hellslayer Battle Axe + end + -- + if ECS.IsSod then + -- enchants + for i = 1, 18 do + local itemLink = GetInventoryItemLink("player", i) + if itemLink then + local enchant = DataUtils:GetEnchantFromItemLink(itemLink) + if enchant and enchant == Data.enchantIds.UNDEAD_SLAYER_200 then dmg = dmg + 200 end + end + end + -- items + for _, i in pairs(Data.itemIds.UNDEAD_SLAYER_45_SOD) do + if C_Item.IsEquippedItem(i) then dmg = dmg + 45 end + end + for _, i in pairs(Data.itemIds.UNDEAD_SLAYER_60_SOD) do + if C_Item.IsEquippedItem(i) then dmg = dmg + 60 end + end + for _, i in pairs(Data.itemIds.UNDEAD_SLAYER_81_SOD) do + if C_Item.IsEquippedItem(i) then dmg = dmg + 81 end + end + for _, i in pairs(Data.itemIds.UNDEAD_SLAYER_108_SOD) do + if C_Item.IsEquippedItem(i) then dmg = dmg + 108 end + end + if C_Item.IsEquippedItem(209574) then dmg = dmg + 15 end -- Discarded Tenets of the Silver Hand + -- weapons + for _, i in pairs(weaponsId) do + if i then + if i == 220575 then dmg = dmg + 39 -- Eater of the Damned + elseif i == 228030 then dmg = dmg + 30 end -- Malicious Axe + end + end + elseif ECS.IsWotlk then + -- enchants + for i = 1, 18 do + local itemLink = GetInventoryItemLink("player", i) + if itemLink then + local enchant = DataUtils:GetEnchantFromItemLink(itemLink) + if enchant then + if enchant == Data.enchantIds.UNDEAD_SLAYER then dmg = dmg + 140 + elseif enchant == Data.enchantIds.UNDEAD_SLAYER_170 then dmg = dmg + 170 end + end + end + end + -- auras + if C_UnitAuras.GetPlayerAuraBySpellID(58026) then dmg = dmg + 12000 end -- Blessing of the Crusade + end + if ECS.IsTbc or ECS.IsWotlk then + -- auras + if C_UnitAuras.GetPlayerAuraBySpellID(28486) then dmg = dmg + 30 end -- Scourgebane Draught + end + elseif creature == Data.DEMON then + -- auras + if C_UnitAuras.GetPlayerAuraBySpellID(11406) then dmg = dmg + 265 end -- Elixir of Demonslaying + -- items + for _, i in pairs(Data.itemIds.DEMON_SLAYING_33) do + if C_Item.IsEquippedItem(i) then dmg = dmg + 33 end + end + for _, i in pairs(Data.itemIds.DEMON_SLAYING_45) do + if C_Item.IsEquippedItem(i) then dmg = dmg + 45 end + end + -- weapons + for _, i in pairs(weaponsId) do + if i then + if i == 10698 then dmg = dmg + 78 -- Enchanted Azsharite Felbane Staff + elseif i == 13044 then dmg = dmg + 99 -- Demonslayer + elseif i == 19963 then dmg = dmg + 117 end -- Pitchfork of Madness + end + end + -- + if ECS.IsSod then + -- items + for _, i in pairs(Data.itemIds.DEMON_SLAYING_141) do + if C_Item.IsEquippedItem(i) then dmg = dmg + 141 end + end + -- weapons + for _, i in pairs(weaponsId) do + if i and i == 228332 then dmg = dmg + 45 end -- Lok'delar, Stave of the Ancient Keepers + end + elseif ECS.IsTbc or ECS.IsWotlk then + -- sets + if Data:HasDemonSlaying200() then dmg = dmg + 200 end + -- items + if C_Item.IsEquippedItem(29398) then dmg = dmg + 39 end -- Circle of Banishing (ring but unique) + -- weapons + for _, i in pairs(weaponsId) do + if i then + if i == 220575 then dmg = dmg + 150 -- Illidari-Bane Claymore + elseif i == 30788 or i == 31745 then dmg = dmg + 93 end -- Illidari-Bane Dagger and Broadsword + end + end + end + elseif creature == Data.BEAST then + -- enchants + for i = 1, 18 do + local itemLink = GetInventoryItemLink("player", i) + if itemLink then + local enchant = DataUtils:GetEnchantFromItemLink(itemLink) + if enchant then + if enchant == Data.enchantIds.BEASTSLAYER then dmg = dmg + 2 + elseif enchant == Data.enchantIds.LESSER_BEAST_SLAYER then dmg = dmg + 6 + elseif enchant == Data.enchantIds.MINOR_BEAST_SLAYER then dmg = dmg + 2 + elseif enchant == Data.enchantIds.INCREASED_DAMAGE_BEAST_2 then dmg = dmg + 2 + elseif enchant == Data.enchantIds.INCREASED_DAMAGE_BEAST_4 then dmg = dmg + 4 + elseif enchant == Data.enchantIds.INCREASED_DAMAGE_BEAST_6 then dmg = dmg + 6 + elseif enchant == Data.enchantIds.INCREASED_DAMAGE_BEAST_8 then dmg = dmg + 8 + elseif enchant == Data.enchantIds.INCREASED_DAMAGE_BEAST_10 then dmg = dmg + 10 + elseif enchant == Data.enchantIds.INCREASED_DAMAGE_BEAST_12 then dmg = dmg + 12 + elseif enchant == Data.enchantIds.INCREASED_DAMAGE_BEAST_14 then dmg = dmg + 14 + end + end + end + end + -- items + for _, i in pairs(Data.itemIds.BEAST_SLAYING_24) do + if C_Item.IsEquippedItem(i) then dmg = dmg + 24 end + end + for _, i in pairs(Data.itemIds.BEAST_SLAYING_30) do + if C_Item.IsEquippedItem(i) then dmg = dmg + 30 end + end + for _, i in pairs(Data.itemIds.BEAST_SLAYING_33) do + if C_Item.IsEquippedItem(i) then dmg = dmg + 33 end + end + for _, i in pairs(Data.itemIds.BEAST_SLAYING_60) do + if C_Item.IsEquippedItem(i) then dmg = dmg + 60 end + end + if C_Item.IsEquippedItem(16658) then dmg = dmg + 18 end -- Wildhunter Cloak + if C_Item.IsEquippedItem(13212) then dmg = dmg + 48 end -- Halycon's Spiked Collar + -- weapons + for _, i in pairs(weaponsId) do + if i then + if i == 11907 then dmg = dmg + 72 -- Beastslayer + elseif i == 1465 then dmg = dmg + 18 -- tigerbane + elseif i == 12709 then dmg = dmg + 45 end -- pip's skinner + end + end + -- + if ECS.IsSod then + -- items + for _, i in pairs(Data.itemIds.BEAST_SLAYING_99) do + if C_Item.IsEquippedItem(i) then dmg = dmg + 99 end + end + elseif ECS.IsWotlk then + -- items + if C_Item.IsEquippedItem(37018) then dmg = dmg - 40 end -- G.E.H.T.A. + end + elseif creature == Data.DRAGONKIN then + -- weapons + for _, i in pairs(weaponsId) do + if i then + if i == 19961 then dmg = dmg + 48 -- Gri'lek's Grinder + elseif i == 19962 then dmg = dmg + 117 end -- Gri'lek's Carver + end + end + -- + if ECS.IsSod then + -- items + if C_Item.IsEquippedItem(221457) then + dmg = dmg + 36 -- Libram of Draconic Destruction + end + for _, i in pairs(Data.itemIds.DRAGON_SLAYING_60) do + if C_Item.IsEquippedItem(i) then dmg = dmg + 60 end + end + for _, i in pairs(Data.itemIds.DRAGON_SLAYING_141) do + if C_Item.IsEquippedItem(i) then dmg = dmg + 141 end + end + -- weapons + for _, i in pairs(weaponsId) do + if i and i == 220965 then dmg = dmg + 117 end -- Scalebane Greataxe + end + end + elseif creature == Data.ELEMENTAL then + -- enchants + for i = 1, 18 do + local itemLink = GetInventoryItemLink("player", i) + if itemLink then + local enchant = DataUtils:GetEnchantFromItemLink(itemLink) + if enchant and enchant == Data.enchantIds.LESSER_ELEMENTAL_SLAYER then dmg = dmg + 6 end + end + end + -- weapons + for _, i in pairs(weaponsId) do + if i and i == 18310 then dmg = dmg + 36 end -- Fiendish Machete + end + -- + if ECS.IsSod then + -- weapons + for _, i in pairs(weaponsId) do + if i then + if i == 228056 then dmg = dmg + 36 -- Fiendish Machete + elseif i == 228486 then dmg = dmg + 75 end -- Treant's Bane + end + end + end + elseif creature == Data.MECHANICAL then + if ECS.IsSod then + -- items + if C_Item.IsEquippedItem(213319) then dmg = dmg + 30 end -- Machinist's Gloves + end + end + if creature == Data.UNDEAD or creature == Data.DEMON then + -- items + if C_Item.IsEquippedItem(29113) then dmg = dmg + 150 end -- Champion of the Dawn + if ECS.IsSod and C_Item.IsEquippedItem(1219522) then dmg = dmg + 157 end -- Champion of the Dawn + if ECS.IsTbc or ECS.IsWotlk then + -- enchants + for i = 1, 18 do + local itemLink = GetInventoryItemLink("player", i) + if itemLink then + local enchant = DataUtils:GetEnchantFromItemLink(itemLink) + if enchant and enchant == Data.enchantIds.UNDEAD_DEMON_SLAYER_150 then dmg = dmg + 150 end + end + end + end + end + return dmg +end + ---@return string function Data:GetMeleeAttackSpeedMainHand() local mainHand, _ = UnitAttackSpeed("player") diff --git a/Modules/Data/Ranged.lua b/Modules/Data/Ranged.lua index f735dd80..d8bdaf31 100755 --- a/Modules/Data/Ranged.lua +++ b/Modules/Data/Ranged.lua @@ -19,6 +19,251 @@ function Data:GetRangeAttackPower() return melee + posBuff + negBuff end +---@param creature number +---@return string + function Data:GetRangedAttackPowerVsCreature(creature) + local dmg = 0 + if creature == Data.UNDEAD then + -- enchants + for i = 1, 18 do + local itemLink = GetInventoryItemLink("player", i) + if itemLink then + local enchant = DataUtils:GetEnchantFromItemLink(itemLink) + if enchant and enchant == Data.enchantIds.UNDEAD_SLAYER_100 then dmg = dmg + 100 end + end + end + -- sets + if Data:HasUndeadSlayer15() then dmg = dmg + 15 end + -- items + for _, i in pairs(Data.itemIds.UNDEAD_SLAYER_30) do + if C_Item.IsEquippedItem(i) then dmg = dmg + 30 end + end + for _, i in pairs(Data.itemIds.UNDEAD_SLAYER_45) do + if C_Item.IsEquippedItem(i) then dmg = dmg + 45 end + end + for _, i in pairs(Data.itemIds.UNDEAD_SLAYER_60) do + if C_Item.IsEquippedItem(i) then dmg = dmg + 60 end + end + for _, i in pairs(Data.itemIds.UNDEAD_SLAYER_81) do + if C_Item.IsEquippedItem(i) then dmg = dmg + 81 end + end + if C_Item.IsEquippedItem(13209) then dmg = dmg + 81 end -- Seal of the Dawn + -- weapons + for _, i in pairs(weaponsId) do + if i and i == 13017 then dmg = dmg + 66 end -- Hellslayer Battle Axe + end + -- + if ECS.IsSod then + -- enchants + for i = 1, 18 do + local itemLink = GetInventoryItemLink("player", i) + if itemLink then + local enchant = DataUtils:GetEnchantFromItemLink(itemLink) + if enchant and enchant == Data.enchantIds.UNDEAD_SLAYER_200 then dmg = dmg + 200 end + end + end + -- items + for _, i in pairs(Data.itemIds.UNDEAD_SLAYER_45_SOD) do + if C_Item.IsEquippedItem(i) then dmg = dmg + 45 end + end + for _, i in pairs(Data.itemIds.UNDEAD_SLAYER_60_SOD) do + if C_Item.IsEquippedItem(i) then dmg = dmg + 60 end + end + for _, i in pairs(Data.itemIds.UNDEAD_SLAYER_81_SOD) do + if C_Item.IsEquippedItem(i) then dmg = dmg + 81 end + end + for _, i in pairs(Data.itemIds.UNDEAD_SLAYER_108_SOD) do + if C_Item.IsEquippedItem(i) then dmg = dmg + 108 end + end + if C_Item.IsEquippedItem(209574) then dmg = dmg + 15 end -- Discarded Tenets of the Silver Hand + -- weapons + for _, i in pairs(weaponsId) do + if i then + if i == 220575 then dmg = dmg + 39 -- Eater of the Damned + elseif i == 228030 then dmg = dmg + 30 end -- Malicious Axe + end + end + elseif ECS.IsWotlk then + -- enchants + for i = 1, 18 do + local itemLink = GetInventoryItemLink("player", i) + if itemLink then + local enchant = DataUtils:GetEnchantFromItemLink(itemLink) + if enchant then + if enchant == Data.enchantIds.UNDEAD_SLAYER then dmg = dmg + 140 + elseif enchant == Data.enchantIds.UNDEAD_SLAYER_170 then dmg = dmg + 170 end + end + end + end + -- auras + if C_UnitAuras.GetPlayerAuraBySpellID(58026) then dmg = dmg + 12000 end -- Blessing of the Crusade + end + elseif creature == Data.DEMON then + -- items + for _, i in pairs(Data.itemIds.DEMON_SLAYING_33) do + if C_Item.IsEquippedItem(i) then dmg = dmg + 33 end + end + for _, i in pairs(Data.itemIds.DEMON_SLAYING_45) do + if C_Item.IsEquippedItem(i) then dmg = dmg + 45 end + end + -- weapons + for _, i in pairs(weaponsId) do + if i then + if i == 10698 then dmg = dmg + 78 -- Enchanted Azsharite Felbane Staff + elseif i == 13044 then dmg = dmg + 99 -- Demonslayer + elseif i == 19963 then dmg = dmg + 117 end -- Pitchfork of Madness + end + end + -- + if ECS.IsSod then + -- items + for _, i in pairs(Data.itemIds.DEMON_SLAYING_141) do + if C_Item.IsEquippedItem(i) then dmg = dmg + 141 end + end + -- weapons + for _, i in pairs(weaponsId) do + if i and i == 228332 then dmg = dmg + 45 end -- Lok'delar, Stave of the Ancient Keepers + end + elseif ECS.IsTbc or ECS.IsWotlk then + -- sets + if Data:HasDemonSlaying200() then dmg = dmg + 200 end + -- items + if C_Item.IsEquippedItem(29398) then dmg = dmg + 39 end -- Circle of Banishing (ring but unique) + -- weapons + for _, i in pairs(weaponsId) do + if i then + if i == 220575 then dmg = dmg + 150 -- Illidari-Bane Claymore + elseif i == 30788 or i == 31745 then dmg = dmg + 93 end -- Illidari-Bane Dagger and Broadsword + end + end + end + elseif creature == Data.BEAST then + -- enchants + for i = 1, 18 do + local itemLink = GetInventoryItemLink("player", i) + if itemLink then + local enchant = DataUtils:GetEnchantFromItemLink(itemLink) + if enchant then + if enchant == Data.enchantIds.BEASTSLAYER then dmg = dmg + 2 + elseif enchant == Data.enchantIds.LESSER_BEAST_SLAYER then dmg = dmg + 6 + elseif enchant == Data.enchantIds.MINOR_BEAST_SLAYER then dmg = dmg + 2 + elseif enchant == Data.enchantIds.INCREASED_DAMAGE_BEAST_2 then dmg = dmg + 2 + elseif enchant == Data.enchantIds.INCREASED_DAMAGE_BEAST_4 then dmg = dmg + 4 + elseif enchant == Data.enchantIds.INCREASED_DAMAGE_BEAST_6 then dmg = dmg + 6 + elseif enchant == Data.enchantIds.INCREASED_DAMAGE_BEAST_8 then dmg = dmg + 8 + elseif enchant == Data.enchantIds.INCREASED_DAMAGE_BEAST_10 then dmg = dmg + 10 + elseif enchant == Data.enchantIds.INCREASED_DAMAGE_BEAST_12 then dmg = dmg + 12 + elseif enchant == Data.enchantIds.INCREASED_DAMAGE_BEAST_14 then dmg = dmg + 14 + end + end + end + end + -- items + for _, i in pairs(Data.itemIds.BEAST_SLAYING_24) do + if C_Item.IsEquippedItem(i) then dmg = dmg + 24 end + end + for _, i in pairs(Data.itemIds.BEAST_SLAYING_30) do + if C_Item.IsEquippedItem(i) then dmg = dmg + 30 end + end + for _, i in pairs(Data.itemIds.BEAST_SLAYING_33) do + if C_Item.IsEquippedItem(i) then dmg = dmg + 33 end + end + for _, i in pairs(Data.itemIds.BEAST_SLAYING_60) do + if C_Item.IsEquippedItem(i) then dmg = dmg + 60 end + end + if C_Item.IsEquippedItem(16658) then dmg = dmg + 18 end -- Wildhunter Cloak + if C_Item.IsEquippedItem(13212) then dmg = dmg + 48 end -- Halycon's Spiked Collar + -- weapons + for _, i in pairs(weaponsId) do + if i then + if i == 11907 then dmg = dmg + 72 -- Beastslayer + elseif i == 12709 then dmg = dmg + 45 -- pip's skinner + elseif i == 1465 then dmg = dmg + 18 end -- tigerbane + end + end + -- + if ECS.IsSod then + -- items + for _, i in pairs(Data.itemIds.BEAST_SLAYING_99) do + if C_Item.IsEquippedItem(i) then dmg = dmg + 99 end + end + elseif ECS.IsWotlk then + -- items + if C_Item.IsEquippedItem(37018) then dmg = dmg - 40 end -- G.E.H.T.A. + end + elseif creature == Data.DRAGONKIN then + -- weapons + for _, i in pairs(weaponsId) do + if i then + if i == 19961 then dmg = dmg + 48 -- Gri'lek's Grinder + elseif i == 19962 then dmg = dmg + 117 end -- Gri'lek's Carver + end + end + -- + if ECS.IsSod then + -- items + if C_Item.IsEquippedItem(221457) then + dmg = dmg + 36 -- Libram of Draconic Destruction + end + for _, i in pairs(Data.itemIds.DRAGON_SLAYING_60) do + if C_Item.IsEquippedItem(i) then dmg = dmg + 60 end + end + for _, i in pairs(Data.itemIds.DRAGON_SLAYING_141) do + if C_Item.IsEquippedItem(i) then dmg = dmg + 141 end + end + -- weapons + for _, i in pairs(weaponsId) do + if i and i == 220965 then dmg = dmg + 117 end -- Scalebane Greataxe + end + end + elseif creature == Data.ELEMENTAL then + -- enchants + for i = 1, 18 do + local itemLink = GetInventoryItemLink("player", i) + if itemLink then + local enchant = DataUtils:GetEnchantFromItemLink(itemLink) + if enchant and enchant == Data.enchantIds.LESSER_ELEMENTAL_SLAYER then dmg = dmg + 6 end + end + end + -- weapons + for _, i in pairs(weaponsId) do + if i and i == 18310 then dmg = dmg + 36 end -- Fiendish Machete + end + -- + if ECS.IsSod then + -- weapons + for _, i in pairs(weaponsId) do + if i then + if i == 228056 then dmg = dmg + 36 -- Fiendish Machete + elseif i == 228486 then dmg = dmg + 75 end -- Treant's Bane + end + end + end + elseif creature == Data.MECHANICAL then + if ECS.IsSod then + -- items + if C_Item.IsEquippedItem(213319) then dmg = dmg + 30 end -- Machinist's Gloves + end + end + if creature == Data.UNDEAD or creature == Data.DEMON then + -- items + if C_Item.IsEquippedItem(29113) then dmg = dmg + 150 end -- Champion of the Dawn + if ECS.IsSod and C_Item.IsEquippedItem(1219522) then dmg = dmg + 157 end -- Champion of the Dawn + if ECS.IsTbc or ECS.IsWotlk then + -- enchants + for i = 1, 18 do + local itemLink = GetInventoryItemLink("player", i) + if itemLink then + local enchant = DataUtils:GetEnchantFromItemLink(itemLink) + if enchant and enchant == Data.enchantIds.UNDEAD_DEMON_SLAYER_150 then dmg = dmg + 150 end + end + end + end + end + return dmg + end + + ---@return boolean function _Ranged:IsRangeAttackClass() return classId == Data.WARRIOR or classId == Data.ROGUE or classId == Data.HUNTER @@ -132,4 +377,4 @@ function Data.RangeMissChanceBossLevel() return DataUtils:Round(missChance, 2) .. "%" end -return Data \ No newline at end of file +return Data diff --git a/Modules/Data/SpellDamage.lua b/Modules/Data/SpellDamage.lua index 4801b5e9..9c2b9ae2 100755 --- a/Modules/Data/SpellDamage.lua +++ b/Modules/Data/SpellDamage.lua @@ -16,6 +16,107 @@ function Data:GetSpellDamage(school) return DataUtils:Round(spellDmg, 0) end +---@param creature number +---@return number +function Data:GetSpellDamageVsCreature(creature) + local spellDmg = 0 + if creature == Data.UNDEAD then + -- enchants + for i = 1, 18 do + local itemLink = GetInventoryItemLink("player", i) + if itemLink then + local enchant = DataUtils:GetEnchantFromItemLink(itemLink) + if enchant and enchant == Data.enchantIds.INCREASE_SPELL_DAM_UNDEAD_60 then spellDmg = spellDmg + 60 end + end + end + -- auras + if C_UnitAuras.GetPlayerAuraBySpellID(24833) then spellDmg = spellDmg + 400 end -- holy mightstone + -- items + if C_Item.IsEquippedItem(23091) then spellDmg = spellDmg + 26 end -- Bracers of Undead Cleansing + for _, i in pairs(Data.itemIds.INCREASE_SPELL_DAM_UNDEAD_35) do + if C_Item.IsEquippedItem(i) then spellDmg = spellDmg + 35 end + end + for _, i in pairs(Data.itemIds.INCREASE_SPELL_DAM_UNDEAD_48) do + if C_Item.IsEquippedItem(i) then spellDmg = spellDmg + 48 end + end + -- + if ECS.IsSod then + -- items + for _, i in pairs(Data.itemIds.INCREASE_SPELL_DAM_UNDEAD_62) do + if C_Item.IsEquippedItem(i) then spellDmg = spellDmg + 65 end -- name is different from bonus + end + for _, i in pairs(Data.itemIds.INCREASE_SPELL_DAM_UNDEAD_26) do + if C_Item.IsEquippedItem(i) then spellDmg = spellDmg + 26 end + end + for _, i in pairs(Data.itemIds.INCREASE_SPELL_DAM_UNDEAD_35_SOD) do + if C_Item.IsEquippedItem(i) then spellDmg = spellDmg + 35 end + end + for _, i in pairs(Data.itemIds.INCREASE_SPELL_DAM_UNDEAD_48_SOD) do + if C_Item.IsEquippedItem(i) then spellDmg = spellDmg + 48 end + end + elseif ECS.IsWotlk then + -- enchants + for i = 1, 18 do + local itemLink = GetInventoryItemLink("player", i) + if itemLink then + local enchant = DataUtils:GetEnchantFromItemLink(itemLink) + if enchant and enchant == Data.enchantIds.INCREASE_SPELL_DAM_UNDEAD_100 then spellDmg = spellDmg + 100 end + end + end + -- auras + if C_UnitAuras.GetPlayerAuraBySpellID(60597) then spellDmg = spellDmg + 12000 end -- Blessing of the Crusade + end + if ECS.IsTbc or ECS.IsWotlk then + -- auras + if C_UnitAuras.GetPlayerAuraBySpellID(28488) then spellDmg = spellDmg + 15 end -- Scourgebane Infusion + end + elseif creature == Data.DEMON then + if ECS.IsTbc or ECS.IsWotlk then + -- items + if C_Item.IsEquippedItem(30787) then spellDmg = spellDmg + 185 end -- Illidari-Bane Mageblade + end + elseif creature == Data.BEAST then + -- enchants + for i = 1, 18 do + local itemLink = GetInventoryItemLink("player", i) + if itemLink then + local enchant = DataUtils:GetEnchantFromItemLink(itemLink) + if enchant then + if enchant == Data.enchantIds.BEASTSLAYER then spellDmg = spellDmg + 2 + elseif enchant == Data.enchantIds.LESSER_BEAST_SLAYER then spellDmg = spellDmg + 6 + elseif enchant == Data.enchantIds.MINOR_BEAST_SLAYER then spellDmg = spellDmg + 2 + elseif enchant == Data.enchantIds.INCREASED_DAMAGE_BEAST_2 then spellDmg = spellDmg + 2 + elseif enchant == Data.enchantIds.INCREASED_DAMAGE_BEAST_4 then spellDmg = spellDmg + 4 + elseif enchant == Data.enchantIds.INCREASED_DAMAGE_BEAST_6 then spellDmg = spellDmg + 6 + elseif enchant == Data.enchantIds.INCREASED_DAMAGE_BEAST_8 then spellDmg = spellDmg + 8 + elseif enchant == Data.enchantIds.INCREASED_DAMAGE_BEAST_10 then spellDmg = spellDmg + 10 + elseif enchant == Data.enchantIds.INCREASED_DAMAGE_BEAST_12 then spellDmg = spellDmg + 12 + elseif enchant == Data.enchantIds.INCREASED_DAMAGE_BEAST_14 then spellDmg = spellDmg + 14 + end + end + end + end + elseif creature == Data.ELEMENTAL then + -- enchants + for i = 1, 18 do + local itemLink = GetInventoryItemLink("player", i) + if itemLink then + local enchant = DataUtils:GetEnchantFromItemLink(itemLink) + if enchant and enchant == Data.enchantIds.LESSER_ELEMENTAL_SLAYER then spellDmg = spellDmg + 6 end + end + end + end + if creature == Data.UNDEAD or creature == Data.DEMON then + -- items + if C_Item.IsEquippedItem(29113) then spellDmg = spellDmg + 85 end -- Champion of the Dawn + if ECS.IsSod and C_Item.IsEquippedItem(1219522) then spellDmg = spellDmg + 89 end -- Champion of the Dawn + end + + local modifier = _SpellDamage:GetGeneralTalentModifier() + spellDmg = spellDmg * (1 + (modifier / 100)) + return DataUtils:Round(spellDmg, 0) +end + ---@return number function _SpellDamage:GetGeneralTalentModifier() local mod = 0 @@ -49,4 +150,4 @@ end function Data:GetSpellHasteBonus() local hasteBonus = GetCombatRatingBonus(CR_HASTE_SPELL) return DataUtils:Round(hasteBonus, 2) .. "%" -end \ No newline at end of file +end