Re: [wizs] 使用問題及其它效果問題...

看板mud_sanc (Sanctuary - 聖殿)作者 (小太保)時間15年前 (2010/08/16 13:28), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/5 (看更多)
※ 引述《justinj (闇冥)》之銘言: : 1.add_action(func,cmds)...這個是增加玩家的指令吧, : 假如某房間裡有a,b,c三位玩家..那我要如何只有a,b這2位玩家有指令,c沒有呢? 有兩種.. 一、可下 cmds 指令,但是沒有反應。 二、連 cmds 指令都無法下。 因 add_action 一般是在 void init 函數裡面做運用 (不寫在這個函數裡面也可以),所以.. void init() { 若你不想讓某位玩家能下 cmds 指令 return ; else add_action(func,cmds); } 另一種是.. int func(string str) { 若你不想讓某位玩家能正常執行該指令 return 0; // 通過上面的判斷代表可正常執行底下你寫的程式段 . . } : 2.add_action(func,*cmds)..這個好像也可以用 : 像add_action("go_xxx","east"),add_action("go_xxx","west") : 可合併成add_action("go_xxx",({"east","west"})) : 那我的問題是..我要如何判別玩家是按west,還是按east?(放在go_xxx來判斷的) 一、若你用 east 跟 west 當 cmd,那 "go east" 不會被 判斷到;相同的,若你用 go 當 cmd,那 "east" 跟 "west" 不會被判斷到。 所以通常不會這樣做,而會用 set("pre_exit_func/方向","判斷函數"); 來做為判斷方式,這樣玩家不管是下 east, e 還是 go east 都會被判斷到。 二、你要「判別玩家是按west,還是按east」的簡單做法就 是像上面寫的那樣。 以上兩個很多區域應該都看的到範例,可自行 more。 : 3.我想到了一種效果叫遲緩,衰老...效果如下 : 遲緩..在一定時間內玩家所按的指令都會延後(為了防止意外,當按第一個指令cmd1 : 後n秒內按的無效,也就是cmd1執行後所按的指令才有效) : 衰老..除有以上效果外,每個指令都會耗體力(或3p),或3p上限暫時只剩1/3 : 以上2效果要怎麼寫... : ps....readly_attack是延遲攻擊吧...(還是我記錯了) 簡易自助做法是把某東西 move 到該玩家身上,該物.. void init() { add_action("cmd_hook","",1); } int cmd_hook(string str) { string cmd=query_verb(); . . 這樣假設你下 say test,則 cmd = say,str = test。 不過我不太懂你遲緩那邊的用意,一定時間內玩家所下 的指令都會延後,簡易做法是弄個 buffer 把玩家下的 指令存起來,一段時間後才執行,但它有個問題,就是 「一段時間後才執行時」又會通過上面的 cmd_hook 判 斷「而再次延後」。 下 say test ← cmd_hook 將該指令延後 5 sec ↓ 5 sec 後 執行 say test ← cmd_hook 又將該指令延後 5 sec ↓ 循環 因為「你下任何指令─包括被延後的」都會經過 cmd_hook 判斷。 所以比較保險的做法,是設 timer, int cmd_hook(string str) { if 在時限內 call_out("delay_exec_cmd",看設幾秒,query_verb()+" "+str); else return 0; } 但是它有兩個缺點.. 一、玩家在時限內拼命執行指令,將產生超多 call_out。 二、該物品較難回收。 至於耗體力則是較簡易的做法,上面改一下就有了。 Laechan -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.117.3.82
文章代碼(AID): #1CQCo0ZD (mud_sanc)
文章代碼(AID): #1CQCo0ZD (mud_sanc)