- 威望
- 0
- 金钱
- 4888
- 贡献
- 0
- 最后登录
- 2026-10-26
- 注册时间
- 2024-5-30
- 主题
- 2332
- 精华
- 0
- 帖子
- 2398
|
完美世界Navicat修改数据库物品实例字段attr附加属性更新完整操作流程
打开Navicat并连接好游戏对应的数据库,先右键数据库名称,选择转储SQL文件,保存完整备份文件,一旦修改出错可以直接导入恢复数据。找到存储物品实例的数据表,一般表名为item,部分版本为inventory,这张表保存背包、身上、仓库、寄售等位置已经生成的单件物品,修改这里只影响实例,不会改动xml和elements.data里的物品模板。
先定位需要修改的物品记录,两种查找方式可以选用。第一种是打开数据表,在筛选栏填入roleid,填入之前查到的角色id,筛选出该角色全部物品,再根据itemid也就是物品模板编号找到目标装备。第二种是新建查询,执行语句select uid,itemid,roleid,pos,attr from item where roleid=角色编号,运行之后查看结果,uid是物品唯一编号,定位到目标记录的uid。使用uid定位是最稳妥的方式,后续更新语句以uid作为条件,避免误改其他物品。
定位完成之后有两种修改方式,表格直接编辑或者执行update语句。表格编辑适合单次单件修改,双击对应行里attr字段的单元格,在弹出编辑框内调整属性编码和数值,编码和数值成对排布,严格对照属性编码表填写,不能随意编造编码,属性条数不要超过服务端读取上限,数值不要设置过大。编辑完成点击单元格旁的确认勾号提交该行改动,不要跳过确认,否则修改不会写入数据库。
批量或者更规范的修改方式使用update语句,新建查询窗口,语句格式为update item set attr='属性串' where uid=物品uid数字,引号内部填入整理好的属性编码与数值组合字符串,where条件必须带上uid,保证只更新这一件物品。写完语句点击运行,留意返回受影响行数,正常返回1代表修改成功,返回0说明uid不存在,返回大于1代表条件写错,立刻停止操作,不要提交。
pos字段代表物品存放位置,一般不需要改动,数值对应装备栏、背包、仓库,随意修改pos可能造成物品消失或者位置错乱。耐久、堆叠数量这类字段也在同一张表,如果需要同步调整,在set后追加字段,示例update item set attr='属性串',durability=耐久值 where uid=物品uid,多个字段之间用逗号分隔。
修改执行完毕之后,再执行一次查询语句select * from item where uid=物品uid,核对attr字段内容和刚才填写的内容一致,确认数据库已经保存改动。之后游戏内角色必须完全退出游戏,关闭客户端再重新登录,让服务端重新加载角色物品数据。部分服务端存在数据缓存,重登不生效时需要重启服务端进程,或者使用对应的重载指令刷新物品缓存。
修改之后进入游戏打开装备面板核对附加属性,如果属性没有显示、装备空白或者点击装备报错,说明attr里面的字符串格式错误,编码顺序、分隔符号、条数不符合服务端解析规则,此时导入之前备份的SQL文件恢复数据表,重新检查属性串格式再调整。
不建议不带where条件执行update语句,不带条件会更新表内全部物品记录,数据损坏之后恢复难度很大。尽量一次只修改一条物品记录,改完一条测试一条,不要一次性提交多条修改再统一进游戏验证,多条同时出错很难定位格式问题。
还要分清实例数据和模板数据的区别,item表里修改的附加属性只针对这一件已经产出的装备,新刷出来、新合成出来的同模板装备依旧使用原来模板属性,如果想要全部同模板装备统一属性,需要去elements.data或者xml文件修改模板,数据库item表无法实现全局模板变更。
操作结束确认效果正常之后,可以再导出一次该表的SQL备份留存。日常调试的时候,尽量只操作测试角色的数据,避免改动正式使用的角色物品记录,减少意外损失。查询和修改的时候留意zoneid分区字段,多分区环境需要在where条件加上zoneid,防止跨分区误操作其他大区的数据。 |
|