Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
214 changes: 2 additions & 212 deletions src/Data/ModCache.lua

Large diffs are not rendered by default.

285 changes: 0 additions & 285 deletions src/Data/Uniques/Special/Generated.lua
Original file line number Diff line number Diff line change
Expand Up @@ -6,238 +6,6 @@

data.uniques.generated = { }

local parseVeiledModName = function(string)
return (string:
gsub("%JunMasterVeiled", ""):
gsub("%Local", ""):
gsub("%Display", ""):
gsub("%Crafted", ""):
gsub("(%d)h", ""):
gsub("%_", ""):
gsub("(%l)(%u)", "%1 %2"):
gsub("(%d)", " %1 "))
end

local veiledModIsActive = function(mod, baseType, specificType1, specificType2, poolKey)
local baseIndex = isValueInTable(mod.weightKey, baseType)
local typeIndex1 = isValueInTable(mod.weightKey, specificType1)
local typeIndex2 = isValueInTable(mod.weightKey, specificType2)
-- Master signature mods (e.g. Catarina's) carry their weight on a pool key such as "catarina_veiled_prefix"
-- and only list the slots they are excluded from, so the pool key only applies when no slot key matched
local poolIndex = poolKey and isValueInTable(mod.weightKey, poolKey)
return (typeIndex1 and mod.weightVal[typeIndex1] > 0) or (typeIndex2 and mod.weightVal[typeIndex2] > 0) or (not typeIndex1 and not typeIndex2 and baseIndex and mod.weightVal[baseIndex] > 0)
or (not typeIndex1 and not typeIndex2 and not baseIndex and poolIndex and mod.weightVal[poolIndex] > 0)
end

local getVeiledMods = function (veiledPool, baseType, specificType1, specificType2)
local veiledMods = { }
local poolKey = veiledPool == "catarina" and "catarina_veiled_prefix" or nil
for veiledModIndex, veiledMod in pairs(data.veiledMods) do
if veiledModIsActive(veiledMod, baseType, specificType1, specificType2, poolKey) then
local veiledName = parseVeiledModName(veiledModIndex)

veiledName = "("..veiledMod.type..") "..veiledName

local veiled = { veiledName = veiledName, veiledLines = { } }
for line, value in ipairs(veiledMod) do
veiled.veiledLines[line] = value
end

if veiledPool == "base" and (veiledMod.affix == "Chosen" or veiledMod.affix == "of the Order") then
table.insert(veiledMods, veiled)
elseif veiledPool == "catarina" and (veiledMod.affix == "Catarina's" or veiledMod.affix == "Chosen" or veiledMod.affix == "of the Order") then
table.insert(veiledMods, veiled)
elseif veiledPool == "all" then
table.insert(veiledMods, veiled)
end
end
end
table.sort(veiledMods, function (m1, m2) return m1.veiledName < m2.veiledName end )
return veiledMods
end

local getVeiledModsByName = function (modNames)
local veiledMods = { }
for veiledModIndex, veiledMod in pairs(data.veiledMods) do
local veiledName = parseVeiledModName(veiledModIndex)
if isValueInArray(modNames, veiledName) or isValueInArray(modNames, veiledModIndex) then
veiledName = "("..veiledMod.type..") "..veiledName
local veiled = { veiledName = veiledName, veiledLines = { } }
for line, value in ipairs(veiledMod) do
veiled.veiledLines[line] = value
end
table.insert(veiledMods, veiled)
end
end
table.sort(veiledMods, function (m1, m2) return m1.veiledName < m2.veiledName end )
return veiledMods
end


local paradoxicaMods = getVeiledMods("base", "weapon", "one_hand_weapon")
local paradoxica = {
"Paradoxica",
"Vaal Rapier",
"League: Betrayal",
"Source: Drops from unique{Intervention Leaders} in normal{Safehouses}",
"Has Alt Variant: true",
"Selected Variant: 4",
"Selected Alt Variant: 16"
}

for index, mod in pairs(paradoxicaMods) do
if (mod.veiledName == "(Suffix) Double Damage Chance") then
table.remove(paradoxicaMods, index)
end
end

for index, mod in pairs(paradoxicaMods) do
table.insert(paradoxica, "Variant: "..mod.veiledName)
end

table.insert(paradoxica, "Requires Level 66, 212 Dex")
table.insert(paradoxica, "Implicits: 1")
table.insert(paradoxica, "+25% to Global Critical Strike Multiplier")

for index, mod in pairs(paradoxicaMods) do
for _, value in pairs(mod.veiledLines) do
table.insert(paradoxica, "{variant:"..index.."}"..value.."")
end
end

table.insert(paradoxica, "Attacks with this Weapon deal Double Damage")
table.insert(data.uniques.generated, table.concat(paradoxica, "\n"))

local caneOfKulemakMods = getVeiledMods("catarina", "weapon", "staff", "two_hand_weapon")
local caneOfKulemak = {
"Cane of Kulemak",
"Serpentine Staff",
"Source: Drops from unique{Catarina, Master of Undeath}",
"Has Alt Variant: true",
"Has Alt Variant Two: true",
"Has Alt Variant Three: true",
"Selected Variant: 1",
"Selected Alt Variant: 3",
"Selected Alt Variant Two: 25",
"Selected Alt Variant Three: 26",
}

for _, mod in pairs(caneOfKulemakMods) do
table.insert(caneOfKulemak, "Variant: "..mod.veiledName)
end

table.insert(caneOfKulemak, "Requires Level 68, 85 Str, 85 Int")
table.insert(caneOfKulemak, "Implicits: 1")
table.insert(caneOfKulemak, table.concat(data.itemMods.ItemExclusive.StaffBlockPercentImplicitStaff2))
table.insert(caneOfKulemak, table.concat(data.itemMods.ItemExclusive.LocalVeiledModEffectUnique__1))

for index, mod in pairs(caneOfKulemakMods) do
for _, value in pairs(mod.veiledLines) do
table.insert(caneOfKulemak, "{variant:" .. index .. "}" .. value .. "")
end
end

table.insert(data.uniques.generated, table.concat(caneOfKulemak, "\n"))

local replicaParadoxicaMods = getVeiledMods("all", "weapon", "one_hand_weapon")
local replicaParadoxica = {
"Replica Paradoxica",
"Vaal Rapier",
"League: Heist",
"Source: Steal from a unique{Curio Display} during a Grand Heist",
"Has Alt Variant: true",
"Has Alt Variant Two: true",
"Has Alt Variant Three: true",
"Has Alt Variant Four: true",
"Has Alt Variant Five: true",
"Selected Variant: 1",
"Selected Alt Variant: 2",
"Selected Alt Variant Two: 3",
"Selected Alt Variant Three: 25",
"Selected Alt Variant Four: 27",
"Selected Alt Variant Five: 34"
}

for index, mod in pairs(replicaParadoxicaMods) do
table.insert(replicaParadoxica, "Variant: "..mod.veiledName)
end

table.insert(replicaParadoxica, "Requires Level 66, 212 Dex")
table.insert(replicaParadoxica, "Implicits: 1")
table.insert(replicaParadoxica, "+25% to Global Critical Strike Multiplier")

for index, mod in pairs(replicaParadoxicaMods) do
for _, value in pairs(mod.veiledLines) do
table.insert(replicaParadoxica, "{variant:"..index.."}"..value.."")
end
end

table.insert(data.uniques.generated, table.concat(replicaParadoxica, "\n"))

local queensHungerMods = getVeiledModsByName({
-- "Chosen" Veiled Prefixes
"JunMasterVeiledLocalIncreasedEnergyShieldAndLifeHigh",
"JunMasterVeiledPhysicalDamageReductionRatingDuringSoulGainPrevention",
"JunMasterVeiledPercentageLifeAndMana",
"JunMasterVeiledBlockPercent",
"JunMasterVeiledAvoidStunAndElementalStatusAilments",
"JunMasterVeiledSpellBlockPercent____",
-- "Catarina's" Veiled Prefixes
"JunMasterVeiledOfferingEffect",
"JunMasterVeiledLifeRegenerationRatePercentageIfCorpseConsumedRecently",
"JunMasterVeiledManaRegenerationRatePercentageIfCorpseConsumedRecently",
"JunMasterVeiledEnergyShieldRegenerationRatePercentageIfCorpseConsumedRecently",
"JunMasterVeiledAllow2Offerings",
"JunMasterVeiledOfferingDuration",
-- "of the Order" Veiled Suffixes
"JunMasterVeiledStrengthAndDexterity",
"JunMasterVeiledDexterityAndIntelligence",
"JunMasterVeiledStrengthAndIntelligence",
"JunMasterVeiledAvoidElementalDamageChanceDuringSoulGainPrevention",
"JunMasterVeiledEnergyShieldRegenerationRatePerMinuteIfRareOrUniqueEnemyNearby",
"JunMasterVeiledLifeRegenerationPerEvasionDuringFocus",
"JunMasterVeiledRestoreManaAndEnergyShieldOnFocus",
"JunMasterVeiledFortifyEffectWhileFocused_",
"JunMasterVeiledDamageRemovedFromManaBeforeLifeWhileFocused",
"JunMasterVeiledFireAndChaosDamageResistance",
"JunMasterVeiledLightningAndChaosDamageResistance",
"JunMasterVeiledColdAndChaosDamageResistance",
"JunMasterVeiledStrengthAndAvoidIgnite",
"JunMasterVeiledDexterityAndAvoidFreeze",
"JunMasterVeiledIntelligenceAndAvoidShock"
})

local queensHunger = {
"The Queen's Hunger",
"Vaal Regalia",
"League: Betrayal",
"Source: Drops from unique{Catarina, Master of Undeath}",
"Has Alt Variant: true",
"Selected Variant: 1",
"Selected Alt Variant: 24"
}

for index, mod in pairs(queensHungerMods) do
table.insert(queensHunger, "Variant: "..mod.veiledName)
end

table.insert(queensHunger, "Requires Level 68, 194 Int")
table.insert(queensHunger, "Trigger Level 20 Bone Offering, Flesh Offering or Spirit Offering every 5 seconds")
table.insert(queensHunger, "Offering Skills Triggered this way also affect you")
table.insert(queensHunger, "(5-10)% increased Cast Speed")
table.insert(queensHunger, "(100-130)% increased Energy Shield")
table.insert(queensHunger, "(6-10)% increased maximum Life")

for index, mod in pairs(queensHungerMods) do
for _, value in pairs(mod.veiledLines) do
table.insert(queensHunger, "{variant:"..index.."}{crafted}"..value.."")
end
end

table.insert(data.uniques.generated, table.concat(queensHunger, "\n"))



local megalomaniac = {
"Megalomaniac",
"Medium Cluster Jewel",
Expand Down Expand Up @@ -893,59 +661,6 @@ function buildKeystoneItems(keystoneMap)
table.insert(data.uniques.generated, table.concat(impossibleEscape, "\n"))
end

-- That Which Was Taken
local thatWhichWasTaken = {
[[
Item Class: Jewels
Rarity: Unique
That Which Was Taken
Crimson Jewel
League: Affliction
Has Alt Variant: true
Has Alt Variant Two: true
Has Alt Variant Three: true
Selected Variant: 82
Selected Alt Variant: 104
Selected Alt Variant Two: 106
Selected Alt Variant Three: 125
Variant: None
]]
}

local unsortedCharmsMods = LoadModule("Data/ModJewelCharm")
local sortedCharmsMods = { }

for modId, mod in pairs(unsortedCharmsMods) do
if not modId:match("1$") then
table.insert(sortedCharmsMods, modId)
end
end
table.sort(sortedCharmsMods)
for _, modId in ipairs(sortedCharmsMods) do
local variantName = abbreviateModId(modId):gsub("AnimalCharm", ""):gsub("LIfe", "Life"):gsub("OnHIt", "OnHit"):gsub("2$", ""):gsub("New", ""):gsub("[%u]", " %1"):gsub("[%d]+", " %1"):gsub("_", ""):gsub("E S", "ES")
table.insert(thatWhichWasTaken, "Variant:"..variantName)
end

table.insert(thatWhichWasTaken,
[[Limited to: 1
Requirements:
Level: 48
Item Level: 86
]]
)

local indexCharmMod = 2
for _, modId in ipairs(sortedCharmsMods) do
local mod = unsortedCharmsMods[modId]
for i, _ in ipairs(mod) do
table.insert(thatWhichWasTaken, "{variant:" .. indexCharmMod .. "}" .. mod[i])
end
indexCharmMod = indexCharmMod + 1
end

table.insert(data.uniques.generated, table.concat(thatWhichWasTaken, "\n"))


local replicaDragonfangsFlightMods = {}

LoadModule("Modules/CalcTools")
Expand Down
13 changes: 12 additions & 1 deletion src/Data/Uniques/body.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1487,5 +1487,16 @@ Recover (3-5)% of Energy Shield on Kill
8% increased Maximum Energy Shield for each Corrupted Item Equipped
-(6-4)% to all Resistances for each Corrupted Item Equipped
Corrupted
]],
]],[[
The Queen's Hunger
Vaal Regalia
League: Betrayal
Source: Drops from unique{Catarina, Master of Undeath}
Crafted: true
Implicits: 0
Trigger Level 20 Bone Offering, Flesh Offering, Spirit Offering every 5 seconds in sequence
Offering Skills Triggered this way also affect you
(100-130)% increased Energy Shield
(6-10)% increased maximum Life
]]
}
10 changes: 9 additions & 1 deletion src/Data/Uniques/jewel.lua
Original file line number Diff line number Diff line change
Expand Up @@ -2011,5 +2011,13 @@ Implicits: 0
Binding (100-8000) souls to phylacteries to sustain Zorath
Passives affected are Conquered by the Abyssal
Historic
]],
]],[[
Item Class: Jewels
Rarity: Unique
That Which Was Taken
Crimson Jewel
Crafted: true
League: Affliction
Implicits: 0
]]
}
10 changes: 9 additions & 1 deletion src/Data/Uniques/staff.lua
Original file line number Diff line number Diff line change
Expand Up @@ -809,5 +809,13 @@ Implicits: 2
Reflects 1 to 150 Lightning Damage to Melee Attackers
{variant:1,2}20% chance for Energy Shield Recharge to start when you Block
{variant:3}(25-35)% chance for Energy Shield Recharge to start when you Block
]],
]],[[
Cane of Kulemak
Serpentine Staff
Source: Drops from unique{Catarina, Master of Undeath}
Crafted: true
Implicits: 1
+22% Chance to Block Attack Damage
(60-90)% increased Unveiled Modifier magnitudes
]]
}
17 changes: 17 additions & 0 deletions src/Data/Uniques/sword.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1071,5 +1071,22 @@ Your Elemental Damage can Shock
{variant:3}Gain 700% of Weapon Physical Damage as Extra Damage of a random Element
20% increased Area of Effect for Attacks
Deal no Non-Elemental Damage
]],[[
Paradoxica
Vaal Rapier
League: Betrayal
Source: Drops from unique{Intervention Leaders} in normal{Safehouses}
Crafted: true
Implicits: 1
+25% to Global Critical Strike Multiplier
Attacks with this Weapon deal Double Damage
]],[[
Replica Paradoxica
Vaal Rapier
League: Heist
Source: Steal from a unique{Curio Display} during a Grand Heist
Crafted: true
Implicits: 1
+25% to Global Critical Strike Multiplier
]]
}
12 changes: 11 additions & 1 deletion src/Export/Uniques/body.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1476,5 +1476,15 @@ AllResistancesPerCorruptedItemUnique__1
MaximumEnergyShieldPercentPerCorruptedItemUnique__1_
MaximumLifePercentPerCorruptedItemUnique__1_
Corrupted
]],
]],[[
The Queen's Hunger
Vaal Regalia
League: Betrayal
Source: Drops from unique{Catarina, Master of Undeath}
Crafted: true
Implicits: 0
TriggerRandomOfferingSkillUnique__1
LocalIncreasedEnergyShieldPercentUnique__20_
MaximumLifeUnique__16
]]
}
Loading
Loading