[心得] Ubuntu + ES2lib 架站(2)

看板mud作者 (尋找一片海洋)時間11年前 (2013/01/24 18:21), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串1/1
0、寫在前頭 原本理想的狀況是,照本宣科之後一切都如同想像般美好,什麼設定都不需要, 只要把自己的權限提升到 admin,就可以在自己建立的世界當中胡作非為。先做出一 個妃子,再把它複製成三千甄嬛,從此就可以化身為四爺...(誤 但是當電腦系統不斷持續進步,程式也跟著演化的同時,我們拿到的MUDOS以及 MUDLIB並不一定如同十多年前般的水乳交融。相反地,反而如同後宮三千般的意外複 雜,有些舊式的寫法已經不見容於新的MUDOS當中。 這就是為什麼我要寫這篇賺賺P幣的原因了,但是另一個原因是,經典賽快到了, 沒有成本可以下注(爆 一、運行mudlib之後 0. 先定義一些用語: 啟動mudlib == /mud/bin/driver /mud/bin/es2.conf & 停止/終止mudlib == killall driver 或是== ctrl +c (如果不是在背景執行的話, 也就是執行時沒加 &) 1. 當我們成功的執行 /mud/bin/driver /mud/bin/es2.conf之後,可以試著用其他 的telnet tool連線到我們所架設的mud: telnet xxx.xxx.xxx.xxx xxxx 或是直接用Ubuntu來連線: telnet localhost xxxx 不意外的話,可以看到welcome畫面(定義在/mud/mudlib/adm/etc/welcome) 2. 這時候,我們可以不急不徐的鍵入自己想要創的ID,因為自己是唯一又是第一, 想要取什麼5566、7788的,一切操之在己。 但是,就在這個取完ID的摩門特,按下enter之後,畫面上竟然出現了"什麼?" 嗯? "什麼?" 是系統問我什麼,還是我取錯ID,叫做"什麼",還是說第一個帳號只能叫做"什麼?" 但是,我們一定不死心的又再敲下幾個字母,例如重複剛剛的ID再輸入一次, 系統畫面仍然會回答我們"什麼?" ◢▆▅▄▃崩╰(〒皿〒)╯潰▃▄▅▇◣ 當你多按下幾次回車鍵,就是所謂的enter鍵,只會多出幾個">"符號,並不能讓你 進入虛擬世界當四爺,我們就要回頭找找看系統處理登入程序的原始碼。 /mud/mudlib/adm/daemons/logind.c *ps: 以後為了節省時間,/mud/mudlib 就省略不打,直接用 /adm /include 代表在/mud/mudlib底下的檔案路徑 3. /adm/daemons/logind.c 到底做了什麼事呢? 很好,我也不知道。 但是在古鴿泡了一整天之後,我終於看到了一些關鍵字。input_to這個函數的寫法 已經過時了。 原本寫法是 input_to("xxx", ob); 現在(指mudos為fluffos-2.4時)都要改成 input_to((:xxx:), ob); input_to() 裡頭的 xxx, 指的是要呼叫的程序名稱, 把要呼叫的名稱都改用 (: :) 包起來。 這是不求甚解的做法。 想知道更多,請看 http://www.mudbuilder.com/simple/?t29.html 4. 好了,我們花了一堆功夫,將/adm/daemons/logind.c裡頭所有的input_to() 都改寫完之後,應該是可以快快樂樂的去當四爺了吧。 這時請先把剛剛執行的/mud/bin/driver /mud/bin/es2.conf停止 如果按什麼按鍵都不動,只要按下ctrl+c 就停了 或是在Ubuntu裡頭再開個terminal,下這個指令"killall driver" 再執行一次啟動程序 /mud/bin/driver /mud/bin/es2.conf *懶人可以在 bash_profile裡頭加上alias ex: alias runmud='/mud/bin/driver /mud/bin/es2.conf &' & => 在Linux背景執行程序 再source ~/.bash_profile 再度啟動之後,又看到令人雀躍的welcome畫面,小心翼翼地敲下去自己的ID, 使用這個名字將會創造一個新的人物﹐您確定嗎(y/n)﹖y 這次沒有再出現"什麼?"了,喔耶,總算離化身四爺又近了一步。 可是,嗯,我知道大家最怕的就是”可是、但是、不過、but”, 輸入資料到某些階段的時候就出問題了,那萬惡的”什麼?”又回到我們的面前。 唉,四爺再等下去恐怕都下檔了。 5. 這次我們要來學習看錯誤訊息,在/mud/mudlib/log底下會產生幾個檔案: debug.log ==> MUDOS(fluffos)執行時的錯誤 log ==> 編譯時會產生的錯誤 preload.log ==> 不解釋 這次因為是已經正常啟動mudlib,因此直接看log檔: 會發現一些在logind.c被編譯時產生的 undefine error 這種語法錯誤讓我們重新回到編寫 logind.c 這時是因為我們剛剛改寫過 input_to(),它會去加載同一文檔內的區域函數, 但是在檔案開頭並沒有宣告,所以編譯時會認為它是錯誤的。 請把遺漏的、有看到undefine的函數名稱,宣告在檔案開始的地方: ex: 你會在開頭的附近看到有這個宣告: private void init_new_body(object link, object user); 你就把所有缺少的函式宣告在這裡。 等改寫好之後,再砍掉原本執行的mudlib程序,再執行一次。 6. 當我們再度telnet到站台裡的時候,一路通暢的讓我們創建帳號,直到... 錯誤再度發生 to be continue... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.66.174.184 ※ 編輯: neca 來自: 210.66.174.184 (01/24 18:23) ※ 編輯: neca 來自: 210.66.174.184 (01/24 18:29) ※ 編輯: neca 來自: 210.66.174.184 (01/24 18:29)

01/24 18:44, , 1F
辛苦啦
01/24 18:44, 1F

01/24 20:42, , 2F
input_to那邊對我很有幫助,謝謝
01/24 20:42, 2F
文章代碼(AID): #1H0GieUg (mud)