用SQL查询仓库和包裹里面的全属性物品

在网上见到过查全属性和复制物品的,试用了一下有问题就扔一边了。想想还是自己写段SQL来得方便。


以下是代码:
-- 这段SQL是用来查满属性的物品
use muonline
--下面这一段是查仓库里面的物品
select * from warehouse
where (charindex(0xbf,items)%10=8) or (charindex(0xff,items)%10=8)
or (charindex(0x7f,items)%10=8) or (charindex(0x3f,items)%10=8)
--下面这一段是查身上和包裹里面的物品
select * from character
where (charindex(0xbf,inventory)%10=8) or (charindex(0xff,inventory)%10=8)
or (charindex(0x7f,inventory)%10=8) or (charindex(0x3f,inventory)%10=8)

[Ctrl+A 全部选择]

如果是从0.74升级上来的数据库,因为物品代码的位数不一样,使用起来会有问题。产生问题的原因是一些0.74时期的玩家在94~96之后再也没有玩过,他们的仓库和包裹里面的物品代码还是14位,而新的代码是20位。

经过我的研究,warehouse和character表里面都加了一个字段:DbVersion,这个是用来区分你的仓库和包裹里面的装备是用14位的代码还是20位代码的。我们需要做的就是把DbVersion的值还是NULL的所有帐号和角色从库里面清出,用下面的SQL语句就可以了:

delete from character where DbVersion is null
delete from warehouse where DbVersion is null

找出有全属性装备的玩家,你要怎样处理就看自己了,如果要删号的话,只需将上面代码中的Select *全部改成Delete就可以了。如果觉得删号太狠了,那么可以清除相应的仓库或包裹,代码如下:


以下是代码:
use muonline
--下面这一段是清空有全属性物品的仓库
update warehouse set items = null
where (charindex(0xbf,items)%10=8) or (charindex(0xff,items)%10=8)
or (charindex(0x7f,items)%10=8) or (charindex(0x3f,items)%10=8)
--下面这一段是清空有全属性物品的包裹
update character set inventory = null
where (charindex(0xbf,inventory)%10=8) or (charindex(0xff,inventory)%10=8)
or (charindex(0x7f,inventory)%10=8) or (charindex(0x3f,inventory)%10=8)

[Ctrl+A 全部选择]

如果要只清理对应的物品,程序实现起来很麻烦。偶认为用SQL注入的,只清库和包裹都是太仁慈了,没有必要花太多心思写得那么完美。

大家注意语句里面的0x3F,0x8F,0xBF,0xFF都是卓越全属性物品的代码,你需要查其他属性的,只要相应更改这里就可以。

下面的卓越属性代码来自网上,经过多次转贴已经不知道出处,偶发出来给大家参考:

以下是代码:
==卓越属性代码==

① 杀死怪物时所获魔法值增加 +魔法值/8
② 杀死怪物时所获生命值增加 +生命值/8
③ 攻击(魔法)速度增加 +7
④ 攻击力增加 +2%
⑤ 攻击力增加 +等级/20
⑥ 卓越攻击几率增加 +10%
⑦ 追加攻击力 +16

01=① 02=② 03=①② 04=③ 05=①③ 06=②③ 07=①②③ 08=④ 09=①④ 0A=②④ 0B=①②④ 0C=③④ 0D=①③④ 0E=②③④ 0F=①②③④
10=⑤ 11=①⑤ 12=②⑤ 13=①②⑤ 14=③⑤ 15=①③⑤ 16=②③⑤ 17=①②③⑤ 18=④⑤ 19=①④⑤ 1A=②④⑤ 1B=①②④⑤ 1C=③④⑤
1D=①③④⑤ 1E=②③④⑤ 1F=①②③④⑤ 20=⑥ 21=①⑥ 22=②⑥ 23=①②⑥ 24=③⑥ 25=①③⑥ 26=②③⑥ 27=①②③⑥ 28=④⑥
29=①④⑥ 2A=②④⑥ 2B=①②④⑥ 2C=③④⑥ 2D=①③④⑥ 2E=②③④⑥ 2F=①②③④⑥ 30=⑤⑥ 31=①⑤⑥ 32=②⑤⑥ 33=①②⑤⑥
34=③⑤⑥ 35=①③⑤⑥ 36=②③⑤⑥ 37=①②③⑤⑥ 38=④⑤⑥ 39=①④⑤⑥ 3A=②④⑤⑥ 3B=①②④⑤⑥ 3C=③④⑤⑥ 3D=①③④⑤⑥
3E=②③④⑤⑥ 3F=①②③④⑤⑥ 40=⑦ 41=①⑦ 42=②⑦ 43=①②⑦ 44=③⑦ 45=①③⑦ 46=②③⑦ 47=①②③⑦ 48=④⑦ 49=①④⑦
4F=②④⑦ 4B=①②④⑦ 4C=③④⑦ 4D=①③④⑦ 4E=②③④⑦ 4F=①②③④⑦ 50=⑤⑦ 51=①⑤⑦ 52=②⑤⑦ 53=①②⑤⑦ 54=③⑤⑦
55=①③⑤⑦ 56=②③⑤⑦ 57=①②③⑤⑦ 58=④⑤⑦ 59=①④⑤⑦ 5A=②④⑤⑦ 5B=①②④⑤⑦ 5C=③④⑤⑦ 5D=①③④⑤⑦
5E=②③④⑤⑦ 5F=①②③④⑤⑦ 60=⑥⑦ 61=①⑥⑦ 62=②⑥⑦ 63=①②⑥⑦ 64=③⑥⑦ 65=①③⑥⑦ 66=②③⑥⑦ 67=①②③⑥⑦
68=④⑥⑦ 69=①④⑥⑦ 6A=②④⑥⑦ 6B=①②④⑥⑦ 6C=③④⑥⑦ 6D=①③④⑥⑦ 6E=②③④⑥⑦ 6F=①②③④⑥⑦ 70=⑤⑥⑦
71=①⑤⑥⑦ 72=②⑤⑥⑦ 73=①②⑤⑥⑦ 74=③⑤⑥⑦ 75=①③⑤⑥⑦ 76=②③⑤⑥⑦ 77=①②③⑤⑥⑦ 78=④⑤⑥⑦ 79=①④⑤⑥⑦
7A=②④⑤⑥⑦ 7B=①②④⑤⑥⑦ 7C=③④⑤⑥⑦ 7D=①③④⑤⑥⑦ 7E=②③④⑤⑥⑦ 7F=①②③④⑤⑥⑦

