标题:
[讨论]
【数据库重名】问题的研究结果,及【粗略解决方法】希望有人能完善下。
[打印本页]
作者:
逆灵
时间:
2009-4-29 16:46
标题:
【数据库重名】问题的研究结果,及【粗略解决方法】希望有人能完善下。
PS:没有耐心的 和对数据库完全不通的,以及对这方面不感兴趣的请pass。我自己都觉得头晕~~~~~~~~~~
妖城在线论坛/ y" x; |* d; F( e3 x$ x
) A" `) U9 |( u1 C3 A+ Q/ @2 W—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート
相信现在很多人的数据库都会出现重名角色被替换的情况。
3 `+ b5 ?2 p8 }' [' e' O0 I% k
这种情况实际上是由数据库中的几个字段造成的,
5 B, e3 {' L1 Q, w& f魔力私服,最新魔力宝贝私服技术交流
首先我们来分析一下数据库表
+ l- y9 j0 R( c% O魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表
bbs.mocwww.com `. w6 `7 b: W
tbl_user 这个 是存放角色登入账号的。其中包括:
! R, L' f0 E5 C魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表
AccountID AccountPassword EnableFlg TrialFlg DownFlg ExpFlg SequencNumber UseFlg BadMsg CdKey ID RegTime ip safeword HellScore
9 q3 S2 i7 ]5 s( b* |- s$ W
( H. V4 r2 b: ]( x. M: a魔力私服,最新魔力宝贝私服技术交流
这里基本英文大家也明白了
7 R0 F, u* I+ X# c/ @. g魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表
EnableFlg 这个就是决定账号是否冻结的 另外 这里影响到重名删号问题的字段是
妖城在线论坛# {: C* U: y J5 p; W$ ]' q% ]4 @
SequencNumber 这个字段就是代表你该账号开角色的序列号。每建立一个角色 该字段自动+1 删除角色不减
魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表9 V5 C, R( L5 E# v, o; c% W5 l1 }
这个字段直接影响到
bbs.mocwww.com5 r. P- y. ?9 [3 T& t/ q
tbl_character 即人物表 的第49列数据 即 RegistNumber,就是 人物注册序列号
—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート# I" ~8 @# v, \: z2 h6 W
实际上这里才是关键,当建立人物的名字和该字段的序列号完全相同时,系统将会自动将数据Update【更新】而不是Insert【插入】
bbs.mocwww.com/ q7 E" |3 _8 S9 z3 Z8 k
就好像说你登出 要存档,这个存档就会替换原来那个存档 这种方式
# C1 X4 I R Q) abbs.mocwww.com
9 k8 t5 Q1 |9 M/ |5 l$ O1 }魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表
即后面建立的人物替换了该行人物的资料。当然 CDKey也被替换,所以 前一个账号的CDKey中 即账号中 人物就消失了。
2 E# g" C9 H; j5 Z: i# ]6 z$ R魔力私服,最新魔力宝贝私服技术交流
bbs.mocwww.com0 U* @& q& W+ F% U E8 y3 W
而
bbs.mocwww.com( S9 i& y* H. |) }7 W! _+ h) X
tbl_item 的第91个字段 RegistNumber 决定了 人物物品的位置,以及tbl_skill 中的字段并未被替换消失。
魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表0 F4 j" i8 u- k6 D
所以
- o. X7 [+ V5 \. j' O, V魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表
恢复人物的方法是。
' W0 }5 ?$ u5 ^6 {6 I; U. l/ q
在被替换的账号中,建立角色名和原来完全相同的角色,并且把tbl_character 中的 RegistNumber 改回和
魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表0 S% ?9 j8 l8 ?1 j+ |- f* P
tbl_item 中的 该账号原来角色的 RegistNumber 相同 即可
魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表: e& |; ~0 e( a0 b5 ]2 A
这个RegistNumber 在tbl_skill的第二个字段也一样。
妖城在线论坛1 I- _, C9 {3 L7 M1 i0 L
决定了该人物的技能
妖城在线论坛1 r0 W) P8 w2 I9 M9 q# z. i
那么 原来的人物的技能和物品都将会被回复~~~~~~~~~~~~~~~~~~
—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート( e) N4 W) F6 w. z
魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表 I+ L" w) N8 n; j& \5 h2 x/ Z; ?8 L4 N
小建议。 相隔一段时间 更改一下 注册的页面的SQL语句代码~ 使得注册的SequenceNumber不一样就行了
0 Q2 P% `! [* q& T! s+ e& _) v. x妖城在线论坛
方法如下 打开注册网站的注册页
魔力私服,最新魔力宝贝私服技术交流' {) p0 S" J! t3 j z, z- y
找到这一行SQl语句:
, |& B9 z4 _- D& T# x; i& b! q
7 o1 a/ i2 p. r8 B/ d# Q妖城在线论坛
$sql2="insert into tbl_user (AccountID,AccountPassword,EnableFlg,TrialFlg,DownFlg,ExpFlg,SequenceNumber,UseFlg,BadMsg,CdKey,safeword,RegTime,ip,HellScore) values ('$id','$pass','1','8','0','0','100','1','0','$id','$mlhy','$data','$userip','$regscore')";
3 w" Y6 m, Q2 b2 g7 u! E8 z4 [bbs.mocwww.com
) M# c, u1 R; ?3 E魔力私服,最新魔力宝贝私服技术交流
后字段的 '100'就是 创建人物序号
& t; }, J8 w) W; t; ?9 B—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート
自己更改即可造成重复也不会消失的人物。
魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表6 l1 i$ w, I# C1 `* d
魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表+ D, ^& ?% `0 M1 p6 j7 `/ N$ t: Y
给高手们的建议:
—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート5 J7 ?! ^3 l C6 b
由于本人的汇编很烂(我搞C++的)
魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表" y4 l h4 `5 R
所以不想研究gmsv或者cg_190的 IDA反汇编编译。
魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表" W0 |$ Z: ?# s( z: x
魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表 K1 W4 S9 h! L) \2 ?* v
懂这方面的朋友可以进行以下操作:
0 U' Q1 H5 v$ w8 K$ \—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート
1加入验证组。进行character表的Name行字段验证,如有重名的返回错误不让创建人物即可,这个 貌似同一个账号创建相同名字的人物时会提示,调用即可。
8 C( n2 s2 \/ l& r7 C4 S, E+ e9 f
2更改更新人物时候的SQL语句,不是进行Name 和 RegistNumber 的判断, 改为 CDKEY和 RegistNumber的判断
妖城在线论坛+ F r" r3 i H# V8 g( ~
这样的话还是允许重名,但至少不会再删除。
1 s$ T2 ^. A- ]妖城在线论坛
魔力私服,最新魔力宝贝私服技术交流$ c: l J0 u" l
PS:另外听说过某些人可以通过网站验证重名,之类的。。。。。。
, P; I) t/ S$ J, \5 H7 R妖城在线论坛
我暂时是没时间搞这么多了,这里只写给觉得有用的人看看,如果有用 ,写出了不允许建立重名账号的
bbs.mocwww.com7 ^8 g; s" u$ r; D! q# F$ Z9 }
希望能共享一下 谢谢。
作者:
黄昏
时间:
2009-4-29 19:08
嗯 之所以会删除是因为创建角色的语句为
/ ]. v. N' ~& b/ u5 v3 s" L, w魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表
REPLACE tbl_character VALUES……
) ?# g- l6 T+ c5 x8 r6 b—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート
查mysql手册可知
5 T+ R' c+ X& \% f' K4 ebbs.mocwww.com
REPLACE的运行与INSERT很相像。只有一点除外,如果表中的一个旧记录与一个用于PRIMARY KEY或一个UNIQUE索引的新记录具有相同的值,则在新记录被插入之前,旧记录被删除。
S: U/ w1 B2 W- ]9 I
嗯 解决方法论坛里面有人很早就发出来了…… 去掉name的索引就可以了……
7 Y+ u* Y" Q) @: T
2 m% m, U% ^- W- L+ ebbs.mocwww.com
不过这样不删除数据,但是还会有重名的角色存在
妖城在线论坛4 _# v. d' ~5 M: K) \/ U
完善的解决方法可以从2方面考虑
妖城在线论坛! p# Q( p% L; w9 z
gmsv方面,汇编添加语句判断(流传一种比较类似的解决重名办法,但是会导致停端时玩家数据保存失败,等待完善中……)
3 n6 g, ?+ U' C魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表
cg方面就是hook 创建角色的函数并结合php来判断是否能成功创建角色了,可能被绕过,不是很完美……
作者:
逆灵
时间:
2009-4-30 01:40
我验证过 增加索引和 去掉索引都是一样的 只要RegistNumber
魔力私服,最新魔力宝贝私服技术交流6 A; s3 |: Z1 r, h% k/ j6 M+ c
和Name一样 就一定会被删除
欢迎光临 妖城在线论坛 (http://bbs.mocwww.com/)
Powered by Discuz! 6.0.0