发新话题
打印

(暗黑私服)架设说明资料 --zt

(暗黑私服)架设说明资料 --zt

构架方法


I. 需求
软件需求:
bnetd, d2cs, d2dbs和d2gs
diablo2以及diablo2扩展版

系统需求:
bnetd, d2cs, d2dbs可以运行在*nix和win32系统下.
(推荐使用linux系统)

d2gs必须在win32系统下运行.
(推荐使用win2k或者winXP)

硬件需求:
具体依据服务器的在线用户量而定,
bnetd, d2cs and d2dbs对资源的需求很小.

说明:
*nix系统表示linux, unix, sun, BSD等系统
win32系统表示win9x/me/NT/2k/XP


II. 获取相关软件
  bnetd, d2cs和d2dbs都属于bnetd项目,都是按照GPL许可以完整源代码
形式进行发布,bnetd项目的主页http://www.bnetd.org ;最新版本的
源代码可以http://www.sourceforge.net/projects/bnetd找到.

  目前,bnetd项目因为版权问题正受到blizzard的控告,所以在其主页和
sourceforge上的所有相关文件都已经去掉了下载连接,但网上仍然可以
找到很多相关的镜像进行下载(比http://ugoth.net/bnetd/. ;同时,
你仍然可以通过sourceforge的CVS服务获取当前最新的代码,
(CVS访问的详细资料请参http://sourceforge.net/cvs/?group_id=6933

  d2gs属于d2close项目, 目前发布的都是已经编译好了的可执行文件版本,
最新的发布版本可以在其主http://d2dev.dhs.org上获得。

说明和建议:
1. bnetd, d2cs 和 d2dbs都是按照源代码的方法进行发布的,这些
源代码大多是以linux系统为基础进行设计的,你将需要有一定的
编程经验如果你想在其他系统特别是win32下编译源代码。

2. 如果你想在win32下建立服务器,推荐使用bnetw,bnetw是bnetd
的win32移植版本,并且增加了图形用户界面,bnetw可以在
http://ugoth.net/bnetd/上找到 同时,因为它是以可执行代码
的形式进行的发布,所以你将不需要自己进行源代码的编译。

3. 如果你只是想建立一个临时性质的服务器或者作为测试使用,
则你可以在win32下运行bnetd, d2cs和d2dbs。 否则,推荐使用
linux系统, 特别是对于那些在线人数上千的服务器而言 -- 服务器
在linux下要稳定得多。

III. 安装
bnetd, d2cs和d2dbs的安装:
1. *nix系统
这里我假设你下载的bnetd文件解开在: /home/game/bnetd
1). cd /home/game/bnetd/src/
切换到bnetd源代码目录。

2). ./configure --prefix=/home/game/server/bnetd
进行相关配置检测并且设定目标安装目录为/home/game/server/bnetd,
安装目录可以自行修改。

3). make install
编译和安装相关程序, 如果所有代码都正常编译了,
服务器将被安装到/home/game/server/bnetd目录。
(bnetd, d2cs, d2dbs都在其sbin目录下)


2. win32系统
这里我假设你使用的是bnetw, 你所需要做的仅仅是把bnetw
程序包解开到c:\BNetWServer\, 这样,该目录下的目录
结构应该是类似于c:\BNetWServer\log, c:\BNetWServer\conf ...

d2gs安装:
1. 安装diablo2以及其扩展版本,并且升级到最新版本
(升级补丁可以http://www.blizzard.com/patches上下载,目前
的最新版本是v1.09d, 这里我假设你的安装目录是c:\d2gs

2. 将d2gs程序包解压缩到c:\d2gs, 这样你将获得如下文件
c:\d2gs\d2gs.exe, c:\d2gs\install.bat ...

3. 运行c:\d2gs\install.bat以安装d2gs
1).win2k/NT/XP (推荐)
在这些系统下,d2gs将会被以系统服务的形式进行安装,同时,
你必须确保你是作为系统管理员登陆的。

2). win9x/me
在这些系统下,d2gs将会被以单独应用程序的形式进行安装。
(在win95系统下,你必须首先将系统网络升级到winsock2)


IV. 配置
bnetd, d2cs和d2dbs:
1. *nix系统
所有相关的配置文件都在目录/home/game/server/bnetd/etc下

2. win32系统
所有相关的配置文件都在c:\BNetWServer\conf\目录下

所有的配置项目都在配置文件中有注释说明其作用和格式,
这里我只列出那些你在运行服务器前必须进行设定的项目。


1). realm.list
在此文件中添加realm服务器列表,格式如下:
-realm name- -description---------- -ip and port-
Realm Name Diablo2 Realm Server your.d2cs:port

your.d2cs:port 代表你的d2cs服务器所在的ip地址以及监听断口,
如:192.168.0.1:6113 或者 192.168.0.1
d2cs服务器默认的监听端口为6113

2). d2cs.conf
设置bnetdaddr项为bnetd服务器的ip地址和端口,格式同realm.list
如:
bnetdaddr = 192.168.0.1:6112
bnetdaddr = 192.168.0.1
bnetd服务器的默认监听端口为6112

设置gameservlist项目为你游戏服务器的ip地址列表,
游戏服务器为d2gs所运行的机器。
如:
gameservlist = 192.168.0.1, 192.168.0.2

3). d2dbs.conf
设置gameservlist项目为你游戏服务器的ip地址列表,
同d2cs.conf中的gameservlist.


