mud proxy server使用心得 - MUD Game

Daniel avatar
By Daniel
at 2021-05-30T14:47

Table of Contents

Hi all

近期防疫持續WFH中,意外地多了許多空檔整理一些筆記發發廢文,
以下是今年我嘗試架設mud web proxy和mud web client的筆記與心得,
不是什麼新技術,但爬了一下版似乎沒有討論過,就來洗個發文數了

題外話,
這個東東同時也是之前版主t大有分享過的一個國外mud網站,
該網站上所提供的技術

傳送門 https://www.ptt.cc/bbs/mud/M.1590814246.A.294.html


【前言】

這是以網頁方式連線並遊玩mud的解決方案,
現今已有許多mud server支援可直接供網頁連線遊玩,
但有更多mud並無提供此選擇,
mud proxy server作為一個中介,
可以把網頁端websocket的資料轉送給mud的telnet server,
而mud web client擔任前端跟mud proxy server連線,輸入mud指令與輸出畫面,
由此達成透過網頁瀏覽器跟各mud遊戲連線的效果。


【環境準備】

需先安裝 Node.js 和 npm



【實裝步驟】

1.安裝proxy server

他是一個開放的github project,可以在這裡clone:
https://github.com/plamzi/MUDPortal-Web-App

安裝步驟在該頁面中有指令可以照打



2.安裝web client

同樣是github上的開源項目,請在此clone:
https://github.com/houseofmaldorne/mud-web-client

安裝步驟在該頁面中有指令可以照打



3.加入https憑證檔 或是 關閉https連線

由於預設的連線方式是採用https啟動proxy server,
使網頁採用wss的通訊協定連上proxy,
所以按照原本的安裝的proxy server程式,
我們是需要對應的https憑證檔案才能正常啟動server的,
但是git專案中並不會提供憑證檔給你測試,
所以如果直接啟動的話會出現找不到憑證檔的錯誤

假設你可以產出你網頁需要的憑證檔案,
請把檔案放置在proxy server資料夾根目錄中,
並修改wsproxy.js這隻檔案169~170行的cert和key

cert: fs.readFileSync('./cert.pem'),
key: fs.readFileSync('./privkey.pem'),

假設你沒有要採用https加密,
可以把這167~176行這段拿掉,改採http方式啟動proxy server

/*
if (fs.existsSync('./server.cer') && fs.existsSync('./private.key')) {
webserver = https.createServer({
cert: fs.readFileSync('./cert.pem'),
key: fs.readFileSync('./privkey.pem'),
});
} else {
// TODO: maybe fallback to non secure connection
console.log('Could not find cert and/or privkey files, exiting.');
process.exit();
}
*/

webserver = http.createServer(); // 加入這行

webserver.listen(srv.ws_port, function() {
srv.log('(ws) server listening: port ' + srv.ws_port);
});



4.修改網頁端設定檔

開啟web client網頁檔案目錄中的 src/config.js
主要需先修改 host 和 port 以及 proxy 三個參數,
修改成你想要連線的mud位置和port號,
以及要使用的proxy server位置,

這邊要注意如果你的proxy server採用https,
proxy位置要用wss://;若無則用ws://

以原始物語為範例,可以修改成

host: 'psmud.ddns.net',
port: '6789',
...
proxy: 'ws://localhost:6200/', // 這邊是你的proxy server位置



5.在client端首先發送一個{connect:1}

這段說明和範例寫在wsproxy.js的檔頭註解中,
然而實際上我們要修改的是web client檔案的 src/socket.js
在該檔案46行之後加入

var init_json = '{ host: "' + Config.host + '", port: ' + Config.port +
', connect: 1 }';
ws.send(init_json);

整體看起來會像這樣

