发新话题
打印

[魔力私服分享] (转)关于家族修复~~~没事做了。。

(转)关于家族修复~~~没事做了。。

这一篇教程给大家主要介绍gmsv与数据库的关系问题,对于gmsv修好的基础知识以及mysql的基础知识在前三篇教程中已经大体上介绍过,这里凡涉及到以上内容的尽量简洁,读者莫怪。
* b( V5 S0 o7 L: q7 A- x: k5 k3 `魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表在gmsv与数据库修复过程中最耀眼的就是家族和名片系统了,由于名片系统以及排名等涉及到mlsv,本篇就以单数据库为依托的家族系统为例,来小议下gmsv是如何与数据库通信的问题。查看游戏数据库的表格,我们可以获得如下的list:妖城在线论坛4 h4 T% `( |( r4 e
tbl_addressbookbbs.mocwww.com$ Z- _. C' x, b7 a: S2 W8 N! M
             tbl_addressbook_bakbbs.mocwww.com1 F1 i( }% s* P5 x( l
             tbl_character魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表1 Y! N% a0 s# c6 s6 X
             tbl_character_bak
! O- f- R$ w0 c8 k. L, U妖城在线论坛             tbl_duelranking—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート; n" s3 R) J) ~+ i7 J6 z' n1 C
             tbl_guild
  ?* z+ t  X! e7 @3 h魔力私服,最新魔力宝贝私服技术交流             tbl_guild_bak
, c: m# Z$ X. Z0 D—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート             tbl_guildItemBox魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表  b4 x% l" s9 |+ y+ @
             tbl_guildItemBox_bak
' a+ L. P3 ^: f4 f& x3 T             tbl_guildItemBoxPet
9 `$ K- g* g# o0 h" Sbbs.mocwww.com             tbl_guildItemBoxPet_bak—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート" N+ L) a8 U$ c* h" s5 H# J: q
             tbl_guildMonsterbbs.mocwww.com1 w( u: u  \& w( _
             tbl_guildMonster_bak
& y' ~5 f9 V+ obbs.mocwww.com             tbl_item
" y. Q/ s& _  N( i/ ^2 D—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート             tbl_item_bak
3 }/ B9 ?' V! o4 G( U4 m( J6 nbbs.mocwww.com             …………
* `% K' \. L( v' o& v4 i2 h- hbbs.mocwww.com             tbl_pet
0 ], o6 J, G- i, F1 Q1 Qbbs.mocwww.com             tbl_pet_bak
6 x% E8 x9 m5 D- I6 F—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート             tbl_playernum
! C! f, c" A: Y: K妖城在线论坛             tbl_product魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表6 f1 }5 q/ [  ^1 w
             tbl_user魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表% \1 [  W3 U9 m
             tbl_user_bak妖城在线论坛! M& D% ]8 E+ c& r% Q6 S
   从字面上理解其中有那么几个表和家族有直接关系的如tbl_guild,tbl_guildItemBox,tbl_guildItemBox,tbl_guildMonster这四个表。利用第三篇结尾的方法,我们可以知道是由于breedingRoomQueryError的问题,这是数据库问题还是程序问题?如果说数据库问题,感觉无从下手,于是我就改了个方向,更换gmsv程序。机子上积累了很多的gmsv,挨个试验了下,可以说都很有特色,有的甚至连人物都不能登入,估计是要配套的cg吧,最后敲定使用名网的的那个端,上面的修改日期是2005年7月6日,够原始的了。。。。魔力私服,最新魔力宝贝私服技术交流" I6 ]& x: @! q! K# ?
   gmsv更换之后,家族算是创建起来了,当然是没有tbl_guildMonster记录啦,有的话就报breedingRoomQueryError错误。重启服务器,登入查看,刚才创建家族没了---真是祸不单行啊。再次翻看数据表格,发现tbl_character的guildId列没有填充完整,只有两个成员登陆了,怪不得家族在重启之后就没了,难道是使成员不足五个的原因?找到createGuildSuccess我们发现了下面一个做标记的好地方,程序如图所示:
7 P5 v9 y7 H" f- a5 u% B9 lbbs.mocwww.com
+ Q' r. f: [; [5 m% b
* r+ i9 r6 O6 W* V& c魔力私服,最新魔力宝贝私服技术交流这段代码call了四个函数CHAR_getPartyArray[猜测是队伍信息]、GUILD_createGuildRoom[家族房间的创建]、_snprintf---LogGuild[猜测是输出到guild.log]、addGuildInitialMember[这个就是原始的家族人物添加]。作为束手无策的我第一时间就是看看log是不是执行过了,查看记录看到:
# o& p+ O, t; B! |8 fGUILD: guildID=30001 CdKey=sanat registnumber=4 name=完美汉化 action=createGuild (guildName=完美家族 roomName=完美空间) (8/6/17 19:32:48)—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート6 u: ]$ V& u3 N$ j& j6 X
看来是在执行addGuildInitialMember函数期间出现了错误,才导致tbl_character的guildId列没有填充完整,不管重启gmsv家族失踪是何原因,这是我们一个着手点。重新创建家族,在服务器重启之前修改tbl_character的guildId列以及相关列,错误依旧存在,家族还是失踪了。。。。。(我都想报警了我)。。。。
7 w) [" P+ D% t. `# Z   难道我走错了方向,还是家族相关的字段有很多?再次翻了遍数据库,没有增减过什么记录,还原数据库,开始无聊闲逛,并且异想天开的想,难道是五个游民申请受到了歧视?这是什么游戏啊。每个人人物都给了个职业背着“圣洁的灵魂”的称号再去申请,这次身份不一样了,不知道开家族的那个NPC是不是势利眼。小心的申请后,数据还是原来的那些数据,服务器重启之前修改了tbl_character的guildId列以及相关列,抱着侥幸的心,重启了服务器。。。。真是势利眼,居然进去了,而且家族还在,这个高兴啊。。。登出游戏翻看数据库,发现表tbl_character族长这一行出现了些变化,与其他四个人数据明显不一样,难道这就是族长的待遇?刚才光顾者高兴没有来得及看有什么变化来着了,再次登入,这次发现问题了:族长的称号变成了待定义17,而且那些权限都没有了。。好不容易建成了,还被人控股了不成?找到tbl_character表title列,这列貌似就是家族称号id?改为0,这才是老大的称号啊,重新进入服务器。。。。错误依旧,究竟是谁动了我的家族,这是个问题。魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表0 A  E8 q" k  S! Y( Q
       向来是福无双至,祸不单行,这次也不例外。仔细琢磨了下,发现问题不只如此,家族称号这次还变成17了,看来刚才给我显示几个汉字还算是仁慈了。接连两个错误已经把我弄得头晕脑涨了,忽然突发奇想,会不会使它们也和物品显示一样有一个表格控制呢,如果是表格通过堆栈的位移来引用更改相应的字段,那么前面两个问题就迎刃而解了,是字段或者字段位置错误,也就是说,gmsv没有错。搜索关于tbl_guild表格的sql语句,发现我们可以做一些小的调整如下:
+ d3 d! T1 {9 F& a# [1 Z, u+ d—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート   CdKey             CdKey魔力私服,最新魔力宝贝私服技术交流& q6 x7 U7 x. A& G' w& L
   RegistNumber RegistNumber魔力私服,最新魔力宝贝私服技术交流" k+ j) `5 k# e' {) z0 X# G7 j
   serverNumber serverNumber
2 x6 _' F# N- a/ R魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表   roomType       roomType—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート6 g- ]* _) i3 w+ w! i: u2 D
   guildName       guildName
% R3 s% d/ C9 s3 x7 [妖城在线论坛   roomName       roomName* Q9 _" U* c/ d
   createTime    brief  魔力私服,最新魔力宝贝私服技术交流7 M4 R% z4 o' D+ \+ m. n$ J& K1 `
   lastAccess       createTimebbs.mocwww.com. |9 G9 z0 [& ]& W
   titleName0       lastAccess妖城在线论坛/ O% j% y0 }2 ^+ O9 M+ X
   commition0    guildMark
# H+ W2 F- v$ ]* J3 o; `魔力私服,最新魔力宝贝私服技术交流   floorID             titleName0
! n  d0 G; q8 C  ^7 s—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート   titleName1       commition0
2 N2 G. G  t2 }4 a9 v" Y& A! f—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート   commition1       ………………
# D7 v  S9 T% H4 J$ [, @妖城在线论坛   ………………    ………………
% W2 c: k" d9 @) j" j妖城在线论坛   titleName31       ………………
) [  x0 V, K* p' a% j0 B! `7 c" i+ Hbbs.mocwww.com   commition31    titleName31 bbs.mocwww.com  [+ c7 S3 g, [8 ?  O  k
   brief                commition31
. h$ `1 A0 H+ @/ @2 \魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表   guildMark          floorID魔力私服,最新魔力宝贝私服技术交流6 f4 ^9 a, w5 c: S' p
   调整后清空store文件夹,运行服务端,登入正常,“待定义17”又出现了,虽然不是很理想,但是我们的猜测对了,这就意味着我们的冤路走得很长,但是至少我们还在前进,这就是好的征兆。
( c; ?* N& ?3 i: C% u4 B# P+ {' h" Gbbs.mocwww.com   调整了tbl_guild表格之后,我们开始研究谁动了我的家族这个问题,根据前面的经验,我们有理由怀疑,把tbl_character的某一列或两列做些调整就能达到我们的目的了,看着这个327个字段的表格,一脸的模糊。。。族长被篡权了,看看其他的几个吧。测试第三个帐号的时候,也就是手动修改的那个,再次惊爆出了个“待定义17”,看来不止是族长罢工了。这次情况比较好的是在运行记录上出现了一小行黑色的错误。。。。titleid=164,titleid=164是什么?职业的称号哦,那个貌似家族的称号的字段title不可靠!还原表格到早一些时候,源字段titleId=164!问题貌似找到了,对换title和titleID字段位置,重新建立家族,获得错误"killitem+乱码"。登出,翻看数据库,发现tbl_character的guildId列填充完整,重启服务器,家族存在,称号好依然存在,再也没有篡权的悬念了。至此,家族部分修复基本完成,下面是家族宠物的修复。. W0 x' U/ ~* a; y7 z/ U* e2 P
注:关于"killitem+乱码"的问题,感谢小男生提供帮助。知道是怎么回事了魔力私服,最新魔力宝贝私服技术交流( Z6 S8 e+ B( `, q) ^4 c
   有了家族的支持(虽然在创建的时候屏蔽了GuildMonster的创建),进行下一步家族宠物的修复就方便多了。用gm代码生成点那个换领养证的什么石来着(瞧这记性。。。),换来证书先领养一个,整个过程没有反应,数据库也没有任何记录添加,难道就这么算了?可是家族宠物房间明明存在的,而且还可以进入呢。重启服务器,看看家族宠物会不会玩消失,结果证明他还在,翻遍数据库,没有!这个就奇怪了,难道通过虫洞走向外太空了。。。。偶然在翻store文件夹时,发现了这个文件:breedingRoom.txt,这个不奇怪,但是里面的代码让我大吃一惊:
$ z5 J8 t1 R  P妖城在线论坛30001,0,sanat,4,1214273832,1,1,蛋   ,0,0,14900,1,0,0,80784,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,1,67,60,24,9,95,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
+ Z  R. ^1 b) n—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート30001,1,sanat,4,1214273832,2,1,蛋   ,0,0,14902,16,0,0,82944,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,1,17,82,59,63,47,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
9 N: c/ _2 v8 A0 y—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート30001,2,sanat,4,1214273832,3,1,蛋   ,0,0,14903,5,0,0,82656,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,1,100,93,22,119,77,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1( x7 p: \" P6 P6 \& s& z+ I
   这个难道就是我看到的那个记录?众里寻他千百度,那人却在灯火阑珊处!删除之,重启服务器,果然家族宠物又不存在了。通关前面这一步,我们们得到了最宝贵的资料,家族宠物数据资料!想想tbl_guildMonster的格式应该与之相符吧,为tbl_guildMonster表格补齐列,清空store文件夹,重新启动服务器,领养宠物,这次tbl_guildMonster数据记录基本正常,只是个别字段的对应上和前面的家族存在同样问题,修改之。至此,家族宠物领养部分修改基本完成,下面介绍家族物品箱的修复过程。—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート5 [4 A, B5 w7 i& \0 l: V$ l2 F# W- ^" y
   修复这里,似乎一切都很顺利,我最高兴的是多了三个公用物品箱,那个是15个宠物格哦,开始把一个物品扔进家族物品箱,登出。。。重启服务端。。没有发现什么问题。这次次扔入两个物品,点击确定的时候出现了如下图的错误:
- B, O( g; R& I& K; T% O7 {; b魔力私服,最新魔力宝贝私服技术交流# R& I( n  I' O3 s
魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表3 B1 p( q. p" i6 `* A4 e
bbs.mocwww.com7 l, J$ k/ E9 c" ^4 x
修改的时候少了个逗号就变成上面的图。。。
9 A: Z1 {# C' w9 e8 j: k魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表2 C& ?0 m6 x! ]. F$ c5 k8 ]& D
从图中错误中我们读到了两个信息:
4 e# |* J! ^% c# t( v4 n             第一:数据表tbl_guildItemBox需要添加很多列bbs.mocwww.com% w# e7 F5 d6 c) c, [- a' e
             第二:好像insert into table values (val1,val2...),(val1,val2...),...这个是标准的语法,而图片中得明显是在两条记录中间缺少了个逗号。
/ ]( A* |3 q7 r- d+ G: }魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表   第一个问题很好解决,增加列就可以了。主要是第二个问题,我们还得从GMSV当中来寻找答案。打开IDA导入GMSV,找到make_guildItemBoxSql函数,看着结构很漂亮,梯形的,呵呵,我们只看前面这几句句可以解决问题了魔力私服,最新魔力宝贝私服技术交流& P! `. A* |; ?  J. |; T( g
xor     eax, eax          //清空ax魔力私服,最新魔力宝贝私服技术交流9 L9 r4 k4 C' f1 J
cmp     [ebp+arg_28], 0     //[ebp+arg_28],对照save_guildItemBox函数我们得出这是调用次数初始为0,与零做对比
) E% R5 z5 G4 M' e  |—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲートsetnz al                //对比结果如果大于零,即第二次及以上,al置17 f* W! s9 }3 q* r$ }0 S
dec     eax                 //eax自减
! |; L! R. O( g- n3 a魔力私服,最新魔力宝贝私服技术交流and     eax, 0FFFFD400h     //相与魔力私服,最新魔力宝贝私服技术交流6 |7 C; ~0 m6 s) ]" I
add     eax, 2C20h       //相加
$ l" k3 v0 ?) r2 m—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲートpush eax魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表# e# l$ _; e4 f
push offset aC    ; "%c("//字符格式输出
" Y9 x( E" {! \2 Z魔力私服,最新魔力宝贝私服技术交流push [ebp+dest]    ; s妖城在线论坛4 j% ]' R7 _* S) l* K( k2 o
call _sprintf魔力私服,最新魔力宝贝私服技术交流1 @+ K( i3 _6 v0 w
光看程序可能有点模糊,我们代入数据验证下:妖城在线论坛: M$ l0 }; }  c9 t) g: F; C
第一次:eax=20h
7 V6 j2 J. r" w/ a- t1 X8 C5 _第二次:eax=2c20h妖城在线论坛: x# ~. [4 Y/ f$ B, k& R& I3 ?
……
: K; E/ e$ g; ~, Bbbs.mocwww.com由此可以看出,问题可能是出在字符输出上,输出一个字符是不是代表着2c20h只能输出20h?如果是这样所有的疑问就都解决了。假设我们成立,那么我们把add eax,2C20H这句改成add eax,2CH,通过计算相应的把0FFFFD400h改成0FFFFFFF4H,保存,运行之,成功。其他数据库的修复亦同理,不断地尝试,不馁试验,总有成功的机会。今天就写到这里,谢谢各位看完。魔力私服,最新魔力宝贝私服技术交流9 X& ?. r2 @3 F( L( B# E$ t; G) @+ `5 E

' e- r2 U: B( ?$ u4 q% y" G# }妖城在线论坛
8 e# {3 `4 D. K1 F$ U魔力私服,最新魔力宝贝私服技术交流备注点东西:
/ i6 P) C  D: ]; s; S魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート, e0 s0 V( o) o7 f, {5 C: V0 m* u
killitem %d,1,把gmsv这段原本的1前面空格去掉就可以成立时交出道具了.妖城在线论坛7 _9 A5 H: k$ c4 _
bbs.mocwww.com3 m, N' Z: V  l# x. Y( x5 O% s, r' Z' k
貌似不能建立右侧的人物啊?当输入好名字,配好属性后,点“创建”后,提示名字不能是空白???—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート8 z0 a2 V  w* [4 [+ s$ z- t

3 p* |, q, y$ d' R6 Z; v6 c魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表这个是tbl_user表格的问题,其实账号注册的时候应该是每隔一个seqnumber增加一个帐号,这样registnumber=seqnumber+dapaplace—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート( B) ^- H& \4 l) y: F
这个是猜测/ _% f7 U) A8 t
你修改下tbl_user中的seq打头的字段为一个偶数序列就可以了
本帖最近评分记录
  • boyboy 妖币 +5 暂时没机子测试,待有人试后加精华鼓励下吧 ... 2010-4-28 03:45
林娘妖秀稀GIN哪,摸狼高混。李在丫林贝抵A塞林母,李再丫摸。

TOP

发新话题