- Skills tab now saves skill ID so gem names can update across versions - Updated minion base values
212 lines
6.8 KiB
Lua
212 lines
6.8 KiB
Lua
-- Path of Building
|
|
--
|
|
-- Module: Data
|
|
-- Contains static data used by other modules.
|
|
--
|
|
local launch = ...
|
|
|
|
LoadModule("Data/Global")
|
|
|
|
local skillTypes = {
|
|
"act_str",
|
|
"act_dex",
|
|
"act_int",
|
|
"other",
|
|
"minion",
|
|
"spectre",
|
|
"sup_str",
|
|
"sup_dex",
|
|
"sup_int",
|
|
}
|
|
local itemTypes = {
|
|
"axe",
|
|
"bow",
|
|
"claw",
|
|
"dagger",
|
|
"mace",
|
|
"staff",
|
|
"sword",
|
|
"wand",
|
|
"helmet",
|
|
"body",
|
|
"gloves",
|
|
"boots",
|
|
"shield",
|
|
"quiver",
|
|
"amulet",
|
|
"ring",
|
|
"belt",
|
|
"jewel",
|
|
"flask",
|
|
}
|
|
|
|
local function makeSkillMod(modName, modType, modVal, flags, keywordFlags, ...)
|
|
return {
|
|
name = modName,
|
|
type = modType,
|
|
value = modVal,
|
|
flags = flags or 0,
|
|
keywordFlags = keywordFlags or 0,
|
|
tagList = { ... }
|
|
}
|
|
end
|
|
local function makeFlagMod(modName, ...)
|
|
return makeSkillMod(modName, "FLAG", true, 0, 0, ...)
|
|
end
|
|
local function makeSkillDataMod(dataKey, dataValue, ...)
|
|
return makeSkillMod("SkillData", "LIST", { key = dataKey, value = dataValue }, 0, 0, ...)
|
|
end
|
|
|
|
-----------------
|
|
-- Common Data --
|
|
-----------------
|
|
|
|
data = { }
|
|
|
|
data.skillColorMap = { colorCodes.STRENGTH, colorCodes.DEXTERITY, colorCodes.INTELLIGENCE, colorCodes.NORMAL }
|
|
|
|
data.jewelRadius = {
|
|
{ rad = 800, col = "^xBB6600", label = "Small" },
|
|
{ rad = 1200, col = "^x66FFCC", label = "Medium" },
|
|
{ rad = 1500, col = "^x2222CC", label = "Large" }
|
|
}
|
|
|
|
data.labyrinths = {
|
|
{ name = "ENDGAME", label = "Endgame" },
|
|
{ name = "MERCILESS", label = "Merciless" },
|
|
{ name = "CRUEL", label = "Cruel" },
|
|
{ name = "NORMAL", label = "Normal" },
|
|
}
|
|
|
|
data.monsterExperienceLevelMap = { [71] = 70.94, [72] = 71.82, [73] = 72.64, [74] = 73.40, [75] = 74.10, [76] = 74.74, [77] = 75.32, [78] = 75.84, [79] = 76.30, [80] = 76.70, [81] = 77.04, [82] = 77.32, [83] = 77.54, [84] = 77.70, }
|
|
for i = 1, 70 do
|
|
data.monsterExperienceLevelMap[i] = i
|
|
end
|
|
|
|
data.weaponTypeInfo = {
|
|
["None"] = { oneHand = true, melee = true, flag = ModFlag.Unarmed, range = 4 },
|
|
["Bow"] = { oneHand = false, melee = false, flag = ModFlag.Bow },
|
|
["Claw"] = { oneHand = true, melee = true, flag = ModFlag.Claw, range = 9 },
|
|
["Dagger"] = { oneHand = true, melee = true, flag = ModFlag.Dagger, range = 8 },
|
|
["Staff"] = { oneHand = false, melee = true, flag = ModFlag.Staff, range = 11 },
|
|
["Wand"] = { oneHand = true, melee = false, flag = ModFlag.Wand },
|
|
["One Handed Axe"] = { oneHand = true, melee = true, flag = ModFlag.Axe, range = 9 },
|
|
["One Handed Mace"] = { oneHand = true, melee = true, flag = ModFlag.Mace, range = 9 },
|
|
["One Handed Sword"] = { oneHand = true, melee = true, flag = ModFlag.Sword, range = 9 },
|
|
["Sceptre"] = { oneHand = true, melee = true, flag = ModFlag.Mace, range = 9, label = "One Handed Mace" },
|
|
["Thrusting One Handed Sword"] = { oneHand = true, melee = true, flag = ModFlag.Sword, range = 12, label = "One Handed Sword" },
|
|
["Two Handed Axe"] = { oneHand = false, melee = true, flag = ModFlag.Axe, range = 11 },
|
|
["Two Handed Mace"] = { oneHand = false, melee = true, flag = ModFlag.Mace, range = 11 },
|
|
["Two Handed Sword"] = { oneHand = false, melee = true, flag = ModFlag.Sword, range = 11 },
|
|
}
|
|
data.unarmedWeaponData = {
|
|
[0] = { type = "None", AttackRate = 1.2, CritChance = 0, PhysicalMin = 2, PhysicalMax = 6 }, -- Scion
|
|
[1] = { type = "None", AttackRate = 1.2, CritChance = 0, PhysicalMin = 2, PhysicalMax = 8 }, -- Marauder
|
|
[2] = { type = "None", AttackRate = 1.2, CritChance = 0, PhysicalMin = 2, PhysicalMax = 5 }, -- Ranger
|
|
[3] = { type = "None", AttackRate = 1.2, CritChance = 0, PhysicalMin = 2, PhysicalMax = 5 }, -- Witch
|
|
[4] = { type = "None", AttackRate = 1.2, CritChance = 0, PhysicalMin = 2, PhysicalMax = 6 }, -- Duelist
|
|
[5] = { type = "None", AttackRate = 1.2, CritChance = 0, PhysicalMin = 2, PhysicalMax = 6 }, -- Templar
|
|
[6] = { type = "None", AttackRate = 1.2, CritChance = 0, PhysicalMin = 2, PhysicalMax = 5 }, -- Shadow
|
|
}
|
|
|
|
-- Uniques
|
|
data.uniques = { }
|
|
for _, type in pairs(itemTypes) do
|
|
data.uniques[type] = LoadModule("Data/Uniques/"..type)
|
|
end
|
|
LoadModule("Data/New")
|
|
|
|
-- Misc. exported data tables
|
|
LoadModule("Data/Misc")
|
|
|
|
---------------------------
|
|
-- Version-specific Data --
|
|
---------------------------
|
|
|
|
for _, targetVersion in ipairs(targetVersionList) do
|
|
data[targetVersion] = setmetatable({ }, { __index = data })
|
|
local function dataModule(mod, ...)
|
|
return LoadModule("Data/"..targetVersion.."/"..mod, ...)
|
|
end
|
|
|
|
-- Load item modifiers
|
|
data[targetVersion].itemMods = {
|
|
Item = dataModule("ModItem"),
|
|
Flask = dataModule("ModFlask"),
|
|
Jewel = dataModule("ModJewel"),
|
|
}
|
|
data[targetVersion].corruptedMods = dataModule("ModCorrupted")
|
|
data[targetVersion].masterMods = dataModule("ModMaster")
|
|
data[targetVersion].enchantments = {
|
|
Helmet = dataModule("EnchantmentHelmet"),
|
|
Boots = dataModule("EnchantmentBoots"),
|
|
}
|
|
data[targetVersion].essences = dataModule("Essence")
|
|
|
|
-- Load skills
|
|
data[targetVersion].skills = { }
|
|
for _, type in pairs(skillTypes) do
|
|
dataModule("Skills/"..type, data[targetVersion].skills, makeSkillMod, makeFlagMod, makeSkillDataMod)
|
|
end
|
|
for skillId, grantedEffect in pairs(data[targetVersion].skills) do
|
|
grantedEffect.id = skillId
|
|
-- Add sources for skill mods
|
|
for _, list in pairs({grantedEffect.baseMods, grantedEffect.qualityMods, grantedEffect.levelMods}) do
|
|
for _, mod in pairs(list) do
|
|
if mod[1] then
|
|
for _, mod in ipairs(mod) do
|
|
mod.source = "Skill:"..skillId
|
|
if type(mod.value) == "table" and mod.value.mod then
|
|
mod.value.mod.source = "Skill:"..skillId
|
|
end
|
|
end
|
|
else
|
|
mod.source = "Skill:"..skillId
|
|
if type(mod.value) == "table" and mod.value.mod then
|
|
mod.value.mod.source = "Skill:"..skillId
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Build gem list
|
|
data[targetVersion].gems = { }
|
|
for _, grantedEffect in pairs(data[targetVersion].skills) do
|
|
if grantedEffect.gemTags then
|
|
data[targetVersion].gems[grantedEffect.name] = grantedEffect
|
|
grantedEffect.defaultLevel = (grantedEffect.levels[20] and 20) or (grantedEffect.levels[3][2] and 3) or 1
|
|
end
|
|
end
|
|
|
|
-- Load minions
|
|
data[targetVersion].minions = { }
|
|
dataModule("Minions", data[targetVersion].minions, makeSkillMod)
|
|
data[targetVersion].spectres = { }
|
|
dataModule("Spectres", data[targetVersion].spectres, makeSkillMod)
|
|
for name, spectre in pairs(data[targetVersion].spectres) do
|
|
spectre.limit = "ActiveSpectreLimit"
|
|
data[targetVersion].minions[name] = spectre
|
|
end
|
|
local missing = { }
|
|
for _, minion in pairs(data[targetVersion].minions) do
|
|
for _, skillId in ipairs(minion.skillList) do
|
|
if launch.devMode and not data[targetVersion].skills[skillId] and not missing[skillId] then
|
|
ConPrintf("'%s' missing skill '%s'", minion.name, skillId)
|
|
missing[skillId] = true
|
|
end
|
|
end
|
|
for _, mod in ipairs(minion.modList) do
|
|
mod.source = "Minion:"..minion.name
|
|
end
|
|
end
|
|
|
|
-- Item bases
|
|
data[targetVersion].itemBases = { }
|
|
for _, type in pairs(itemTypes) do
|
|
dataModule("Bases/"..type, data[targetVersion].itemBases)
|
|
end
|
|
|
|
-- Rare templates
|
|
data[targetVersion].rares = dataModule("Rares")
|
|
end |