Skip to content

Commit 3746f01

Browse files
LocalIdentityLocalIdentity
andauthored
Fix mods duplicating when crafting some Crossbows (#2173)
The logic should only be working on grants skill lines instead of any implicit mod line Co-authored-by: LocalIdentity <localidentity2@gmail.com>
1 parent 96c9665 commit 3746f01

2 files changed

Lines changed: 58 additions & 2 deletions

File tree

spec/System/TestItemParse_spec.lua

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,62 @@ describe("TestItemParse", function()
248248
assert.are.equals("+44 to Spirit", item.explicitModLines[1].line)
249249
end)
250250

251+
it("Crafted affixes matching base implicits stay explicit", function()
252+
local item = new("Item", [[
253+
Rarity: Rare
254+
New Item
255+
Gemini Crossbow
256+
Crafted: true
257+
Prefix: None
258+
Prefix: None
259+
Prefix: None
260+
Suffix: {range:0}AdditionalAmmo1
261+
Suffix: None
262+
Suffix: None
263+
Implicits: 1
264+
Loads an additional bolt
265+
]])
266+
267+
item:Craft()
268+
assert.are.equals(1, #item.implicitModLines)
269+
assert.are.equals("Loads an additional bolt", item.implicitModLines[1].line)
270+
assert.are.equals(1, #item.explicitModLines)
271+
assert.are.equals("Loads an additional bolt", item.explicitModLines[1].line)
272+
273+
item.suffixes[1].range = 0.2
274+
item:Craft()
275+
assert.are.equals(1, #item.implicitModLines)
276+
assert.are.equals(1, #item.explicitModLines)
277+
assert.are.equals("Loads an additional bolt", item.explicitModLines[1].line)
278+
end)
279+
280+
it("Pasted affixes matching base implicits stay explicit", function()
281+
local item = new("Item", [[
282+
Item Class: Crossbows
283+
Rarity: Rare
284+
New Item
285+
Gemini Crossbow
286+
--------
287+
Physical Damage: 28-112
288+
Critical Hit Chance: 5.00%
289+
Attacks per Second: 1.60
290+
Reload Time: 1.10
291+
--------
292+
Requires: Level 78, 89 Str, 89 Dex
293+
--------
294+
Item Level: 82
295+
--------
296+
Loads an additional bolt (implicit)
297+
--------
298+
Loads an additional bolt
299+
]])
300+
301+
assert.are.equals(1, #item.implicitModLines)
302+
assert.are.equals("Loads an additional bolt", item.implicitModLines[1].line)
303+
assert.are.equals(1, #item.explicitModLines)
304+
assert.are.equals("Loads an additional bolt", item.explicitModLines[1].line)
305+
end)
306+
251307
--TODO: POB2 Leagues?
252308
--it("League", function()
253309
--end)

src/Classes/Item.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ local function baseHasImplicitLine(base, line)
7272
return false
7373
end
7474
for implicitLine in base.implicit:gmatch("[^\n]+") do
75-
if implicitLine == line or implicitLine:match("^Grants Skill:") and line:match("^" .. implicitLine:gsub("%(%d+%-%d+%)", "%%d+") .. "$") then
75+
if implicitLine:match("^Grants Skill:") and (implicitLine == line or line:match("^" .. implicitLine:gsub("%(%d+%-%d+%)", "%%d+") .. "$")) then
7676
return true
7777
end
7878
end
@@ -482,7 +482,7 @@ function ItemClass:ParseRaw(raw, rarity, highQuality)
482482
end
483483
else
484484
line = linePrefix .. line .. linePostfix
485-
local lineIsBaseImplicit = mode == "GAME" and baseHasImplicitLine(self.base, line)
485+
local lineIsBaseImplicit = mode == "GAME" and not self.crafted and baseHasImplicitLine(self.base, line)
486486
if self.checkSection then
487487
if gameModeStage == "IMPLICIT" then
488488
if foundImplicit and not lineIsBaseImplicit then

0 commit comments

Comments
 (0)