Re: [閒聊] tmi2_v3_改 使用回饋/提問
※ 引述《tenyfish (何時才有發言權?)》之銘言:
: 趁心血來潮,就把 Mud lib 抓下來摸一摸了,
: 約莫花了1個小時讀new_wiz及directories等文件
: 然後在u/xxx/開了自己的workroom.c,寫了幾個房間這樣。
: 以下是簡單的心得,不一定有參考價值 :
: 1.因為之前有摸過DS MUDLIB所以我直覺得就改完設定
: 開runmud.bat,然後就出錯了(因為driver.exe改位置了)
: 原來東西都放在bin裡面了,而且都有中文註記,不錯
: 2.檔案資料架構相對DS mudlib簡單,而且都有原文說明
: 這一點對於新人入門比較方面一點
: 3.DSmudlib會幫有權限的人直接開資料夾,而看起來TMI2要自己去開
: 不然home只會到一個clone的workroom,要是能自動開的話也不錯。
: 有些還沒摸出來,我就直接在這裡提問了,
: 懶的回我可以自己再摸看看。
: 4. 回wiz.c有指令嗎 除了goto之外
: 5. 要如何設定home會到的room?是叫workroom.c嗎?
: 6. 這裡有任何快速編輯當下房間的指令嗎
: 例:在DSmudlib的 modify room long 這只是一個房間
: 只是一些當下的想法
是通常沒那麼晚睡^^;
tmi-2 的話,通常以 "laechan" 這個使用者為例,如果有
/u/l/laechan/workroom.c 的話,按 home 就是 move 到這
個物件,沒有的話就是 move 到你看到的那個 clone 出來
的房間。
換言之你瞭解其運作原理的話 /cmds/wiz/_home.c 指令自
己寫也可以,我在 tmi2_v3_改 寫的一些指令就是這樣子寫
來的。
/d/area/wiz.c 則是用 recall 指令,而且是要 wiz 身份
,非 wiz 身份則會到 /d/area/newbie/room/007.c,這個
修改日誌有提到可參考。
workroom.c 不是重點,/cmds/std/_recall.c 才是,一邊
看這指令執行的結果,一邊 more 這個指令的內容,兩相對
照就比較能瞭解它是幹嘛的,瞭解其原理的話就能自己寫。
區域房間的部份,我有更快的方法,我在 mud 板有張貼過
這個方法以及實際的 demo 結果,我預計等改到差不多了才
會把區域產生系統放進去。
不論是 roommaker 或是 modify、setroom、....這些做法
對我來說都太沒效率了,萬一不幸的你找不到人一起架站,
你只能一個人架的時候,tmi2_v3_改 就是「即便你只有一
個人」,你也能架站、能維護、能持續發展及擴充。
區域產生器
https://www.ptt.cc/bbs/mud/M.1320510743.A.4BB.html
https://www.ptt.cc/bbs/mud/M.1320564310.A.5D9.html
https://www.ptt.cc/bbs/mud/M.1321636486.A.0FA.html
新 mud 的設定 - 區域篇
https://www.ptt.cc/bbs/mud/M.1348040578.A.C4A.html
有問題都能盡量提出,在你原本的那篇提出也可,我都會
集中在這篇說明。
==================================================
殺不了兔子是因為我就是那樣子設定的,你可以參考前面
tmi2_v3_改 釋出的相關文章。
http://www.ptt.cc/bbs/mud/M.1402366361.A.1FB.html
它的關鍵段落,放在 /adm/simul_efun/attack.c 裡面的
normal_attack 函數,如果你有拿武器就有 damage 值那
或許就殺得死,你可以 clone /d/area/newbie/wp 目錄
下的武器出來 wear,然後再打看看。
戰鬥系統也會有說明文件。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.165.194.160
※ 文章網址: http://www.ptt.cc/bbs/mud/M.1402849541.A.F0C.html
※ 編輯: laechan (1.165.194.160), 06/16/2014 00:29:22
推
06/16 00:33, , 1F
06/16 00:33, 1F
以武器為例,/cmds/std/_wear.c 會看到最終它做了一個
wear_xx() 的呼叫,這個函數是寫在 /std/weapon.c 裡頭
,會寫在這裡是因為所有的武器都是 inherit 它。
(也就是 inherit WEAPON = inherit "/std/weapon.c" )
函數裡面一定會有一行就是
玩家->add_damages(武器的damage);
而它要怎麼跟指令對照呢? 就是你 wear 前 data 一下自
己,wear 後再 data 一下自己,就能發現有兩個數值有改
變: damage(傷害) 與 hit_chance(命中)
(或是 call me;query;"damage" )
我要強調的是,「這是我為 tmi2_v3_改 所做的雛形規劃
」,將來要拿 tmi2_v3_改 架站的人,是可以有自己的規
劃的,就像我也不是照 tmi2_v3 原本的規劃,而是自己寫
一樣。
tmi2 的目錄規劃很簡單,核心目錄說穿了就底下幾個
/adm/daemons
/adm/etc
/adm/simul_efun
/adm/obj
/std
/cmds
/data
如果你會用 grep 指令的話你幾乎能找到你想要找的任何
資訊,如果你不會用也沒關係,因為 win 也提供依關鍵
字搜尋到檔案的功能,所以你確實可以將重點擺在「我今
天看到了一項有中文的執行結果,我就用它來當關鍵字去
找出它到底是被寫在哪裡」,這是確實可以的。
比方我要找「巨大的傷害」是寫在哪..
http://imgur.com/JpPBIek.jpg

