推 tenyfish :我clone了一把白瓦的blade殺 傷害740 1.162.184.31 06/16 00:33
以武器為例,/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

推 tenyfish :然後我竟然忘了recall的存在 哈哈 1.162.184.31 06/16 00:50
推 tenyfish :有照你的文件 用data確認傷害 114.37.55.240 06/16 01:04
推 tenyfish :我先睡了謝謝l大幾個指令摸了一下 114.37.55.240 06/16 01:09
→ laechan :今天繼續新增新的系統 210.61.157.53 06/16 09:14
→ laechan :新增數字圖防機程式 210.61.157.53 06/16 09:57
在 win 下,比方你進入某一個目錄,按右鍵→排列圖示依→修改日期,
就可以知道這個目錄有被我動到什麼,以及更動的順序是什麼,比方如
下:
http://imgur.com/9uBO1zJ.jpg

→ laechan :今天進度不錯,這禮拜至少可再釋出1次 210.61.157.53 06/16 16:54
→ laechan :明天會針對/doc/emote稍微做個整理 1.165.194.160 06/16 19:25
→ laechan :並開始動貨幣 1.165.194.160 06/16 19:41
推 tenyfish :確定有傷害還是殺不死兔子 111.243.135.25 06/16 23:20
那就檢查 /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
→ laechan :今天應可完成新版的 help 210.61.157.53 06/17 12:05
→ laechan :新的 help 指令完工 210.61.157.53 06/17 15:10
→ laechan :drawmap,makearea,trans指令修改完畢 210.61.157.53 06/17 16:38
→ laechan :明天會對戰鬥系統做更多的更動 210.61.157.53 06/17 17:21
→ laechan :明天的目標就是完成區域生產架構 61.224.75.116 06/17 22:55