(以下卓越代码只对上面的“铠”以后的代码有效)

① 杀死怪物时所获金增加 +40%
② 防御成功率 +10%
③ 伤害反射 +5%
④ 伤害减少 +4%
⑤ 最大魔法值 +4%
⑥ 最大生命值 +4%
⑦ 追加防御力 +16

81=① 82=② 83=①② 84=③ 85=①③ 86=②③ 87=①②③ 88=④ 89=①④ 8A=②④ 8B=①②④ 8C=③④ 8D=①③④ 8E=②③④ 8F=①②③④
90=⑤ 91=①⑤ 92=②⑤ 93=①②⑤ 94=③⑤ 95=①③⑤ 96=②③⑤ 97=①②③⑤ 98=④⑤ 99=①④⑤ 9A=②④⑤ 9B=①②④⑤ 9C=③④⑤
9D=①③④⑤ 9E=②③④⑤ 9F=①②③④⑤ A0=⑥ A1=①⑥ A2=②⑥ A3=①②⑥ A4=③⑥ A5=①③⑥ A6=②③⑥ A7=①②③⑥ A8=④⑥
A9=①④⑥ AA=②④⑥ AB=①②④⑥ AC=③④⑥ AD=①③④⑥ AE=②③④⑥ AF=①②③④⑥ B0=⑤⑥ B1=①⑤⑥ B2=②⑤⑥ B3=①②⑤⑥
B4=③⑤⑥ B5=①③⑤⑥ B6=②③⑤⑥ B7=①②③⑤⑥ B8=④⑤⑥ B9=①④⑤⑥ BA=②④⑤⑥ BB=①②④⑤⑥ BC=③④⑤⑥ BD=①③④⑤⑥
BE=②③④⑤⑥ BF=①②③④⑤⑥ C0=⑦ C1=①⑦ C2=②⑦ C3=①②⑦ C4=③⑦ C5=①③⑦ C6=②③⑦ C7=①②③⑦ C8=④⑦ C9=①④⑦
CF=②④⑦ CB=①②④⑦ CC=③④⑦ CD=①③④⑦ CE=②③④⑦ CF=①②③④⑦ D0=⑤⑦ D1=①⑤⑦ D2=②⑤⑦ D3=①②⑤⑦ D4=③⑤⑦
D5=①③⑤⑦ D6=②③⑤⑦ D7=①②③⑤⑦ D8=④⑤⑦ D9=①④⑤⑦ DA=②④⑤⑦ DB=①②④⑤⑦ DC=③④⑤⑦ DD=①③④⑤⑦
DE=②③④⑤⑦ DF=①②③④⑤⑦ E0=⑥⑦ E1=①⑥⑦ E2=②⑥⑦ E3=①②⑥⑦ E4=③⑥⑦ E5=①③⑥⑦ E6=②③⑥⑦ E7=①②③⑥⑦
E8=④⑥⑦ E9=①④⑥⑦ EA=②④⑥⑦ EB=①②④⑥⑦ EC=③④⑥⑦ ED=①③④⑥⑦ EE=②③④⑥⑦ EF=①②③④⑥⑦ F0=⑤⑥⑦
F1=①⑤⑥⑦ F2=②⑤⑥⑦ F3=①②⑤⑥⑦ F4=③⑤⑥⑦ F5=①③⑤⑥⑦ F6=②③⑤⑥⑦ F7=①②③⑤⑥⑦ F8=④⑤⑥⑦ F9=①④⑤⑥⑦
FA=②④⑤⑥⑦ FB=①②④⑤⑥⑦ FC=③④⑤⑥⑦ FD=①③④⑤⑥⑦ FE=②③④⑤⑥⑦ FF=①②③④⑤⑥⑦

[Ctrl+A 全部选择]


另外,要在库里和包裹里查找一个指定物品(用于查复制物品),比如查物品0xA85C79000000007F4166(它的最后4位是物品的序号,之前的7F是卓越属性)。其SQL语句是这样的:

以下是代码:
--下面是查仓库
select * from warehouse
where charindex(0xA85C79000000007F4166,items) >0
--下面是查包裹
select * from character
where charindex(0xA85C79000000007F4166,inventory) >0

[Ctrl+A 全部选择]

虽然写了那么多,实际有用的SQL语句就几句,很简短。大家应该学会用SQL去管理数据库,而无需动辄去写一大段程序来实现一个很简单的功能。

——转载自MG论坛。

本文出自 7j45 > 奇迹一条龙