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

  • 主题发起人 主题发起人 解元
  • 开始时间 开始时间
来看看
不喜欢传奇
 
早都做好了,呵呵
 
佩服!佩服!
 
高手,俺佩服!
 
to 解元
你好阿,我最近也在研究传奇2的客户端,对于Grobal2也有了一些认识,像TDefaultMessage之类的已经基本了解了,不过还是编译不出来,还缺一些东西,比如 1106 的常量就不知道是什么意思,可以互相探讨一下吗?我的QQ:37828729
 
又经过一个周末的努力,终于解决了地图不显示,人物不能行走的问题。
1)地图不显示:是源程序的地图文件头结构定义错误,源程序的地图文件头结构大小是56字节(搞不懂为什么),而实际的地图文件头应该是52字节(注意要用packed record定义)
2)人物不能行走:主要是CM_xxxx和SM_xxxx之间有一定的关系,我把CM_WALK=4001,对应的SM_WALK=1001,这样在程序中CM_WALK - 3000就可以等于SM_WALK。
3)服务器会定时发送明文+GOOD/xxxxxx(其中xxxxxx应该是服务器的GetTickcount值)的消息,经分析,这个消息是用来告诉客户端:你现在可以做走、跑等动作了。一般客户端在10秒内未收到这个消息则自动解开动作锁定(我把它改成50毫秒,这样就不用在服务器端发送+GOOD命令了)
 
有代码这个版本已经改版本的
通讯协议都变了
 
你的常量声明有误:
CM_WALK 应该是:3011
SM_WALK 应该是:11
+GOOD的意思是 走路/物理攻击/蹲下(挖矿) 等动作成功
+FAIL 是失败
给你部分常量:
CM_TRUN = 3010;
//转
CM_WALK = 3011;
//走路
CM_RUN = 3013;
//跑
CM_HIT = 3014;
//砍
CM_LONGHIT = 3019;
//刺杀
CM_POWERHIT = 3018;
//攻杀
CM_SPELL = 3017;
//魔法
CM_WIDEHIT = 3024;
//半月
CM_FIREHIT = 3025;
//烈火
CM_SAY = 3030;
//说话

SM_TURN = 10;
//转动方向
SM_WALK = 11;
//走路
SM_RUN = 13;
//跑
SM_HIT = 14;
//攻击
SM_SPELL = 17;
//使用魔法
SM_POWERHIT = 18;
//攻杀
SM_LONGHIT = 19;
//刺杀
 
厉害,佩服,加油,继续[:D]
 
你可以拦下通信包看看,不过估计加密啦。
 
