網頁好讀版: 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