d2gs:
d2gs的相关配置都储存在注册表的
[HKEY_LOCAL_MACHINE\SOFTWARE\D2Server\D2GS]下,
大部分设置使用默认值就可以了,这里我只列出了那些
必须在运行前进行设置的。

1).D2CSIP=192.168.1.1
修改该数值为你d2cs服务器的ip地址

2).D2DBSIP=192.168.1.1
修改该数值为你d2dbs服务器的ip地址


V. 运行
bnetd, d2cs 以及 d2dbs:
1. *nix系统
运行下列程序:
/home/game/server/bnetd/sbin/d2dbs
/home/game/server/bnetd/sbin/bnetd
/home/game/server/bnetd/sbin/d2cs
运行的前后顺序可以随意。所有这些程序默认
都将按照后台的进行进行启动。

2. win32系统
运行c:\BNetWServer\BnetW.exe,然后从其菜单File->New
中运行d2cs以及d2dbs。

d2gs:
1).win2k/NT/XP
从系统服务控制管理中启动d2gs服务或者直接从命令行下运行
net start d2gs

2). win9x/me
运行c:\d2gs\d2gs.exe


VI. 管理
bnetd, d2cs 和 d2dbs:
1. *nix系统
killall bnetd d2cs d2dbs以停止服务器的运行

2. win32系统
关闭bnetw窗口即可

其他配置等请查看随bnetd程序包所附带的相关文档。

d2gs:
停止运行:
1).win2k/NT/XP
  从系统服务控制管理中停止d2gs服务或者直接从命令行下运行
net stop d2gs

2). win9x/me
  关闭d2gs控制台窗口

d2gs管理控制台:
  运行telnet <d2gs的ip地址> 8888以连接到管理员控制台,默认的
初始密码是abcd123

  其他配置等请查看随d2gs程序包所附带的readme.txt

  好像BETA7的D2GS软件要和LINUX下的BNETD *** BETA2一起才可以用???这点我不太清楚!
这两个软件的下载地址http://d2dev.dhs.org


原文引自http://bloodface.games8.com


常见问题的原因及解决办法

 

1。你的d2gs必须已经能够持续运行。具体表现是:WIN98中,当你按Ctrl+Alt+Del时弹出的对话框中应该有“d2gs”的条目;WIN2K/WINXP中,在“服务”里面,当你多次点击“刷新”后“Diablo II Close Game Server”(就是d2gs)仍然能处于“已启动”状态;
此处出错的话,主要原因有两个,一是d2gs的注册表有问题,请检查MaxGames
不可以是0,MaxGameslife的值不能太小,数值的单位是秒,16进制的,自己算一下就知道了;二是没有将d2gs需要的*.dll 和 *.mpq没放到d2gs目录下,如果不是只建服务器,建议把d2gs拷贝到diablo的安装目录下。

2。BNETW中REALM服务器与BNETD SERVER应该能够连接。具体表现为:当新打开D2 REALM窗体时(点击主窗体工具条上第二个按纽打开)BNETD SERVER窗体(点击主窗体工具条上第一个按纽打开)中“CONNECTION”列表中应该可以看到一个带IP的图标,同时BNETD SERVER窗体的REALM分页中的REALM前面的红方块应变为绿色。这时D2 REALM窗体里的列表中应该可以看到一个IP;可能的原因:没有正确配置BNETW目录下conf目录的bnetd.conf d2cs.conf realm.list这三个文件,一定要配好bnetd.conf 的路径和d2cs.conf realm.list里的IP。

3。BNETW与d2gs连接。当BNETW与d2gs都正常启动后,D2 REALM窗体里的列表中应该可以看到一个新的IP,总共2个IP。在D2 CHARACTER DATABASE 窗体里的列表中也应该可以看到一个新的IP,总共1个IP。入果在D2 CHARACTER DATABASE 窗体里的列表中没有IP,则要检查BNETW目录下conf目录的d2dbs.conf文件是否配置正确。

4。游戏与服务器连接。
A.上面的全都搞定后,就该修改自己的注册表了。如果不会改,可以打开一个从论坛上下载的注册表,改里面的Server List、bnetip填写为你服务器的IP,同时建议你把Preferred Realm后面的字符串改为你的REALM服务器名称(不是必须),把注册表文件导入后,就可以进入游戏了。
B.进入游戏后寻选battle.net,切换出来,看你的BNETW,BNETD SERVER窗体的的“CONNECTION”列表中应该可以看到一个新的带IP的图标,一共有2个,如果没图标则说明。如果不能建立国度,说明BNETW中REALM服务器没建好,请参考上面的2 ~ 4 步。
C.接下来申请帐户,如果不能创建帐户,说明D2 CHARACTER DATABASE 服务器没建好,要重新配置d2dbs.conf文件。然后创建人物,如果不能创建人物,说明D2 CHARACTER DATABASE 服务器没建好 ,请参考上面的3 ~ 4 步,做完这些后,看你的BNETW,BNETD SERVER窗体的“ACCOUNT”页的列表,里面应该有一个你的用户名,并且如果你在线,名字前面的状态应为绿色的“ON”。
D.再接下来创建游戏,创建成功后看你的BNETW,BNETD SERVER窗体的“GAMES”页的列表,里面应该有一个图标,名字就是你建立的游戏。

5。做到这里,你的服务器就建好了,可以把你的服务器注册表放到论坛上,约几个朋友一起就好了!!!
Enjoy yourself !!!




部分二

BNETD介绍

