依星源码资源网,依星资源网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 53|回复: 0

[游戏架设教程] 传奇源码文件结构说明

[复制链接] 主动推送

1034

主题

1040

帖子

1409

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1409
发表于 2024-5-27 17:17:14 | 显示全部楼层 |阅读模式
mir2res文件结构

Grobal2.pas,,,客户端和服务端通用的文件,定义了一些消息标识,数据结构,消息操作函数
Actor.pas,,,精灵(包括人物heros,npc,怪物mon)类,但是主要是heros类,NPC以及mon类派生于actor类
FState.dfm,,,各个子窗口,如f11,,f9等快捷键调出的窗口等
clmain.dfm,,cl-client,,客户端主界面窗体,打开可以看到它use了Fstate.dfm
fstate.pas,,FState.dfm的模块文件,,结合DWinCtl.pas和delphix中的绘图函数绘制各个子窗口在DDraw下真实效果的模块
IntroScn.pas  游戏的引导场景实现,比如登录选人等
clmain.pas,,clmain.dfm对应的源程序文件,,处理了程序启动时的网络连接,载入的wil客户端文件,等一系列操作
WIL.pas 比较重要的文件之一,,在原delphix图像包装类的基础上改装而成,封装了wil文件及其全部操作(结合wmUtil)
clEvent.pas 消息管理器
DWinCtl.pas 提供几个在DX下使用的控件
mir2.res  可能只有一个图标吧,就是那个龙字样的
SoundUtil.pas wav文件夹内声音文件的调用操作
wemade.pal 调色板文件
mir2.dpr 工程文件
EDCode.pas 消息加解密函数,6BIT加密算法的具体实现,用wpe截到的封包都是加密格式的,去掉密文前的!和最后的@
ClFunc.pas 输助函数库
MapUnit.pas 地图单元
AxeMon.pas 怪物单元,包含怪物在客户端的攻击等效果的实现,由actor类派生,不知为什么命名为axemon斧怪?
怪物对主角的伤害等算法当然不包含在,这是服务器res的工作
HerbActor.pas BOSS怪
PlayScn.pas 相对于引导场景,这里是游戏主场景画面实现
DrawScrn.pas 整个游戏场景的最终绘图工作
Soundfx.h 音乐文件操作的预编译头
magiceff.pas 客户端魔法效果的绘制与表现,当然也不包括魔法伤害实现.
hutil32.pas,cliUtil.pas 包含了一些输助函数等

##########################################33333333333333333


unit Grobal2; //全局(服务器和客户端通用)消息,数据结构,函数等

interface
uses
   Math,windows;
Const
  BUFFERSIZE    =1024;  //缓冲定义

  //客户端发送的命令
  CM_SOFTCLOSE  =0;   //退出传奇(游戏程序,可能是游戏中大退,也可能时选人时退出)



  //登录有关的命令 //CM: client msg,这些定义的消息都是客户端向服务端主动发送的
  CM_IDPASSWORD  =1; //客户端向服务器发送ID和密码
  CM_QUERYUSERSTATE=2; //查询用户状态(用户登录进去,实际上是客户端向服务器索取查询最近一次
