Skip to content

Commit 6bd949b

Browse files
authored
update legionpassives and add support for Heroic Tragedy (#621)
1 parent 64e4e4e commit 6bd949b

File tree

6 files changed

+2594
-682
lines changed

6 files changed

+2594
-682
lines changed

src/Classes/PassiveSpec.lua

Lines changed: 125 additions & 129 deletions
Original file line numberDiff line numberDiff line change
@@ -1026,14 +1026,8 @@ function PassiveSpecClass:BuildAllDependsAndPaths()
10261026

10271027
-- FIXME - continue implementing
10281028
local jewelType = 5
1029-
if conqueredBy.conqueror.type == "vaal" then
1029+
if conqueredBy.conqueror.type == "kalguur" then
10301030
jewelType = 1
1031-
elseif conqueredBy.conqueror.type == "karui" then
1032-
jewelType = 2
1033-
elseif conqueredBy.conqueror.type == "maraketh" then
1034-
jewelType = 3
1035-
elseif conqueredBy.conqueror.type == "templar" then
1036-
jewelType = 4
10371031
end
10381032
local seed = conqueredBy.id
10391033
if jewelType == 5 then
@@ -1060,92 +1054,93 @@ function PassiveSpecClass:BuildAllDependsAndPaths()
10601054
end
10611055

10621056
if node.type == "Notable" then
1063-
local jewelDataTbl = { }
1064-
if seed ~= m_max(m_min(seed, data.timelessJewelSeedMax[jewelType]), data.timelessJewelSeedMin[jewelType]) then
1065-
ConPrintf("ERROR: Seed " .. seed .. " is outside of valid range [" .. data.timelessJewelSeedMin[jewelType] .. " - " .. data.timelessJewelSeedMax[jewelType] .. "] for jewel type: " .. data.timelessJewelTypes[jewelType])
1066-
else
1067-
jewelDataTbl = data.readLUT(conqueredBy.id, node.id, jewelType)
1068-
end
1069-
--print("Need to Update: " .. node.id .. " [" .. node.dn .. "]")
1070-
if not next(jewelDataTbl) then
1071-
ConPrintf("Missing LUT: " .. data.timelessJewelTypes[jewelType])
1072-
else
1073-
if jewelType == 1 then
1074-
local headerSize = #jewelDataTbl
1075-
-- FIXME: complete implementation of this. Need to set roll values for stats
1076-
-- based on their `fmt` specification
1077-
if headerSize == 2 or headerSize == 3 then
1078-
self:ReplaceNode(node, legionNodes[jewelDataTbl[1] + 1 - data.timelessJewelAdditions])
1079-
1080-
for i, repStat in ipairs(legionNodes[jewelDataTbl[1] + 1 - data.timelessJewelAdditions].sd) do
1081-
local statKey = legionNodes[jewelDataTbl[1] + 1 - data.timelessJewelAdditions].sortedStats[i]
1082-
local statMod = legionNodes[jewelDataTbl[1] + 1 - data.timelessJewelAdditions].stats[statKey]
1083-
repStat = replaceHelperFunc(repStat, statKey, statMod, jewelDataTbl[statMod.index + 1])
1084-
self:NodeAdditionOrReplacementFromString(node, repStat, i == 1) -- wipe mods on first run
1085-
end
1086-
-- should fix the stat values here (note headerSize == 3 has 2 values)
1087-
elseif headerSize == 6 or headerSize == 8 then
1088-
local bias = 0
1089-
for i,val in ipairs(jewelDataTbl) do
1090-
if i > (headerSize / 2) then
1091-
break
1092-
elseif val <= 21 then
1093-
bias = bias + 1
1094-
else
1095-
bias = bias - 1
1096-
end
1097-
end
1098-
if bias >= 0 then
1099-
self:ReplaceNode(node, legionNodes[77]) -- might of the vaal
1100-
else
1101-
self:ReplaceNode(node, legionNodes[78]) -- legacy of the vaal
1102-
end
1103-
local additions = {}
1104-
for i,val in ipairs(jewelDataTbl) do
1105-
if i <= (headerSize / 2) then
1106-
local roll = jewelDataTbl[i + headerSize / 2]
1107-
if not additions[val] then
1108-
additions[val] = roll
1109-
else
1110-
additions[val] = additions[val] + roll
1111-
end
1112-
else
1113-
break
1114-
end
1115-
end
1116-
for add, val in pairs(additions) do
1117-
local addition = legionAdditions[add + 1]
1118-
for _, addStat in ipairs(addition.sd) do
1119-
for k,statMod in pairs(addition.stats) do -- should only be 1 big, these didn't get changed so can't just grab index
1120-
addStat = replaceHelperFunc(addStat, k, statMod, val)
1121-
end
1122-
self:NodeAdditionOrReplacementFromString(node, addStat)
1123-
end
1124-
end
1125-
else
1126-
ConPrintf("Unhandled Glorious Vanity headerSize: " .. headerSize)
1127-
end
1128-
else
1129-
for _, jewelData in ipairs(jewelDataTbl) do
1130-
if jewelData >= data.timelessJewelAdditions then -- replace
1131-
jewelData = jewelData + 1 - data.timelessJewelAdditions
1132-
local legionNode = legionNodes[jewelData]
1133-
if legionNode then
1134-
self:ReplaceNode(node, legionNode)
1135-
else
1136-
ConPrintf("Unhandled 'replace' ID: " .. jewelData)
1137-
end
1138-
elseif jewelData then -- add
1139-
local addition = legionAdditions[jewelData + 1]
1140-
for _, addStat in ipairs(addition.sd) do
1141-
self:NodeAdditionOrReplacementFromString(node, " \n" .. addStat)
1142-
end
1143-
elseif next(jewelData) then
1144-
ConPrintf("Unhandled OP: " .. jewelData + 1)
1145-
end
1146-
end
1147-
end
1148-
end
1057+
-- todo: update once we get seed data
1058+
--local jewelDataTbl = { }
1059+
--if seed ~= m_max(m_min(seed, data.timelessJewelSeedMax[jewelType]), data.timelessJewelSeedMin[jewelType]) then
1060+
-- ConPrintf("ERROR: Seed " .. seed .. " is outside of valid range [" .. data.timelessJewelSeedMin[jewelType] .. " - " .. data.timelessJewelSeedMax[jewelType] .. "] for jewel type: " .. data.timelessJewelTypes[jewelType])
1061+
--else
1062+
-- jewelDataTbl = data.readLUT(conqueredBy.id, node.id, jewelType)
1063+
--end
1064+
----print("Need to Update: " .. node.id .. " [" .. node.dn .. "]")
1065+
--if not next(jewelDataTbl) then
1066+
-- ConPrintf("Missing LUT: " .. data.timelessJewelTypes[jewelType])
1067+
--else
1068+
-- if jewelType == 1 then
1069+
-- local headerSize = #jewelDataTbl
1070+
-- -- FIXME: complete implementation of this. Need to set roll values for stats
1071+
-- -- based on their `fmt` specification
1072+
-- if headerSize == 2 or headerSize == 3 then
1073+
-- self:ReplaceNode(node, legionNodes[jewelDataTbl[1] + 1 - data.timelessJewelAdditions])
1074+
--
1075+
-- for i, repStat in ipairs(legionNodes[jewelDataTbl[1] + 1 - data.timelessJewelAdditions].sd) do
1076+
-- local statKey = legionNodes[jewelDataTbl[1] + 1 - data.timelessJewelAdditions].sortedStats[i]
1077+
-- local statMod = legionNodes[jewelDataTbl[1] + 1 - data.timelessJewelAdditions].stats[statKey]
1078+
-- repStat = replaceHelperFunc(repStat, statKey, statMod, jewelDataTbl[statMod.index + 1])
1079+
-- self:NodeAdditionOrReplacementFromString(node, repStat, i == 1) -- wipe mods on first run
1080+
-- end
1081+
-- -- should fix the stat values here (note headerSize == 3 has 2 values)
1082+
-- elseif headerSize == 6 or headerSize == 8 then
1083+
-- local bias = 0
1084+
-- for i,val in ipairs(jewelDataTbl) do
1085+
-- if i > (headerSize / 2) then
1086+
-- break
1087+
-- elseif val <= 21 then
1088+
-- bias = bias + 1
1089+
-- else
1090+
-- bias = bias - 1
1091+
-- end
1092+
-- end
1093+
-- if bias >= 0 then
1094+
-- self:ReplaceNode(node, legionNodes[77]) -- might of the vaal
1095+
-- else
1096+
-- self:ReplaceNode(node, legionNodes[78]) -- legacy of the vaal
1097+
-- end
1098+
-- local additions = {}
1099+
-- for i,val in ipairs(jewelDataTbl) do
1100+
-- if i <= (headerSize / 2) then
1101+
-- local roll = jewelDataTbl[i + headerSize / 2]
1102+
-- if not additions[val] then
1103+
-- additions[val] = roll
1104+
-- else
1105+
-- additions[val] = additions[val] + roll
1106+
-- end
1107+
-- else
1108+
-- break
1109+
-- end
1110+
-- end
1111+
-- for add, val in pairs(additions) do
1112+
-- local addition = legionAdditions[add + 1]
1113+
-- for _, addStat in ipairs(addition.sd) do
1114+
-- for k,statMod in pairs(addition.stats) do -- should only be 1 big, these didn't get changed so can't just grab index
1115+
-- addStat = replaceHelperFunc(addStat, k, statMod, val)
1116+
-- end
1117+
-- self:NodeAdditionOrReplacementFromString(node, addStat)
1118+
-- end
1119+
-- end
1120+
-- else
1121+
-- ConPrintf("Unhandled Glorious Vanity headerSize: " .. headerSize)
1122+
-- end
1123+
-- else
1124+
-- for _, jewelData in ipairs(jewelDataTbl) do
1125+
-- if jewelData >= data.timelessJewelAdditions then -- replace
1126+
-- jewelData = jewelData + 1 - data.timelessJewelAdditions
1127+
-- local legionNode = legionNodes[jewelData]
1128+
-- if legionNode then
1129+
-- self:ReplaceNode(node, legionNode)
1130+
-- else
1131+
-- ConPrintf("Unhandled 'replace' ID: " .. jewelData)
1132+
-- end
1133+
-- elseif jewelData then -- add
1134+
-- local addition = legionAdditions[jewelData + 1]
1135+
-- for _, addStat in ipairs(addition.sd) do
1136+
-- self:NodeAdditionOrReplacementFromString(node, " \n" .. addStat)
1137+
-- end
1138+
-- elseif next(jewelData) then
1139+
-- ConPrintf("Unhandled OP: " .. jewelData + 1)
1140+
-- end
1141+
-- end
1142+
-- end
1143+
--end
11491144
elseif node.type == "Keystone" then
11501145
local matchStr = conqueredBy.conqueror.type .. "_keystone_" .. conqueredBy.conqueror.id
11511146
for _, legionNode in ipairs(legionNodes) do
@@ -1155,42 +1150,43 @@ function PassiveSpecClass:BuildAllDependsAndPaths()
11551150
end
11561151
end
11571152
elseif node.type == "Normal" then
1158-
if conqueredBy.conqueror.type == "vaal" then
1159-
local jewelDataTbl = { }
1160-
if seed ~= m_max(m_min(seed, data.timelessJewelSeedMax[jewelType]), data.timelessJewelSeedMin[jewelType]) then
1161-
ConPrintf("ERROR: Seed " .. seed .. " is outside of valid range [" .. data.timelessJewelSeedMin[jewelType] .. " - " .. data.timelessJewelSeedMax[jewelType] .. "] for jewel type: " .. data.timelessJewelTypes[jewelType])
1162-
else
1163-
jewelDataTbl = data.readLUT(conqueredBy.id, node.id, jewelType)
1164-
end
1165-
--print("Need to Update: " .. node.id .. " [" .. node.dn .. "]")
1166-
if not next(jewelDataTbl) then
1167-
ConPrintf("Missing LUT: " .. data.timelessJewelTypes[jewelType])
1168-
else
1169-
self:ReplaceNode(node, legionNodes[jewelDataTbl[1] + 1 - data.timelessJewelAdditions])
1170-
for i, repStat in ipairs(node.sd) do
1171-
local statKey = legionNodes[jewelDataTbl[1] + 1 - data.timelessJewelAdditions].sortedStats[i]
1172-
local statMod = legionNodes[jewelDataTbl[1] + 1 - data.timelessJewelAdditions].stats[statKey]
1173-
repStat = replaceHelperFunc(repStat, statKey, statMod, jewelDataTbl[2])
1174-
self:NodeAdditionOrReplacementFromString(node, repStat, true)
1175-
end
1176-
end
1177-
elseif conqueredBy.conqueror.type == "karui" then
1178-
local str = isValueInArray(attributes, node.dn) and "2" or "4"
1179-
self:NodeAdditionOrReplacementFromString(node, " \n+" .. str .. " to Strength")
1180-
elseif conqueredBy.conqueror.type == "maraketh" then
1181-
local dex = isValueInArray(attributes, node.dn) and "2" or "4"
1182-
self:NodeAdditionOrReplacementFromString(node, " \n+" .. dex .. " to Dexterity")
1183-
elseif conqueredBy.conqueror.type == "templar" then
1184-
if isValueInArray(attributes, node.dn) then
1185-
local legionNode = legionNodes[91] -- templar_devotion_node
1186-
self:ReplaceNode(node, legionNode)
1187-
else
1188-
self:NodeAdditionOrReplacementFromString(node, " \n+5 to Devotion")
1189-
end
1190-
elseif conqueredBy.conqueror.type == "eternal" then
1191-
local legionNode = legionNodes[110] -- eternal_small_blank
1192-
self:ReplaceNode(node, legionNode)
1193-
end
1153+
-- todo: update once we get seed data
1154+
-- if conqueredBy.conqueror.type == "vaal" then
1155+
-- local jewelDataTbl = { }
1156+
-- if seed ~= m_max(m_min(seed, data.timelessJewelSeedMax[jewelType]), data.timelessJewelSeedMin[jewelType]) then
1157+
-- ConPrintf("ERROR: Seed " .. seed .. " is outside of valid range [" .. data.timelessJewelSeedMin[jewelType] .. " - " .. data.timelessJewelSeedMax[jewelType] .. "] for jewel type: " .. data.timelessJewelTypes[jewelType])
1158+
-- else
1159+
-- jewelDataTbl = data.readLUT(conqueredBy.id, node.id, jewelType)
1160+
-- end
1161+
-- --print("Need to Update: " .. node.id .. " [" .. node.dn .. "]")
1162+
-- if not next(jewelDataTbl) then
1163+
-- ConPrintf("Missing LUT: " .. data.timelessJewelTypes[jewelType])
1164+
-- else
1165+
-- self:ReplaceNode(node, legionNodes[jewelDataTbl[1] + 1 - data.timelessJewelAdditions])
1166+
-- for i, repStat in ipairs(node.sd) do
1167+
-- local statKey = legionNodes[jewelDataTbl[1] + 1 - data.timelessJewelAdditions].sortedStats[i]
1168+
-- local statMod = legionNodes[jewelDataTbl[1] + 1 - data.timelessJewelAdditions].stats[statKey]
1169+
-- repStat = replaceHelperFunc(repStat, statKey, statMod, jewelDataTbl[2])
1170+
-- self:NodeAdditionOrReplacementFromString(node, repStat, true)
1171+
-- end
1172+
-- end
1173+
-- elseif conqueredBy.conqueror.type == "karui" then
1174+
-- local str = isValueInArray(attributes, node.dn) and "2" or "4"
1175+
-- self:NodeAdditionOrReplacementFromString(node, " \n+" .. str .. " to Strength")
1176+
-- elseif conqueredBy.conqueror.type == "maraketh" then
1177+
-- local dex = isValueInArray(attributes, node.dn) and "2" or "4"
1178+
-- self:NodeAdditionOrReplacementFromString(node, " \n+" .. dex .. " to Dexterity")
1179+
-- elseif conqueredBy.conqueror.type == "templar" then
1180+
-- if isValueInArray(attributes, node.dn) then
1181+
-- local legionNode = legionNodes[91] -- templar_devotion_node
1182+
-- self:ReplaceNode(node, legionNode)
1183+
-- else
1184+
-- self:NodeAdditionOrReplacementFromString(node, " \n+5 to Devotion")
1185+
-- end
1186+
-- elseif conqueredBy.conqueror.type == "eternal" then
1187+
-- local legionNode = legionNodes[110] -- eternal_small_blank
1188+
-- self:ReplaceNode(node, legionNode)
1189+
-- end
11941190
end
11951191
self:ReconnectNodeToClassStart(node)
11961192
end

src/Classes/PassiveTree.lua

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,33 @@ local PassiveTreeClass = newClass("PassiveTree", function(self, treeVersion)
419419
end
420420
end
421421
end
422+
423+
-- Build ModList for legion jewels
424+
for _, node in pairs(self.legion.nodes) do
425+
-- Determine node type
426+
if node.m then
427+
node.type = "Mastery"
428+
elseif node.ks then
429+
node.type = "Keystone"
430+
if not self.keystoneMap[node.dn] then -- Don't override good tree data with legacy keystones
431+
self.keystoneMap[node.dn] = node
432+
end
433+
elseif node["not"] then
434+
node.type = "Notable"
435+
else
436+
node.type = "Normal"
437+
end
438+
439+
--todo: update sprites? icon stuff
440+
---- Assign node artwork assets
441+
--node.sprites = self.spriteMap[node.icon]
442+
--if not node.sprites then
443+
-- --error("missing sprite "..node.icon)
444+
-- node.sprites = { }
445+
--end
446+
447+
self:ProcessStats(node)
448+
end
422449
end)
423450

424451
function PassiveTreeClass:ProcessStats(node, startIndex)

src/Data/ModCache.lua

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2892,12 +2892,9 @@ c["Regenerate 3% of Life per second"]={{[1]={flags=0,keywordFlags=0,name="LifeRe
28922892
c["Regenerate 3% of Life per second while on Low Life"]={{[1]={[1]={type="Condition",var="LowLife"},flags=0,keywordFlags=0,name="LifeRegenPercent",type="BASE",value=3}},nil}
28932893
c["Regenerate 5% of Life over 1 second when Stunned"]={nil,"Regenerate 5% of Life over 1 second when Stunned "}
28942894
c["Regenerate 5% of Life per second while Surrounded"]={{[1]={[1]={type="Condition",var="Surrounded"},flags=0,keywordFlags=0,name="LifeRegenPercent",type="BASE",value=5}},nil}
2895-
c["Remembrancing 8000 songworthy deeds by the line of Medved"]={nil,"Remembrancing 8000 songworthy deeds by the line of Medved "}
2896-
c["Remembrancing 8000 songworthy deeds by the line of Medved Remembrancing 8000 songworthy deeds by the line of Olroth"]={nil,"Remembrancing 8000 songworthy deeds by the line of Medved Remembrancing 8000 songworthy deeds by the line of Olroth "}
2897-
c["Remembrancing 8000 songworthy deeds by the line of Olroth"]={nil,"Remembrancing 8000 songworthy deeds by the line of Olroth "}
2898-
c["Remembrancing 8000 songworthy deeds by the line of Olroth Passives in radius are Conquered by the Kalguur"]={nil,"Remembrancing 8000 songworthy deeds by the line of Olroth Passives in radius are Conquered by the Kalguur "}
2899-
c["Remembrancing 8000 songworthy deeds by the line of Vorana"]={nil,"Remembrancing 8000 songworthy deeds by the line of Vorana "}
2900-
c["Remembrancing 8000 songworthy deeds by the line of Vorana Remembrancing 8000 songworthy deeds by the line of Medved"]={nil,"Remembrancing 8000 songworthy deeds by the line of Vorana Remembrancing 8000 songworthy deeds by the line of Medved "}
2895+
c["Remembrancing 8000 songworthy deeds by the line of Medved"]={{[1]={flags=0,keywordFlags=0,name="JewelData",type="LIST",value={key="conqueredBy",value={conqueror={id=2,type="kalguur"},id=8000}}}},nil}
2896+
c["Remembrancing 8000 songworthy deeds by the line of Olroth"]={{[1]={flags=0,keywordFlags=0,name="JewelData",type="LIST",value={key="conqueredBy",value={conqueror={id=3,type="kalguur"},id=8000}}}},nil}
2897+
c["Remembrancing 8000 songworthy deeds by the line of Vorana"]={{[1]={flags=0,keywordFlags=0,name="JewelData",type="LIST",value={key="conqueredBy",value={conqueror={id=1,type="kalguur"},id=8000}}}},nil}
29012898
c["Remove a Curse when you use a Mana Flask"]={nil,"Remove a Curse when you use a Mana Flask "}
29022899
c["Removes all Mana"]={{[1]={flags=0,keywordFlags=0,name="Mana",type="MORE",value=-100}},nil}
29032900
c["Removes all Spirit"]={nil,"Removes all Spirit "}

0 commit comments

Comments
 (0)