Bnetd官方指南翻译
1 ) 工程信息
1.1 ) bnetd 工程是什么?
1.2 ) Battle.net 是什么?
1.3 ) 星际是什么?
1.4 ) 为什么当 Battle.net 已经存在时,还要使用bnetd ?
1.5 ) bnetd 的历史是什么?
1.6 ) 我怎么能订阅你的邮寄表?
1.7 ) 你的主页为什么是这样落伍的?工程结束了吗?

2 ) 开发信息
2.1 ) bnetd 现在真实面目?
2.2 ) bnetd 在什么系统上工作?
2.3 ) bnetd 团队的相关资料?
2.4 ) 我怎么能得到帮助?
2.5 ) 版本控制计划是什么?
2.6 ) bnetd 变化目录列表在哪儿?
2.7 ) 做一张计划表?


3 ) 安装服务器
3.1 ) 我在哪儿能下载 bnetd ?
3.2 ) 我应该使用什么版本?
3.3 ) 我怎样来编译原程序?
3.4 ) 编译器为什么在第 29 行 eventlog.c 产生一个错误?


 
4 ) 运用服务器
4.1 ) 我怎么开始 bnetd ?
4.2 ) 我开始运行bnetd,但是我看不见任何东西 ?
4.3 ) 我怎么设定服务器?
4.4 ) 我为什么不能开始 Diablo 游戏?
4.5 ) 我为什么不能与 Diablo II联接?
4.6 ) 我怎么启用自动更新?
4.7 ) 我怎么把管理权利和积分一起使用?


 
5 ) 用户问题
5.1 ) 我怎么通过我的防火墙与一个服务器联接?
5.2 ) 我怎样选择与哪一个服务器连接?
5.3 ) 我正在使用 BNS 但是它不选择我的服务器?
5.4 ) 我怎么与原来的 Battle.net 服务器联接?




1 ) 工程信息



1.1 ) bnetd 工程是什么?
工程是集中于 bnetd 服务器的发展的合作。这是一个试图仿效的暴雪的Battle.net服务。bnetd 工程被志愿者和否则加盟了暴雪娱乐,也没旁边被支持的两个都不运用。

努力的主要的部分正在支持所有的暴雪的 Battle.net 兼容机比赛。服务器也可以支持最终用户,但是不支持当前的一些非暴雪网站。除了 bnetd 服务器的某些软件也被认为是bnetd 工程的部分。这包括 BNS ( BNetd 选择器), bnchat ( 一个基于文本的聊天客户端) , BNI 实用程序,并且 bntrackd ( 追踪魔鬼的 BNetd ) 。bnetd团队也就这些程序和 Battle.net 协议整理了文档。



1.2 ) Battle.net 是什么?
避免混乱,请注意 Battle.net 是Davidson & Associates, Inc.的商标。在这里这个团队是来说明提供自由免费的联机游戏服务。他们的游戏部门 ( 也许仅仅是辅助 ) 通常被称为“暴雪娱乐或只是“暴雪””。

Battle.net 的服务器可以与他们的产品如星际争霸, Diablo ,和魔兽争霸的客户端连接。服务器提供多人游戏的聊天频道和列表加入。他们提供的服务包括积分,帐号,并且支持客户端的其它升级。



1.3 ) 星际争霸是什么?
星际争霸是 RTS ( 实时的策略 ) 游戏,由暴雪娱乐公司出品。它在游戏中可以用3个不同种族来**纵使的游戏更真实。比赛对双方完全不会一样,并且很多设计和思路加进了游戏,志在创造游戏的平衡。最多只需要8 个人或计算机就可以马上在一个游戏中玩。在它发行以后,游戏疯狂流行了N年。

相当明显地它是当前可得到的 RTS 游戏的最完美的例子之一。



1.4 ) 为什么当 Battle.net 已经存在时,有出现bnetd ?
星际争霸并不提供暴雪战网服务之外的方式玩 TCP/IP 游戏。这种服务经常是很慢的,并且有时由于网络堵塞或是在线人数过多导致速度下降。

对另外一些人( 如在局域网中,在学校内部网等) 因为因特网的缺陷或因为防火墙存取,连接到Battle.net也是不可能的。使用Battle.net聊天频道可以将您的计算机带到使用类似国际互联网交谈服务的服务器。

与在Battle.net上的令人难以置信的数字,寻找朋友、其他的玩家的交流或是保持不断线是很困难的。

运用你的自己的服务器允许你设定登录旗帜, 广告旗帜, 频道名字, 积分属性 ( 你能决定谁是网管 ), 并且屏蔽辱骂性的语言。

并且, 你可以选择你喜爱的方式来定义你的名字。 :)

1.5 ) bnetd 的历史?
他几乎与星际争霸战网同时出现。他针对普通战网上的一些问题做出了改进,具体参见1.4.

原来的工作由马克完成, 架构在http://www.starhack.ml.org/ 版本 0.3之上。那个版本定义了多个可以MSWindows的端口, 最值得注意的是 FSGS 。ml.org主机和那段源代码很快的就衰败了。罗斯开始了代码的补丁工作,但发现发布他们困难。然后乔希和他的朋友建立一个站点上http://bnetd.unleashed.org/ 来恢复程式,并且这个合作很快的发布了支持了用户口令的 0.4 版本。提姆建立了bnetd.org 领域和一个永久的网络服务器连接。工作继续开展,并且 0.6.x 版本应该不久后面世( 希望0.5被跳过, 看见问题2.5) 。



