D2 Realm 中文架設文件(1) from baha - 暗黑

Mia avatar
By Mia
at 2005-03-25T20:00

Table of Contents

以下的文章,使用 bnetd 和 d2gs 架構,
實做一個 Closed BattleNet,
這是目前最流行的方式。

首先,講一下 D2 Realm 的整個架構,
整個 Service 分為以下四個部分:
bnetd => bnetd
d2cs => chat server
d2dbs => database server
d2gs => game server

講白一點,
bnetd 負責總管,以及接入 check
的動作,和其他雜務。
d2cs 負責 chat 聊天室以及遊戲 Server(Realm)
等部分的動作設定
d2dbs 當然就是人物的資料庫
d2gs 是人物實際開 game 之後的導向 Server

底下舉出一個類似大型架構的 BNetD Server:
--gs--
--gs--
/ \ /
\
dbs1---- realm1 ----- bnetd ----- realm2
----dbs2
\ /(d2cs) | (d2cs)\
/
--gs-- ......
--gs--


所以說,玩家藉由 bnetd 被接入,經由 d2cs
導入以及初始化一些遊戲設定,
建立或參加遊戲的時候,跑到 d2gs server 上~
而玩家的資料在 protocol 解析後,都轉存到 d2dbs 上

而 d2gs 的原理,由於 d2gs 並沒有公開他的 Source
Code,
所以並不清楚,
但是可以隱約猜出,d2gs 是利用 D II
自己本身的遊戲檔案(dll and mpq),
去實做出玩家丟過來的 request,成立一個 game,
換句話說,
d2gs 這台 Server 等於是在開 game,
也就是說你想開出什麼樣 Mod 的 Game,
只要更換 d2gs Server 本身的 MPQ
檔,就可以達到你的要求,
只要客戶端的 Patch_D2.MPQ 也沒有問題的話。

bnetd,d2cs,d2dbs;是一套 OpenSource
的系統,由:
http://www.bnetd.org/
組織所釋出管理,
理論上是針對 Linux 系統所實做的。

d2gs,據我所知最早由大陸人發掘,
最後還成立了中國教育遊戲網路計畫,(現在還在持續)
後來被誰接手發展不清楚,
這是網址:
http://d2dev.dhs.org/
他是發展在 Windows 平台上的,
當然你如果想要在 Linux 下跑它,可以使用 wine。

通常針對一個小型的 Realm (300 人以下),
比較好的作法是兩台機器,一台 Linux ,一台
Windows,
Linux -> 跑 bnetd,d2cs,d2dbs
Windows -> 跑 d2gs

我假設現在架一個實際 Server ,懶人作法如下:

1.下載 BNetD 系統:(目前最新為 0.4.30,不過檔案有
0.4.25)
(1) 0.4.25 檔案:

http://majesty.hn.org/modules.php?name=Downloads&d_op=getit&lid=6

(2) CVS 最新版取得法:
在一台有 CVS 系統的 Linux Server
上,直接下以下兩行指令:
cvs
-d:pserver:[email protected]:/cvsroot/bnetd
login
遇到密碼,直接按 Enter
cvs -z3
-d:pserver:[email protected]:/cvsroot/bnetd
co bnetd
Server 即會直接過去 CVS Server
隨時更新下載檔案。

DNS 有問題的可以改下:
cvs
-d:pserver:[email protected]:/cvsroot/bnetd login
cvs -z3
-d:pserver:[email protected]:/cvsroot/bnetd co bnetd


2.解壓縮,
tar zxvf 檔名
解壓縮完切過去 src 目錄 (cd bnetd/src/)

3.下./configure 命令
(懂 Linux
的人若想要更動設定,趁此機會,懶人就免了)

4.下 make 命令

5.正確 make 後,下 make install,
Compile 完後的 binary 可執行檔,會全部安裝到
/usr/local/sbin 目錄下。
相關的系統設定檔等東西也都到 /usr/local/ 下。

6.到另外一台 Windows 上,下載 d2gs,
最新下載版本 (1.07d):

http://d2dev.dhs.org/download/d2gs-109d-beta7.zip

7.解開到任一目錄,
並取得 Diablo II 的一些檔案放置到同一個目錄:
(我的建議是乾脆放一套完整的 DII
過去也沒差,自己想玩也可以玩)
d2data.mpq
d2exp.mpq
d2sfx.mpq
d2speech.mpq
Patch_D2.mpq
D2GS.exe
D2GSSVC.exe
D2Client.dll
D2CMP.dll
D2Common.dll
D2Game.dll
D2gfx.dll
D2Lang.dll
D2MCPClient.dll
D2Net.dll
d2server.dll
D2sound.dll
D2Win.dll
Fog.dll
ijl11.dll
Storm.dll

