Board logo

标题: [讨论] 【数据库重名】问题的研究结果,及【粗略解决方法】希望有人能完善下。 [打印本页]

作者: 逆灵    时间: 2009-4-29 16:46     标题: 【数据库重名】问题的研究结果,及【粗略解决方法】希望有人能完善下。

PS:没有耐心的 和对数据库完全不通的,以及对这方面不感兴趣的请pass。我自己都觉得头晕~~~~~~~~~~0 s$ R- M# h0 i9 y  K
bbs.mocwww.com" r# E7 E$ h% Y: R- d9 G! n3 n6 R5 B
相信现在很多人的数据库都会出现重名角色被替换的情况。—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート& L  }3 n. X; f( t# d
这种情况实际上是由数据库中的几个字段造成的,
3 a& q5 z7 L+ }( X# `& p—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート首先我们来分析一下数据库表魔力私服,最新魔力宝贝私服技术交流% q: F7 X: i) w- J& s9 V# H
妖城在线论坛& i  K, Y6 c" I* P' Y% o- L& S3 Q
tbl_user 这个 是存放角色登入账号的。其中包括:# l- Q- b' r* D
AccountID AccountPassword EnableFlg TrialFlg DownFlg ExpFlg SequencNumber UseFlg BadMsg CdKey ID RegTime ip safeword HellScore妖城在线论坛/ t5 O, C- `# W
8 N8 x8 v4 d/ t
这里基本英文大家也明白了 —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート' U# V: A5 b( i: c$ {8 L- h
EnableFlg 这个就是决定账号是否冻结的 另外 这里影响到重名删号问题的字段是
+ r6 v% s0 \, C妖城在线论坛SequencNumber 这个字段就是代表你该账号开角色的序列号。每建立一个角色 该字段自动+1 删除角色不减
) e4 w2 v% ?* w6 F1 H+ _—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート这个字段直接影响到
8 b0 V4 q* b+ l6 N& Z2 e: N  f# X—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲートtbl_character 即人物表 的第49列数据 即 RegistNumber,就是 人物注册序列号—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート, V( h) K4 A5 T8 q1 t% N
实际上这里才是关键,当建立人物的名字和该字段的序列号完全相同时,系统将会自动将数据Update【更新】而不是Insert【插入】—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート) ?5 t- {3 U/ B. `' X
就好像说你登出 要存档,这个存档就会替换原来那个存档 这种方式妖城在线论坛" K8 p. f( V0 I4 p8 G- Q: _* R. }/ h
魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表+ A4 @1 V: n  N( O- U3 p
即后面建立的人物替换了该行人物的资料。当然 CDKey也被替换,所以 前一个账号的CDKey中 即账号中 人物就消失了。魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表, v5 `) `. K; K, G7 {1 F
—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート2 b$ M# y" p) W# `/ v, F; m$ \+ P  F( W

5 L2 I, `; F$ \+ K魔力私服,最新魔力宝贝私服技术交流tbl_item 的第91个字段 RegistNumber 决定了 人物物品的位置,以及tbl_skill 中的字段并未被替换消失。妖城在线论坛. ^$ t  \% M' o- T" \
所以bbs.mocwww.com# Z% r! \" v, X! s
恢复人物的方法是。4 s/ N7 W8 _4 c1 m' q
在被替换的账号中,建立角色名和原来完全相同的角色,并且把tbl_character 中的 RegistNumber 改回和魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表+ n  ^# R! i1 ~4 M
tbl_item 中的 该账号原来角色的 RegistNumber 相同 即可
! K4 |3 G# B& W. M& y2 M% M% J& c妖城在线论坛这个RegistNumber 在tbl_skill的第二个字段也一样。魔力私服,最新魔力宝贝私服技术交流. C1 u' @( k: f! s, q" d
决定了该人物的技能
( I) B0 W7 @9 `, G6 E那么 原来的人物的技能和物品都将会被回复~~~~~~~~~~~~~~~~~~魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表: h# J8 b) H( ~& ~; Q3 V5 k0 X
—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート# o) Z% Q( `$ U( G
小建议。 相隔一段时间 更改一下 注册的页面的SQL语句代码~ 使得注册的SequenceNumber不一样就行了bbs.mocwww.com/ t! Q0 X( g: i( Z0 T% b, \
方法如下 打开注册网站的注册页—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート6 ~4 M/ f0 i8 |1 P
找到这一行SQl语句:
0 |  R8 ]5 u0 ?7 R5 R9 vbbs.mocwww.com8 D  r; p- {  Q. @  t
$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')";+ R0 s6 W& r' w7 U+ v7 z6 _2 @
魔力私服,最新魔力宝贝私服技术交流5 g/ M+ d6 M% W3 M
后字段的 '100'就是 创建人物序号
. q$ k2 G# D) y6 Y6 B妖城在线论坛自己更改即可造成重复也不会消失的人物。
; M9 [; y  \2 w! R. d—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート
8 `- ~2 C, v; M, F* H2 q& _—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート给高手们的建议:魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表3 r% l7 O/ h8 X# z7 ~3 H1 k
由于本人的汇编很烂(我搞C++的)
0 u2 r* Z" y  j2 _2 \bbs.mocwww.com所以不想研究gmsv或者cg_190的 IDA反汇编编译。
0 }% B1 w1 X( w- S: N. s妖城在线论坛
  c( U" n  v: Q9 W0 |bbs.mocwww.com懂这方面的朋友可以进行以下操作:
( T% |, G# J: v4 [. h+ K—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート1加入验证组。进行character表的Name行字段验证,如有重名的返回错误不让创建人物即可,这个 貌似同一个账号创建相同名字的人物时会提示,调用即可。魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表% L& p( t; D$ ?! O# d
2更改更新人物时候的SQL语句,不是进行Name 和 RegistNumber 的判断, 改为 CDKEY和 RegistNumber的判断
! ^/ P# ^6 a- M; F4 K4 V  e( l妖城在线论坛这样的话还是允许重名,但至少不会再删除。
% o3 @7 z) I. h3 I: e妖城在线论坛- h* `4 ^, g6 D' x6 y/ y, q
PS:另外听说过某些人可以通过网站验证重名,之类的。。。。。。
; [+ u# Q% ~. A( l魔力私服,最新魔力宝贝私服技术交流我暂时是没时间搞这么多了,这里只写给觉得有用的人看看,如果有用 ,写出了不允许建立重名账号的
- ~' v( o5 s3 z! v% x: t  k$ Ebbs.mocwww.com希望能共享一下 谢谢。
作者: 黄昏    时间: 2009-4-29 19:08

嗯 之所以会删除是因为创建角色的语句为
- u  P4 [3 J4 R0 e妖城在线论坛REPLACE tbl_character VALUES……. v- p. E' {* j& ]1 r2 {
查mysql手册可知bbs.mocwww.com6 L/ j7 I5 |# U
REPLACE的运行与INSERT很相像。只有一点除外,如果表中的一个旧记录与一个用于PRIMARY KEY或一个UNIQUE索引的新记录具有相同的值,则在新记录被插入之前,旧记录被删除。
0 y& u9 G$ ~# s  E1 g$ U  N妖城在线论坛嗯 解决方法论坛里面有人很早就发出来了……  去掉name的索引就可以了……妖城在线论坛7 [& ?; i0 M' q; g9 ^$ @  \
bbs.mocwww.com3 @! Z+ `0 i9 Y% B& p  ?% c
不过这样不删除数据,但是还会有重名的角色存在
) V9 V9 z- v# Y( S妖城在线论坛完善的解决方法可以从2方面考虑魔力私服,最新魔力宝贝私服技术交流( P& x  g* W% f, N8 y7 N
gmsv方面,汇编添加语句判断(流传一种比较类似的解决重名办法,但是会导致停端时玩家数据保存失败,等待完善中……)
# T3 n9 J" i/ U) e$ Bcg方面就是hook 创建角色的函数并结合php来判断是否能成功创建角色了,可能被绕过,不是很完美……
作者: 逆灵    时间: 2009-4-30 01:40

我验证过 增加索引和 去掉索引都是一样的 只要RegistNumber
# g* w4 w+ E1 B- d' V和Name一样 就一定会被删除




欢迎光临 妖城在线论坛 (http://bbs.mocwww.com/) Powered by Discuz! 6.0.0