MMORPG 在线游戏源码分析
楠楠 E m ail: wu_yanan2003@yahoo.com.cn QQ:11718111 第 - 2 - 页
1
传奇服务器技术
简述 :
最近对高性能的服务器比较感兴趣,读过了 DELPHI 的 Socker 源码 WebService 及
RemObject 之后,高性能的服务器感兴趣。
你可能需要的以下知识才能更好的读懂一个商业源码:
1).SOCKET 的 I/O 模型熟悉掌握。
2). 面向对象技术的熟悉掌握。
3).Socket 的 API 掌握。
4). 多线程技术等。
5). 一门熟悉的开发工具掌握 , 和多种语言的源码阅读能力。
我下的源码 LegendOfMir2_Server :共包含 AdminCmd, DBSrv, GameGate,
GameSvr,LoginGate, LoginSvr, SelGate 七个工程文件。 传奇的客户端源代码有两个工程
,
WindHorn 和 Mir2Ex 。
MMORPG 在线游戏源码分析
楠楠 E m ail: wu_yanan2003@yahoo.com.cn QQ:11718111 第 - 3 - 页
1
Mir2Ex 客户端
DirectX 类库分析 ( WindHorn ) :
1. RegHandler.cpp 注册表访问 ( 读写 ) 。
2. CWHApp 派生 CWHWindow , CWHWindow 完成窗口的注册和创建。 CWHWindow 派生出
CWHDXGraphicWindow,CWHDXGraphicWindow 调用 CWHWindow 完成创建窗口功能,然后再
调用 CreateDXG() 来初始化 DirectX 。
3. WHDefProcess. cpp 在构造函数中获得 CWHDXGraphicWindow 句柄。
Clear 函数中调用 在后台缓存上进行绘图操作 , 换页至屏幕 。
ShowStatus 函数 , 显示状态信息。
DefMainWndProc 函数,调用 CWHDXGraphicWindow->MainWndProcDXG 消息处理。
4. WHImage.cpp 图象处理。加载位图,位图转换。优化处理。
5. WHSurface.cpp 主页面处理。
6. WHWilTexture.cpp 材质渲染。
WILTextureContainer
:
WIL 容器类。 m_pNext 指向下一个 WILTextureContainer
,单
链
表。
7. WHWilImage.cpp 从 Data 目录中加载 Wix
文件(内存映射) 。
8. WHDXGraphic.cpp 处理 DirectX 效果。
传奇文件类型格式探讨 ( 一 ) :
Wix 文件:索引文件,根据索引查找到相应数据地址 ( 数据文件 ) 。
// WIX 文件头格式
typedef struct tagWIXFILEIMAGEINFO
{
CHAR szTmp[40]; // 库文件标题 'WEMADE Entertainment inc.' WIL 文件头
INT nIndexCount; // 图片数量
INT* pnPosition; // 位置
}WIXIMAGEINFO, *LPWIXIMAGEINFO;
我们下载一个 H e dit 编辑器打开一个 Wil 文件,分析一下。我们发现 Wix 文件中, 0x23 地
址 ( 含该地址 ) 以前的内容是都相同的,即为: #INDX v1.0-WEMADE Entertainment inc.
MMORPG 在线游戏源码分析
楠楠 E m ail: wu_yanan2003@yahoo.com.cn QQ:11718111 第 - 4 - 页
1
Ofs44 0x2C 的地方: 存放着 0B 00 00 00
, 高低位转换后为:
0xB 转换十进制数为 11( 图
片数量 )Ofs48 0x30 的地方:存放着 38 04 00 00 ,高低位转换后为: 0x438 = 1080, 这个
就是图象数据的开始位置。
我们用 Wil 编辑打开对应的 Wil
文件, 发现, 果然有
11
张图片。 另外我们发现, 在
O fs =
44 -47 之间的数据总是 38 04 00 00 ,终于明白,所有的图片起始位置是相同的。
Wil 文件 : 数据文件。
前面我们说了图象数据的开始位置为 0x438 = 1080, 1080 中有 文件开头的 44 字节都是相 同
的。所以,就是说有另外的 1036 字节是另有用途。 1036 中有 1024 是一个 256 色的调色板
。
而 Wil 里面的图片格式都是 256 色的位图储存。
我们看到图片位置数据为: 20 03 58 02 , 转化为十六进制: 0x320, 0x258 刚好就是
800*600 大小的图片。 07 00 D4 FF 为固定值 ( 标识 ) 。图片起始位置为:
Ofs 1088: 0x440 图片大小为 480000