平民程序 - linghuye's blog

天下风云出我辈,一入江湖岁月催。皇图霸业谈笑中,不胜人生一场醉。提剑跨骑挥鬼雨,白骨如山鸟惊飞。尘事如潮人如水,只笑江湖几人回。

随笔 - 221, 文章 - 0, 评论 - 680, 引用 - 0
数据加载中……

MaNGOS工程概介

MaNGOS是WoW的模拟服务器端工程,架设在sourceforge上,使用C++,开放源码,代码写的很清楚,架构清晰,质量很高.我看重的,是其对3D游戏服务端编程的通用流程和问题的处理手法和经验.研究消息包结构,一般就能推断WoW采取哪种逻辑方案来解决一些棘手的通用问题,而服务端编程质量在很大程度上取决于程序员的经验.
由于采用大量优雅的模板技法,MaNGOS的编译速度很成问题,调试变得有点困难.

C++的编译速度确实是一个很大的问题,编译速度缓慢直接导致了修改代码再调试的这个频繁的开发行为变得难以忍受,开发效率大大降低.
C++模板是很优秀的技术,但是因为其难以忍受的编译速度,有时也就不敢大规模应用了,只在些小地方耍耍小聪明.连那个常用的Singleton模板我也是不敢用的,编译的太慢了,还是手写的Instance方法比较快.
 
本来是希望CPU速度上去后,编译速度的问题自然就会解决,但事实上从VC6->VC2003->VC2005,一个比一个编译地慢,CPU全让M$自己给用光了.

我现在以为使用Lua,Python等脚本技术可以解决C++的编译速度导致的开发问题,把易变的逻辑全转到脚本去,脚本的编译是最快的了.

