Skip to content

UE5.1 v0.7.3 被动技能 DataTable 解析工作流

🎮 游戏开发

FModel CLI 导出 + 本地化键映射,从 Palworld 服务端 Pak 中提取完整被动技能中英文对照表,自动化更新配置文件。

背景

Palworld v0.7.3 更新后,被动技能 ID 发生了变更(旧 ID 被废弃,新 ID 加入)。本文档记录了一套严格离线的 DataTable 解析工作流:从服务端 Pak 中提取被动技能中英文对照表,自动更新配置文件。

核心约束

  • 全程禁止调用外部在线数据库,所有数据源仅限本地解包的 uasset/uexp、FModel 导出文件
  • 禁止手写二进制 uasset 解析器,必须使用 FModel CLI 导出 DataTable 为标准 JSON
  • ID 有效性唯一判定标准:是否存在于 DT_PassiveSkill_Main 的 RowName 列表
  • 禁止字符串模糊搜索推断映射

环境资源

资源路径 / 版本
Pak 路径G:\PalServer\Pal\Content\Paks\Pal-WindowsServer.pak
引擎版本UE5.1.1
工具UnrealPak.exe、FModel.exe
预解包目录G:\PalServer\extracted_511
存档编辑器G:\PalServer\pst\pal_editor.py

映射链路

text
DT_PassiveSkill_Main.RowName (真实 SkillID)

行内 NameText (FText 本地化键)

DT_SkillNameText_Common.zh-Hans LocRes 中文文本

DataTable 结构解析

FModel 导出 JSON 格式

每条被动技能在 JSON 中是一个 RowName 对象,包含以下关键字段:

json
{
  "Legend": {
    "Rank": 4,
    "LotteryWeight": 100,
    "TargetElementType": "EPalElementType::None",
    "EffectType1": "EPalPassiveSkillEffectType::MeleeAttack",
    "EffectValue1": 20.0,
    "TargetType1": "EPalPassiveSkillEffectTargetType::ToSelf",
    "InvokeActiveOtomo": true,
    "InvokeWorker": false,
    "InvokeRiding": false,
    "InvokeAlways": true,
    "AddPal": true,
    "AddRarePal": true,
    "Category": "EPalPassiveCategory::SortDisplayable"
  }
}

字段说明

字段类型说明
Rankint技能等级(-3 ~ 5),影响颜色品质
LotteryWeightint抽取权重(越高越容易获得)
EffectType1~3enum效果类型(攻击力/防御/速度/采集等)
EffectValue1~3float效果数值
TargetType1~3enum效果目标(自身/帕鲁/骑乘等)
InvokeActiveOtomobool队伍中激活时生效
InvokeWorkerbool工作时生效
InvokeRidingbool骑乘时生效
InvokeAlwaysbool始终生效
InvokeInBaseCampbool据点中生效
Categoryenum分类(可显示/不可显示)

数据总览(873 条技能)

Rank 分布

Rank品质数量说明
-3🔴 深红5极端负面
-2🔴 红色2严重负面
-1🟠 橙色37负面
0⚪ 灰色1测试/特殊
1🔵 蓝色658基础(大部分)
2🟣 紫色57进阶
3🟡 金色78稀有
4⭐ 传说24传说级
5🌟 超传说9最高稀有度
9💎 特殊2特殊事件技能

触发条件分布

触发条件数量说明
InvokeAlways348始终生效(被动常驻)
InvokeActiveOtomo184队伍中激活时
InvokeRiding133骑乘时
InvokeInBaseCamp29据点中
InvokeWorker28工作时

效果类型 Top 10

效果类型数量说明
ShotAttack75远程攻击力
CraftSpeed43制作速度
Defense30防御力
ElementBoost_Dark30暗属性增强
MoveSpeed29移动速度
Mining25采集速度
ElementBoost_Leaf23草属性增强
ElementBoost_Normal21无属性增强
ElementBoost_Ice21冰属性增强
ElementBoost_Water20水属性增强

PASSIVE_SKILLS 字典(pal_editor.py)

存档编辑器 pal_editor.py 中维护了完整的 英文ID → 中文名 映射字典,共 200+ 条。按 Tier 分级:

Tier 4 传说级(⭐ Rank 4-5)

