Re: [閒聊] tmi2-mudlib 的更改

看板mud (網路地下城/文字遊戲)作者 (小太保)時間11年前 (2014/06/13 10:41), 11年前編輯推噓1(102)
留言3則, 2人參與, 最新討論串14/27 (看更多)
網頁好讀版: http://www.ptt.cc/bbs/mud/M.1402627296.A.1E8.html tmi2_fluffos_v3_改,20140612 版本 http://sanclaechan.myweb.hinet.net/tmi2_fluffos_v3_modify.rar 建議下載並解壓縮後目錄位置為 D:\tmi2_fluffos_v3_改\ (底下以 tmi2_v3_改 簡稱) WinXP 使用者,可直接雙擊 D:\tmi2_fluffos_v3_改\bin\啟動 mud 捷徑, 即可執行 mud。Win7 或 Win8 使用者,則務必先參考底下這篇: http://www.ptt.cc/bbs/mud/M.1399357070.A.366.html mud 啟動成功後,目前確定以 pietty 連線 localhost 5000 (Telnet),可 連線成功: http://imgur.com/IQwusvX.jpg
在 tmi2_fluffos_v3_改\ 目錄下會放一些圖片及說明文件。 目前連線 telnet://210.61.157.53:5000 可連到以最新版本所架的測試站 ,有公頻聊天指令可使用;mail 向 laechan.bbs@ptt.cc 申請 tmi2 頻道 互通,則可使用 tmi2 頻道進行跨站聊天。 ================================================================== 本次修改範圍: 2014/06/10~2014/06/12 一、虛擬物品系統既怪物掉落物系統實裝 相關檔案: /include/vobj.h /adm/daemons/vobjd.c /std/vobj.c (單純房間檔案) /cmds/wiz/_vobj.c /cmds/std/_ob.c 其它更動: /adm/etc/preload 載入 /adm/daemons/vobjd.c /std/monster.c 的 die 函數增加呼叫 vobjd.c /include/daemons.h 增加 VOBJ_D 定義 vobjd.c 使用 /data/vobj.o 儲存檔 核心指令有兩個,wiz 使用的 vobj 以及共通指令 ob,底下會有相 關 demo。理論上使用者不需知道 vobjd.c 的架構,只需瞭解上述兩 個指令如何使用即可。 vobjd.c 的兩個 mapping 資料架構如下 第一層主key 第二層 第三層 vobj_data = ([ "編號標頭":([ "編號":([ "name":"物品名稱", "value":"物品價格", . . ]), ]), ]); 例如 vobj_data["m"]["m001"]["name"] 即可取得 m001 的名字。 第一層主key 第二層 第三層 mob_drop = ([ "怪物所在目錄":([ "怪物檔名":([ "編號":掉落率數值, "檔名":掉落率數值, . . ]), ]), ]); 例如 mob_drop["/d/area/newbie/mob"]["rabbit1"]["m001"] 就可取得 "/d/area/newbie/mob/rabbit1" 的 m001 物品掉落率數值 mob_drop["/d/area/newbie/mob"]["rabbit1"]["/d/area/newbie/obj/map1"] 就可取得 "/d/area/newbie/mob/rabbit1" 的 map1 這個物品的掉落率數值 從上面可發現 mob_drop 亦可支援實體物品的掉落。 這個系統最大的好處,就是在做虛擬物品的設定或是怪物掉落率的設   定時,都無需動到怪物或是物品檔案,比方傳統我們設計打死一隻怪   物時會掉落實體物品,必須先將該物品 clone 出來 move 到該怪物   上,或是讓怪物自訂 die 函數來執行物品掉落,往後則只需要將掉   落資訊設定在 mob_drop,怪物一被 call die 就會執行物品掉落判   斷。 二、新增 ansi color 的相關函數 寫在 /adm/simul_efun/format_string.c (字串處理相關) 包含 get_ansi_color 及 no_ansi_color 兩個函數。 比方某字串是 "$HIR$test$NOR$",get_ansi_color 可以將這個字串 轉成 HIR"test"NOR,即 test 這樣的顏色字串。 而 no_ansi_color 則會將顏色字串消去,上述字串會變成 "test"。 這兩個字串我是規劃日後有可能頻繁讀取,所以放進全域函數區。 (sanc 也有類似的東西只是放成 /adm/daemons/color_d.c) 三、模擬的(陽春的) intermud channel 設定實裝 相關檔案: /include/simul_intermud.h /adm/daemons/channeld.c /adm/daemons/logind.c 相關修改: /std/user.c 的 cmd_hook 函數,增加 "tmi2" 頻道 指令。 模擬結果類似底下 http://imgur.com/ExDbzQA.jpg
channeld.c 主要新增幾個 socket 相關的函數,並在 channel 函數內新增 "tmi2" 頻道指令(使用者可更改此指令名稱)。 logind.c 則在 get_name 函數內新增 socket 訊息的接收程式 段落。 四、其它修改 /bin 目錄下新增另一個啟動 mud 的捷徑「啟動 wiz」。先執行 「啟動 mud」再執行「啟動 wiz」即可讓自己的 pc 跑兩個 mud ,一個預設 port = 5000,一個預設 port = 6000。   兩個 mud 跑同一個 /lib,但是 6000 預設只有 wiz 可登入, 相關程式段落可見 /adm/daemons/logind.c 的 get_name 函數。 http://imgur.com/OZ3KXWb.jpg
修正 wear all 時的顯示錯誤。 修正當戰鬥中下 recall 回到起始點後,戰鬥不會結束的問題。 (修正與戰鬥對象不同房間時戰鬥不會結束的問題) 修改 /adm/daemons/newuserd.c,為新玩家加上初始等級與經驗   值的設定。(可搜尋該檔案內的 set_levels 字串) 新增 /cmds/std/_attack2.c、_config2.c、_score2.c,做為日 後使用者寫指令時的參考(正式指令是 attack、config、score) 類似的做法日後會持續採用,非正式指令後面都會有編號,並且 是可執行的,使用者就可依執行結果做為自己寫指令時的參考。 ============================================================ 底下是一些 demo: > vobj -list 虛擬物品名稱 編號 單位 種類 價格 攜帶 交易 販賣 =============================================================== 兔毛 m001 個 怪掉落 362 99 可 可 兔牙 m002 個 怪掉落 501 99 可 可 =============================================================== > vobj -export vobj -set 兔毛;m001;;;;362;;;;; vobj -set 兔牙;m002;;;;501;;;;; 上面的意思就是說,所有設定的結果會被 -export 匯出來。複製它 們再貼上,就能把資料設定進去,如下.. > rm /data/vobj.o Rm: /data/vobj.o removed. > update /adm/daemons/vobjd.c /adm/daemons/vobjd: Updated and loaded. > vobj -list 虛擬物品名稱 編號 單位 種類 價格 攜帶 交易 販賣 =============================================================== =============================================================== 這樣就沒東西了,然後把上面兩行複製後貼上: > vobj -set 兔毛;m001;;;;362;;;;; vobj -set 兔牙;m002;;;;501;;;;; 就會出現如下訊息: vobj_data[m][m001]=([ "value" : 362, "name" : "兔毛" ]) 設定 ok. vobj_data[m][m002]=([ "value" : 501, "name" : "兔牙" ]) 設定 ok. > vobj -list 虛擬物品名稱 編號 單位 種類 價格 攜帶 交易 販賣 =============================================================== 兔毛 m001 個 怪掉落 362 99 可 可 兔牙 m002 個 怪掉落 501 99 可 可 =============================================================== 這樣設定就回來了,這就是 -export 的原意。 而因為可以用複製貼上的方式匯入資料,因此使用者也可以自己在記事本 上編輯要匯入的一整串內容,編好後貼上,就能做整批式的匯入。 (刪除也是一樣) 怪物掉落物的設定亦參照類似的概念 > vobj -mob_drop_list all cd /d/area/newbie/mob vobj -mob_drop rabbit1 set m001 = 5000 vobj -mob_drop rabbit1 set m002 = 5000 vobj -mob_drop rabbit1 set /d/area/newbie/obj/map1 = 5000 將上面的結果,複製貼上於 mud,即可完成大批式的怪物掉落物設定 其它內容可參見 vobj 的指令說明。 ============================================================ ob 指令的部份: > ob 你的物品欄帶著 2/99 種物品: ╔════════════╦════════════╦══════════╗ ║ 1.兔毛 ( 56)║ 2.兔牙 ( 53)║          ║ ╠═════╦══════╩════════════╩══════════╣ ║ 指令說明 ║ob ? (指令 i 可以看"身上的物品") ║ ╚═════╩══════════════════════════════╝ 對照身上的資料欄位 > data me vobj : ([ "m002" : 53, "m001" : 56 ]) 亦寫有 query_vobjs、set_vobjs、add_vobjs、del_vobjs 等函數。 > ob view m001 兔毛(物品編號: m001) ──────────────────────────── 型態:怪掉落 重量:99 價格:362 販賣:可 交換:可 一個兔毛,可向收集品商人購買。 ──────────────────────────── 檔案路徑:/std/vobj。 使用者身上不需帶有兔牙,只要知道 m001 這個編號就能 view。 這就是編號的好處,因為當玩家知道能 view m001 時,自然就會 想 view 看看有沒有 m002、m003、.... 亦即玩家可因此知道全部的 mXXX 物品的資訊。 > ob view 兔牙 兔牙(物品編號: m002) ──────────────────────────── 型態:怪掉落 重量:99 價格:501 販賣:可 交換:可 一個兔牙,可向收集品商人購買。 ──────────────────────────── 檔案路徑:/std/vobj。 ob view 亦支援直接給物品名稱的 view 方式。 > ob search 兔牙 線上目前擁有物品 兔牙 的玩家人數: 1 人. 其它內容可參見 ob 的指令說明。 ============================================================ > vobj -mob_drop_list all cd /d/area/newbie/mob vobj -mob_drop rabbit1 set m001 = 5000 vobj -mob_drop rabbit1 set m002 = 5000 vobj -mob_drop rabbit1 set /d/area/newbie/obj/map1 = 5000 上面的 5000 即是 50.00% 的意思,即掉落機率 50%。 > call rabbit;die 小兔兔(Small Rabbit)發出一聲慘叫!! 小兔兔(Small Rabbit)慢慢的倒在地上...死了! 你得到了一個兔牙. 你得到了一個新手地圖(newbie map). OBJ(小兔兔 /d/area/newbie/mob/rabbit1#24)-> die() = 0 掉落率採串聯判斷,也就是怪物有可能一次掉落兩種物品以上,只 要它被設定會掉兩種物品以上。 怪物檔不需做任何更動,即可實裝掉落效果,就是此系統最大好處 =========================================================== tmi2 遠端頻道交談指令,以架在我自己 pc 下的 tmi2_v3_改 與 sanc 的交談為例 > tmi2 向 sanc 端發送訊息測試 > 【遠端】Laechan(TMI-2 Win32)說道: 向 sanc 端發送訊息測試 (From: Laechan's PC) ↑  我這一邊發送出去的訊息 【遠端】Laechan:進階法師(Sanctuary)說道: sanc 端有收到訊息 (From: 聖殿主機) ↑ sanc 那邊回回來的訊息 > chatlog (10:31) 【遠端】Laechan:進階法師(Sanctuary)說道: sanc 端接收到訊息了 (From: 聖殿主機) (10:31) 【遠端】Laechan(TMI-2 Win32)說道: 向 sanc 端發送訊息測試 (From: Laechan's PC) 目前 tmi2_v3_改 的 chatlog 會自動紀錄收到的訊息。 tmi2_v3_改 的使用者可向我申請開通 tmi2 頻道互連,只要給我底下的資訊 1.tmi2_v3_改 的站台 ip 及使用的 port 2.你想使用的站台名字(沒有申請這一項時,From: 那邊就會帶出 IP 而非名字) 非 tmi2_v3_改 的 mud adm 亦可向我申請,只要你的 mud 有針對 logind 處理檔及公頻管理檔做對映的修改即可,需修改項目就自行 download 最上 面的 tmi2_v3_改 的壓縮檔,download 下來解壓縮後自行參照對映的程式 段落即可。(像 sanc 就是參考 tmi2_v3_改 的相關程式段落做對映修改) PS因為遠端訊息的最後都會由 SERVER 端附加 From 的資訊,各站使用者就  可根據這個 From 資訊做進一步的過濾。 其它詳見修改日誌。 Laechan -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 210.61.157.53 ※ 文章網址: http://www.ptt.cc/bbs/mud/M.1402627296.A.1E8.html ※ 編輯: laechan (210.61.157.53), 06/13/2014 10:42:04

06/13 15:00, , 1F
稍做修改後更新哩
06/13 15:00, 1F

06/13 16:11, , 2F
推!
06/13 16:11, 2F
> k rabbit 你對著小兔兔喝道: 「小王八蛋! 今日不是你死就是我活! 」 ☆☆☆ 戰 鬥 開 始 ☆☆☆ > 你手握格鬥匕首戳向小兔兔,造成巨大的傷害!(340) 小兔兔用兔牙咬向你,但是無關痛癢... 你手握格鬥匕首捅向小兔兔,造成巨大的傷害!(340) 小兔兔用身體撞向你,但是無關痛癢... 你手握格鬥匕首捅向小兔兔,造成巨大的傷害!(340) 小兔兔用身體撞向你,但是無關痛癢... 越來越有 mud 該有的樣子了。目前還是會將一些存取繼續函數化。 ※ 編輯: laechan (210.61.157.53), 06/13/2014 17:19:35 ※ 編輯: laechan (122.117.106.224), 06/13/2014 19:16:31

06/13 19:16, , 3F
晚上從家裡架 mud 測試,確定tmi2可通
06/13 19:16, 3F
文章代碼(AID): #1JccJW7e (mud)
文章代碼(AID): #1JccJW7e (mud)