Skip to content

Commit 2d120f0

Browse files
haugencLocalIdentity
and
LocalIdentity
authored
Add support for Soul Core stat requirement conversion (#835)
* #153 Added support for attribute conversion soul cores * #153 Reverted unintended changes * Formatting * ModParser format --------- Co-authored-by: LocalIdentity <[email protected]>
1 parent 085e93d commit 2d120f0

File tree

3 files changed

+38
-0
lines changed

3 files changed

+38
-0
lines changed

spec/System/TestItemParse_spec.lua

+24
Original file line numberDiff line numberDiff line change
@@ -215,4 +215,28 @@ describe("TestItemParse", function()
215215
assert.are.equals(1, #item.explicitModLines)
216216
assert.are.equals("+50% chance to Ignite", item.explicitModLines[1].line)
217217
end)
218+
219+
it("attribute coverted", function()
220+
local item = new("Item", [[
221+
Test Item
222+
Expert Barrier Quarterstaff
223+
Quality: 20
224+
Sockets: S S S
225+
Rune: Soul Core of Cholotl
226+
Rune: Soul Core of Zantipi
227+
Rune: Soul Core of Atmohua
228+
LevelReq: 79
229+
Implicits: 4
230+
{enchant}{rune}Convert 20% of Requirements to Dexterity
231+
{enchant}{rune}Convert 20% of Requirements to Intelligence
232+
{enchant}{rune}Convert 20% of Requirements to Strength
233+
{tags:block}{range:1}+(10-15)% to Block chance
234+
Corrupted
235+
]])
236+
item:BuildAndParseRaw()
237+
assert.are.equals(45, item.requirements.strMod)
238+
assert.are.equals(111, item.requirements.dexMod)
239+
assert.are.equals(71, item.requirements.intMod)
240+
241+
end)
218242
end)

src/Classes/Item.lua

+10
Original file line numberDiff line numberDiff line change
@@ -1583,6 +1583,16 @@ function ItemClass:BuildModList()
15831583
self.requirements.strMod = 0
15841584
self.requirements.dexMod = 0
15851585
self.requirements.intMod = 0
1586+
elseif calcLocal(baseList, "AttributeRequirementsConverted", "FLAG", 0) then
1587+
local strConversion = calcLocal(baseList, "AttributeRequirementsConvertedToStrength", "BASE", 0) / 100
1588+
local dexConversion = calcLocal(baseList, "AttributeRequirementsConvertedToDexterity", "BASE", 0) / 100
1589+
local intConversion = calcLocal(baseList, "AttributeRequirementsConvertedToIntelligence", "BASE", 0) / 100
1590+
self.requirements.intBase = intConversion * (self.requirements.str + self.requirements.dex) + (self.requirements.int + calcLocal(baseList, "IntRequirement", "BASE", 0)) - self.requirements.int * (strConversion + dexConversion)
1591+
self.requirements.intMod = m_floor(self.requirements.intBase * (1 + calcLocal(baseList, "IntRequirement", "INC", 0) / 100))
1592+
self.requirements.dexBase = dexConversion * (self.requirements.str + self.requirements.int) + (self.requirements.dex + calcLocal(baseList, "DexRequirement", "BASE", 0)) - self.requirements.dex * (strConversion + intConversion)
1593+
self.requirements.dexMod = m_floor( self.requirements.dexBase * (1 + calcLocal(baseList, "DexRequirement", "INC", 0) / 100))
1594+
self.requirements.strBase = strConversion * (self.requirements.int + self.requirements.dex) + (self.requirements.str + calcLocal(baseList, "StrRequirement", "BASE", 0)) - self.requirements.str * (dexConversion + intConversion)
1595+
self.requirements.strMod = m_floor(self.requirements.strBase * (1 + calcLocal(baseList, "StrRequirement", "INC", 0) / 100))
15861596
else
15871597
self.requirements.strMod = m_floor((self.requirements.str + calcLocal(baseList, "StrRequirement", "BASE", 0)) * (1 + calcLocal(baseList, "StrRequirement", "INC", 0) / 100))
15881598
self.requirements.dexMod = m_floor((self.requirements.dex + calcLocal(baseList, "DexRequirement", "BASE", 0)) * (1 + calcLocal(baseList, "DexRequirement", "INC", 0) / 100))

src/Modules/ModParser.lua

+4
Original file line numberDiff line numberDiff line change
@@ -3171,6 +3171,10 @@ local specialModList = {
31713171
} end,
31723172
["exsanguinate debuffs deal fire damage per second instead of physical damage per second"] = { flag("Condition:ExsanguinateDebuffIsFireDamage", { type = "SkillName", skillName = "Exsanguinate", includeTransfigured = true })},
31733173
["reap debuffs deal fire damage per second instead of physical damage per second"] = { flag("Condition:ReapDebuffIsFireDamage", { type = "SkillName", skillName = "Reap" })},
3174+
["convert (%d+)%% of requirements to (%a+)"] = function(_, num, attr) return {
3175+
flag("AttributeRequirementsConverted"),
3176+
mod("AttributeRequirementsConvertedTo" .. attr:gsub("^%l", string.upper), "BASE", num),
3177+
} end,
31743178
-- Crit
31753179
["your critical hit chance is lucky"] = { flag("CritChanceLucky") },
31763180
["your critical hit chance is lucky while on low life"] = { flag("CritChanceLucky", { type = "Condition", var = "LowLife" }) },

0 commit comments

Comments
 (0)