python
PASSIVE_SKILLS = {
    # 传说级帕鲁专属
    "Legend": "传说",
    "PAL_ALLAttack_up3": "鬼神",
    "Artisan": "卓绝技艺",       # v0.7.3 → CraftSpeed_up3
    "DiamondBody": "金刚之躯",
    "Swift": "神速",             # v0.7.3 → MoveSpeed_up_3
    "EternalFlame": "永炎",
    "InfiniteGenerator": "永动机",
    "LordOfTheLake": "湖之主",
    "WaveBreakerKing": "破浪王者",
    "Savior": "救世主",
    # 通用传说级
    "RageStorm": "疾风怒涛",
    "BloodFuel": "血液燃料",
}

Tier 3 金色(🟡 Rank 3)

python
    "CraftsmanSpirit": "工匠精神",   # v0.7.3 → CraftSpeed_up2
    "SturdyBody": "顽强肉体",
    "Ferocious": "凶猛",            # v0.7.3 → PAL_ALLAttack_up2
    "FlameEmperor": "炎帝",
    "SeaEmperor": "海皇",
    "ThunderEmperor": "雷帝",
    "SpiritKing": "精灵王",
    "IceEmperor": "冰帝",
    "RockEmperor": "岩帝",
    "DarkLord": "冥王",
    "DivineDragon": "神龙",
    "Workaholic": "工作狂",
    "InfiniteStamina": "无限精力",
    "Noble": "贵族",
}

Tier 1 蓝色(🔵 Rank 1)

python
    "Brave": "勇敢",
    "Aggressive": "粗暴",
    "Nocturnal": "夜行性",
    "Nimble": "灵活",
    "Diligent": "认真",          # v0.7.3 → CraftSpeed_up1
    "HardSkin": "坚硬皮肤",
    "CorporateSlave": "社畜",   # v0.7.3 → PAL_CorporateSlave
    "SmallStomach": "小胃",
    "PositiveThinking": "积极思维",
}

负面技能(🔴 Rank -1 ~ -3)

python
    # Tier R2 红色负面
    "BottomlessStomach": "无底之胃",
    "DestructionDesire": "毁灭欲望",
    # Tier R3 红色严重负面
    "LazyAddict": "偷懒成瘾",    # v0.7.3 → CraftSpeed_down2
    "Osteoporosis": "骨质疏松",
    "Pessimist": "消极主义者",
}

v0.7.3 新增 ID

python
    # FModel 导出确认的新 RowName
    "CraftSpeed_up1": "认真",
    "CraftSpeed_up2": "工匠精神",
    "CraftSpeed_up3": "卓绝技艺",
    "Noukin": "脑筋",
    "Alien": "未知生物细胞",
    "PAL_CorporateSlave": "社畜",
    # 旧 ID 已从 DataTable 移除,保留映射用于向下兼容
    "Artisan": "工匠精神(旧)",
    "WorkSlave": "社畜(旧)",
    "Work_Serious": "认真(旧)",
    "MuscleHead": "脑筋(旧)",
}

装备/道具来源技能

除帕鲁被动技能外,DataTable 还包含 装备/道具来源的通用技能(Category: SortNotDisplayable,共 781 条):

属性抗性系列(9 属性 × 3 级 = 27 条)

python
    "FireResist_Lv1": "减轻火属性伤害Lv1",
    "FireResist_Lv2": "减轻火属性伤害Lv2",
    "FireResist_Lv3": "减轻火属性伤害Lv3",
    # ... 水/雷/草/冰/地/暗/龙 同理

属性增强系列(S/M/L 三级)

python
    "FireBoost_S": "增强火属性伤害小",
    "FireBoost_M": "增强火属性伤害中",
    "FireBoost_L": "增强火属性伤害大",
    # ... 8 种属性 × 3 级 = 24 条

基础数值系列

python
    "HP_Up_Lv1": "提升体力Lv1",      # +10% HP
    "HP_Up_Lv2": "提升体力Lv2",      # +20% HP
    "HP_Up_Lv3": "提升体力Lv3",      # +30% HP
    "Attack_Up_Lv3": "提升攻击Lv3",
    "Defense_Up_Lv3": "提升防御Lv3",
    "WorkSpeed_Up_Lv3": "高速工作Lv3",
    "Weight_Up_Lv3": "提升负重Lv3",
}

