Files
PathOfBuilding/Export/Classes/GGPKData.lua
2021-02-06 15:03:47 -06:00

231 lines
7.9 KiB
Lua

-- Dat View
--
-- Class: GGPK Data
-- GGPK Data
--
local ipairs = ipairs
local t_insert = table.insert
local function scanDir(directory, extension)
local i = 0
local t = { }
local pFile = io.popen('dir "'..directory..'" /b')
for filename in pFile:lines() do
--ConPrintf("%s\n", filename)
if extension then
if filename:match(extension) then
i = i + 1
t[i] = filename
else
--ConPrintf("No Files Found matching extension '%s'", extension)
end
else
i = i + 1
t[i] = filename
end
end
pFile:close()
return t
end
-- Path can be in any format recognized by the extractor at oozPath, ie,
-- a .ggpk file or a Steam Path of Exile directory
local GGPKClass = newClass("GGPKData", function(self, path)
self.path = path
self.temp = io.popen("cd"):read('*l')
self.oozPath = self.temp .. "\\ggpk\\"
self.dat = { }
self.txt = { }
self:ExtractFiles()
if USE_DAT64 then
self:AddDat64Files()
else
self:AddDatFiles()
end
end)
function GGPKClass:ExtractFiles()
local datList, txtList, otList = self:GetNeededFiles()
local fileList = ''
for _, fname in ipairs(datList) do
if USE_DAT64 then
fileList = fileList .. '"' .. fname .. '64" '
else
fileList = fileList .. '"' .. fname .. '" '
end
end
for _, fname in ipairs(txtList) do
fileList = fileList .. '"' .. fname .. '" '
end
for _, fname in ipairs(otList) do
fileList = fileList .. '"' .. fname .. '" '
end
local cmd = 'cd ' .. self.oozPath .. ' && bun_extract_file.exe extract-files "' .. self.path .. '" . ' .. fileList
ConPrintf(cmd)
os.execute(cmd)
end
function GGPKClass:AddDatFiles()
local datFiles = scanDir(self.oozPath .. "Data\\", '%w+%.dat$')
for _, f in ipairs(datFiles) do
local record = { }
record.name = f
local rawFile = io.open(self.oozPath .. "Data\\" .. f, 'rb')
record.data = rawFile:read("*all")
rawFile:close()
--ConPrintf("FILENAME: %s", fname)
t_insert(self.dat, record)
end
end
function GGPKClass:AddDat64Files()
local datFiles = scanDir(self.oozPath .. "Data\\", '%w+%.dat64$')
for _, f in ipairs(datFiles) do
local record = { }
record.name = f
local rawFile = io.open(self.oozPath .. "Data\\" .. f, 'rb')
record.data = rawFile:read("*all")
rawFile:close()
--ConPrintf("FILENAME: %s", fname)
t_insert(self.dat, record)
end
end
function GGPKClass:GetNeededFiles()
local datFiles = {
"Data/Stats.dat",
"Data/BaseItemTypes.dat",
"Data/WeaponTypes.dat",
"Data/ShieldTypes.dat",
"Data/ComponentArmour.dat",
"Data/Flasks.dat",
"Data/ComponentCharges.dat",
"Data/ComponentAttributeRequirements.dat",
"Data/PassiveSkills.dat",
"Data/PassiveSkillBuffs.dat",
"Data/PassiveTreeExpansionJewelSizes.dat",
"Data/PassiveTreeExpansionJewels.dat",
"Data/PassiveJewelSlots.dat",
"Data/PassiveTreeExpansionSkills.dat",
"Data/PassiveTreeExpansionSpecialSkills.dat",
"Data/Mods.dat",
"Data/ModType.dat",
"Data/ModDomains.dat",
"Data/ModGenerationType.dat",
"Data/ModFamily.dat",
"Data/ModAuraFlags.dat",
"Data/ActiveSkills.dat",
"Data/ActiveSkillTargetTypes.dat",
"Data/ActiveSkillType.dat",
"Data/Ascendancy.dat",
"Data/ClientStrings.dat",
"Data/ItemClasses.dat",
"Data/SkillTotems.dat",
"Data/SkillTotemVariations.dat",
"Data/SkillMines.dat",
"Data/Essences.dat",
"Data/EssenceType.dat",
"Data/Characters.dat",
"Data/BuffDefinitions.dat",
"Data/BuffCategories.dat",
"Data/BuffVisuals.dat",
"Data/HideoutNPCs.dat",
"Data/NPCs.dat",
"Data/CraftingBenchOptions.dat",
"Data/CraftingItemClassCategories.dat",
"Data/CraftingBenchUnlockCategories.dat",
"Data/MonsterVarieties.dat",
"Data/MonsterResistances.dat",
"Data/MonsterTypes.dat",
"Data/DefaultMonsterStats.dat",
"Data/SkillGems.dat",
"Data/GrantedEffects.dat",
"Data/GrantedEffectsPerLevel.dat",
"Data/ItemExperiencePerLevel.dat",
"Data/EffectivenessCostConstants.dat",
"Data/StatInterpolationTypes.dat",
"Data/Tags.dat",
"Data/GemTags.dat",
"Data/ItemVisualIdentity.dat",
"Data/AchievementItems.dat",
"Data/MultiPartAchievements.dat",
"Data/PantheonPanelLayout.dat",
"Data/AlternatePassiveAdditions.dat",
"Data/AlternatePassiveSkills.dat",
"Data/AlternateTreeVersions.dat",
"Data/GrantedEffectQualityTypes.dat",
"Data/GrantedEffectQualityStats.dat",
"Data/GrantedEffectGroups.dat",
"Data/AegisVariations.dat",
}
local txtFiles = {
"Metadata/StatDescriptions/passive_skill_aura_stat_descriptions.txt",
"Metadata/StatDescriptions/passive_skill_stat_descriptions.txt",
"Metadata/StatDescriptions/active_skill_gem_stat_descriptions.txt",
"Metadata/StatDescriptions/advanced_mod_stat_descriptions.txt",
"Metadata/StatDescriptions/aura_skill_stat_descriptions.txt",
"Metadata/StatDescriptions/banner_aura_skill_stat_descriptions.txt",
"Metadata/StatDescriptions/beam_skill_stat_descriptions.txt",
"Metadata/StatDescriptions/brand_skill_stat_descriptions.txt",
"Metadata/StatDescriptions/buff_skill_stat_descriptions.txt",
"Metadata/StatDescriptions/curse_skill_stat_descriptions.txt",
"Metadata/StatDescriptions/debuff_skill_stat_descriptions.txt",
"Metadata/StatDescriptions/gem_stat_descriptions.txt",
"Metadata/StatDescriptions/minion_attack_skill_stat_descriptions.txt",
"Metadata/StatDescriptions/minion_skill_stat_descriptions.txt",
"Metadata/StatDescriptions/minion_spell_skill_stat_descriptions.txt",
"Metadata/StatDescriptions/monster_stat_descriptions.txt",
"Metadata/StatDescriptions/offering_skill_stat_descriptions.txt",
"Metadata/StatDescriptions/skillpopup_stat_filters.txt",
"Metadata/StatDescriptions/skill_stat_descriptions.txt",
"Metadata/StatDescriptions/stat_descriptions.txt",
"Metadata/StatDescriptions/variable_duration_skill_stat_descriptions.txt",
}
local otFiles = {
"Metadata/Items/Quivers/AbstractQuiver.ot",
"Metadata/Items/Rings/AbstractRing.ot",
"Metadata/Items/Belts/AbstractBelt.ot",
"Metadata/Items/Flasks/AbstractUtilityFlask.ot",
"Metadata/Items/Jewels/AbstractJewel.ot",
"Metadata/Items/Flasks/CriticalUtilityFlask.ot",
"Metadata/Items/Flasks/AbstractHybridFlask.ot",
"Metadata/Items/Flasks/AbstractManaFlask.ot",
"Metadata/Items/Weapons/TwoHandWeapons/Staves/AbstractWarstaff.ot",
"Metadata/Items/Weapons/OneHandWeapons/OneHandMaces/AbstractSceptre.ot",
"Metadata/Items/Weapons/OneHandWeapons/OneHandSwords/AbstractOneHandSwordThrusting.ot",
"Metadata/Items/Weapons/OneHandWeapons/Claws/AbstractClaw.ot",
"Metadata/Items/Armours/Shields/AbstractShield.ot",
"Metadata/Items/Weapons/TwoHandWeapons/Bows/AbstractBow.ot",
"Metadata/Items/Weapons/TwoHandWeapons/TwoHandMaces/AbstractTwoHandMace.ot",
"Metadata/Items/Armours/Boots/AbstractBoots.ot",
"Metadata/Items/Jewels/AbstractAbyssJewel.ot",
"Metadata/Items/Armours/BodyArmours/AbstractBodyArmour.ot",
"Metadata/Items/Armours/AbstractArmour.ot",
"Metadata/Items/Weapons/OneHandWeapons/Daggers/AbstractRuneDagger.ot",
"Metadata/Items/Weapons/TwoHandWeapons/Staves/AbstractStaff.ot",
"Metadata/Items/Weapons/TwoHandWeapons/TwoHandAxes/AbstractTwoHandAxe.ot",
"Metadata/Items/Weapons/OneHandWeapons/OneHandAxes/AbstractOneHandAxe.ot",
"Metadata/Items/Weapons/TwoHandWeapons/TwoHandSwords/AbstractTwoHandSword.ot",
"Metadata/Items/Weapons/OneHandWeapons/OneHandMaces/AbstractOneHandMace.ot",
"Metadata/Items/Armours/Gloves/AbstractGloves.ot",
"Metadata/Items/Weapons/OneHandWeapons/Daggers/AbstractDagger.ot",
"Metadata/Items/Weapons/OneHandWeapons/OneHandSwords/AbstractOneHandSword.ot",
"Metadata/Items/Amulets/AbstractAmulet.ot",
"Metadata/Items/Flasks/AbstractLifeFlask.ot",
"Metadata/Items/Weapons/OneHandWeapons/Wands/AbstractWand.ot",
"Metadata/Items/Armours/Helmets/AbstractHelmet.ot",
"Metadata/Items/Flasks/AbstractFlask.ot",
"Metadata/Items/Weapons/TwoHandWeapons/AbstractTwoHandWeapon.ot",
"Metadata/Items/Item.ot",
"Metadata/Items/Weapons/OneHandWeapons/AbstractOneHandWeapon.ot",
"Metadata/Items/Equipment.ot",
"Metadata/Items/Weapons/AbstractWeapon.ot",
}
return datFiles, txtFiles, otFiles
end