1.6 ) 我怎么能订阅邮寄表?
实际上邮寄表有2个不同的集合。早期的是在bnetd.org上的邮寄表( 由igateway.net提供主机)并且有很多的用户。因为转存,在隐藏身份上的他很优秀。

如果任何人在 2000年6月前有bnetd设备名消息,请联系罗斯,来保证他能够整理一份历史性的档案。

表名字 主人 话题 传输
bnetd 发布 bnetd.org 通知 很低
bnetd 设备名 bnetd.org 开发讨论 中等
bnetd 讨论 bnetd.org 用户讨论 很低
bnetd 发布 sourceforge.net 通知 很低
bnetd-devel sourceforge.net 开发讨论 中等
bnetd 用户 sourceforge.net 用户讨论 很低

每个邮寄表都允许你订阅的使用GNU浏览器退订邮寄表的内容。

bnetd.org订阅页.
隐藏身份订阅页.



1.7 ) 你的主页为什么是这样落伍的?这项目结束了吗?
首先,项目是活着的。只要有愿意的人在为它工作,它将继续活着。

一些主要的开发者总的来说都忙于他们自己的工作,学校,和生活。版本不象以往那样经常的升级。然而我们希望有能力的人,仍然能够象以前一样( 至少每个星期一次) 以及在http://sourceforge.net/上的公共CVS树( 它包含所有的最近的补丁 ) 。



2 ) 开发信息



2.1 ) bnetd 现在完善的如何?
它支持当前大多数 Battle.net的功能。包括:

高自由度配置
星际争霸和血战用户
Diablo 1.05 和以后的用户
魔兽争霸 II BNE 用户
Diablo II ( 封闭式角色不能玩 ) 用户
聊天和bot用户
新建用户,登录,并且更变口令
永久创建用户的频道
保存星际争霸,血战,和魔兽争霸的用户记录
保存Diablo 的用户记录
游戏战报
频道管理员和服务器网管
服务器活动记载
积分游戏和评价
可定制的频道图标
可定制的频道旗帜广告
IP屏蔽
用户的自动更新
在 TODO 表上的一些事情是:

内部服务器连接 (BITS)
默认属性报告使用 TCP 而不是 UDP
过期用户的注销
用户限制设置
轻松的游戏战报检测
改进的比赛状态报告( 显示游戏开始的数据包)


2.2 ) bnetd 在什么系统上工作?
答案当然取决于版本数。0.4 可以在修正了3.4中提及到的错误以后的大多数系统上工作。随后的 0.4.x 升级版本和 0.6.x 版本在放开后,几乎可以在任意一个类Unix系统上工作。最近测试通过的系统有 AIX , FreeBSD , HP-UX , Irix , OpenBSD , NetBSD , Solaris , SunOS ( 仅仅 gcc ),甚至 Win32 工作。

如果你正在安装,你需要为 0.4.x和更早的版本准备 ANSI 或 K&R 编译器,为 0.6.x 或更新的版本准备一个 ANSI C 编译器。



2.3 ) bnetd 组织?
bnetd 组织并不神秘。目前仅仅有一些积极自愿的开发者, Ross 和 Typhoon 。Rob 和 Dizzy 致力于重要的补丁。其他人则从事错误报告,补丁,和有用的信息。Tim 保证网络顺利连接、DNS 以及运行在网络服务器的机器。具体细节,见源文件中的说明文档。



2.4 ) 如何获得帮助?
如果你对 C 编程有经验,那么开始原程式的开发;如果你没有编程经验,那么去找一些关于 C、Unix、模块或是任何你感兴趣的书。我们很乐意就源程式或为开发者开发补丁挺帮助。 TODO 文件里有关于原程式的思路。我们需要了解 Macintosh 的编程人员来移植 bnetd 到 Macintosh 。

如果你能够进入图形用户界面,你可以能在 Win32 或Macintosh 中称为 BNS 的连接工具上工作。

如果你不编程,那么下载源程式并且编译它 ( 或安装一个二进制包) ,运行,并且告诉我们你是否发现问题,我们将把这些问题填加到 TODO 表。



2.5 ) 版本控制计划?
任何时候都存在着 2 个活跃的版本:“stable”和“development”。开发中的版本成为下一个稳定的版本即“stable”,而计划中将要被开发的版本即“development”。

左起第一个小数点表示版本。因此 0.3 和 0.4 不仅是不同的版本, 而且是分离的版本 ( 而不是从版本 “0”的 “2”修订 ) 。

理论上每个版本类型应该编译并且能够正常工作 。大量的测试和努力会产生稳定的版本。也有试用版例如 0.4.22pre6 的发布。他们迟于 0.4.x 开发时间推出,并且主要为 sync 的开发做打算。

在过去,稳定的版本没有第二个小数点。在稳定的版本 X.Y 后的下一开发版本被定义为 X.Y.1 。显然,存在的问题是它没有脱离原来的版本,这样也就成不了“stable”版本。由此引起的问题的一个典型例子可以参见问题导致的错误 3.4 。为此,在 0.4.x 开发周期以后的下一个稳定的版本将是 0.6.x ,不是 0.5. 在那以后的开发周期将是 0.7.x 。

这个系统几乎与 Linux 内核开发者使用的奇怪是系统一样,或更甚于。

如果仍然糊涂,你或许觉得这张表格更容易理解:

0.3 稳定
0.3.X 开发
0.4 稳定
0.4.X 开发
0.4.XpreX 预映
0.5 不存在
0.5.X 不存在
0.6.X 稳定
0.6.XpreX 预映
0.7.X 开发
0.7.XpreX 预映


2.6 ) bnetd 变化目录列表在哪儿?
你能在源文件的顶层目录中或最新版本中的CVS 浏览器寻找文件变化目录列表;使用直接的连接到变化目录列表,如果你对详细的变化目录列表感兴趣,可以看ChangeLog.cvs2cl,这是自动更新的。



2.7 )一张 todo 表?
是的, 你能看见TODO表或你可以在源文件中寻找 TODO 文件。你有可以从最新的版本中的CVS 浏览器,直接连接到TODO文件。项目表的顺序并不重要。



3 ) 安装服务器



3.1 ) 我在哪儿能下载 bnetd ?
如果你希望从网上安装,主网站上有文件下载,这里通常是最新的程式。或是从迈克的文件档案中得到。作为后备手段,罗斯也他的CS 帐号上提供最新的下载。

当前更新也在匿名的 FTP 空间上提供下载。

如果你想要得到 RPM ,你可以在主站点或是迈克那里发现与之相关的网页。Debian 和 *BSD 包裹在安装系统时是变化的。



3.2 ) 我应该使用什么版本?
0.4 稳定的版本在最近的 glibc 版本编译上存在问题因此我推荐不使用它。0.3 则是 0.4.x 版本开发的低级版本。经典的版本应该很适合使用。当 0.6.x 被发布时,它应该是“缺省”为终端用户选择安装。



3.3 ) 我怎么设定服务器?
bnetd 配置文件在conf/bnetd.conf。这里包含记录文件和用户资料,还有一些其他的信息,如果你对此感兴趣,可以自己定义来满足你的需要。看bnetd.conf ( 5 )来学习在文件和文件夹中使用手动查询相关资料。



3.4 ) 编译器为什么会在 eventlog.c 第 29 行报告一个错误?
这是由于在 bnetd-0.4.0 和一些更早的版本中的一个错误导致。源代码假定 stderr 是一个常数,但是这在更新的 glibc 系统中是不现实的。

修正它有过个方法。最简单的改变是在 eventlog.c 的顶部设置 stderr 为 NULL 并且重新编译。升级到 bnetd 的新版本也可以解决这个问题。0.4 系列不能用版本控制计划工作的方法来修正。新版本则没有这个问题。



4 ) 运行服务器



4.1 ) 我怎么启动 bnetd ?
在你建立了源以后,程序的二进制代码被放进 sbin/bnetd 。运行服务器只需要从 bnetd 的主目录敲入: sbin/bnetd 。



4.2 ) 我为什么不看见任何东西我是否启动 bnetd ?
在缺省状态下, bnetd 进程在背景作为一个后台运行。如果你想要在前台运行它,在运行服务器时选择使用参数 - f 。

注:当服务器在后台模式运行时,它首先改换目录,因此你需要保证在你的 bnetd.conf 的所有的路径是绝对的路径。



4.3 ) 我怎么设定服务器?
bnetd 配置文件在 conf/bnetd.conf 中。这里包含记录文件和用户资料,还有一些其他的信息,如果你对此感兴趣,可以自己定义来满足你的需要。看bnetd.conf ( 4 )来学习在文件和文件夹中使用手动查询相关资料。



4.4 ) 我为什么不能启动 Diablo 游戏?
0.4 最初的版本主要是支撑星际争霸和血战这两个游戏。因此当使用 bnetd 0.4 时,在运行 Diablo 的一些版本时,很难联接或进入游戏 。在 0.4.22 以后的 bnetd 的版本中,只要你的 Diablo I 用户端被升级到版本 1.05 或更新后,他会运行的很流畅。

在 1.05 前, Battle.net 看起来像使用了数据库存取并且在一个低端端口上运行了的一个完全不同的协议。由于我们没有任何跟踪包,为此现在要支持是很困难的。如果某人愿意为此希望得到帮助,我们愿意与他们一起工作。



4.5 ) 我为什么不能与 Diablo II 联接?
Diablo II 使用了在 bnetd 0.4.23 版本之前没有出现过的一种新连接类型。以后的版本支持这个特征。如果你已经正在运行 0.4.23 或更新的版本,但是仍然有问题, 看见下一段。

在Diablo II 的升级补丁 1.08 中,暴雪( 又 )改变了它的 CD 键 authentification 。版本 0.4.25pre3 和早期的版本不支持新数据包类型。以后的版本会适当处理该问题( 如果你希望测试,可以在下一个版本修正前,试用 nightly CVS ) 。



4.6 ) 如何启用自动更新?
当它与 Battle.net 联接时,自动更新是暴雪的用户得到最新版本的方法。这保证所有的用户有兼容的游戏版本并且减少出现游戏中的问题。

在版本 0.4.2 出现之前,bnetd 的自动更新支持并不容易。启用更新选择会要求编辑 2 个配置文件并且准备至少 2 个 MPQ 文件 ( 为版本授权的和为升级的 ) 。

首先打开你的 bnetd.conf 并且发现可下载的文件。改变 allow_autoupdate 为 ture 。这是用户版本认证。现在改变 mpqauthfile 为得到授权的 MPQ 的文件名。这应该是文件名,而不是绝对路径。

第二, 打开你的自动更新配置文件和选择你想要升级的文件。中间应该是文件名而不是绝对路径。版本能从升级的用户版本数字被替换,例如 1.05 成为 105 和 1.08 成为 108 。