退出服务器前的状态的过程,服务器自动把用户最近一次下线以让游戏继续的一些信息返回到客户端)
  CM_ADDNEWUSER =3; //新建用户,就是注册新账号,登录时选择了"新用户"并操作成功
  CM_UPDATEUSER =4; //更新注册资料??
  CM_SELECTSERVER =5; //选服务器,注意不是选区,盛大一区往往有(至多8个??group.dat中是这么写的)
  //不止一个的服务器
  CM_CHANGEPASSWORD =6; //修改密码
  CM_NEWCHR =7; //创建新角色,注意不是上面所说的新建用户
  CM_QUERYCHR =8; //登录成功,客户端显出左右角色的那一瞬
  CM_DELCHR =9; //删除角色
  CM_SELCHR =10; //选择角色开始游戏
  CM_QUERYUSERNAME=11; //进入游戏,服务器返回角色名到客户端

  CM_SAY =22; //角色发言

  //客户端界面操作相关

  CM_MAGICKEYCHANGE = 30; //魔法快捷键改变
  CM_CREATEGROUP =42; //新建组队
  CM_WANTMINIMAP =43; //用户点击了"小地图"按钮
  CM_OPENGUILDDLG =45; //用户点击了"行会"按钮
  CM_GROUPMODE=41; //关组还是开组
  CM_ADDGROUPMEMBER =51; //组内添人
  CM_DELGROUPMEMBER =52; //组内删人

  CM_SPEEDHACKUSER =59; //用户加速作弊检测
  CM_ADJUST_BONUS =60; //用户得到奖励??私服中比较明显,小号升级时会得出金钱声望等,不是很确定,
  //求经过测试的高手的验证

  CM_QUERYBAGITEMS=62; //查询包裹物品
  CM_LOGINNOTICEOK = 63; //健康游戏忠告点了确实,进入游戏


  //动作命令1
  CM_TURN       =4001; //转身(方向改变)
  CM_WALK       =4002; //走
  CM_SITDOWN    =4003; //挖
  CM_RUN        =4004; //跑
  CM_HIT        =4005; //普通物理近身攻击
  CM_POWERHIT   =4008; //攻杀
  CM_LONGHIT    =4009; //刺杀
  CM_WIDEHIT    =4010; //半月
  CM_HEAVYHIT   =4011; //烈火攻击
  CM_BIGHIT     =4012; //??
  CM_THROW      =4013; //抛符
  CM_FIREHIT    =4014; //??
  CM_SPELL      =4015; //施魔法

  CM_CLICKNPC   =3015; //用户点击了某个NPC进行交互

  //动作命令2
  CM_OPENDOOR   =2001; //开门,人物走到地图的某个过门点时
  CM_DROPITEM =2010; //从包裹里扔出物品到地图,此时人物如果在安全区可能会提示安全区不允许扔东西
  CM_PICKUP =2011; //捡东西
  CM_TAKEONITEM =2021; //装配装备到身上的装备位置
  CM_TAKEOFFITEM = 2022; //从身上某个装备位置取下某个装备
  CM_EAT =2023; //吃药
  CM_BUTCH =2024; //54的野蛮?

  //与商店NPC交易相关

  CM_MERCHANTDLGSELECT =2030; //商品选择,大类
  CM_MERCHANTQUERYSELLPRICE =2031; //返回价格,标准价格,我们知道商店用户卖入的有些东西掉持久或有特殊
  //属性系统会自动加价
  CM_MERCHANTQUERYREPAIRCOST =2032; //客户端向NPC取得修理费用

  CM_USERSELLITEM =2040; //用户卖东西
  CM_USERREPAIRITEM =2041; //用户修理东西
  CM_USERSTORAGEITEM =2042; //用户寄存东西
  CM_USERGETDETAILITEM =2043; //取得商品清单,比如点击"蛇眼戒指"大类,会出现一列蛇眼戒指供你选择
  CM_USERBUYITEM =2044; //用户买入东西
  CM_USERTAKEBACKSTORAGEITEM =2045; //用户向保管员取回东西
  CM_USERMAKEDRUGITEM =2046; //用户制造毒药(其它物品)
  CM_DROPGOLD =2050; //用户放下金钱到地上

  CM_DEALTRY =2060; //开始交易,交易开始
  CM_DEALCANCEL =2061; //取消交易
  CM_DEALADDITEM =2062; //加东东到交易物品栏上
  CM_DEALDELITEM =2063; //从交易物品栏上撤回东东???好像不允许哦
  CM_DEALCHGGOLD =2064; //本来交易栏上金钱为0,,如有金钱交易,交易双方都会有这个消息
  CM_DEALEND =2069; //交易成功,完成交易

  CM_GUILDHOME =2070; //点击"行会主页"
  CM_GUILDMEMBERLIST =2071; //点击"成员列表"
  CM_GUILDADDMEMBER =2072; //增加成员
  CM_GUILDDELMEMBER =2073; //踢人出行会
  CM_GUILDUPDATENOTICE =2074; //修改行会公告
  CM_GUILDUPDATERANKINFO =2075; //更新联盟信息(取消或建立联盟)

  //装备项目
  U_WEAPON      =0;    //武器
  U_RIGHTHAND   =1;    //右手
  U_DRESS       =2;    //衣服
  U_HELMET      =3;    //头盔
  U_NECKLACE    =4;    //项链
  U_ARMRINGR    =5;    //右手戒指
  U_ARMRINGL    =6;    //左手戒指
  U_RINGR       =7;    //右戒指
  U_RINGL       =8;    //左戒指

