传奇2的Delphi源代码已经可以编译了! (10分)

  • 主题发起人 主题发起人 解元
  • 开始时间 开始时间
部分结构定义:
type
MAPFILEHEADER = record
shWidth: word;
shHeight: word;
desc: array[1..48] of char;
end;

mapTILEINFO = record
btitle1: byte;
btitle2: byte;
bmtitle1: byte;
bmtitle2: byte;
bobject1: byte;
bobject2: byte;
bflag: byte;
boffset: byte;
bframecount: byte;
bdelaytime: byte;
bobjgroup: byte;
bunused: byte;
end;

TMatrix = array of array of byte;

type
TMESSAGEBODYWL = record
lParam1: LongInt;
lParam2: LongInt;
lTag1: LongInt;//低位表示是否允许编组
lTag2: LongInt;
end;

type
TMESSAGEBODYW = record
Param1: Word;
Param2: Word;
Tag1: Word;
Tag2: Word;
end {tagMESSAGEBODYW};

type
TCHARDESC = record
Feature: LongInt;
Status: LongInt;
end ;

type
TFEATURE = record
Gender: BYTE;
Weapon: BYTE;
Dress: BYTE;
Hair: BYTE;
end;


type
TSTANDARDITEM = record
Num:byte;
//名字的有效个数//源程序中这里应为name:array[0..14] of char;
Name: array[0..13] of char;
StdMode: BYTE;
//物品种类(<=3时可以在快捷栏上显示)
Shape: BYTE;
//外形
Weight: BYTE;
//重量
AniCount: BYTE;
//
SpecialPower: BYTE;
//特殊用途
NeedIdentify: BYTE;
//需要鉴别
Looks: Word;
//
DuraMax: Word;
//最大持久
AC: Word;
//防
MAC: Word;
//魔防
DC: Word;
//攻击
MC: Word;
//魔
SC: Word;
//道
Need: BYTE;
//
NeedLevel: BYTE;
//需要等级
Price: Integer;
//价格
end;


type
TCLIENTITEM = record
s: TSTANDARDITEM;
MakeIndex: Integer;
//
Dura: Word;
//持久
DuraMax: Word;
//最大持久
end;


type
TSTANDARDMAGIC = record //魔法
MagicID: Word;
//编号
Num:byte;
//这里应为MagicName:Array[0..13] of char //num 是我自己加的,表示后面名字的有效字符数.
MagicName: Array[0..12] of Char;
//名称 12
EffectType: BYTE;
Effect: BYTE;
//效果
Spell: Word;
//魔法
MinPower: Word;
//
Need: Array[0..3] of BYTE;
//升级需要的等级
Train: Array[0..3] of Integer;
//锻炼
MaxTrainLevel: BYTE;
//最大锻炼等级
Job: BYTE;
DelayTime: Integer;
//延迟时间
DefSpell: BYTE;
//默认
DefMinPower: BYTE;
MaxPower: Word;
DefMaxPower: BYTE;
szDesc: Array[0..15] of Char;
end;


type
TCLIENTMAGIC = record //魔法
UseKey: Char;
//按键
level:byte;
//等级
CurrTrain:integer;
//当前经验
Def: TSTANDARDMAGIC;
end;
 
好了,我已经将我费尽心血得到的东西毫无保留的共享了,下面就看解元兄的了
 
在这里说明一下:我不是不想把我的成果给大家分享,而是东西都在家里的计算机上(不能上网),我会尽快把它考过来的。
另外,虽然有一些值得商量的地方,但是我还是非常肯定9903兄的成绩的。并在此再对9903兄提出的内容做一个说明,大家看是否正确,欢迎讨论。
1)地图部分就基本上不用讨论了,源程序除了在头结构有点问题外,基本上是正确的,只是在结构中使用了byte/char等类型时,最好用packed record,否则可能会出现结构的大小和你设想的不一致(编译器会自动扩展这类记录成员的类型)。
2)关于CM_xxxx和SM_yyyy部分,只要能自成体系,就可以了。如果一定要和官方服务器的一致,那么也许9903兄提出来的更符合实际(我没有仔细去抓包分析过)
3)我的程序在补充完grobal2.pas后就可以编译运行了,并自己做了个简易服务器端,只实现了走、跑、打等动作,而NPC等没有实现(所以场景很寂寞的,只有玩家一个人走来走去)
4)关于feature,这是一个比较重要的标志,而grobal2.pas中有5个函数的传入参数都是feature,所以我的分析应该是该值是一个复合内容的值,同时包括人种(Race,决定了角色使用哪个Mon或Hum.wil),外貌(决定了角色使用该wil中的第几个外貌),衣服、武器、发型,共5个信息。而根据源程序中function GetMonImg (appr: integer): TWMImages;的内容,应该是appr div 10是人种,appr mod 10是人种中的第几个外貌(一个hum或Mon文件最多只有10个外貌,这个大家可以通过图片看出来)。从人种可以是90看来,这个feature应该是一个dword型,其中race和appr占一个word,hair/weapon/dress共用一个word。那么根据这个分析,就可以写出grobal2.pas中的那五个函数了。同样,这五个函数是服务器和客户端共用的(在服务器发送的消息中需要提供feature的地方,要用一个函数把人物的这5种属性打包进一个dword),可能还有一个专门打包feature的函数,由于客户端用不到,所以我们也不知道具体是什么。feature就是TCHARDESC的成员。
5)源代码我一般都做了中文解释,方便大家阅读。

若需要的话,大家先留个email吧。

 
to 解元, lotuscheng@163.com谢谢
 
我想要啊!bbtwo33.126.com
 
收藏下,期待早日出来。
zhouhj@mail.716.com.cn
 
支持!!
me too toofy45@tom.com
 
牛啊,有没有哪个专门来开个网站给我们详细讲讲.
 
来一个给菜鸟学习,谢谢

master321@163.com
 
大哥,给小弟也来上一份,这里叩谢先了。
darkwormliu@yahoo.com
 
你们真是高手。我也很想学习一下,多谢了:Martin_fu@163.net
 
给我一个吧
zlwlove@126.com
 
都是高手,我是不行了,等大家得出结论开一个新贴好好给讲一讲
 
呵呵,看来中国的程序员的却不差啊,差的只是创意。。
 
干吗要email,如果要共享出来的话,直接让别人下载不是更快!
 
给我来一份吧,谢谢!
ijias@126.com
 
我也要,ages7mark@yahoo.com.cn
 
我巨想要
cyfforever@163.com
 
我也要!
hquatoy@21cn.com
 
后退
顶部