天龙八部源码描述

摘要:
《天龙八部》的源代码很可能在《天龙九部》的代码流出后被重写,因为我们可以在代码中找到一些证据。整个客户端分为:编辑和客户端。它使用OGRE+cegui+自写简单物理冲突检测+FMOD+自写网络库。有许多资源加载技术,其中ResourceProvider资源提供程序系统在内部使用Ogre的资源组管理器进行统一的管理判断。

天龙八部(武侠世界)的源码很可能是天龙八部代码流出后改写的,因为在看了代码中可以找到一些证据,整个客户端分为:一个是编辑器,一个是客户端,采用OGRE+cegui+自写的简单的物理碰撞检测+FMOD+自写的网络库。
服务器端代码目前没仔细关注
客户端总体的描述如下:
UI系统 CEGUI UI基础系统

CEGUI渲染器

Expat XML解析器 CEGUI依赖,估计编写者不喜欢用
FreeType2 跨平台、开源的字体渲染器 用于绘制中文
脚本 luaPlus

3D显示引擎Ogre开源的高效渲染引擎 最新的OGRE是1.7.2
碰撞检测 Opcode 开源,占用内存少 其他可考虑使用bullet,ODE或者其他(一般根据实际需求选择)
天龙的碰撞检测似乎是只做了简单的碰撞盒检测
TinyXML XML的解析工具 游戏中使用的XML解析器,其实目前可以用RapidXML更加小巧

Music&Sound Effect FMOD SDK即可 ,其实OPENAL也是不错的选择。

WX系统
WXClient Action操作管理 包括聊天,物品,生活技能等 暂时看到,所有实际上都是针对图标的操作
Cursor 鼠标指针管理(还挂接了很多命令)
DataBase 客户端用内存数据库,实现了了WXEngine中的DB定义 包括搜索,获得,打开文件功能TLBB_DBC,可以证实虽然叫武侠,但是留下了天龙的影子
DataPool 将游戏中数据都统一管理,包括UI,TeamOrGroup等 这里面有个CModelShowInUI的类,(奇怪,这个类不应该放在这里吧?)
Event 游戏事件处理器,分为Event队列,和慢处理Event队列 很值得参考的部分!!!使用了注册Event处理函数的方式,参数很灵活!

FakeObject 用于在ui上显示的物体(这里作为一个管理器类)
Helper 用luaPlus导出,另外建一个帮助系统窗口
Input 输入类
Interface 整个游戏的外部接口控制类,所有外部模块需要通过这个接口来控制游戏的数据和控制,作为脚本调用类型
NetWork 网络消息的处理
Object 逻辑基类Object与显示无关,当然派生出可以显示的类型!以及游戏中具体对象类型
Procedure 游戏流程,登陆,角色选择,角色创建,进入场景等待,MMO游戏主流程,登陆服务器

ResourceFiles 各种鼠标.cur文件
Script 脚本系统管理器,继承于Engine的ScriptEnvironment,调用脚本
Sound
Soure File _tWinMain在这里 2
Variable 配置参数系统

World 场景区域Zone,Scene,World管理器,寻路等等功能,一个ZONE的大小正好是一个屏幕的大小,ZONE构成Scene
WXCore
Collision 碰撞检测,主要包裹了ogre的骨骼模型处理方法
EffectSystem 特效系统
Extra附加 ModelType 模型定义

SkeletonMesh (怀疑被废弃)Dobject_NT包裹了Ogre::Entity,可挂接相关特效,SceneNode上
SkeletonMeshUrl 作为存储格式,存储Dobject_NT
LogicModel 渲染层和客户端的结合层,利用渲染层,实现客户端对场景中动态物体的需求,而不需调用渲染层代码
OgreExt 对于Ogre的扩展,渲染
PostFilters 3D画面效果,后期过滤器

ResourceSystem Ogre的文件系统,用于读取和整体加载文件系统
Header Files&&Source Files 可渲染对象层BasicRenderable及其子类

Terrain 实现及其管理编辑,优化
WX::Object 继承了boost::enable_shared_from_this

XercescParser 在这里又发现了另外一个XML的解析库
WX::AcrotObj,WX::ActorObject,WX::LogicModelObject 都要仔细阅读弄清原理
Scene 基类,管理,序列化,编辑等方法
WXEngine Cursor
DataBase

Debuger 调试用的?但是一直没有看出来具体在哪里使用,难道是给脚本?
Exception 里面包括Xzip的压缩目录……,当然也包括抛出异常定义,及CrashReport FakeObject,Gfx,Helper,Input
Math,Profile,Script,Sound