########################################################

//登录、新帐号、新角色、查询角色等
  SM_NEWID_SUCCESS =101; //创建新账号成功
  SM_NEWID_FAIL =102; //..失败
  SM_PASSWD_FAIL =103; //验证失败,"服务器验证失败,需要重新登录"??
  SM_NEEDUPDATE_ACCOUNT =104; //需要更新,注册后的ID会发生什么变化?
  //私服中的普通ID经过充值??或者由普通ID变为会员ID,GM?
  SM_UPDATEID_SUCCESS =105; //更新成功
  SM_UPDATEID_FAIL =106; //更新失败
  SM_PASSOK_SELECTSERVER = 107; //密码验证完成且密码正确,开始选服
  SM_SELECTSERVER_OK =109; //选服成功
  SM_QUERYCHR =111; //返回角色信息到客户端
  SM_QUERYCHR_FAIL =112; //返回角色信息到客户端失败
  SM_NEWCHR_SUCCESS  =113; //新建角色成功
  SM_NEWCHR_FAIL =114; //..失败
  SM_CHGPASSWD_SUCCESS =115; //修改密码成功
  SM_CHGPASSWD_FAIL =116; //..失败
  SM_DELCHR_SUCCESS =117; //删除角色成功
  SM_DELCHR_FAIL =118; //..失败
  SM_STARTPLAY=119; //开始进入游戏世界(点了健康游戏忠告后进入游戏画面)
  SM_STARTFAIL =120; //开始失败,玩传奇深有体会,有时选择角色,点健康游戏忠告后黑屏
  SM_VERSION_FAIL =121; //客户端版本验证失败
  SM_OUTOFCONNECTION =122; //超过最大连接数,强迫用户下线
  SM_RECONNECT =125; //与服务器重连
  SM_SENDNOTICE =202; //发送健康游戏忠告

  SM_MYSTATUS =131; //我的状态,最近一次下线状态,如是否被毒,挂了就强制回城
  SM_TIMECHECK_MSG = 227; //时钟检测,以免客户端作弊

  SM_CHANGEMAP   =201; //地图改变,进入新地图
  SM_AREASTATE = 228; //周围状态
  SM_NEWMAP =223; //新地图??
  SM_MAPDESCRIPTION = 229; //地图描述,行会战地图?攻城区域?安全区域?
  SM_LOGON =224; //logon

  SM_CHANGELIGHT =240; //负重改变
  SM_LAMPCHANGEDURA=241; //蜡烛持久改变
  SM_LIGHTING =242; //免蜡开关

  SM_OPENDOOR_OK=249; //通过过门点成功
  SM_OPENDOOR_LOCK=250; //发现过门口是封锁的,以前盛大秘密通道去赤月的门要5分钟开一次
  SM_CLOSEDOOR =251; //用户过门,门自行关闭

  SM_DEATH=260; //正常死亡
  SM_NOWDEATH =261; //秒杀?
  SM_SKELETON=262; //尸体
  SM_ALIVE =263; //复活??复活戒指
  SM_ABILITY =264; //打开属性对话框,F11
  SM_SUBABILITY=265; //打开输助属性对话框
  SM_DAYCHANGING=266; //传奇界面右下角的太阳星星月亮
  SM_WINEXP =267; //获得经验
  SM_LEVELUP =268; //升级,左上角出现墨绿的升级字样
  SM_HEALTHSPELLCHANGED =269; //治愈术使你的体力增加
  SM_ADJUST_BONUS =280;

  SM_STRUCK =310; //受攻击
  SM_CHANGEFACE=311; //变脸,发型改变?
  SM_OPENHEALTH=312; //
  SM_CLOSEHEALTH =313; //
  SM_INSTANCEHEALGUAGE=314; //实时治愈
  SM_BREAKWEAPON=315; //武器破碎

  //对话消息
  SM_CRY=316; //喊话
  SM_GROUPMESSAGE =347; //组内聊天!!
  SM_GUILDMESSAGE =348; //行会聊天!~
  SM_WHISPER=349; //私聊
  SM_HEAR=351; //有人回你的话
  SM_SYSMESSAGE=390; //系统消息,盛大一般红字,私服蓝字

  SM_USERNAME =352; //
  SM_CHANGENAMECOLOR=353; //名字颜色改变,白名,灰名,红名,黄名



