看板 mud_sanc 關於我們 聯絡資訊
hlead 你可以參考。 ※ 引述《hlead (希多)》之銘言: /std/mob/living.c varargs int shut(string msg,int damage,int chance,mixed kinds,object tar, int times) { if(!times) times=1; if(!kinds) MOB_D->shut(me, msg, damage, chance, ({"dam","physics"}), tar,times); else if(stringp(kinds)) MOB_D->shut(me, msg, damage, chance, ({kinds,"physics"}), tar,times); else MOB_D->shut(me, msg, damage, chance, kinds, tar,times); 上面簡單的說,怪物呼叫 shut 時會傳六個參數 mob->shut(殺傷敘述,傷害,命中,種類陣列,對象,連擊數); 連擊數就是上面的 times, 若沒有給 times 就自動設成 1。 然後 mob 的 shut 會呼叫 MOB_D 的 shut,並傳七個參數給它。 MOB_D->shut(把自己傳過去,殺傷敘述,傷害,命中,種類陣列,對象,連擊數); : /adm/daemons/mob_d.c的某段函式: : int shut(object me,string msg,int damage,int chance, : mixed kinds,object tar,int times) 所以這裡會看到七個參數。 : { : SHUT_D->shut_tar(me,tar,msg,damage,chance,kinds,times); 然後 MOB_D 的 shut 又會把七個參數傳給 SHUT_D : return 1; : } : 以前是 : SHUT_D->shut_tar(me,tar,msg,damage,chance,kinds,1); 1 有可能是刻意改的(然後忘記改回). 刻意的原因通常是因為系統 發生莫名奇妙的 lag 狀況, 為控制損害程度就先把怪物的連擊數 先改成 1。 (通常是不得已的情況才會這樣改, 而且通常也改了別的東西) : user_d.c的則是 : SHUT_D->shut_tar(me,tar,msg,damage,chance,kind); : 可是他莫名的是有效的...所以蠻好奇原因的... 你要先看 user.c, user.c 沒有定義 shut 時就去 /std/user 裡 面再找 shut > grep -n shut *.c [/std/user/attack.c] 126:varargs int shut(string msg,int damage,int chance, 在 attack.c 裡頭是這樣寫的.. if(!kinds) SHUT_D->shut_tar(me,tar,msg,damage,chance,({"dam","physics"}),times); else if(stringp(kinds)) SHUT_D->shut_tar(me,tar,msg,damage,chance,({kinds,"physics"}),times); else SHUT_D->shut_tar(me,tar,msg,damage,chance,kinds,times); 上面簡單的說就是在 attack.c 直接就 call SHUT_D。 user.c 跟 user_d.c 的差別,一般來說可以用一種例子來做說明 ,玩家物件基本上是 /std/user.c,所以如果某函數寫在 user.c 裡頭,則如果你修改了該函數的內容,你的更動並無法「即時」反 映,要嘛 shutdown,不然就是請玩家 quit(allquit 指令就是這 樣子來的),玩家 relogin 後才能套用更新後的函數。 但如果你這樣子寫... int xxx() { USER_D->xxx(); return 1; } 也就是說把 xxx 這個函數的本體寫在 user_d.c 的話,這樣你改 了 user_d.c 的 xxx 函數、然後 update user_d.c,這樣寫在 user.c 的 xxx 函數就會去呼叫「已更新的 xxx 函數」,這樣就 能達到即時更新的目的。 但是如果過了一段時間,你確定 xxx 函數不會再被更改、或者它 並不需要很頻繁地更動,而 xxx 函數卻經常 user 本身呼叫時, 最好就把 xxx 函數挪回 user.c 中,improve_skill 函數就有做 挪回,improve_skill 函數原先是寫在 user2_d.c 中。 Laechan -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.117.3.82
hlead :soga..了解了.. 07/28 21:50