8.執行 install.bat,遇到匯入登陸檔的時候,選 yes

9.換回來 Linux 主機上,用文字編輯器修改
/usr/local/etc 目錄下的四個檔:
bnetd.conf d2cs.conf d2dbs.conf
realm.list
(幾乎整個系統的重要設定都在這了,英文不難,
以後要改設定可以自己看..)

尋找這些段落並修改:

bnetd.conf 修改部分:
udptest_port = 6112

d2dbs.conf 修改部分:
servaddrs = D2DBSIP:6114
(以本例子來說,D2DBSIP 的位置填上 Linux 主機的 IP
位置,注意後面的 port 要填)

gameservlist = D2GSIP
(以本例子來說,D2GSIP 的位置填上 Windows 主機的
IP 位置)

d2cs.conf 修改部分:
realmname = D2CS
servaddrs = D2CSIP:6113
(以本例子來說,D2CSIP 的位置填上 Linux 主機的 IP
位置,注意後面的 port 要填)

gameservlist = 202.210.247.178
(以本例子來說,D2GSIP 的位置填上 Windows 主機的
IP 位置)

bnetdaddr = BNETDIP:6112
(以本例子來說,BNETDIP 的位置填上 Linux 主機的 IP
位置,注意後面的 port 要填)

realm.list
"D2CS" "Diablo2" D2CSIP:6113
(以本例子來說,D2CSIP 的位置填上 Linux 主機的 IP
位置,注意後面的 port 要填)

d2cs.conf 和 relam.list 中的 "D2CS" 字串,是你的
relam 名稱,
要改的話,請注意兩邊都要一樣。

10.切過來 Windows 主機,執行 regedit,
\\HKEY_LOCAL_MACHINE\Software\D2Server\D2GS\

修改 D2CSIP 和 D2DBSIP
的位置為正確位置(以本例來說,就是 Linux 主機 IP)
登錄其他的內容,分別是遊戲的人數限制等。

11.到 Linux 主機,啟動 Bnetd 系統,
cd /usr/local/sbin/
./bnetd
./d2cs
./d2dbs

12.到 Windows 主機,啟動 d2gs,
(開命令提示字元,輸入:net start d2gs)
由於安裝設定是機器一開機就會啟動,
所以下次重開不需要下命令啟動了..

13.telnet 進 Windows 主機IP 的 8888 Port
例如:
telnet d2gsIP:8888
密碼輸入預先設定的 abcd123
先 passwd 命令更換密碼,
然後 maxgame 設定最大遊戲量,接著 maxuser
設定最大人數,
接著 maxlife 設定遊戲最長時間,
打 help 可以察看相關設定命令。
(以上這些設定單純是屬於 d2gs 的)

14.打 status 察看 d2cs 和 d2dbs 有否和 d2gs
connect,有的話連線成功。

15.撰寫 reg 檔讓人連進來囉~
reg 檔撰寫格式如下:

REGEDIT4

[HKEY_CURRENT_USER\Software\Battle.net\Configuration]
"Server List"="192.168.56.69"
"Registration Version"=dword:00000000
"Registration Authority"=dword:00000000
"Client ID"=dword:00000000
"Client Token"=dword:00000000
"Server Version"=dword:00000001
"Diablo II Battle.net
gateways"=hex(7):31,30,30,31,00,30,33,00,75,73,77,65,73,\

74,2e,62,61,74,74,6c,65,2e,6e,65,74,00,38,00,55,2e,53,2e,20,57,65,73,74,00,\

75,73,65,61,73,74,2e,62,61,74,74,6c,65,2e,6e,65,74,00,36,00,55,2e,53,2e,20,\

45,61,73,74,00,61,73,69,61,2e,62,61,74,74,6c,65,2e,6e,65,74,00,2d,39,00,41,\

73,69,61,00,31,39,32,2e,31,36,38,2e,35,36,2e,36,39,00,2d,38,00,44,65,61,74,\

68,47,6f,64,00,65,75,72,6f,6f,70,65,2e,62,61,74,74,6c,65,2e,6e,\
65,74,00,2d,31,00,45,75,72,6f,70,65,00,00
"Battle.net gateways"=-

