前一段时间,自己下了个私服玩玩,觉得没有英雄玩起来不过瘾。自己看了看原理,是HeroM2引擎传奇私服数据库修改,应该有英雄,于是决定自己改传奇私服脚本。英雄是改出来了,可是没有英雄书。翻遍了数据库也没找到,看来原作者把书阉割掉了。最后我又找来一个有书的版本传奇私服数据库修改,用DBC2000把两个数据库合并了。于是问题出来了,原来这玩意儿Name不是关键字,搞出重复的名字,HeroM2默认最后一次读取的物品属性值,导致原来程序中得物品属性出现错误。程序乱作一团。
以下是我在对传奇私服D:\mirserver\Mud2\DB\StdItems.DB文件在DBC2000中的一些SQL命令。
1、原因;两个数据库都有同一个物品,在使用DBC直接合并后。物品出现重复。HeroM2默认最后一次读取的物品属性值,导致原来程序中得物品属性出现错误。
2、解决思路,先找到要合并的数据库中与原数据库中Name关键字中相同的数据项。然后删掉这些数据项。最后合并。
3、以下是我用到的一些SQL命令。
Hero 705//原数据库StdItems.DB
All 1139//新数据库StdItemsA.DB
Select * From "StdItems.DB","StdItemsA.DB" where "StdItems.DB".Name="StdItemsA.DB".Name
有效
eff 373//373个一样的物品
Select "StdItemsA.DB".* From "StdItems.DB","StdItemsA.DB" where "StdItems.DB".Name="StdItemsA.DB".Name order by "StdItemsA.DB".Idx asc
有效
//只选中新数据库中的数据
Delete from "StdItemsA.DB" where "StdItemsA.DB".Name =( Select "StdItemsA.DB".Name From "StdItems.DB","StdItemsA.DB" where "StdItems.DB".Name="StdItemsA.DB".Name)
无效
//这样做不行,乱写的。
Delete from "StdItemsA.DB" where "StdItemsA.DB".Name in(Select "StdItemsA.DB".Name From "StdItems.DB","StdItemsA.DB" where "StdItems.DB".Name="StdItemsA.DB".Name)
有效
//删除新数据库中查询出来重复的数据
select count(*) from "StdItemsA.DB"
有效
//查看新数据库中查询出来重复的数据
After Del StdItemsA =767
Select * From "StdItems.DB" InnerJoin "StdItemsA.DB" on "StdItems.DB".Name="StdItemsA.DB".Name
无效
//这一点让我很纳闷?难道DBC2000没有内连接,只是试验了一下结果报错。那DBC数据库是多么的低效呀。望高手指点。
传送合并后 1472 项,ok
为了以防万一,随后把英雄的魔法也合并了一下
D:\mirserver\Mud2\DB\Magic.DB
/magic
Hero 190 //无英雄的旧数据库
Max 133 //有英雄的新数据库
Select "MagicA.DB".* From "MagicA.DB","Magic.DB" where "MagicA.DB".MagName="Magic.DB".MagName order by "MagicA.DB".MagID asc
有效
result 114 effect//114个完全一样的魔法
Delete from "MagicA.DB" where "MagicA.DB".MagName in(Select "MagicA.DB".MagName From "MagicA.DB","Magic.DB" where "MagicA.DB".MagName="Magic.DB".MagName)
有效
//删除
select * from "MagicA.DB"
剩余 Max 20//还有20个新魔法呢,赶快合并进去看看
传送合并后 210
还没有评论,来说两句吧...