※ 編輯: laechan (1.165.194.160), 06/16/2014 00:59:03
推
06/16 00:50, , 2F
06/16 00:50, 2F
推
06/16 01:04, , 3F
06/16 01:04, 3F
推
06/16 01:09, , 4F
06/16 01:09, 4F
→
06/16 09:14, , 5F
06/16 09:14, 5F
→
06/16 09:57, , 6F
06/16 09:57, 6F
在 win 下,比方你進入某一個目錄,按右鍵→排列圖示依→修改日期,
就可以知道這個目錄有被我動到什麼,以及更動的順序是什麼,比方如
下:
http://imgur.com/9uBO1zJ.jpg

像這樣一排就知道我更動了啥,像最新的更動就是 _xxx2.c 那三個指
令,再之前就是 _note.c、_wear.c 這幾個指令。
※ 編輯: laechan (210.61.157.53), 06/16/2014 12:14:16
→
06/16 16:54, , 7F
06/16 16:54, 7F
→
06/16 19:25, , 8F
06/16 19:25, 8F
→
06/16 19:41, , 9F
06/16 19:41, 9F
推
06/16 23:20, , 10F
06/16 23:20, 10F
那就檢查 /adm/simul_efun/tell_room.c
> grep -n show *
[/adm/simul_efun/attack.c]
307: // 讓 show 依照 result 是否 >0
309: show(me,tar,msg,result[0]);
312: // 內迴的極限就在上面, 即內迴 n 次,show 就會被呼叫 n 次
313: // show 的呼叫如果
[/adm/simul_efun/tell_room.c]
11:// show 最好是用 int 宣告
12:varargs int show(object me,object tar,string msg,int damage)
傷害是從 attack.c 的 normal_attack 函數呼叫 show 函數來執行的。
if(damage>0)
tar->receive_damage(damage);
然後再看 /std/body/attack.c 的 receive_damage 函數
> grep -n receive_damage *
[/std/body/attack.c]
15:// Added receive_damage() and receive_healing() systems, Watcher 3-27-93
117:int receive_damage(int damage) {
143:// positive healing calls. receive_damage() should be used for damage.
dam = query("hp") - damage;
if(dam < 0) dam = -1;
// 暫時 abort by laechan@sanc 2014/06/01
// set("hp", dam);
return 1; }
這就是為何打不死的原因。以上也是一種 trace 的 demo,你可以
參考,tmi2 有些東西是固定的,tmi2_v3_改 也不打算做太大的變
動,以上面來說呼叫 receive_damage 進行扣血就是 tmi2 的傳統
,我是從 sanc 也是這樣做的來推測。
sanc 的 int 大改過 tmi2 mudlib,結構較 tmi2_v3 更簡單,我
有考慮也做這樣的大改。比方你 update -R /std/monster.c:
> update -R /std/monster.c
/std/priv.c: Updated and loaded.
/std/object/ob_logic.c: Updated and loaded.
/std/object/sec_ob.c: Updated and loaded.
/std/body/more.c: Updated and loaded.
/std/body/wild_card.c: Updated and loaded.
/std/body/alias.c: Updated and loaded.
/std/body/track.c: Updated and loaded.
/std/body/attack.c: Updated and loaded.
/std/living/messages.c: Updated and loaded.
/std/coinvalue.c: Updated and loaded.
/std/living/env.c: Updated and loaded.
/std/object/contents.c: Updated and loaded.
/std/living/edit.c: Updated and loaded.
/std/living/skills.c: Updated and loaded.
/std/living/spells.c: Updated and loaded.
/std/body.c: Updated and loaded.
/std/living.c: Updated and loaded.
/std/monster: Updated and loaded.
但是在 sanc 則是
> update -R /std/monster.c
/std/ob/mob.c: 更新及載入了.
/std/mob/living.c: 更新及載入了.
/std/mob/attack.c: 更新及載入了.
/std/monster: 更新及載入了.
int 這樣的改版不僅是我所欣賞的,也是我想在 tmi2_v3_改 實
作的。
※ 編輯: laechan (1.165.194.160), 06/17/2014 00:04:03
→
06/17 12:05, , 11F
06/17 12:05, 11F
→
06/17 15:10, , 12F
06/17 15:10, 12F
→
06/17 16:38, , 13F
06/17 16:38, 13F
→
06/17 17:21, , 14F
06/17 17:21, 14F
→
06/17 22:55, , 15F
06/17 22:55, 15F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 5 篇):
mud 近期熱門文章
PTT遊戲區 即時熱門文章