Time,UI,Util,Variable 各种功能的虚类,当然也有具体实现了的类。等待继续整理分析 2
Kernel TDKernel通过全部继承于TDNode(及针对相应TDNode的TDClass)管理类注册及插件信息 CEGUISystem以及WXRender都是通过Plugin的方式加入Kernel(待验证)
TDNode为了Kernel便于组织数据,而定下的核心节点类,类似树
TDClass节点定义类,根据类名取定义类的名字,类似MFC建立了自己的类链 重要的是几个类定义实现宏自动把tClass给赋值初始化了。还顺便实现了CreateObject函数
Game Action
DataPool

Event 2
Interface

Object
World

WXNetPackets Combat 阵营数据结构表,技能及效果数据表记录结构,数据表通用管理读入器 有模板数据管理器
DataBase TLBB_DBC.h 定义服务器客户端通用的DBC数据库文件类
Common 整个游戏的公用Common定义,GameStruct

GameUtil 方便函数,CRC校验,Lock,二进制转化为字符串DB等东西
随机函数,Type,脚本命令结构,技能数据管理,playerStatus 2

重要的PacketDefine
Header Files&&Source Files 基本都是对CommonNet中Packet的具体情况使用实现Packet->Execute PacketDefine的实现
WXRender Camera 3种摄像机
Object RFObject基于WXEngine中渲染层物体基类tEntityNode的实现
RFObj继承于RFObject用于WX::Object对象的包裹,自己指针放在WX::Object的Data中
RFObj_Actor,RFObj_Model,RFObj_Static,都继承于RFObj人物,动态模型,静态模型 2
RFObj_Actor原来设计应该会用到SkeletonMesh.h中的Dobject_NT,但实际上没有产生关联,WXLogicModel被说明是用来替换原来的Dobject 2
Header Files&&Source Files DebugPanel 包括调试信息以及HitObjectPanel(打击信息?)
RenderSystem 整合环境对象,后期渲染过滤管理,及核心System。载入资源技巧有不少在其中
ResourceProvider 资源提供系统,内部使用Ogre的资源组管理器,进行统一的管理判断。 ResourceLoadListener 用于找到分析脚本时的详细错误,里面是ScriptParsingListener : public Orge::ResourceLoadListener真够强大的…… ,
RFFakeObjectManager 用于UI显示的模型在渲染层的管理器
TerrainGrid 地形格可渲染对象
WXObj_ProjTex WXObj投射纹理,包括选择环,阴影斑点,脚印

免责声明:文章转载自《天龙八部源码描述》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇delphi之多线程编程(一)Android中的GraphicBuffer同步机制-Fence下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

bat批处理常用脚本

windows下有很多场景需要编写批处理来解决问题,跟定时任务相结合使用更佳。 1.创建文件,md,mkdir都可以进行文件创建 set AwrPath=D:OracleTabChk if not exist %AwrPath% (md %AwrPath%) 2.创建一个txt,因为批处理没有直接命令创建文件文件的命令,所以可以直接出书一个txt set...

Linux、UNIX设置开机自动运行命令、脚本配置

一般我们不建议人工部署开机自动启动的脚本。而是建议通过crontab 部署脚本监控,理由如下: 1.自动开机部署脚本不好定位问题,有可能导致主机重启过慢。 2.自动开机部署脚本不好定位问题,有可能导致主机无法打开对应的服务。无法telnet 主机  详细描述如下:issue 2 http://www.cnblogs.com/feiyun8616/p/788...

Innocent Grey和Noesis社GalGame工具

以前发在澄空的帖子,备份到自己博客里 主要支持的游戏为 Innocent Grey社 和Noesis社 的作品。 igtool.exe 用于 游戏资源拆包与封包 支持游戏列表: Innocent GreyCaucasus: Nanatsuki no Nie(クロウカシス - 七憑キノ贄) PP pianissimo(PP-ピアニッシモ- 操リ人形ノ輪舞)...

WebView2简单试用(二)—— 基本操作

前文中简单的介绍了下如何使用WebView2控件,本文这里介绍下它的常用操作: 页面跳转: 页面跳转可以通过webview的接口来实现:     webView.Source = new Uri("http://www.baidu.com");    webView.NavigateToString("<h1>hello world</h...

HTML一片空白, 无法渲染: Empty tag doesn't work in some browsers

html 文件直接引入一个script, 如下 <html> <head> <script type="application/javascript" src="ajax/jquery-1.10.2.min.js"/> </head> 结果导致了 对应的页面在浏览器显示不了,一片空白, F12...

zabbix 安装(离线源码安装)

1、LAMP 环境搭建   1.1 、安装 apache   安装 pcre tar -zxvf pcre-8.41.tar.gz cd pcre-8.41 ./configure --prefix=/home/pcre make make install 安装 apr tar -zxvf apr-1.6.5.tar.gz cd apr-1.6.5 ....