#########################################################


mir2res究竟有没有使用到delphiX控件??? 其实mir2源程序仅仅用了delphix的DDraw接口而已
下面详细说一下
因为Dx不是Delphi本地的,所以在delphi中运用dx要对dx进行delphi本地的翻译
即C to pas
如一些变量,结构接口等的声明等,这个工作JEDI和delphix都完成了
JEDI内的directdraw.pas只是完成对ddraw.dll的调用工作,在此文件中你看不到详尽的绘图函数,现成的函数全在ddraw.dll中
而如果你查看delphix的dxdraw.pas(好像是这个文件名吧?)中的源程序,你就可以看到它的绘图函数,其实Delphix是与ddraw.dll独立的游戏开发引擎,绘图引擎,而mir2
仅仅采用了其dxdraws.pas中的某些绘图函数,因为mir2源程序仅仅需要用到这些delphix中的这些函数,阅读mir2的源程序都知道,像delphix中的精灵类等在mir2中是没有被采用的,一个例子就是wil文件都是改装了原delphix中的图像资源打包类文件而来的  


2005-11-17 5:28:13    传奇为什么会很卡??掉线时这种效果最明显
人物起跑“走一动,卡一步”
那是因为传奇这种网络游戏的客户端和服务端是基于消息通讯的
Grobal2.pas,,,客户端和服务端通用的文件,定义了一些消息标识,数据结构,消息操作函数
当网卡或掉线时
人物起跑,,走动都在客户端和服务端存在着基于消息标识的交互
客户端不能及时向服务器发送消息或得不到服务器的反馈消息就会卡
(服务器当然不会卡:))

##########################################################

unit HerbActor; //herb:不能移动的怪物??   

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Grobal2, DxDraws, CliUtil, magiceff, Actor, WIl;


const
   BEEQUEENBASE = 600; //角蝇?
   DOORDEATHEFFECTBASE = 120; //door death effect base沙皇宫门还是城门?
   WALLLEFTBROKENEFFECTBASE = 224; //wall left broken effect base 看来是城门
   WALLRIGHTBROKENEFFECTBASE = 240; //。。

