Files
PathOfBuilding/Modules/Data.lua
Openarl 3e25c95f0a Release 1.4.75
- Added announced uniques
- Added 3.1 skill helmet enchantments
- Fixed missing Elder mods on shields
- Fixed rounding on reservation calculations when there is increased reservation
- Fixed Indimidate to be Attack Damage only
- Oni-Goroshi buff no longer persists when item is removed
- Fixed various item issues
2018-02-22 14:46:09 +10:00

246 lines
8.6 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",
"glove",
"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,
...
}
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
local function processMod(grantedEffect, mod)
mod.source = "Skill:"..grantedEffect.id
if type(mod.value) == "table" and mod.value.mod then
mod.value.mod.source = "Skill:"..grantedEffect.id
end
for _, tag in ipairs(mod) do
if tag.type == "GlobalEffect" then
grantedEffect.hasGlobalEffect = true
break
end
end
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 = "Eternal" },
{ 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 = "Unarmed", range = 4 },
["Bow"] = { oneHand = false, melee = false, flag = "Bow" },
["Claw"] = { oneHand = true, melee = true, flag = "Claw", range = 9 },
["Dagger"] = { oneHand = true, melee = true, flag = "Dagger", range = 8 },
["Staff"] = { oneHand = false, melee = true, flag = "Staff", range = 11 },
["Wand"] = { oneHand = true, melee = false, flag = "Wand" },
["One Handed Axe"] = { oneHand = true, melee = true, flag = "Axe", range = 9 },
["One Handed Mace"] = { oneHand = true, melee = true, flag = "Mace", range = 9 },
["One Handed Sword"] = { oneHand = true, melee = true, flag = "Sword", range = 9 },
["Sceptre"] = { oneHand = true, melee = true, flag = "Mace", range = 9, label = "One Handed Mace" },
["Thrusting One Handed Sword"] = { oneHand = true, melee = true, flag = "Sword", range = 12, label = "One Handed Sword" },
["Two Handed Axe"] = { oneHand = false, melee = true, flag = "Axe", range = 11 },
["Two Handed Mace"] = { oneHand = false, melee = true, flag = "Mace", range = 11 },
["Two Handed Sword"] = { oneHand = false, melee = true, flag = "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
}
data.specialBaseTags = {
["Amulet"] = { shaper = "amulet_shaper", elder = "amulet_elder", },
["Ring"] = { shaper = "ring_shaper", elder = "ring_elder", },
["Claw"] = { shaper = "claw_shaper", elder = "claw_elder", },
["Dagger"] = { shaper = "dagger_shaper", elder = "dagger_elder", },
["Wand"] = { shaper = "wand_shaper", elder = "wand_elder", },
["One Handed Sword"] = { shaper = "sword_shaper", elder = "sword_elder", },
["Thrusting One Handed Sword"] = { shaper = "sword_shaper", elder = "sword_elder", },
["One Handed Axe"] = { shaper = "axe_shaper", elder = "axe_elder", },
["One Handed Mace"] = { shaper = "mace_shaper", elder = "mace_elder", },
["Bow"] = { shaper = "bow_shaper", elder = "bow_elder", },
["Staff"] = { shaper = "staff_shaper", elder = "staff_elder", },
["Two Handed Sword"] = { shaper = "2h_sword_shaper", elder = "2h_sword_elder", },
["Two Handed Axe"] = { shaper = "2h_axe_shaper", elder = "2h_axe_elder", },
["Two Handed Mace"] = { shaper = "2h_mace_shaper", elder = "2h_mace_elder", },
["Quiver"] = { shaper = "quiver_shaper", elder = "quiver_elder", },
["Belt"] = { shaper = "belt_shaper", elder = "belt_elder", },
["Gloves"] = { shaper = "gloves_shaper", elder = "gloves_elder", },
["Boots"] = { shaper = "boots_shaper", elder = "boots_elder", },
["Body Armour"] = { shaper = "body_armour_shaper", elder = "body_armour_elder", },
["Helmet"] = { shaper = "helmet_shaper", elder = "helmet_elder", },
["Shield"] = { shaper = "shield_shaper", elder = "shield_elder", },
["Sceptre"] = { shaper = "sceptre_shaper", elder = "sceptre_elder", },
}
-- Uniques
data.uniques = { }
for _, type in pairs(itemTypes) do
data.uniques[type] = LoadModule("Data/Uniques/"..type)
end
LoadModule("Data/New")
---------------------------
-- Version-specific Data --
---------------------------
for _, targetVersion in ipairs(targetVersionList) do
data[targetVersion] = setmetatable({ }, { __index = data })
local function dataModule(mod, ...)
return LoadModule("Data/"..targetVersion.."/"..mod, ...)
end
-- Misc data tables
dataModule("Misc", data[targetVersion])
-- Load item modifiers
data[targetVersion].itemMods = {
Item = dataModule("ModItem"),
Flask = dataModule("ModFlask"),
Jewel = dataModule("ModJewel"),
JewelAbyss = targetVersion ~= "2_6" and dataModule("ModJewelAbyss") or { },
}
data[targetVersion].corruptedMods = dataModule("ModCorrupted")
data[targetVersion].masterMods = dataModule("ModMaster")
data[targetVersion].enchantments = {
Helmet = dataModule("EnchantmentHelmet"),
Boots = dataModule("EnchantmentBoots"),
Gloves = dataModule("EnchantmentGloves"),
}
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, and check for global effects
for _, list in pairs({grantedEffect.baseMods, grantedEffect.qualityMods, grantedEffect.levelMods}) do
for _, mod in pairs(list) do
if mod.name then
processMod(grantedEffect, mod)
else
for _, mod in ipairs(mod) do
processMod(grantedEffect, mod)
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