利用bnftp ( 1 )或在万维网,你可以从 Battle.net 找到 MPQ 文件。



4.7 ) 我怎么把网管权利加到一个帐号?
用 uid 来找到你要改变的用户( 你可以在壳中使用文本查找工具或使用服务器上的命令 /whois ) 。然后如果它正在运行,关掉服务器。使用你喜欢的任何文本编辑器象这一样增加行:
“BNET\\auth\\admin =ture”


你有可以在用户上启用别的授权。他们多数在配置文件 bnetd_default_user 中被记录。例如, 你能终止一个**作用户:
“BNET\\auth\\operator =false”


 



5 ) 用户问题



5.1 ) 我怎么通过我的防火墙与一个服务器联接?
这是经常被问并且也是最难回答的问题之一。当然答案取决于你的网络安装和你的防火墙上使用哪个系统。如果你使用 NAT ( 或 masquerading ) 它会变得更复杂。

可能你想要知道的第一件事情就是端口信息。协议使用在 bnetd 服务器上的 TCP 端口 6112 。它也使用 bnetd 服务器和用户端之间的 UDP 端口 6112 。如果你在运行 Diablo II,那么 TCP 端口 4000 也需要对服务器开放。UDP 端口 6112 会在游戏中进行对话。如果用户端并不存在端口 6112 ,它将在一个随意的端口上接收。

即使在设置单机游戏或是同时在两个机器上设置两个不同的游戏, 都无法保证在一个游戏中,有某一台机器可以运行的更流畅。一个设置问题的最常见的问题是在游戏进行期间非常的慢。当前的解释是游戏中多个用户都在同时通过某一个用户时造成的网路不畅通。

Dizzy彻底的记录了问题的整个过程。它被称为 bnet-masq-howto 并且在 Linux 2.2 时,它也出现了大量的信息流。

对使用 iptables( 也称为网过滤 ) 的 Linux 2.4 来说,这是个好消息:在防火墙内、外使用完整的 NAT( SNAT+DNAT ) 来排除网络传输的不同步是可能的。有来自Rick Kramer的信息描述怎么设置它的 Netfilter 邮寄表。在他的事例中,他假定 Battle.net 服务器在本地网络的外面。

Linux 内核 2.0.36 的指令记录在下面:

与一个类似 Battle.net 的服务器联接的比较简单的方法是使用 ipautofw 为数据包增加限定, x.x.x.x 是用户端机器。

/sbin/ipautofw - 一 - r tcp 6112 6112 - h x.x.x.x - v - u
/sbin/ipautofw - 一 - r udp 6112 6112 - h x.x.x.x - v - u


他可以工作于以下状态:“单机游戏或内部网络游戏以及与外部连接的网络游戏或是作为外部网络游戏的主机或是……。”糊涂了吗?

当 bnetd 服务器也处于防火墙后,并且在一个游戏中一台内部的计算机作为主机, 仅仅内部的其他计算机能加入。 gametrans 会将正在运行的机器或是并没有运行的机器的地址都发送到bnetd 。这样, bnetd 将不会把本地地址 ( 10.x.x.x , 192.168.x.x , 或无论什么 )发送给在防火墙外面的计算机。

甚至当你做那时,如果当时游戏中有两三个终端在进行,那么又会发生网络传输不同步的现象。根据我们的经验,没有一个内核模块或代理可以在非 Linux-2.4 sytems 上避免情况的发生。

同样, 如果两台或更多的计算机从在本地网络之外在同一个内部主机游戏,,将会产生严重的速度问题。为此的一个解决方案被发现了 ( 它为我工作了 ) 。所有细节在官方的 Linux Masquerading 上可得到的 http://home.indyramp.com/lists/masq/msg03024.html 。根本上说,是内核在追踪连接时得到一条假信息( 实际上它认为计算机正在试图断开与防火墙连接) 。作为开放的 UDP 管理端口接受这个解决方案。

任何版本的 Linux 内核缺省为 Enable ,这是一个潜在的缺陷。如果你的一个 UDP 服务器运行在端口 9999 ,并且你的计算机通过端口 9999 发送一个 UDP 包到Internet 主机 A ,如果 Internet 主机 B 猜测到正确的代理端口,他可以通过端口 9999 联接回到你的服务器。如果仅有 UDP 传输在bnetd 发生,这并不是问题。记住 DNS 请求就是 UDP 。如果你决定不这么做,你仍可以通过手动安装来保证正常的工作 ( FIXME :我想……或者那里也需要开放的 UDP ?) 。

2.0.36 或更低版本,你必须为开放的 UDP 增加 2 个内核补丁。第一个补丁被称为“ LooseUDP ”和更新 Masquerading 代码以包括位置的选择项“ CONFIG_IP_MASQ_LOOSE_UDP ”。FIXME :我不知道第二补丁是什么 ... 也许那是在这个文件的一个先前的版本上面的一个错别字。

2.2.15 和以后的内核,不需要补丁。这些内核包括一个可以存取 /proc/sys/net/ipv4/ip_masq_udp_dloose 的 sysctl 。有三种状态可以在这个文件中编辑。一、0( 缺省 ) 不允许开放的 UDP 的工具移植管理。二、1 允许它使用安全的端口。三、2 允许它使用所有的端口( bnetd中1是工作正常状态) 。