我的机器比较老,用的1.6G的P4,完全编译MaNGOS要花7-10分钟,game模块特别地慢,一改动关键的头文件就要重新全部编译.我又喜欢在写程序同时看下载的电影,编译地就更慢了.调试时又要开wow客户端,:(.

不知道使用Stdafx预编译后速度会不会快一些.至少每个cpp的Include段要整理一下,把比较稳定的头文件放到最前,有利于预编译,Common.h里的EXPECTED_MANGOS_CLIENT_BUILD经常变动,还是挪出来比较好.

自己最近几天,改了些东西:
0.修改主工程配置,去除zlib和zthread两个dep工程,这样载入工程会快一些.
1.因为很讨厌事先要导出Ddc和Maps数据,所以修改了MaNGOS让其直接去读MPQ文件里的dbc和maps.
2.DOTCONFDocument不支持多字节配置字符串,我用"D:\魔兽世界\Data"这个目录,isspace函数assert报警,改成_istspace解决.
3.整合网上的MaNGOS的2446 TBC版本,做了个_TBC_BUILD_预定义编译分支,意图同时支持当前和TBC版本,TBC升到2046后,CMSG_AUTH_SESSION验证算法失败,然后厌倦了MaNGOS的编译,等我机器升级了再继续.

posted on 2006-10-29 16:46 linghuye 阅读(17631) 评论(25)  编辑 收藏 引用 所属分类: 3D图形学研究

评论

# re: MaNGOS工程概介  回复  更多评论   

编译速度是c++的通病,通常的修改1个cpp文件要编译大量的代码,尤其修改头文件,几乎要重编译所有模块,貌似C#并没这个问题,之前修改编译过runwow(wowwow)的代码,编译速度是c++的几个数量级。
2006-10-29 20:59 | vendy

# re: MaNGOS工程概介  回复  更多评论   

一边看电影 一边等老牛拉车 同感 :P
2006-10-30 20:53 | ff

# re: MaNGOS工程概介  回复  更多评论   

感谢这些个开源的家伙,国内游戏行业又可以进步几年了。。。。。
2006-11-06 12:19 | wjk

# re: MaNGOS工程概介  回复  更多评论   

MaNGOS是一个不错的模拟器,比WoWemu那些更有前途。
2006-11-06 13:01 | xlandhenry

# re: MaNGOS工程概介  回复  更多评论   

不知阁下可否提供修改的几项东西的方法呢?
2006-11-07 01:24 | 林碧

# re: MaNGOS工程概介  回复  更多评论   

这个是修改的版本
http://linghuye.googlepages.com/Modified-MaNGOS.7z
2006-11-07 09:06 | linghuye

# re: MaNGOS工程概介  回复  更多评论   

谢谢阁下慷慨提供
2006-11-08 01:02 | 林碧

# re: MaNGOS工程概介  回复  更多评论   

http://linghuye.googlepages.com/Modified-MaNGOS.7z
怎么下载不了?
2006-11-13 09:28 | kkok

# re: MaNGOS工程概介  回复  更多评论   

多谢分享.
2006-12-09 22:54 | wowfans

# re: MaNGOS工程概介  回复  更多评论   

使用IncrediBuild可以实现多台机器同时编译,很好用
2006-12-11 14:29 | theJean

# re: MaNGOS工程概介  回复  更多评论   

在公司用确实很快,可惜家里只有两台老弱残机.:(
2006-12-11 18:21 | linghuye

# re: MaNGOS工程概介  回复  更多评论   

請問 linghuye, 哪兒有 MaNGOS TBC patch (or branch) 的源碼呢?

外面看到的大都是現成的 binary.
2006-12-30 18:17 | Miyu

# re: MaNGOS工程概介  回复  更多评论   

http://www.emupedia.com/forums/index.php
2006-12-30 21:51 | linghuye

# re: MaNGOS工程概介  回复  更多评论   

Thanks. 不過現在停止註冊了.
2007-01-01 01:08 | Miyu

# re: MaNGOS工程概介  回复  更多评论   

楼梯自动攀登一般使用什么方法的?想不出什么好办法这个应该属于碰撞后反应的算法把
2007-03-17 17:22 | fish

# re: MaNGOS工程概介  回复  更多评论   

https://svn.sourceforge.net/svnroot/mangos/trunk 这里有Mangos源代码,最新版本 3884
SVN 3463及以后的版本开始支持TBC.
2007-06-19 01:44 | RoyinSword

# re: MaNGOS工程概介  回复  更多评论   

至于编译速度吗.我用 Visual Studio 2005 在P3 3.6G (HT)
2G DDR2 双通道, 1.5K SCSI 服务器硬盘上全新编译花了差不多3分钟. 倒是奇怪,启动VS2005只花了6秒钟左右. 打开Mangos方案花了8秒左右.不知道MS的工具在做什么.
2007-06-19 01:50 | RoyinSword

# re: MaNGOS工程概介  回复  更多评论   

P3 3.6G -_-!! 应该是P4
...
2007-06-19 01:52 | RoyinSword

# re: MaNGOS工程概介[未登录]  回复  更多评论   

https://svn.sourceforge.net/svnroot/mangos/trunk
为什么连不上
2007-08-15 12:06 | neo

# re: MaNGOS工程概介  回复  更多评论   

https://mangos.svn.sourceforge.net/svnroot/mangos/trunk/
2007-09-01 12:38 | RoyinSword

# re: MaNGOS工程概介  回复  更多评论   

有人试过将MaNGOS的VC7或VC8工程转换成支持Unicode的工程吗?
源代码不支持中文,如果简单地把源文件转换成UTF8或其它Unicode编码后,源代码中的中文在客户端中将无法显示或字符串被截断了。比如源代码中一个字符串本来是“铁炉堡银行” ,在客户端中可能只是显示 “铁炉堡银”
还有一个问题,如果将CPP或H文件编码格式改成UTF8,将要汉化的文字串汉化成中文后再转换成ANSI编码之后再编译,那么在客户端中可以看到中文,但是有字符被截掉的现象,如果直接以UTF8编码的源文件编码再编译,很多包含字符串的语句被警告或是出现错误,而且客户端无法显示中文信息(服务器端输出的信息),网上有人说解决办法是在字符串前后各加一个空格 ,我试过,这种办法基本上无效,特别是在长字符串。

我试过在VS2005PRO中新建一个默认为Unicode语言的工程,然后手动地一个个将源码添加到工程中,再将源码中的英文字符串汉化成中文,编译通过。而且似乎没有了上面的那种字符被截断的情况,也没有错误或警告了。可是最后生成 的文件一运行后总是在加载Script系统时就自动退出。。Realmd运行正常,只是Mangosd.exe运行有问题,不知是何原因。

希望高人指点一下。谢谢了!
2007-09-01 12:55 | RoyinSword

# re: MaNGOS工程概介  回复  更多评论   

楼上说的,我没有听明白。不过字符串应该使用UTF8编码,你使用UNICODE工程可以很好地解决这个问题吗?
2007-10-28 15:43 | Feng

# re: MaNGOS工程概介  回复  更多评论   

可能是编译平台造成的.
在linux平台下编译正常.客户端显示正常.

在Visual Studio 2003-2008 任意平台下编译死活都不正常.输出到客户端显示的中文要么完全没显示,要么字符有丢失的情况.
2007-11-14 11:18 | Royinsword

# re: MaNGOS工程概介  回复  更多评论   

1.因为很讨厌事先要导出Ddc和Maps数据,所以修改了MaNGOS让其直接去读MPQ文件里的dbc和maps.

这部份代码能开源吗?
2008-11-01 15:02 | huanter

# EGS网络游戏服务器引擎  回复  更多评论   

只需写游戏逻辑,快速开发高效稳定的游戏服务器
EGS游戏服务器引擎(含框架源码和开发指南)
EGS,针对中小游戏公司开发的优秀游戏服务器引擎。中小游戏公司通常会由于时间、资金、技术、人力等众多限制而不愿承担长期开发的风险。EGS解决了这些问题,它使游戏开发项目避免了未知、昂贵和耗时的软件研发风险,从而使授权客户专注于游戏制作这一核心事务。
EGS包含了网络模块、数据库模块等众多丰富实用的功能与组件,且已具备基础游戏逻辑。经过长时间的测试与实际使用,它的稳定、高效以及实用性,完全能够满足当今网络游戏的需求,完全可以作为快速开发高效可靠游戏服务器的基础。

官网下载地址 http://121.14.144.230:8080/b2b/product.htm 或 www.j800.net
2009-11-26 15:02 | red
只有注册用户登录后才能发表评论。