[HKEY_CURRENT_USER\Software\Blizzard
Entertainment\Diablo II]
"Aux Battle.net"="192.168.56.69"
"BNETIP"="192.168.56.69"

IP 的部分以本例來說,都改成 Linux 主機的 IP
位置,
Diablo II Battle.net gateways 的內容是 16
進位的,
我建議可以實際開 regedit
去改位置,然後實際把那一串位置丟到 UltraEdit 上,
轉 Hex 16 進位去看..然後照抄過來即可。
注意 UltraEdit 上的 0D 0A ,抄過來要改成 00。

16.理論上,這樣就可以跑囉~
要玩不同 Mod 版本的 Realm DII,
只要更換 d2gs
(以本例來說,是Windows主機)主機上的 Patch_D2.mpq,
就可以了。

17.更進階的設定,
或者更能應付更多人的分散式架構,或者類似
cluster 的架構,
以及 Bnetd
系統的詳細結構以及其餘工具,設定;d2gs 的更詳細設定,
大家就自己看文檔,說明,自己琢磨吧..
甚至 BNetd 也有人以 BNetd 為藍本,用 VC 寫出了
Windows 版本:
http://pages.infinit.net/phil/index.htm
如果用這個代替 BNetD 整個系統(包括
d2cs,d2dbs)
是也可以做到一台 Windows 通吃的地步,
不過效能很差就是了;好處是有一個漂亮的 GUI
介面可以管。
另外,d2gs 在 Linux 下以 wine
跑也不錯,這也是一個作法。

底下列出大量的參考網址,供大家查閱:
http://d2dev.dhs.org/doc/bnetd-inst-howto.htm
http://d2dev.dhs.org/doc/bnetd-conf-howto-1.htm
http://majesty.hn.org/modules.php?name=Content&pa=showpage&pid=1
http://www.bnetd.org/
http://sourceforge.net/cvs/?group_id=6933
http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/bnetd/bnetd/
--
※ Origin: 巴哈姆特<bbs.gamer.com.tw> ◆ From:
163.25.117.172
※ 修改: 2002/4/14 3:41:48 [163.25.117.172]
※ 修改: 2002/4/14 3:55:51 [163.25.117.172]

--
Tags: 暗黑

All Comments

上述德魯依問題

Donna avatar
By Donna
at 2005-03-25T15:29
※ 引述《ivano (伊凡諾)》之銘言: : ※ 引述《rogner (沒M6沒真相 叭)》之銘言: : : 三件式只有火牆嗎 :p :     是不只有火牆,不過最大的目的是為了火牆吧。 一半一半 :     如果沒有必要用到火牆,其餘的整體價值又比三件式要高, :     又為什麼一定要穿三件式 ...

上述德魯依問題

Bethany avatar
By Bethany
at 2005-03-25T13:41
※ 引述《rogner (沒M6沒真相 叭)》之銘言: : ※ 引述《ivano (伊凡諾)》之銘言: : :     可是穿三件式的毒靈,也不會強到那裡去orz : :     光那個盾就很有差了。 : ㄜ...除了rare : 要比三件式強還蠻難的     我自已的小毒靈是主毒副召。     衣 ...

大家常會問的一些問題

Irma avatar
By Irma
at 2005-03-25T03:16
述刪... 補充:(以下摘自天國-暗黑精華文件) 當你看到soj計數開始,跳出遊戲回到window然後執行命令cmd(win2000的玩家應該是 附屬應用程式--andgt;命令提示字元程式,win98玩家應該是附屬應用程式--andgt;ms-dos程式) 然後鍵入and#34;netstat -n ...

上述德魯依問題

Bennie avatar
By Bennie
at 2005-03-25T02:55
※ 引述《gtoik (左右轉的時候)》之銘言: : 上面的and#34;郎德and#34;文有提到,風狼德 : 想問問練過的玩家...剛剛看過德魯依的裝備(頭,身體 等等...) : 風德的威力在於把技能等級提高...所以裝備有 烏鴉王 塔格澳手腰帶凱甲 等等的 : 狼德..的是加爾 升級肋骨等.強制甲 長 ...

大家常會問的一些問題

Quanna avatar
By Quanna
at 2005-03-25T02:42
因為...今天值班,發呆無事做(目前),所以來把最近大家常問的一些問題做整理 Q1.怎樣看IP勒? (因為我也想打可魯) A1.有以下幾種方式 1.做一各 .bat的檔案(ex:ip.bat),編輯內容如下(此方法不太好用) ping 127.0.0.1 CLS netst ...