2.4.x ,看起来没有 sysctl 用来将 UDP handling放开。这意味着你必须对每台机器使用手动设置,如在邮件列表中的说明一样。。



5.2 ) 我怎么选择联接哪个服务器?
现在你已经有了正在运行的 bnetd ,你怎么把你的星际争霸用户端指向到服务器?

一旦星际争霸, Diablo ,或另外的用户端被安装,你能使用一个程序BNSv1103.exe在不同的 bnetd 服务器和暴雪之间切换的 Battle.net 。

这个程序有让你在暴雪 Battle.net 服务器之间切换的一个简单的接口的按纽。要进入其他的服务器可以使用按纽找到接口,并在下面填写你要连接的主机名或 IP 地址。

你也可以使用 BNS 自动地选择来运行你的游戏。

当用户端正在运行时,你能也改变服务器。例如,星际争霸你应该回到主菜单。使用按纽切换到任何一个 BNS ( 如果它仍然在运行) 或到 Windows 浏览器,并且选择一个新的服务器并按下 APPLY 。然后切换回到星际争霸与新的服务器联接。



5.3 ) 我正在使用 BNS 但是它不选择我的服务器?
如果你正在使用 BNS 1.1.0.3 以上和 Starcraft/ 血战1.08 或更新, Diablo 1.08 或更新, 或 Diablo II ,那么你不是单独存在的。

暴雪把注册表格式改成了到 Battle.net 网关的用户端多选择 ( 美国西方, 美国东方, 等等 ) 。这个变化出来时, BNS 还没有更新成为可以处理新格式的版本。有一个 gatesel.exe 程序,应当可以处理它。若是失败,会有指令告诉你如何手工进入服务器。这些指令存在于当前版本 bnetd 中,比如 docs/README.diablo108 。注意 Windows 的某些版本在那些文本栏中使用 16 位字符。



5.4 ) 我怎么与原来的 Battle.net 服务器联接?
启动程序BNSv1103.exe,离开并检查 Battle.net ,并且按OK。





部分三


常见问题

Q:建立服务器的建议机器配置?一台服务气能够让多少人一起玩,而速度又不太慢呢?
A:建立服务器的建议机器配置是由你的具体情况而定的,但有一点是肯定的,你的内存要大,网络要快。并不是一台服务器的性能决定了可以有多少个人一起玩,这和你的用户有关,比如说,有20个用户,他们在同一个游戏里玩和每人开一个游戏对系统的需求是不同的。
具体来说,一台PIII550 + 256 RAM +Maxtor 20G(2M Cache) +100M LAN在WinXP下可以让32人同时游戏得很流畅,如果你要建立高性能的服务器,可以分多台服务器建立。
在d2gs的注册表中有几项设定:MaxGames(最大游戏个数)限定同时可以建立的游戏个数,MaxPreferUsers(最大人数)限定同时可以游戏用户个数,二者可以确保服务器响应的质量,如果你在乎你的用户对速度的满意程度,建议填小一点;MaxGameLife(最长游戏时间)限定游戏可以进行的最长时间,为了防止用户无限的等待,可以适当小一些,但不可已太小,否则用户没有完成任务可能就被迫退出,这会使你失去朋友的!!!
按我的配置,我将游戏个数设为了16,人数设为了48,如果你的服务器不是为了商业目的,而是让朋友们来玩,这两个值要尽量小,而游戏时间要尽量长 :)

Q:我的服务已经启动了,IP地址也改好了,可为什么我进不了bettle.net???无法连接。
A:看看你机器上网络邻居里的本机IP,再看看BnetW,d2gs和战网注册表里的ip是否一致 :)

Q:可以进游戏了,可是排名有第1的问题?
A:看看你的d2gs的版本(右键-》属性),用beta6试试……

Q:发现在创建游戏的时候,提示“已经达到游戏最大数目......”?
A:在本站下载的两个软件包,照说明安装后好像是不能Creat Game的。其实是d2gs-109d-beta7的问题,打开d2gs的log,可以看到,即使设置了maxgame,但在creat的时候,log也提示“已经达到最大游戏数目......”,这个时候,用d2gs-dll.zip里面的文件覆盖原来的文件,就可以了。

Q:为什麽无法创建国度?
A:一定要和D2GS配合才可以建立REALM!

 




部分四



相关资料

相关软件请参看《相关下载》栏目

1) bnetd-thread支持的客户端命令
2) 基于类Unix系统下的bnetd如何删除长期不上线的帐号


