Hello World

吞风吻雨葬落日 欺山赶海踏雪径

0%

AzerothCore pdump 文件分析

pdump 是 AzerothCore 用来把单个角色完整导出 / 导入的命令(控制台或游戏内 .character pdump write|load|copy)。导出来的文件是一条条 INSERT,把这个角色相关的表都串起来。本文以真实样本 pdump_20260715.txt为切片,对照 PlayerDump.cppdb_characters 建表,把 18 张实际落盘的表逐个拆开:表职能、字段类型与含义、样本数据、表间引用,以及交叉读表后还原出的角色画像。

0. 样本概况

0.1 角色画像(来自 characters

字段 解读
guid 1002 角色全局唯一 ID,所有 character_* 表外键都指它
account 101 账号 ID(acore_auth.account.id
name 大法师 角色名
race / class / gender 10 / 8 / 1 血精灵 / 法师 / 女性
level / xp 29 / 4026 当前等级与本级经验
money 2096484 209 金 64 银 84 铜
position_* / map / zone -2386.9, -1891.31, 95.85 / 1 / 17 卡利姆多 · 贫瘠之地
totaltime / leveltime 123225 / 3352 总在线 ≈ 34.2 小时;本级 ≈ 56 分钟
creation_date 2026-06-20 18:26:59 建号时间
logout_time 1784122746 最后下线 ≈ 2026-07-15 13:39 UTC
health / power1 973 / 2337 当前生命 / 法力

0.2 样本表行数

flowchart TB
    subgraph rows["样本各表行数(从高到低)"]
      direction TB
      A1["character_achievement_progress — 281"]
      A2["character_spell — 179"]
      A3["character_queststatus_rewarded — 176"]
      A4["item_instance — 149"]
      A5["character_inventory — 147"]
      A6["character_reputation — 105"]
      A7["character_action — 47"]
      A8["character_skills — 20"]
      A9["character_achievement — 19"]
      A10["character_talent — 10"]
      A11["其余 8 张表 — 各 1~4 行"]
      A1 --> A2 --> A3 --> A4 --> A5 --> A6 --> A7 --> A8 --> A9 --> A10 --> A11
    end
行数 职能一句话
character_achievement_progress 281 成就进度计数器
character_spell 179 已学法术 / 配方
character_queststatus_rewarded 176 已领奖任务
item_instance 149 物品实体
character_inventory 147 物品槽位映射
character_reputation 105 声望
character_action 47 动作条
character_skills 20 技能熟练度
character_achievement 19 已完成成就
character_talent 10 已点天赋法术
character_aura 4 持久光环
character_queststatus 3 进行中任务
character_queststatus_seasonal 2 节日任务状态
character_account_data 2 客户端按角色配置
character_glyphs 1 雕文
character_homebind 1 炉石绑定
mail 1 邮件
characters 1 角色主表

可以把它当作 characters 库的一次垂直切片——只盯一个角色,就能把核心表学完。

0.3 为什么不能直接灌库

1
2
IMPORTANT NOTE: THIS DUMPFILE IS MADE FOR USE WITH THE 'PDUMP' COMMAND ONLY
DO NOT apply it directly - it will irreversibly DAMAGE and CORRUPT your database!

必须通过 pdump load 回放。PlayerDump.cpp 导入时会重写角色 GUID、物品 GUID、邮件 ID、宠物 ID、装备方案 ID,并级联修正引用;直接 mysql < dump.txt 会撞主键或留下悬空引用。

0.4 pdump 导出范围与命令

DumpTables[] 登记的表比本样本多,空表不写 INSERT。本样本无宠物、装备方案、法术 CD、邮件附件。

导出时按表类型处理 GUID:

flowchart TB
    subgraph types["PlayerDump 表类型"]
      DTT_CHARACTER["DTT_CHARACTER
characters 主行"] DTT_CHAR_TABLE["DTT_CHAR_TABLE
多数 character_*"] DTT_INVENTORY["DTT_INVENTORY
character_inventory"] DTT_ITEM["item_instance
GUID_TYPE_ITEM"] DTT_MAIL["mail / mail_items"] DTT_PET["character_pet* / pet_*"] DTT_EQSET["character_equipmentsets"] end DTT_CHARACTER --> DTT_CHAR_TABLE DTT_CHARACTER --> DTT_INVENTORY DTT_INVENTORY --> DTT_ITEM DTT_CHARACTER --> DTT_MAIL DTT_CHARACTER --> DTT_PET DTT_CHARACTER --> DTT_EQSET
flowchart LR
    A[".character pdump write"] --> B["PlayerDumpWriter"]
    B --> C["按 DumpTables 扫库"]
    C --> D["生成 INSERT 文本"]
    E[".character pdump load"] --> F["PlayerDumpReader"]
    F --> G["分配新 GUID"]
    G --> H["改写引用后入库"]

命令入口:src/server/scripts/Commands/cs_character.cpp

1
2
3
.character pdump write <file> <player>
.character pdump load <file> <account> [new_name] [new_guid]
.character pdump copy <player> <account> [new_name] [new_guid]

1. characters —— 角色主表

1.1 职能

一条记录 = 一个角色。登录、选人界面、地图落点、休息经验、PVP 货币、天赋组开关等顶层状态都在这里。主键 guid 是整棵角色数据树的根。

1.2 字段全表

字段 类型 含义 样本值 / 说明
guid int unsigned PK 角色 GUID 1002
account int unsigned 账号 ID → acore_auth.account.id 101
name varchar(12) bin 角色名(大小写敏感校对) 大法师
race tinyint ChrRaces.dbc ID 10 血精灵
class tinyint ChrClasses.dbc ID 8 法师
gender tinyint 0 男 / 1 女 1
level tinyint 等级 29
xp int 本级当前经验 4026
money int 铜币现金 2096484
skin tinyint 肤色索引 7
face tinyint 脸型 3
hairStyle tinyint 发型 11
hairColor tinyint 发色 9
facialStyle tinyint 面部装饰 0
bankSlots tinyint 已购银行背包栏数 0–7 5
restState tinyint 休息状态枚举 1=REST_STATE_RESTED
playerFlags int PlayerFlags 位掩码 3072=`HIDE_HELM
position_x/y/z float 世界坐标 贫瘠之地
map smallint 地图 ID 1 卡利姆多
instance_id int 实例 ID,世界地图为 0 0
instance_mode_mask tinyint 副本难度掩码 0
orientation float 朝向弧度 2.4174
taximask text 飞行点位图,空格分隔 uint32 14 个节点已解锁
online tinyint 是否在线 0
cinematic tinyint 是否看过种族开场动画 1
totaltime int 总在线秒数 123225
leveltime int 本级在线秒数 3352
logout_time int 最后登出 Unix 秒 1784122746
is_logout_resting tinyint 是否在休息区下线 0
rest_bonus float 已累计休息经验池 1998.15
resettalents_cost int 下次洗天赋金币代价 0
resettalents_time int 上次洗天赋时间 0
trans_x/y/z/o float 交通工具内相对坐标 0
transguid int 交通工具 guid 0
extra_flags smallint PlayerExtraFlags 4=ACCEPT_WHISPERS
stable_slots tinyint 宠物寄存栏购买数 0
at_login smallint AtLoginFlags 登录时强制动作 0
zone smallint 区域 AreaTable ID 17 贫瘠之地
death_expire_time int 尸体可召回等相关截止时间 1783764264
taxi_path text 当前飞行路径序列,空则 NULL NULL
arenaPoints int 竞技场点 0
totalHonorPoints int 荣誉点总量 0
todayHonorPoints int 今日荣誉 0
yesterdayHonorPoints int 昨日荣誉 0
totalKills int 荣誉击杀总量 0
todayKills smallint 今日击杀 0
yesterdayKills smallint 昨日击杀 0
chosenTitle int 当前展示称号 CharTitles ID 0
knownCurrencies bigint 已知货币位图 0
watchedFaction int 声望面板追踪的 faction;0xFFFFFFFF=无 4294967295
drunk tinyint 醉酒等级 0–100 档 0
health int 当前生命 973
power1 int POWER_MANA 2337
power2 int POWER_RAGE 0
power3 int POWER_FOCUS 0
power4 int POWER_ENERGY 100(法师残留)
power5 int POWER_HAPPINESS 0
power6 int POWER_RUNE 0
power7 int POWER_RUNIC_POWER 0
latency int 最近延迟 ms 0
talentGroupsCount tinyint 天赋组数量 1 或 2 1
activeTalentGroup tinyint 当前天赋组索引 0
exploredZones longtext 128 个 uint32 迷雾位图 ~132 bit 已探索
equipmentCache longtext 选人界面装备缓存:entry ench 成对 见 §1.3
ammoId int 弹药 item entry 0
knownTitles longtext 称号位图,空格分隔 uint32 全 0
actionBars tinyint 额外动作条解锁位 15=0b1111
grantableLevels tinyint 可授予等级(招募等) 0
order tinyint 角色列表排序 NULL
creation_date timestamp 建号时间 2026-06-20 18:26:59
deleteInfos_Account int 软删除时原账号 NULL
deleteInfos_Name varchar(12) 软删除时原名 NULL
deleteDate int 软删除时间 NULL
innTriggerId int 最近旅店 areatrigger 2286 乱风岗
extraBonusTalentCount int 额外天赋点数 0

1.2.1 race / class / gender 枚举

源码:src/server/shared/SharedDefines.henum Races / enum Classes / enum Gender)。characters.racecharacters.classcharacters.gender 直接存这些整型 ID;创建角色时还会再和 ChrRaces.dbc / ChrClasses.dbc 校验。

Gender

枚举 含义 样本
0 GENDER_MALE 男性
1 GENDER_FEMALE 女性 本样本
2 GENDER_NONE 无性别(非玩家单位等)

Races(3.3.5a 可创建角色)

枚举 中文 阵营 备注
0 RACE_NONE 占位,不可创建
1 RACE_HUMAN 人类 联盟
2 RACE_ORC 兽人 部落
3 RACE_DWARF 矮人 联盟
4 RACE_NIGHTELF 暗夜精灵 联盟
5 RACE_UNDEAD_PLAYER 亡灵 部落
6 RACE_TAUREN 牛头人 部落
7 RACE_GNOME 侏儒 联盟
8 RACE_TROLL 巨魔 部落
9 (未用) 地精 3.3.5 玩家不可选;枚举里注释掉
10 RACE_BLOODELF 血精灵 部落 本样本
11 RACE_DRAENEI 德莱尼 联盟

12 及以上(邪兽人、纳迦、破碎者等)只出现在 NPC / 扩展占位,正常 characters.race 不会是这些值。

Classes(3.3.5a)

枚举 中文 备注
0 CLASS_NONE 占位
1 CLASS_WARRIOR 战士
2 CLASS_PALADIN 圣骑士
3 CLASS_HUNTER 猎人
4 CLASS_ROGUE 潜行者
5 CLASS_PRIEST 牧师
6 CLASS_DEATH_KNIGHT 死亡骑士 WotLK 英雄职业
7 CLASS_SHAMAN 萨满祭司
8 CLASS_MAGE 法师 本样本
9 CLASS_WARLOCK 术士
10 (未用) 枚举空号
11 CLASS_DRUID 德鲁伊

样本对应关系:

1
2
3
race=10  → RACE_BLOODELF  血精灵
class=8 → CLASS_MAGE 法师
gender=1 → GENDER_FEMALE 女性

种族与职业并非任意组合。服务端创建角色时会查 ChrRaces / ChrClasses 及内部 mask(如 CLASSMASK_ALL_PLAYABLE);例如血精灵可做法师,牛头人不可。读 dump 时若看到非法组合,多半是手工改库或私服自定义。

flowchart LR
    subgraph sample["本样本"]
      R["race = 10
Blood Elf"] --> C["class = 8
Mage"] C --> G["gender = 1
Female"] end

1.2.2 其它常用枚举摘录

1
2
3
4
PlayerFlags:     HIDE_HELM=0x400, HIDE_CLOAK=0x800, RESTING=0x20, GM=0x8 ...
PlayerExtraFlags: GM_ON=0x1, ACCEPT_WHISPERS=0x4, TAXICHEAT=0x8, GM_INVISIBLE=0x10 ...
AtLoginFlags: RENAME=0x1, RESET_SPELLS=0x2, RESET_TALENTS=0x4, CUSTOMIZE=0x8 ...
RestState: RESTED=1, NOT_RAF_LINKED=2, TIRED=3, EXHAUSTED=5 ...

1.3 equipmentCache

按可见装备槽顺序,每槽 2 个数:itemEntry + PERM 附魔 ID。选人界面只读主表,不联 item_instance

itemEntry 物品 缓存附魔
10502 Spellpower Goggles Xtreme 0
3748 Feline Mantle 0
4324 Azure Silk Vest 17
51968 Enumerated Wrap 0
7046 Azure Silk Pants 17
4320 Spidersilk Boots 0
14148 Crystalline Cuffs 0
51973 Enumerated Handwraps 0
戒指1 50255 Dread Pirate Ring 0
戒指2 1156 Lavishly Jeweled Ring 0
饰品1 42992 Discerning Eye of the Beast 0
6340 Fenrus’ Hide 0
主手 15241 Battle Knife 0
副手 6341 Eerie Stable Lantern 0
远程 7001 Gravestone Scepter 0
包1–4 23162×4 Foror’s Crate 0

1.4 时间线

flowchart LR
    T1["06-20
建号 / Lv10 / RFC"] --> T2["06-27
WC / 小宠物"] T2 --> T3["07-04
100 Quests"] T3 --> T4["07-06
Lv20 / SFK / 骑术 / DM"] T4 --> T5["07-11
决斗 / BFD / Stockades"] T5 --> T6["07-15
登出 / pdump"]

2. character_account_data —— 客户端按角色配置

2.1 职能

把客户端 CVar、聊天窗、按键、宏等按角色持久化。换机登录可恢复 UI 习惯。主键 (guid, type)

2.2 字段

字段 类型 含义
guid int unsigned characters.guid
type tinyint AccountDataType,见下表
time int 该块最后更新 Unix 时间
data blob 原始内容(多为可解析文本)

AccountDataTypeWorldSession.h):

type 枚举 范围 含义
0 GLOBAL_CONFIG_CACHE 账号级 全局配置(一般不在本表)
1 PER_CHARACTER_CONFIG_CACHE 角色 CVar
2 GLOBAL_BINDINGS_CACHE 账号级 全局按键
3 PER_CHARACTER_BINDINGS_CACHE 角色 按键
4 GLOBAL_MACROS_CACHE 账号级 全局宏
5 PER_CHARACTER_MACROS_CACHE 角色
6 PER_CHARACTER_LAYOUT_CACHE 角色 界面布局
7 PER_CHARACTER_CHAT_CACHE 角色 聊天窗

样本 2 行:type=1(CVar)与 type=7(聊天,约 3.7KB)。

type=1 要点:

1
2
3
4
5
6
7
equipmentManager=1
nameplateShowEnemies=1
showKeyring=1
playerStatLeftDropdown=PLAYERSTAT_BASE_STATS
playerStatRightDropdown=PLAYERSTAT_SPELL_COMBAT
lfgSelectedRoles=9
minimapTrackedInfo=MINIMAP_TRACKING_VENDOR_FOOD

3. character_achievement —— 已完成成就

3.1 职能

已经点亮的成就。完成瞬间写入一行;进度型统计在 character_achievement_progress

3.2 字段

字段 类型 含义
guid int characters.guid
achievement smallint Achievement.dbc ID
date int 完成 Unix 时间

主键 (guid, achievement)

3.3 样本 19 条

ID 名称 时间 UTC
879 Old School Ride 06-20 10:35
131 Journeyman Medic 06-20 11:07
6 Level 10 06-20 14:41
503 / 522 50 Quests / Somebody Likes Me 06-20 14:43
116 Professional Journeyman 06-20 14:46
629 Ragefire Chasm 06-20 15:29
1017 Can I Keep Him? 06-27 14:23
630 Wailing Caverns 06-27 15:11
504 100 Quests 07-04 12:54
7 Level 20 07-06 03:34
631 Shadowfang Keep 07-06 03:57
731 Professional Expert 07-06 04:05
891 Giddy Up! 07-06 08:25
628 Deadmines 07-06 13:54
1157 Duel-icious 07-11 06:33
632 Blackfathom Deeps 07-11 08:52
633 Stormwind Stockade 07-11 10:30
flowchart LR
    RFC[629 RFC] --> WC[630 WC]
    WC --> SFK[631 SFK]
    SFK --> DM[628 Deadmines]
    DM --> BFD[632 BFD]
    BFD --> STK[633 Stockades]

4. character_achievement_progress —— 成就进度

4.1 职能

未完成或需累计的 criteria。每个 (guid, criteria) 一行,counter 为当前累计。

4.2 字段

字段 类型 含义
guid int characters.guid
criteria smallint AchievementCriteria.dbc ID
counter int 当前进度值(击杀数/铜币/伤害等)
date int 最后更新时间

4.3 样本高值

criteria counter 解读
4224 2317003 金钱类累计,约 231 金量级
3361 / 4091 621267 62 金 12 银 67 铜
3355 等 184260 造成伤害
3354 等 36676 承受伤害
3356 8742 治疗量
2072 1439 击杀数
73 / 232 等 176 已交任务数 = rewarded 行数
992 等 42xxx 主城声望接近 Exalted
842–902 225 专业 225 相关
164 等 210 炼金 210 相关

经济结论:现金 209 金,自产统计约 62 金 → 明显有外部注资


5. character_action —— 动作条

5.1 职能

记录每个动作条按钮绑定的法术 / 物品 / 宏。双天赋时 spec 分 0/1 两套。

5.2 字段

字段 类型 含义
guid int characters.guid
spec tinyint 天赋组索引
button tinyint 按钮编号 0–143
action int 法术 ID 或物品 entry 或宏 ID
type tinyint ActionButtonType

主键 (guid, spec, button)

type

枚举 含义
0x00 ACTION_BUTTON_SPELL 法术,action=spellId
0x01 ACTION_BUTTON_C click 类
0x20 ACTION_BUTTON_EQSET 装备方案
0x40 ACTION_BUTTON_MACRO
0x80 ACTION_BUTTON_ITEM 物品,action=itemEntry

button 分区:

flowchart TB
    M["button 0-11 主动作条"]
    M --> R1["12-23 右下"]
    M --> R2["24-35 左下"]
    M --> R3["36-47 右侧"]
    M --> R4["48-59 左侧"]
    M --> R5["60-71 额外条"]
    M --> R6["72-83 上方条"]

样本 47 键:法术 39、物品 8。主条:

btn action 含义
0 120 Cone of Cold
1 8406 Frostbolt 高阶
2 8444 Fire Blast
3 8400 Fireball
4 5145 Arcane Missiles
5 8437 Arcane Explosion
6 5019 Shoot
8 1953 Blink
9 12824 Polymorph
10 865 Frost Nova
11 2138 Fire Blast 另一阶

其它条含专业技能、手雷 4390、药水、12472 Icy Veins、2139 Counterspell、28730 奥术洪流。


6. character_aura —— 持久光环

6.1 职能

下线仍保留、上线需恢复的长 buff(自身护甲、智力、NPC 耐力、药剂、物品触发等)。短战斗光环通常不入库。

6.2 字段

字段 类型 含义
guid int 受益者 → characters.guid
casterGuid bigint 施法者完整 GUID(玩家或生物,可含 HighGuid)
itemGuid bigint 物品触发时的物品完整 GUID;非物品为 0
spell int 法术 ID
effectMask tinyint 哪些 effect 槽生效(bit0=effect0…)
recalculateMask tinyint 上线需重算的 effect 位
stackCount tinyint 层数
amount0/1/2 int 三 effect 当前修正值
base_amount0/1/2 int 基础值(未吃加成前)
maxDuration int 最大持续 ms
remainTime int 剩余 ms(下线冻结)
remainCharges tinyint 剩余次数;0 常表示无次数限制

主键 (guid, casterGuid, itemGuid, spell, effectMask)

样本 4 条:

1
2
3
4
caster=505       spell=1245 +20耐力  30min  NPC 耐力
caster=1002 spell=1461 +15智力 30min Arcane Intellect
caster=1002 spell=7301 +200护甲 30min Frost Armor
caster=1002+item spell=3166 +7精神 ~16min 物品触发

7. character_glyphs —— 雕文

7.1 职能

每个天赋组 6 个雕文槽(3 主 3 副,按等级解锁)。

7.2 字段

字段 类型 含义
guid int characters.guid
talentGroup tinyint 天赋组 0/1
glyph1..6 smallint GlyphProperties.dbc ID;0=空

主键 (guid, talentGroup)

样本:glyph1=315, glyph2=451, 其余 0。29 级只开部分槽。


8. character_homebind —— 炉石绑定

8.1 职能

炉石传送目标。每个角色一行。

8.2 字段

字段 类型 含义 样本
guid int PK characters.guid 1002
mapId smallint 地图 1
zoneId smallint 区域 484
posX/Y/Z float 坐标 -5473.93, -2458.54, 89.2845

对照 areatrigger 2286 + areatrigger_tavern:千针石林 Freewind Post 旅店。与 characters.innTriggerId=2286 一致。人在贫瘠、炉石在千针。


9. character_inventory + item_instance —— 物品系统

9.1 职能分工

职能
item_instance 物品实体:模板、堆叠、附魔、耐久、绑定
character_inventory 放哪:哪个 bag 的第几 slot
erDiagram
    characters ||--o{ character_inventory : "guid"
    characters ||--o{ item_instance : "owner_guid"
    character_inventory }o--|| item_instance : "item = guid"
    character_inventory }o--o| item_instance : "bag = guid (or 0)"
    characters ||--o{ item_instance : "creatorGuid"

样本:item_instance 149,inventory 147。多出 2 件悬空:

1
2
36538 Clarice's Pendant (6145)
36539 Samophlange (5054)

9.2 character_inventory 字段

字段 类型 含义
guid int 角色 → characters.guid
bag int 容器 item_instance.guid0=角色自身槽位空间
slot tinyint 槽位号(含义随 bag 变化)
item int PK 物品实例 → item_instance.guid

唯一键 (guid, bag, slot):同一格不能放两件。

9.3 bag=0 时的 slot 空间

flowchart TB
    subgraph body["bag = 0 角色自身"]
      E["0-18 装备槽"]
      B["19-22 四个背包栏"]
      M["23-38 主背包 16 格"]
      BI["39-66 银行物品格"]
      BB["67-73 银行背包栏"]
    end
    E --> B --> M --> BI --> BB
slot 范围 枚举 含义
0–18 EQUIPMENT_SLOT_* 头颈肩…主副手远程战袍
19–22 INVENTORY_SLOT_BAG_* 身上 4 个包
23–38 INVENTORY_SLOT_ITEM_* 主背包 16 格
39–66 BANK_SLOT_ITEM_* 银行主空间
67–73 BANK_SLOT_BAG_* 银行包栏(bankSlots 控制已购数)

装备槽细目:

flowchart LR
    subgraph equip["装备 0-18"]
      H["0 头"] --- N["1 颈"] --- S["2 肩"] --- C["3 衬衣"]
      C --- Ch["4 胸"] --- W["5 腰"] --- L["6 腿"] --- F["7 脚"]
      F --- Wr["8 腕"] --- Ha["9 手"] --- R1["10 戒"] --- R2["11 戒"]
      R2 --- T1["12 饰"] --- T2["13 饰"] --- B["14 背"]
      B --- MH["15 主手"] --- OH["16 副手"] --- RG["17 远程"] --- TB["18 战袍"]
    end

样本 bag=0 占用:装备 15 件(缺颈/衬衣/饰品2/战袍)、背包栏 4、主包与银行大量材料格、银行包栏 5(= bankSlots)。

9.4 item_instance 字段

字段 类型 含义
guid int PK 物品实例全局 ID
itemEntry int item_template.entry
owner_guid int 所有者 → characters.guid
creatorGuid int 制造者角色 guid;0=非制造
giftCreatorGuid int 包装赠送者
count int 堆叠数量
duration int 限时物品剩余秒;0=无限
charges tinytext 最多 5 个法术充能,空格分隔
flags int ITEM_FIELD_FLAGS;样本 1=已绑定
enchantments text 12 槽 × (id,duration,charges) = 36 个整数
randomPropertyId smallint 随机属性;负值多为 random suffix
durability smallint 当前耐久;无耐久为 0
playedTime int 已装备秒数
text text 可读物品正文;无则 NULL

enchantments 槽:

枚举 含义
0 PERM_ENCHANTMENT_SLOT 永久附魔
1 TEMP_ENCHANTMENT_SLOT 临时附魔
2–4 SOCK_ENCHANTMENT_SLOT* 宝石
5 BONUS_ENCHANTMENT_SLOT 插槽奖励
6 PRISMATIC_ENCHANTMENT_SLOT 棱彩
7–11 PROP_ENCHANTMENT_SLOT* 随机属性

9.5 样本装备 / 包 / 材料

身上装备见 §1.3 联表结果;穿最久:Feline Mantle / Fenrus’ Hide ≈ 30.3h。

背包:4×23162 Foror’s Crate。银行 5 包(bankSlots=5):4245/932/918/857/5576。

材料汇总:Linen 803、Wool 364、绷带 96、手雷 56、Blood Shard 52、法力药水 29 等。

自制(creatorGuid=1002):Spidersilk Boots、Azure Silk Vest、Green Silken Shoulders、Crimson Silk Vest、Black Mageweave Vest、Mana Agate。


10. character_queststatus —— 进行中任务

10.1 职能

任务日志里还没收工的任务:目标计数、失败/完成态、计时器。交完领奖后删本行,写入 queststatus_rewarded

stateDiagram-v2
    [*] --> INCOMPLETE: 接取任务
    INCOMPLETE --> COMPLETE: 目标达成
    INCOMPLETE --> FAILED: 失败/超时
    COMPLETE --> [*]: 交任务领奖
写 rewarded 删本行
    FAILED --> INCOMPLETE: 放弃重接
    FAILED --> [*]: 放弃

10.2 字段

字段 类型 含义
guid int characters.guid
quest int quest_template.ID
status tinyint QuestStatus
explored tinyint 探索类目标是否完成
timer int 限时任务截止 Unix 时间;非限时也可能写时间戳
mobcount1..4 smallint 最多 4 个杀怪/目标计数
itemcount1..6 smallint 最多 6 个交物品计数
playercount smallint 需要玩家击杀类计数

QuestStatus

枚举 含义
0 NONE
1 COMPLETE 目标完成,可交
3 INCOMPLETE 仍在进行
5 FAILED 失败
6 REWARDED 不进本表

样本:

quest 名称 status 说明
1088 Ordanus 3 INCOMPLETE 还在做
1136 Frostmaw 3 INCOMPLETE 千针霜喉
3633 Goblin Engineering 1 COMPLETE itemcount1=1,可交

11. character_queststatus_rewarded —— 已领奖任务

11.1 职能

永久记录「这号交过哪些任务」。任务前置、成就、某些重复性判断都读它。

11.2 字段

字段 类型 含义
guid int characters.guid
quest int 任务 ID
active tinyint 通常 1;部分实现用于标记是否仍参与某些逻辑

主键 (guid, quest)。样本 176 行,active 全 1。

按 ID 段:

区段 数量 内容
0–999 48 贫瘠/石爪等
1000–1999 18 含法师职业任务
3000–5999 27 千针等
6000–6999 21 灰谷/石爪/BFD 相关
8000–9999 53 血精灵起始 + 幽魂之地
10000+ 3 10068;节日 11859/11915
24882/24883 2 LFG 随机本每日
90000 1 私服自定义任务

12. character_queststatus_seasonal —— 季节性任务

12.1 职能

节日/事件任务在本周期是否已做。事件重置后清或轮换,与永久 rewarded 互补。

12.2 字段

字段 类型 含义
guid int characters.guid
quest int 任务 ID
event int game_event.entry

样本:

1
2
11859 Honor the Flame   event=1
11915 Playing with Fire event=1

game_event=1 = Midsummer Fire Festival(仲夏火焰节)


13. character_reputation —— 声望

13.1 职能

每个阵营的 standing 与 UI 标志。角色创建时会初始化大量阵营行。

13.2 字段

字段 类型 含义
guid int characters.guid
faction smallint Faction.dbc ID
standing int 原始声望点数(可负)
flags smallint FactionFlags 位掩码

主键 (guid, faction)

声望阈值:

1
2
3
Hated < -6000 ≤ Hostile < -3000 ≤ Unfriendly < 0
≤ Neutral < 3000 ≤ Friendly < 9000 ≤ Honored
< 21000 ≤ Revered < 42000 ≤ Exalted

FactionFlags

枚举 含义
0x01 VISIBLE 声望面板可见
0x02 AT_WAR 交战
0x04 HIDDEN 隐藏
0x08 INVISIBLE_FORCED 强制不可见
0x10 PEACE_FORCED 强制和平
0x20 INACTIVE 玩家标为不活跃
0x40 RIVAL 外域对立阵营
0x80 SPECIAL 主城等特殊

样本非零:Orgrimmar/TB 42499、Darkspear 39278、Silvermoon 38999、Undercity 37030、Ratchet 20000、三 goblin 城 10000、Argent Dawn 2500。


14. character_skills —— 技能熟练度

14.1 职能

武器、护甲、语言、专业、骑术等 SkillLine 当前值与上限。不是法术列表。

14.2 字段

字段 类型 含义
guid int characters.guid
skill smallint SkillLine.dbc ID
value smallint 当前熟练度
max smallint 当前上限(受等级/训练影响)

主键 (guid, skill)

样本要点:Frost/Fire/Arcane 145;Alchemy 210、Tailoring 220、Engineering 225;First Aid 225;Riding 75;无 Mining(186)。三门主要专业并存,说明私服放宽限制。


15. character_spell —— 已学法术

15.1 职能

角色会的全部法术与配方。是否放在动作条另见 character_action;天赋点选另见 character_talent

15.2 字段

字段 类型 含义
guid int characters.guid
spell int Spell.dbc ID
specMask tinyint 哪些天赋组可用的位掩码

主键 (guid, spell)

specMask:bit0=spec0,bit1=spec1;255 (0xFF)=所有天赋组;1=仅 spec0。

样本 179 个:战斗法术 + 天赋法术 + 炼金/工程/裁缝/急救配方 + 骑术 33388 等。

flowchart TB
    spell[character_spell 会什么]
    action[character_action 放哪]
    talent[character_talent 天赋点了什么]
    spell --> action
    talent --> spell

16. character_talent —— 天赋

16.1 职能

已学习的天赋法术(按 rank 分行)。与 character_spell 中对应 spell 常同时存在。

16.2 字段

字段 类型 含义
guid int characters.guid
spell int 天赋法术 ID
specMask tinyint 所属天赋组位掩码

主键 (guid, spell)

样本 10 行全 specMask=1:Icy Veins、Improved Frostbolt/Blizzard/Permafrost、Ice Shards、Arcane Concentration/Subtlety 等。冰系为主 + 少量奥术前置talentGroupsCount=1 未开双天赋。


17. mail —— 邮件

17.1 职能

邮箱信件。附件在 mail_items(本样本无)。pdumpreceiver 导出。

17.2 字段

字段 类型 含义
id int PK 邮件 ID
messageType tinyint MailMessageType
stationery tinyint 信纸样式 Stationery.dbc
mailTemplateId smallint 非 0 时正文来自模板,subject/body 可空
sender int 发件者:玩家 guid 或生物 entry(视 type)
receiver int 收件人 → characters.guid
subject longtext 标题
body longtext 正文
has_items tinyint 是否有附件
expire_time int 过期 Unix 时间
deliver_time int 送达 Unix 时间
money int 附带铜币
cod int 到付铜币
checked tinyint MailCheckMask

MailMessageType:0 NORMAL,2 AUCTION,3 CREATURE,4 GAMEOBJECT,5 CALENDAR。
MailCheckMask:1 READ,2 RETURNED,4 COPIED,8 COD_PAYMENT,16 HAS_BODY。

样本:NPC 模板信 mailTemplateId=232,送达时间 = Level 20 成就同一秒,30 天过期,已读。


18. 表关系总览

18.1 总图

erDiagram
    characters ||--o{ character_account_data : guid
    characters ||--o{ character_achievement : guid
    characters ||--o{ character_achievement_progress : guid
    characters ||--o{ character_action : guid
    characters ||--o{ character_aura : guid
    characters ||--o{ character_glyphs : guid
    characters ||--|| character_homebind : guid
    characters ||--o{ character_inventory : guid
    characters ||--o{ character_queststatus : guid
    characters ||--o{ character_queststatus_rewarded : guid
    characters ||--o{ character_queststatus_seasonal : guid
    characters ||--o{ character_reputation : guid
    characters ||--o{ character_skills : guid
    characters ||--o{ character_spell : guid
    characters ||--o{ character_talent : guid
    characters ||--o{ mail : "receiver"
    characters ||--o{ item_instance : "owner_guid"
    character_inventory }o--|| item_instance : "item"
    character_inventory }o--o| item_instance : "bag"

18.2 按子系统

flowchart TB
    chars[characters]
    subgraph progress[进度]
      ach[achievement]
      achp[achievement_progress]
      qr[quest rewarded]
      qs[quest status]
      qss[quest seasonal]
      rep[reputation]
    end
    subgraph power[能力]
      sp[spell]
      tal[talent]
      sk[skills]
      gl[glyphs]
      act[action]
    end
    subgraph assets[资产]
      inv[inventory]
      ii[item_instance]
      mail[mail]
    end
    subgraph client[客户端与现场]
      ad[account_data]
      au[aura]
      hb[homebind]
    end
    chars --> progress
    chars --> power
    chars --> assets
    chars --> client
    inv --> ii

18.3 引用规则

  1. 扩展表 guidcharacters.guid
  2. character_inventory.itemitem_instance.guid
  3. character_inventory.bagitem_instance.guid(0=身体)
  4. item_instance.owner_guid / creatorGuidcharacters.guid
  5. mail.receivercharacters.guid
  6. equipmentCache / taximask / exploredZones 是主表冗余,无外键

pdump loadDTT_CHARACTER / DTT_INVENTORY / DTT_ITEM / DTT_MAIL 等类型级联改 GUID。


19. 交叉分析:角色故事

19.1 身份与时间

血精灵女法师「大法师」,guid 1002,账号 101;29 级,休息态,藏头盔披风;建号约 25 天、在线 34.2 小时。

19.2 练级路线

flowchart LR
    A[永歌/幽魂] --> B[卡利姆多任务]
    B --> C[RFC]
    C --> D[WC]
    D --> E[SFK]
    E --> F[Deadmines]
    F --> G[BFD]
    G --> H[Stockades]
    H --> I[贫瘠/千针]
    I --> J[炉石: 乱风岗]

19.3 战斗 / 专业 / 经济

  • 天赋冰系为主;动作条冰火混用练级键位
  • Engineering 225 + Tailoring 220 + Alchemy 210 + First Aid 225
  • 现金 209 金,自产统计约 62 金 → 外部供血
  • 悬空物品 2、自定义任务 90000、四只大包 23162:私服痕迹

19.4 数据质量

现象 说明
悬空 item 2 件 有实体无槽位
三主要专业 超官方默认 2 门
power4=100 法师无意义残留
watchedFaction=-1 未追踪声望
quest 90000 世界库无模板

20. 实操:怎么自己拆 pdump

  1. 统计表行数:提取每条 INSERT INTO 的表名后计数
  2. 按表过滤主表 / 天赋 / 物品
  3. 时间戳:date -r 1784122746(macOS)或 date -d @1784122746(Linux)
  4. 铜币:g=money//10000, s=money%10000//100, c=money%1002096484 = 209g 64s 84c

推荐 Python 解析:

  1. 正则抓 INSERT INTO table (cols) VALUES (vals)
  2. 手写抗引号/换行的值解析器
  3. item_instance 建字典,扫 character_inventory 还原栏位
  4. item_template / DBC 翻译名字

注意:不要直接灌库;大文本字段边界要小心;enchantments 36 token 按 3 一组;任务 status 勿记反。


21. 源码与库表索引

主题 位置
pdump 导出/导入 src/server/game/Tools/PlayerDump.cpp
命令注册 src/server/scripts/Commands/cs_character.cpp
角色保存 src/server/game/Entities/Player/PlayerStorage.cpp
装备槽 / 动作条 src/server/game/Entities/Player/Player.h
物品附魔槽 src/server/game/Entities/Item/Item.h
任务状态 src/server/game/Quests/QuestDef.h
邮件 src/server/game/Mails/Mail.h
AccountData src/server/game/Server/WorldSession.h
声望 flags src/server/shared/DataStores/DBCEnums.h
建表 data/sql/base/db_characters/*.sql
物品模板 data/sql/base/db_world/item_template.sql

22. 小结

pdump 表面上是一堆 INSERT,实际是一张以 characters.guid 为根的对象图:

  • 进度:成就、任务、声望、探索、飞行点
  • 能力:法术、天赋、技能、雕文、动作条
  • 资产:钱、物品实体、容器嵌套、邮件
  • 客户端:CVar 与聊天布局
  • 现场:光环、位置、炉石、休息值

把「大法师」这份 29 级样本走通后,再拆其它号通常只差:有无宠物/邮件附件/装备方案、专业与任务段、物品规模、是否双天赋。理解这 18 张表后,角色迁移、坏号修复、刷物品排查都会从「猜字段」变成「按图索骥」。