var onOpen = function(evt) {
log('Socket: connected');

connected = 1;
var init_json = '{ host: "' + Config.host + '", port: ' + Config.port
+ ', connect: 1 }'; // 加入這個
ws.send(init_json); // 加入這個

if (!o.proxy && o.type == 'telnet') {
...



6.修改文字編碼

到目前為止,你的proxy server已經可以遊玩英文mud了,
但如果你要玩台灣常見的big5中文mud,
還需要回到wsproxy.js檔案,修改402行,把 latin1 改成 big5
看起來像這樣

data = iconv.encode(data, 'big5');

這幫助你把client端丟出去的文字轉換成big5編碼,
讓原本的mud server能看得懂

同理,接收訊息也要能支援big5,
找到425行,在後面加一行
data = iconv.decode(Buffer.from(data), 'big5');

整段看起來像這樣

.on('data', function(data) {
data = iconv.decode(Buffer.from(data), 'big5');
srv.sendClient(s, data);
})

這段是幫你把mud server丟回來的文字用big5轉成utf8再丟還給網頁端顯示

到這裡為止,所有的設定就完成了



7.啟動proxy server

在 cmd 模式下,先進入proxy server的根目錄,
輸入 node wsproxy.js 指令啟動 proxy server

有看到 (ws) server listening: port 6200 就是成功了



8.連上網頁

假如你有自己的網頁伺服器,就把web client那包檔案丟到你的server上,
連到index.html這隻檔案,就可以從任何地方開始遊玩網頁版mud了,

如果沒有自己的伺服器也沒關係,
直接開啟瀏覽器,把index.html這隻檔案拖進去,也可以本地端執行喔




【實際DEMO】

以上實作的運行結果可以參考原始物語的WEB版入口,
當然我還有後續作一些版面或功能上的調整並未列在上述內容中,

傳送門在此→ http://psmud.ddns.net/client

註:網站暫不支援https連線



【心得】

我個人認為使用網頁連線,
對於大多數老手來說並沒有什麼明顯的好處 (汗)
首先bot相關的功能就跟Zmud沒得比,
再來連線多過一層proxy又要處理轉碼對於執行速度來說,多少還是有影響的,
只是目前我體感覺得影響不大就是了,可能是因為玩家數太少 (倒)

然而對比較新的玩家來說,
使用官方已經tune好的網頁版面,會比從制式化的mud連線工具連進去友善得多,
新玩家不用從頭研究怎麼對這個MUD設定做調適,網頁排版可以預先規劃好,
如顏色顯示,字體大小,字型選用,編碼設定這些通通不用管,
網頁打開就可以直接體驗到官方想呈現的理想狀態

同時因為不需要另外安裝client程式,
只要有瀏覽器就能直接進入遊戲遊玩,
對於推坑新人或許會是個助力,
當然至少還是要先安裝瀏覽器啦,不過IE都能跑,所以這應該不構成門檻,

對於上班族來說,可以把遊戲藏在瀏覽器的某個分頁裡,
應該也比開著看起來有點可疑的Zmud程式來得更不引人耳目,
這點是我自己之前玩小貓的世界Web版的心得XD


以上是我騙P幣的心得報告
分享給有需要的人
謝謝大家

--

本篇文撰寫感謝從去年重開機後長期支持原始物語的tong技術諮詢

--
Tags: 線上

All Comments

Agatha avatar
By Agatha
at 2021-06-02T03:02
感謝d大您發表的寶貴心得~~~ :D
Carol avatar
By Carol
at 2021-06-04T15:17
已收錄於精華區z-4-20
Callum avatar
By Callum
at 2021-06-07T03:32
Jack avatar
By Jack
at 2021-06-09T15:47
typers大您的小貓web給予我很多啟發
Madame avatar
By Madame
at 2021-06-12T04:02
推分享~
Noah avatar
By Noah
at 2021-06-14T16:17
推一個
Charlie avatar
By Charlie
at 2021-06-17T04:32
很厲害~讚~:)
Aaliyah avatar
By Aaliyah
at 2021-06-19T16:47
https://imgur.com/3LTpQEk 感謝, 成功~
Dinah avatar
By Dinah
at 2021-06-22T05:02
讚讚讚 謝謝taily大神幫忙驗證
Thomas avatar
By Thomas
at 2021-06-24T17:17
讚!!!

《超級炸彈人R ONLINE》炸彈人能玩吃雞!?

Franklin avatar
By Franklin
at 2021-05-30T12:24
※ [本文轉錄自 C_Chat 看板 #1WinDB3w ] 作者: bears8520 (熊) 看板: C_Chat 標題: [情報] 《超級炸彈人R ONLINE》炸彈人能玩吃雞!? 時間: Sun May 30 12:23:37 2021 大家好,我是貝卡 喜愛玩線上遊戲的玩家又有福拉 這次要介紹的 ...

03馬林魚轉16 傭兵人選

Ophelia avatar
By Ophelia
at 2021-05-30T02:36
更新一下 目前是CF楊松弦LV5 打速守都100 DH改BASIC紫 17蔣開鑼 力100 打93 速92 -- 看到上面那篇突然想起我有隊馬大魚 開場03 攻擊加成多 後面轉成16牛棚和守備加成多 03: https://imgur.com/Zhvp9vt 16: https://imgur. ...

[台服]2021/5/28 商城公告

Brianna avatar
By Brianna
at 2021-05-29T23:04
2021/5/28 商城公告 #虛空商城周末特賣 5/29 重開機 ~ 5/31 重開機 * EVENT 金幣抽獎券 10 紫晶 平均一億枚金幣 * 60% off 魔法能量水晶II 240 紫晶 * 50% off 紫 ...

OWL 2021 Week 7

Ula avatar
By Ula
at 2021-05-29T23:01
比賽時間 5/29 3:00、17:00 5/30 3:00、17:00 5/31 3:00 直播網址 https://www.youtube.com/overwatchleague/live (英) https://www.youtu ...

DLC後無限變化

Carol avatar
By Carol
at 2021-05-29T17:20
首先無限JCG的部分,超越都帶了輪迴女神 第一名 超越:輪迴女神帶滿 https://i.imgur.com/n05YD7X.png 牛仔蟲:沒新牌 第二名 造物:沒帶槍手/洛拉米亞,2席翁,3造物呼喚、1古代自動機械、1命運、2冥府 https://i.imgur.com/slNiUeU.png 超越: ...