阶段 1:FModel CLI 完整导出

目标资产

  • Pal/Content/Pal/DataTable/PassiveSkill/DT_PassiveSkill_Main.uasset + .uexp
  • Pal/Content/Pal/DataTable/SkillText/DT_SkillNameText_Common.uasset + .uexp

执行步骤

  1. 切换 FModel 工作目录,执行导出命令,将 DT_PassiveSkill_Main 完整导出为 JSON
  2. 读取 JSON,提取全部 873 条行数据
  3. 输出基础清单:RowName | Rank | EffectType1 | EffectValue1 | Category

待校验 ID 列表

类型ID 列表状态
旧 IDArtisanWorkSlaveMuscleHeadWork_Serious❌ v0.7.3 已移除
新 IDCraftSpeed_up1CraftSpeed_up2NoukinPAL_CorporateSlave✅ v0.7.3 已确认

阶段 2:本地化键映射解析

  1. 针对每条有效 RowName (SkillID),提取 NameText 内的 StringTable/Key 值(DisplayNameKey)
  2. FModel 导出 DT_SkillNameText_Common 中文本地化表 JSON
  3. 建立 DisplayNameKey → 中文文本 字典

阶段 3:输出标准文件

生成 passive_skills.json

json
{
    "Legend": "传说",
    "CraftSpeed_up3": "卓绝技艺",
    "CraftSpeed_up2": "工匠精神",
    "CraftSpeed_up1": "认真",
    "Noukin": "脑筋",
    "PAL_ALLAttack_up3": "鬼神",
    "DiamondBody": "金刚之躯",
    "Swift": "神速",
    "PAL_CorporateSlave": "社畜"
}

更新 pal_editor.py

python
PASSIVE_SKILLS = {
    # v0.7.3 新增(FModel 确认)
    "CraftSpeed_up1": "认真",
    "CraftSpeed_up2": "工匠精神",
    "CraftSpeed_up3": "卓绝技艺",
    "CraftSpeed_down2": "偷懒成瘾",
    "Noukin": "脑筋",
    "Alien": "未知生物细胞",
    "PAL_CorporateSlave": "社畜",
    # 旧 ID 已从 v0.7.3 DataTable 移除,保留映射用于向下兼容
    "Artisan": "工匠精神(旧)",
    "WorkSlave": "社畜(旧)",
    "Work_Serious": "认真(旧)",
    "MuscleHead": "脑筋(旧)",
    # ... 200+ 条完整映射
}

pal_editor.py 功能概览

存档编辑器支持以下操作:

命令功能说明
list查看队伍帕鲁信息等级、技能、性别、突破等级
edit setlevel修改等级设置帕鲁等级
edit setrank修改突破等级设置星数
edit setgender修改性别切换帕鲁性别
edit shiny设置闪光标记为闪光帕鲁
edit maxall全属性最大一键满级满突破
edit passive替换被动技能通过 ID 替换技能槽
edit addpassive添加被动技能追加新技能
edit clearpassive清空被动技能移除所有被动
save备份并解码存档SAV → JSON 转换

技术栈

text
sav_cli.exe (PST)    → SAV 解码
oo2core_9_win64.dll  → Oodle Kraken 解压
oodle_wrapper.py     → ctypes 封装
GVAS 精准偏移        → 属性级字节定位

整体工作流

text
Palworld 更新

新 Pak 文件

FModel 导出 DT_PassiveSkill_Main.json

读取所有 RowName(873 条)

匹配本地化键 → 中文文本

生成 passive_skills.json

更新 pal_editor.py PASSIVE_SKILLS 字典

禁止行为清单

禁止行为

  • ❌ 禁止启动 Monolith MCP / UE 编辑器(无运行环境)
  • ❌ 禁止手写 struct 二进制解析 uasset 头部
  • ❌ 禁止引用任何网络抓取数据
  • ❌ 禁止修改 Pak、打包、覆盖游戏资源(仅只读导出分析)
  • ❌ 禁止猜测文本映射(无本地化键匹配则中文值填 null)

Powered by Cloudflare Pages & VitePress