打开查询编辑器编写SQL语句是更稳定的方式,新建查询窗口,输入基础查询语句,select * from item where roleid=10000000,将数字替换成目标角色id,点击运行按钮,下方结果区域输出该角色全部物品记录。如果只想要指定模板的装备,增加itemid条件,select * from item where roleid=10000000 and itemid=120001,itemid对应装备模板编号,这个编号和xml、elements.data内物品id保持一致,可以对照模板表确认。如果已经拿到物品uid,直接用uid定位单条记录,select * from item where uid=2000000000,该条件只会返回一条结果,定位精准,修改属性前优先使用uid查询,防止选错装备。
查询语句可以限定只返回需要查看的字段,减少冗余信息干扰,select uid,itemid,pos,attr from item where roleid=10000000,pos字段代表物品存放位置,数值区分身上装备栏、背包格子、仓库,attr字段就是存放附加属性的核心字段,修改装备附加属性就是编辑这个字段内的内容。pos数值有固定含义,不同数值对应不同存放区域,查询后可以判断这件装备是否穿在身上,避免修改已经存入仓库或者寄售的装备。
多分区的环境需要增加zoneid条件,同角色id在不同分区会存在隔离,不加分区条件会查出其他分区数据,语句示例select * from item where roleid=10000000 and zoneid=1,zoneid数字对应分区编号,按照服务端配置填写。查询之后核对返回行数,按角色id查询返回多条属于正常,使用uid查询正常只会返回一行,如果返回空行,依次核对角色id、物品模板id、uid是否输入错误,数字前后不要附带空格。
先定位需要修改的物品记录,两种查找方式可以选用。第一种是打开数据表,在筛选栏填入roleid,填入之前查到的角色id,筛选出该角色全部物品,再根据itemid也就是物品模板编号找到目标装备。第二种是新建查询,执行语句select uid,itemid,roleid,pos,attr from item where roleid=角色编号,运行之后查看结果,uid是物品唯一编号,定位到目标记录的uid。使用uid定位是最稳妥的方式,后续更新语句以uid作为条件,避免误改其他物品。
批量或者更规范的修改方式使用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字段内容和刚才填写的内容一致,确认数据库已经保存改动。之后游戏内角色必须完全退出游戏,关闭客户端再重新登录,让服务端重新加载角色物品数据。部分服务端存在数据缓存,重登不生效时需要重启服务端进程,或者使用对应的重载指令刷新物品缓存。
打开数据表,使用roleid筛选出目标角色全部物品,通过itemid区分道具类型,找到需要修改堆叠数量的行。第一种修改方式是表格直接编辑,双击count单元格,输入想要设置的数量,输入完成点击行末尾的对勾提交保存,只适合单次单件修改。第二种是执行SQL语句,新建查询窗口,以物品uid作为唯一条件,语句示例update item set count=999 where uid=1000000000,运行之后查看返回受影响行数,返回1代表修改成功,返回0代表uid不存在,返回大于1说明筛选条件不够精确,立刻终止操作。多分区环境语句需要补充zoneid,示例update item set count=999 where uid=1000000000 and zoneid=1。
修改完成执行查询语句select uid,itemid,count from item where uid=1000000000,核对count字段数值和填写内容一致。之后角色完全下线退出客户端,重新登录加载物品数据,打开背包查看道具数量是否更新。重登之后数量不变,大概率是服务端缓存,需要重启服务进程或者执行对应重载指令。
打开Navicat连接游戏库,先在左侧库列表查找是否存在item_template、itemdef这类模板数据表。如果存在模板表,双击打开,表内itemid和实例表的itemid一一对应,堆叠上限字段常见命名为stack_max、max_count。可以使用表格筛选,在itemid栏填入物品模板编号直接定位记录,查看stack_max数值,这个数字就是该物品模板规定的最大堆叠数量。也可以新建查询窗口执行SQL语句,select itemid,name,stack_max from item_template where itemid=10001,运行后直接返回目标物品上限。多分区环境模板表一般不分区,不需要增加zoneid条件。