type
   TDoorState = (dsOpen, dsClose, dsBroken);

   TKillingHerb = class (TActor)
   private
   public
      constructor Create; override;
      destructor Destroy; override;
      procedure CalcActorFrame; override;
      function  GetDefaultFrame (wmode: Boolean): integer; override;
   end;

   TBeeQueen = class (TActor)
   private
   public
      procedure CalcActorFrame; override;
      function  GetDefaultFrame (wmode: Boolean): integer; override;
   end;

   TCentipedeKingMon = class (TKillingHerb) //蜈蚣王???触龙神??
   public
      procedure CalcActorFrame; override;
   end;

   TCastleDoor = class (TActor) //很明显是城门
   private
      EffectSurface: TDirectDrawSurface;
      ax, ay: integer;
      oldunitx, oldunity: integer;
      procedure ApplyDoorState (dstate: TDoorState);
   public
      BoDoorOpen: Boolean; //Bo,,be on,,是否处于什么什么的状态
      constructor Create; override;
      procedure CalcActorFrame; override;
      procedure  LoadSurface; override;
      function  GetDefaultFrame (wmode: Boolean): integer; override;
      procedure  ActionEnded; override;
      procedure  Run; override;
      procedure  DrawChr (dsurface: TDirectDrawSurface; dx, dy: integer; blend: Boolean); override;
   end;

   TWallStructure = class (TActor)
   private
      EffectSurface: TDirectDrawSurface;
      BrokenSurface: TDirectDrawSurface;
      ax, ay, bx, by: integer;
      deathframe: integer;
      bomarkpos: Boolean;  //给啊霸 阜绊 乐绰瘤
   public
      constructor Create; override;
      procedure CalcActorFrame; override;
      procedure  LoadSurface; override;
      function  GetDefaultFrame (wmode: Boolean): integer; override;
      procedure  DrawChr (dsurface: TDirectDrawSurface; dx, dy: integer; blend: Boolean); override;
      procedure  Run; override;
   end;


implementation

uses
   ClMain;


相关帖子

扫码关注微信公众号,及时获取最新资源信息!下载附件优惠VIP会员5折;永久VIP免费
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

免责声明:
1、本站提供的所有资源仅供参考学习使用,版权归原著所有,禁止下载本站资源参与商业和非法行为,请在24小时之内自行删除!
2、本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,请勿任何商业目的与商业用途。
3、若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
4、论坛的所有内容都不保证其准确性,完整性,有效性,由于源码具有复制性,一经售出,概不退换。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
5、用户使用本网站必须遵守适用的法律法规,对于用户违法使用本站非法运营而引起的一切责任,由用户自行承担
6、本站所有资源来自互联网转载,版权归原著所有,用户访问和使用本站的条件是必须接受本站“免责声明”,如果不遵守,请勿访问或使用本网站
7、本站使用者因为违反本声明的规定而触犯中华人民共和国法律的,一切后果自己负责,本站不承担任何责任。
8、凡以任何方式登陆本网站或直接、间接使用本网站资料者,视为自愿接受本网站声明的约束。
9、本站以《2013 中华人民共和国计算机软件保护条例》第二章 “软件著作权” 第十七条为原则:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。若有学员需要商用本站资源,请务必联系版权方购买正版授权!
10、本网站如无意中侵犯了某个企业或个人的知识产权,请来信【站长信箱312337667@qq.com】告之,本站将立即删除。
郑重声明:
本站所有资源仅供用户本地电脑学习源代码的内含设计思想和原理,禁止任何其他用途!
本站所有资源、教程来自互联网转载,仅供学习交流,不得商业运营资源,不确保资源完整性,图片和资源仅供参考,不提供任何技术服务。
本站资源仅供本地编辑研究学习参考,禁止未经资源商正版授权参与任何商业行为,违法行为!如需商业请购买各资源商正版授权
本站仅收集资源,提供用户自学研究使用,本站不存在私自接受协助用户架设游戏或资源,非法运营资源行为。
 
在线客服
点击这里给我发消息 点击这里给我发消息 点击这里给我发消息
售前咨询热线
312337667

微信扫一扫,私享最新原创实用干货

QQ|免责声明|依星源码资源网 ( 鲁ICP备2021043233号-3 )|网站地图

GMT+8, 2024-6-24 20:32

Powered by Net188.com X3.4

邮箱:312337667@qq.com 客服QQ:312337667(工作时间:9:00~21:00)

快速回复 返回顶部 返回列表