还是把原文贴上吧:
来自:解元, 时间:2002-9-6 14:30:00, ID:1310247
还是自己搞定了。
这里的人的水平太差,下次不来了。
:(
=================================================

解元兄,明白我的意思了吧??
 
9903兄的本领好象也高不到哪里去啊。即使你的常量声明是对的,也不能说我的常量生命是错的,因为两者的效果是一样的。再者也没在这个上面花多少时间(没时间),只是周末花几个小时搞了搞。我也想过CM_TURN等应该是3000开头的,但是因为一开始已经分配好了,这样改的话就有常量会重复,但是我又不愿意重新去整理一下其他常量,所以我就稍微改了一下,能用就行了。再者,我没有玩过传奇,什么半月、烈火都是人说说的。9903兄弟要是真的有本事,何不把那个缺了的单元放出来,也省得兄弟们辛苦。
我现在的成果已经可以正常的走动、攻击了,可以说已经是一个完整的客户端了,重要的是服务器端(物品表等没有,家里不能上网)设计,我的想法是可以设计一个和传奇不同的服务器端,那么这个游戏就可以跟传奇很不一样了,游戏的目标都可以改变。
做一个游戏并不难,难的是让这个游戏有生命。
同意9903兄放出源代码来的请举手!
 
晕,没有取笑你的意思,不要误会,另外这句比较经典的话好像是你说的耶!!!!看看你自己的帖子,我只是觉的有趣,才把它摘录下来的,呵呵
我也没有抬高自己,贬低别人的意思,也没有说我水平高,事实上我只是一个delphi新生,学delphi才没几天.
我也没有那个单元的源码,也只是推测得出来的,不过我的推测是有根据的,我是抓取传奇网络封包分析出来的,如果需要请尽管说,不必用一些激将法来刺激我.
稍晚一些,我会把我分析的所有东西发出来.
 
厉害,I FOOLER YOU
 
第一个举手是我,请大家记住了。
 
等待中—————******
 
晕,请大家不要有太大期望,我也只是推测出那个单元的一小部分,离编译整个项目还差的远,我的本意是把我分析出来的东西和解元兄的合并一下,或许编译成功的机会会大一些,不过既然解元兄不愿意,那就算了
 
传奇2是用DELPHI写的吗?
 
是的,delphi + DelphiX
 
部分常量定义:
VERSION_NUMBER_0522 = 20020522;
CM_PROTOCOL = 2000;
CM_IDPASSWORD = 2001;
//发送用户名/密码
CM_ADDNEWUSER = 2002;
//
CM_CHANGEPASSWORD = 2003;
//更改密码
CM_UPDATEUSER = 2004;

CM_QUERYCHR = 100;
//查询人物
CM_NEWCHR = 101;
//新人物
CM_DELCHR = 102;
//删除人物
CM_SELCHR = 103;
//选择人物
CM_SELECTSERVER = 104;
//选择服务器

CM_QUERYUSERNAME = 80;
//查询用户姓名
CM_QUERYBAGITEMS = 81;
//查询包裹内容

CM_USERREPAIRITEM = 1023;
//修理物品
CM_USERSTORAGEITEM = 1031;
//用户存储物品

CM_USERTAKEBACKSTORAGEITEM = 1032;
//从仓库取回物品
CM_USERMAKEDRUGITEM = 1034;
//制作毒药物品
CM_DROPGOLD = 1016;
//丢掉金币

//交易相关
CM_DEALTRY = 1025;
//交易开始//////////////
CM_DEALCANCEL = 1028;
//交易取消/////////////
CM_DEALADDITEM = 0;
//交易添加物品////////////
CM_DEALDELITEM = 0;
//交易删除物品////////////
CM_DEALCHGGOLD = 0;
//交易改变金币////////////
CM_DEALEND = 0;
//交易完毕//////////////

CM_DROPITEM = 1000;
//丢掉物品
CM_TAKEONITEM = 1003;
//穿上/戴上/拿上 物品
CM_TAKEOFFITEM = 1004;
//脱下物品
CM_EAT = 1006;
//吃物品
CM_BUTCH = 1007;
//
CM_MAGICKEYCHANGE = 1008;
//改变魔法按键

CM_MERCHANTQUERYREPAIRCOST = 1024;
//查询修理价格
CM_MERCHANTQUERYSELLPRICE = 1012;
//查询出卖给商人的价格
CM_USERSELLITEM = 1013;
//选择物品
CM_USERBUYITEM = 1014;
//购买物品
CM_USERGETDETAILITEM = 1015;
//????????????????????????
CM_LOGINNOTICEOK = 1018;
//进入游戏窗口确定按钮

//编组相关
CM_GROUPMODE = 1019;
//编组模式
CM_CREATEGROUP = 1020;
//创建编组
CM_ADDGROUPMEMBER = 1021;
//添加编组成员
CM_DELGROUPMEMBER = 1022;
//删除编组成员
//行会相关
CM_OPENGUILDDLG = 1035;
//打开行会窗口
CM_GUILDHOME = 1036;
//行会主页
CM_GUILDMEMBERLIST = 1037;
//行会成员列表
CM_GUILDADDMEMBER = 1038;
//添加行会成员
CM_GUILDDELMEMBER = 1039;
//删除行会成员
CM_GUILDUPDATENOTICE = 1040;
//更新行会信息
CM_GUILDUPDATERANKINFO = 1041;
//更新行会等级/排列信息????
///////////
CM_SPEEDHACKUSER = 0;
//??????????
//动作
CM_PICKUP = 1001;
//拣东西
CM_TRUN = 3010;
//转
CM_WALK = 3011;
//走路
CM_RUN = 3013;
//跑
CM_HIT = 3014;
//砍
CM_LONGHIT = 3019;
//刺杀
CM_POWERHIT = 3018;
//攻杀
CM_SPELL = 3017;
//魔法
CM_WIDEHIT = 3024;
//半月
CM_FIREHIT = 3025;
//烈火
CM_SAY = 3030;
//说话
CM_RIDE = 3031;
//骑乘???
CM_SITDOWN = 3012;
//挖
CM_CLICKNPC = 1010;
//点击NPC???
CM_OPENDOOR = 1002;
//开门
CM_MERCHANTDLGSELECT = 1011;
// NPC Tag Click 选择商人功能窗口
CM_GUILDMAKEALLY = 1044;
//行会结盟
CM_GUILDBREAKALLY = 1045;
//行会解盟

{+//****************************************** }
{ #1. Server To Client Message }
{=******************************************** }
SM_RUSH = 6;
//
SM_FIREHIT = 8;
//烈火
SM_BACKSTEP = 9;
//走路不成功????
SM_TURN = 10;
//转动方向
SM_WALK = 11;
//走路
SM_RUN = 13;
//跑
SM_HIT = 14;
//攻击
SM_SPELL = 17;
//使用魔法
SM_POWERHIT = 18;
//攻杀
SM_LONGHIT = 19;
//刺杀
SM_DIGUP = 20;
//挖取
SM_DIGDOWN = 21;
//挖下?????????
SM_FLYAXE = 22;
//???????????????
SM_LIGHTING = 23;
//天亮?????????????
SM_WIDEHIT = 24;
//半月
SM_DISAPPEAR = 30;
//物品消失??????
SM_STRUCK = 31;
//
SM_DEATH = 32;
//
SM_NOWDEATH = 34;
//
SM_HEAR = 40;
//听到说话
SM_FEATURECHANGED = 41;
//容貌??特征??改变???????????
SM_USERNAME = 42;
//用户名??玩家名???????
SM_WINEXP = 44;
//胜利指数???杀怪获得的经验值???????????????
SM_LEVELUP = 45;
//等级提升
SM_LOGON = 50;
//登录注册
SM_NEWMAP = 51;
//新地图
SM_ABILITY = 52;
//能力
SM_HEALTHSPELLCHANGED = 53;
//红血兰血 改变
SM_MAPDESCRIPTION = 54;//地图形容,地图描述
SM_SYSMESSAGE = 100;
//系统消息
SM_GROUPMESSAGE = 101;
//组队消息
SM_CRY = 102;
//喊
SM_WHISPER = 103;
//私聊
SM_GUILDMESSAGE = 104;
//行会信息
SM_ADDITEM = 200;
//添加物品
SM_BAGITEMS = 201;
//包裹物品
SM_ADDMAGIC = 210;
//添加魔法
SM_DROPITEM_SCCESS = 600;
//丢弃物品成功
SM_DROPITEM_FAIL = 601;
//丢弃物品失败
SM_ITEMSHOW = 610;
//显示物品
SM_ITEMHIDE = 611;
//地上的物品消失
SM_TAKEON_OK = 615;
//穿上戴上成功
SM_TAKEON_FAIL = 616;
//穿失败
SM_DOOROPEN = 612;
//开门
SM_TAKEOFF_OK = 619;
//脱下成功
SM_TAKEOFF_FAIL = 620;
//脱下失败
SM_WEIGHTCHANGED = 622;
//背包重量改变
SM_CHANGEMAP = 634;
//地图改变
SM_CLEAROBJECT = 633;
//清除对象??????????
SM_EAT_OK = 635;
//吃物品成功
SM_EAT_FAIL = 636;
//吃物品失败
SM_MAGICFIRE = 638;
//魔法火?????????????
SM_MAGIC_LVEXP = 640;
//魔法等级
SM_DURACHANGE = 642;
SM_GOLDCHANGE = 653;
//金币改变
SM_CHANGELIGHT = 654;
//改变亮度????
SM_CHANGENAMECOLOR = 656;
//改变宝宝颜色?????
//SM_CHARSTATUSCHANGE = 657;
SM_CHARSTATUSCHANGED = 657;
SM_CREATEGROUP_OK = 660;
//创建编组成功
SM_CREATEGROUP_FAIL = 661;
//创建编组失败
SM_GROUPCANCEL = 666;
//编组取消??????????
SM_GROUPMEMBERS = 667;
//编组成员
SM_CHANGEGUILDNAME = 750;
//改变行会名称
SM_SUBABILITY = 752;
SM_SHOWEVENT = 804;
//显示事件????????
SM_HIDEEVENT = 805;
//隐藏事件?????????
SM_DELITEM = 202;
//删除物品????
SM_DELITEMS = 203;
//删除物品??????
SM_CLOSEHEALTH = 1101;
//关闭健康???????
SM_OPENHEALTH = 1100;
//打开健康????????
SM_MONSTERSAY = 1501;
//怪物说话
SM_SITDOWN = 12;
//挖
SM_BUTCH = 637;
//
SM_SKELETON = 33;
// SM_DEATH 尸骨??尸体
SM_CHANGEFACE = 1104;
//
SM_OPENDOOR_OK = 612;
//开门成功
SM_OPENDOOR_LOCK = 613;
//
SM_CLOSEDOOR = 614;
//
SM_MERCHANTSAY = 643;
//商人说话
SM_MERCHANTDLGCLOSE = 644;
//商人窗口关闭
SM_SENDGOODSLIST = 645;
//货物列表
SM_SENDUSERSELL = 646;
//用户出售
SM_SENDBUYPRICE = 647;
//购买价格
SM_USERSELLITEM_OK = 648;
//用户出售物品成功
SM_USERSELLITEM_FAIL = 649;
//用户出售物品失败
SM_BUYITEM_SUCCESS = 650;
//用户购买物品成功
SM_BUYITEM_FAIL = 651;
//用户购买失败
SM_SENDDETAILGOODSLIST = 652;
//详细货物列表
SM_GOLDCHANGED = 653;
//金币改变
SM_OPENGUILDDLG = 753;
//打开行会窗口
SM_OPENGUILDDLG_FAIL = 754;
//打开行会窗口失败
SM_SENDGUILDHOME = 755;
//行会主页
SM_SENDGUILDMEMBERLIST = 756;
//行会成员列表
SM_GUILDADDMEMBER_OK = 757;
//行会添加成员成功
SM_GUILDADDMEMBER_FAIL = 758;
//行会添加成员失败
SM_GUILDDELMEMBER_OK = 759;
//行会删除成员成功
SM_GUILDDELMEMBER_FAIL = 760;
//行会删除成员失败
SM_GUILDRANKUPDATE_FAIL = 761;
//行会等级/排列更新失败
SM_BUILDGUILD_OK = 762;
//创建行会成功
SM_BUILDGUILD_FAIL = 763;
//创建行会失败
SM_GUILDMAKEALLY_OK = 768;
//创建行会同盟成功
SM_GUILDMAKEALLY_FAIL = 769;
//创建行会同盟失败
SM_GUILDBREAKALLY_OK = 770;
//删除行会同盟成功
SM_GUILDBREAKALLY_FAIL = 771;
//删除行会同盟失败
SM_DLGMSG = 772;
//窗口消息????弹出窗口???????
SM_RIDEHORSE = 1300;
//骑马
SM_DAYCHANGING = 46;
//日期正在改变????
SM_SENDMYMAGIC = 211;
//我所会的魔法
SM_VERSION_AVAILABLE = 500;
//
SM_CERTIFICATION_FAIL = 501;
//
SM_ID_NOTFOUND = 502;
//ID未发现,用户名错误
SM_PASSWD_FAIL = 503;
//密码错误
SM_NEWID_SUCCESS = 504;
//创建新ID成功
SM_NEWID_FAIL = 505;
//新ID失败
SM_CHGPASSWD_SUCCESS = 506;
//更改密码成功
SM_CHGPASSWD_FAIL = 507;
//更改密码失败
SM_QUERYCHR = 520;
//查询人物(2人窗口)
SM_NEWCHR_SUCCESS = 521;
//创建人物成功
SM_NEWCHR_FAIL = 522;
//创建人物失败
SM_DELCHR_SUCCESS = 523;
//删除人物成功
SM_DELCHR_FAIL = 524;
//删除人物失败
SM_STARTPLAY = 525;
//开始游戏
SM_STARTFAIL = 526;
//进入游戏失败
SM_QUERYCHR_FAIL = 527;
//查询人物失败
SM_OUTOFCONNECTION = 528;
//连接已断开
SM_PASSOK_SELECTSERVER = 529;
//用户名/密码 验证通过
SM_SELECTSERVER_OK = 530;
//服务器选择成功
SM_NEEDUPDATE_ACCOUNT = 531;
//需要更新_说明????
SM_UPDATEID_SUCCESS = 532;
//更新ID成功?????
SM_UPDATEID_FAIL = 533;
//更新ID失败???????
SM_SENDUSEITEMS = 621;
//身上穿戴物品
SM_SENDNOTICE = 658;
//进入游戏弹出窗口
SM_AREASTATE = 708;
//地区状态
//SM_MAPDESCRIPTION = 54;
//地图类型
 
后退
顶部