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

看板mud_sanc (Sanctuary - 聖殿)作者 (小太保)時間15年前 (2010/08/17 22:10), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串5/5 (看更多)
※ 引述《justinj (闇冥)》之銘言: : 問題3..例如..中遲緩的這段時間(120sec)內 : 玩家按enter(或test)後5秒內不能動...5秒後此指令執行,且可以再次按 : 這樣經過24次後..此效果結束.... 玩家「只」按 enter 嗎?我假設你設定 120 sec 內最多 只允許玩家下 24 次指令,而且間隔至少 5 秒。 int cmd_hook(string str) { object ppl=this_player(); int t=time(); string verbs=query_verb(); if(!verbs || verbs=="") return 1; if(query("can_cmds")) { delete("can_cmds"); return 0; // 執行原先的效果 } if(query("cant_cmd")>t) ppl->receive(""); // 不管下什麼指令都傳回空字串 // 這裡也可以設定提示訊息告知無法下指令 else { set("cant_cmd",5+t); call_out("delay_cmds",5,ppl,query_verb()+" "+str); } return 1; } int delay_cmds(object ppl,string cmds) { if(ppl) { set("can_cmds",1); // 玩家在 force_me 的瞬間又會 call cmd_hook // 這時 cmd_hook 會判斷到有 query("can_cmds") ppl->force_me(cmds); } return 1; } 這樣玩家只要在能被允許下指令的時候「下了一個指令」.. 一、這個指令 5 秒後才會有作用。 二、這 5 秒內他無法下其它的指令。 : : 問題1..玩家跑到某房間時add_action()增加指令,remove_action()移除指令 : 這2個只能玩家本身去觸發嗎? add_action() 最常被寫在 void init() 函數中的原因, 在於 init() 函數通常都是由玩家去呼叫的。 例如進入一個有噴水池可 drink 的房間... 玩家→呼叫房間的 init()→再呼叫到 add_action() 這時就相當於玩家為「呼叫主體」。 void add_action( string | function fun, string | string *cmd, int flag ); 無回傳值 add_action( 字串 或 函數 fun, 字串 或 字串 *cmd, 整數 flag ); 由上可知它無法模擬「由他人呼叫,然後讓目標玩家可下 什麼指令」的情況,這是因為玩家能下什麼指令,是儲存 在玩家本身的物件資料中的,那個資料只有玩家自己能動 所以,同樣的,例如有一行.. call_out("ooxx",5,......) 這個 call_out 「同樣也是由玩家本身」去 call 的,所 以當 5 秒後 ooxx 函數執行時.. int ooxx() { write("test.\n"); this_player() 就會看到 "test" 訊息的原因就在這裡。 呼叫主體的概念最常被用在「攻擊的反擊」上,因為當怪 物對玩家施展攻擊時如下.. mob->shut(ppl) ->check_combat(mob,ppl) ->check_counter(mob,ppl)-> ppl->shut(mob) 這一連串的動作通通都是由 mob->shut(ppl) 開始的,因 此到 ppl->shut(mob) 時,實際上並不是 ppl->shut(mob) 而是 mob->shut(mob) 變成 mob 自己殺自己。 這就是獨孤、反擊、熾光障壁初期 bug 的由來。 Laechan -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.117.3.82
文章代碼(AID): #1CQfW-qh (mud_sanc)
文章代碼(AID): #1CQfW-qh (mud_sanc)