当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

魔兽WOTLK服务端数据修改:物品/NPC/任务DBC与数据库操作

热度:
架好巫妖王之怒的服务端之后,面对的就是一堆数据文件。想改一件装备的属性,或者做一个新任务,不知道从哪里下手的话,就只能对着数据库和DBC发呆。WOTLK版本的数据修改分两层,一层是服务端的数据库表,一层是客户端和服务端共用的DBC文件。搞清楚这两层的关系,改东西就有方向了。

**DBC和数据库的分工**

DBC是DataBaseClient的缩写,放在服务端的DBC文件夹里,也放在客户端的补丁文件里。DBC存的是客户端需要读取的数据,比如物品的模型ID、技能的基础效果、地图名称。数据库里的item_template表存的是服务端逻辑用的数据,比如物品的掉落几率、出售价格、装备后触发什么技能。

修改物品属性的时候,数据库item_template表和item.dbc都要改。数据库改服务端的行为逻辑,DBC改客户端显示的效果。只改数据库不改DBC,物品属性变了但客户端显示的图标还是老的,甚至鼠标移上去显示问号。只改DBC不改数据库,客户端显示正常但服务端不认,装备穿上去属性没变化。

**修改物品数据:两处同时动手**

数据库里item_template表管物品的核心属性。打开NaviCat连上world库,找到item_template表,按entry搜索你要改的物品ID。这个表字段很多,常用的几个:name物品名、quality品质等级、buyprice购买价格、sellprice出售价格、itemlevel物品等级、requiredlevel使用等级、displayid关联的模型ID、class和subclass控制武器防具类型。

改完数据库之后,用MyDBCEditor打开服务端DBC文件夹里的Item.dbc,找到对应entry的行。DBC的行是按列编号的,要改显示相关的列,比如第5列是物品名称,第6列是物品描述,第8列是图标ID。改完之后保存,这个DBC文件要复制一份放到客户端补丁里,不然客户端读到的还是老数据。

还有一种情况是物品本身在数据库里没有记录,只存在于DBC里。这些通常是NPC专属物品,比如某个BOSS拿的武器,玩家正常途径拿不到。想让玩家拿到这种东西,先用ItemDBCToDB工具把DBC里的物品导入到item_template表,然后再去改属性。

**修改NPC属性:creature_template表**

NPC的数据存在creature_template表里,按entry搜索NPC的ID。这个表控制NPC的名字、等级、模型、血量、攻击力、阵营等核心属性。改完重启服务端或者用命令重载生物数据就能生效。

NPC掉落也属于NPC数据的一部分,存在creature_loot_template表里,按entry关联NPC的ID,item关联掉落物品ID,ChanceOrQuestChance控制掉落几率,万分数表示。改掉落不用动DBC,纯数据库操作。

炮舰伤害和绿龙治疗这类特殊机制,不用改DBC也能调。在creature_template表里找到炮艇的entry,往spell3字段添加一个技能ID,炮艇就会用那个技能攻击,伤害数值跟着技能走。银色火炮治疗绿龙也是同样的操作,加治疗技能进spell3就行。

**修改任务数据:三个表联动**

做新任务至少要动三个表。creature_questrelation管哪个NPC发任务,将NPC的entry和任务entry关联起来,玩家点NPC就能看到感叹号接任务。creature_involvedrelation管哪个NPC交任务,关联完成任务的NPC和任务entry。quest_template表是任务的核心,存任务的标题、内容、目标、奖励、前置任务、后续任务所有信息。

quest_template表字段非常多,涉及击杀怪物目标用ReqCreatureOrGOId和ReqCreatureOrGOCount,涉及收集物品目标用ReqItemId和ReqItemCount,奖励物品用RewItemId和RewItemCount,奖励经验金钱用RewOrReqMoney。任务文本字段Title、Details、Objectives、OfferRewardText存的是客户端显示的文字,改完要同步到客户端补丁里的QuestCache.wdb。

**DBC修改和客户端补丁制作**

DBC文件改完之后,客户端不认识新数据,要用MPQEditor打包成补丁让客户端读取。客户端Data\zhCN文件夹里已经有patch-zhCN-9.MPQ之类的文件,新建一个编号比现有最大的大1的MPQ文件,比如patch-zhCN-10.MPQ。在MPQ文件里新建DBFilesClient文件夹,把修改过的DBC文件拖进去保存。这个补杜到客户端的Data\zhCN目录下,启动游戏就能读到新数据。

修改Spell.dbc的时候要注意,技能效果改了之后补丁要做。坐骑改成地球可飞,把Spell.dbc里第6到12列的数值全部改成0,然后打包补丁进客户端。装备套装效果涉及ItemSet.dbc和SpellItemEnchantment.dbc,不止Item.dbc一个文件。

**几个常见坑**

改完数据库忘了重载,改动不生效。用命令.reloaditem_template或者重启服务端的worldserver进程,改动才能被加载。

改完DBC没打补丁,客户端显示问号或图标缺失。DBC是客户端读取文件,服务端只管验证逻辑,显示全靠客户端补丁里的DBC数据。每次改完DBC都得打包补丁,放到客户端对应目录。

道具的随机前缀属性涉及SpellItemEnchantment.dbc,一层一层关联下去,改一个地方不够。比如磨刀石的属性,要从item_template找到spellid列指向的spell.dbc技能ID,再从spell.dbc的111列找到SpellItemEnchantment.dbc的ID,最后在SpellItemEnchantment.dbc里改具体的属性类别和数值。这三层改完打包补丁,才算完整。
[顶部]