bnetd-thread支持的客户端命令  
/me
做emote指令
/whisper *acc/char msg
给acc或者char发送消息,缩写/w ,/m功能类似,但/m的接收方不可直接reply
/users
查看在线人数
/who channel
查看谁在指定的channel里面
/whois *acc/char
查看玩家在哪里
/version
显示当前运行bnet的版本号以及编译时间
/uptime
bnetd持续运行时间
/join
加入指定频道
/rejoin
重新加入当前频道
/away msg
设置状态为离开状态,当其他玩家发送消息过来时,消息内容会显示,并且发送方会看
到你的away状态,以及away的原因msg
/dnd msg
设置状态为请勿打扰,当其他玩家发送消息过来时,消息内容不会显示,并且发送方会
看到你的dnd状态,以及dnd的原因msg
/ignore
忽略某玩家
/unignore
取消忽略
/designate
指定下一任的频道管理员
/resign
辞职(不做频道管理员)
/kick acc
把某人从频道里踢出去,踢到the void频道里
/ban acc
把某人从频道里ban掉。
/unban
取消封禁
/reply msg
回复/whisper发过来的消息
/announce
对整个bnet广播消息(要有announce权限),简写/ann
/realmann
对单个realm进行广播
/addacct acc pass
新增一个acc,密码为pass
/chpass acc pass
将acc的密码改为pass,(admin only)
/restorepass acc pass
如果pass与系统记录的acc原始密码或者前一次密码符合,密码将回复为pass ,(admin
only)
/logout
登出bnet
/kill acc
将acc的bnet连接断开,(admin only)
/lockacct acc time
将acc锁住一定时间,time为小时数,缺少time参数则无限期lock (admin only)
/unlockacct acc
将acc解锁 (admin only)
/unloadacct acc
从bnet释放acc的内存占用 (admin only)
/updateacct acc key &#118alue
更改acc的设置 (admin only)
eg: updateacct acc BNET\\auth\\kicktime 0 ,将acc被踢次数清零
updateacct acc BNET\\auth\\admin true , 赋予acc admin权限
基于类Unix系统下的bnetd如何删除长期不上线的帐号 
保存如下文件名为substr.c在你的系统中
然后使用gcc -o substr substr.c 命令编译
//////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main(int argc, char **argv)
{
int i,j ;
char *p;

if (argc!=3) return -1;
j = atoi(argv[2]);
if (j==0) return -1;
p = &argv[1][0];
while(*p!='\0' && j>0)
{
printf(%c, *p++);
j--;
}
}
////////////////////////////////////////////////////////

保存如下文件名为delacctbytime在你的系统中和上面文件相同目录
其中bndir是你的bnetd系统的根目录
touch 0901000002 $PREFERFILE 是定义时间
格式为:月日小时分年本例中为2002年9月1日零时
然后使用chmod +x delacctbytime命令加上系统可执行属性
#!/bin/bash

bndir=/home/battle/bnetd

PREFERFILE=prefer
touch 0901000002 $PREFERFILE
if [ ! -f $PREFERFILE ]; then
echo prefer file NOT exist, use touch to make a correct file
exit 1
fi

delcharbyacct() {

D1=`$bndir/bin/substr $1 1`
D2=`$bndir/bin/substr $1 2`


if [ ! -d $bndir/var/charinfo/$D1/$D2/$1 ]; then
return 1
fi
TEMP=`ls $bndir/var/charinfo/$D1/$D2/$1`
if [ $TEMP = ]; then
return 2
fi
for j in $bndir/var/charinfo/$D1/$D2/$1/*; do
[ -d $j ] && continue
CHARNAME=`basename $j`

D3=`$bndir/bin/substr $CHARNAME 1`
D4=`$bndir/bin/substr $CHARNAME 2`

[ ! -f $bndir/var/charsave/$D3/$D4/$CHARNAME ] && continue
echo $bndir/var/charsave/$D3/$D4/$CHARNAME
rm -f $bndir/var/charsave/$D3/$D4/$CHARNAME
done
return 0
}

for i in $bndir/var/users/*; do
[ ! -d $i ] && continue
for j in $i/*; do
[ ! -d $j ] && continue
for k in $j/*; do
[ ! -f $k ] && continue
if [ $PREFERFILE -nt $k ]; then
ACCOUNT=`basename $k`
ACCOUNT=`echo $ACCOUNT | tr [:upper:] [:lower:]`
D1=`$bndir/bin/substr $ACCOUNT 1`
D2=`$bndir/bin/substr $ACCOUNT 2`
delcharbyacct $ACCOUNT
echo $bndir/var/charinfo/$D1/$D2/$ACCOUNT
rm -rf $bndir/var/charinfo/$D1/$D2/$ACCOUNT
echo $k
rm -f $k
fi
done
done
done

rm prefer
//////////////////////////////////////////////////////////////////////////
然后执行delacctbytime就可以删除在你定义的时间之后没有上线的帐号



--------------------------------------------------------------------------------

以下是Asia的Server Group,可以用作Server实现模型的参考.
Asia Server Group (05-07-2001):
1.Battle.net Database Server
211.233.0.69 - 211.233.0.70
kor-bndba - kor-bndbb
211.233.0.81 - 211.233.0.82
kor-bndbd - kor-bndbe

2.Battle.net Gateway
211.233.0.71
kor-bngw

3.Battle.net Chat Server
211.233.0.72 - 211.233.0.80
kor-bncs02 - kor-bncs08
211.233.0.49 - 211.233.0.56
kor-bncs09 - kor-bncs16

4.Diablo2 Game Server
211.233.0.91 - 211.233.0.114
kor-d2gs01 - kor-d2gs24
211.233.0.25 - 211.233.0.48
kor-d2gs25 - kor-d2gs48
211.233.0.149 - 211.233.0.200
kor-d2gs49 - kor-d2gs00

5.Diablo2 Chat Server
211.233.0.115 - 211.233.0.118
kor-d2csc - kor-d2csf

6.Backup Server
211.233.0.119
kor-backup

7.Watcher
211.233.0.123
kor-watcher

8.Web Server
211.233.0.125
kor-krweb(korads.battle.net)

本文由magic 发布于Linuxsky 论坛,网址:http://bbs.linuxsky.org/thread-2347-1-1.html

相关主题

TOP

源码还在吗?

提供一下ok?

顺便问下有没有wow服务器for windows的源码

[ 本帖最后由 血色眼泪 于 2006-5-2 17:04 编辑 ]

TOP

发新话题