MaNGOS数据库结构深度拆解:realmd_mangos_characters三库核心表关系与字段实战

来源: 作者: 点击:
MaNGOS 服务端采用典型的三库分离架构:realmd(鉴权与服务器列表)、mangos(世界静态数据)、characters(角色动态数据)。三者通过 account_id、guid、entry 三类主键串联,服务端启动顺序读 realmd → mangos → characters,DBC 文件补静态客户端常量。任何自定义怪物、任务、物品、副本、声望、拍卖、行会开发,本质都是在改这三库里的表关系。

一、realmd 库:登录与服务器路由层
核心表与字段:
• account:id(自增主键)、username、sha_pass_hash(SHA1加盐散列)、gmlevel(0普通/1GM/2超级GM/3开发)、sessionkey/v/s(登录握手校验)、email、joindate、last_ip、failed_logins、locked、last_login、active_realm_id、expansion(0经典/1TBC/2WLK)、mutetime、locale

- realmlist:id、name、address(IP)、port、icon、realmflags(0正常/1满/2离线)、timezone、allowedSecurityLevel、population、realmbuilds(允许客户端版本)
- realmcharacters:realmid + acctid + numchars(每账号在各服建角数上限校验)
• account_banned:id、bandate、unbandate、bannedby、banreason、active

- ip_banned:ip、bandate、unbandate、bannedby、banreason
• account_access(部分分支):account_id、gmlevel、RealmID(按服务器区分GM权限)

- realmd_db_version / uptime:版本校验与在线时长统计(starttime、maxplayers)

二、mangos 库:世界静态模板层(原型模式)
模板表只定义“类型”,不存地图实例;运行时由 creature / gameobject 等实例表引用 entry 生成具体对象。
1. creature_template(生物/NPC蓝图)
entry(唯一身份证,.npc add 后数字)、name、minlevel/maxlevel、minhealth/maxhealth、rank(0普通/1精英/2稀有精英/3Boss)、unit_flags、dynamicflags、AIName(EventAI/SmartAI)、ScriptName、lootid(关联 creature_loot_template)、equip_template(关联 creature_equip_template)
2. creature(地图实例刷怪)
guid(全局唯一实例ID)、id(→creature_template.entry)、map、position_x/y/z、orientation、spawntimesecs、MovementType
3. gameobject_template(对象蓝图)
entry、type(宝箱/矿脉/草药/门/传送器)、displayid、data0~dataN
4. gameobject(实例)
guid、id(→gameobject_template.entry)、map、position_x/y/z、rotation
5. item_template(全物品定义)
entry、name、Quality、RequiredLevel、class/subclass、InventoryType、stat_type1~10、dmg_min1/max1、delay、flags(含 ITEM_FLAG_QUEST_ITEM 位掩码)、displayid
6. quest_template(任务骨架)
entry、Method、ZoneOrSort、MinLevel、QuestInfoID、ReqItemId1~6、ReqKillNpcOrGo1~4、RewItemId1~4、RewXP、RewRepFaction1、RewRepValue1
7. 关系表(把实体粘成玩法)
creature_questrelation(NPC给任务)、creature_involvedrelation(NPC交任务)、gameobject_questrelation、areatrigger_teleport(区域触发传送)、battleground_template、achievement_criteria_requirement、spell_template(部分分支在 mangos 库加载)
8. 掉落与奖励表
creature_loot_template(entry+item+Chance+GroupId)、gameobject_loot_template、fishing_loot_template、disenchant_loot_template、achievement_reward

三、characters 库:角色动态数据层
以 guid 为主键链,account 字段回连 realmd.account.id。
1. characters(核心角色行)
guid(全局唯一)、account、name、race、class、gender、level、xp、money、map、position_x/y/z、orientation、zone、online、totaltime、logout_time、playerBytes/playerBytes2(外观位)、health、power1~5、death_expire_time、watchedFaction
2. 背包与装备
character_inventory(guid、bag、slot、item→item_instance.guid)、item_instance(guid、itemEntry→item_template.entry、owner_guid、enchantments)、character_equipmentsets
3. 技能与状态
character_spell(已学技能)、character_action(技能栏/宏绑定)、character_aura(持久BUFF/DEBUFF)、character_talent(天赋,部分分支在 character_talent 或外挂表)
4. 任务与进度
character_queststatus(任务状态机:未接/进行/交付)、character_queststatus_daily(日常重置)、character_reputation(声望 standing 值计算)
5. 社交与经济
guild / guild_member / guild_rank、arena_team / arena_team_member、character_social(好友)、mail(邮件)、auctionhouse(拍卖行挂单)、character_homebind(炉石绑定点)、corpse(尸体坐标与墓地映射)
6. 副本与PVP
character_instance(副本绑定记录)、group_member / groups(组队)、battleground_data(部分分支)

四、三库主键关联图(开发必背)
realmd.account.id
 └─ characters.account → 同账号下多角色
  └─ characters.guid → character_inventory.guid / character_spell.guid / character_queststatus.guid
mangos.creature_template.entry
 └─ mangos.creature.id → 地图实例
  └─ creature_questrelation.entry → quest_template.entry
mangos.item_template.entry
 └─ item_instance.itemEntry → character_inventory.item
mangos.gameobject_template.entry → gameobject.id → gameobject_loot_template.entry

五、典型开发操作映射
• 加新BOSS:creature_template 插 entry=100000,rank=3,AIName=SmartAI → creature 表写地图坐标 guid → creature_loot_template 绑掉落 → 重启世界服加载

- 加任务链:quest_template 写 ReqKillNpcOrGo → creature_questrelation 绑起始NPC entry → creature_involvedrelation 绑交付NPC → RewItemId 指向 item_template 新物品
- 改账号GM:realmd.account 改 gmlevel / account_access 写 RealmID+gmlevel
• 清卡死角色:characters 表置 online=0、position 回主城、删 corpse 表对应 guid 记录

- 多服务器共存:realmlist 插多行,realmcharacters 按 realmid 隔离角色数,characters 库可按 realm 分库或同库用 map/zone 区分

六、版本校验机制
服务端源码 revision_sql.h 定义三套常量:REVISION_DB_REALMD、REVISION_DB_MANGOS、REVISION_DB_CHARACTERS;对应库内 *_db_version 表记录最后应用 SQL 更新编号,启动比对不一致直接拒起,防止表结构错位导致字段读写崩溃。

七、与 TrinityCore 分支差异提示
MaNGOS 原版 mangos 库表名偏长(creature_questrelation、areatrigger_involvedrelation);TC 分支合并为 world 库且部分表改名(creature_template_addon、smart_scripts 替代 AIName 字符串驱动)。跨版本搬 SQL 先看 db_version 再改字段映射,别直接导表。

MaNGOS 数据库设计本质是“模板表(mangos)+ 实例表(mangos/characters)+ 账号路由表(realmd)”三层原型模式,所有玩法扩展都绕不开 entry→guid→account_id 这条主外键链。