close


例一:

在rw裡, 我想要把軍人叫來, 等他們都到了的時候, 再做下一步動作(例子中是各給軍人300繃帶)

假設說收到的訊息是下面這樣, 而且已知要等剛好3個軍人


藍藍(Fighter)氣喘虛虛地趕到了此處。
藍藍(Fighter)已到達目的地。
小可(Warrior)氣喘虛虛地趕到了此處。
小可(Warrior)已到達目的地。
喬喬(Battler)氣喘虛虛地趕到了此處。
喬喬(Battler)已到達目的地。


觸發可以寫

pattern:
氣喘虛虛地趕到了此處。$
(做法一)command:
#add waited_count 1
#if (@waited_count = 3) {#forall {fighter|warrior|battler} {give 300 album to %i;y}}


為了讓waited_count正確計算, 在叫軍人之前要把它先歸零, 用waited_count=0
為了方便, 我就會將這個機裡叫軍人的部分寫一個alias
#alias call_soldier {#forall {17|30|35} {labor %i};waited_count=0}
然後叫人的地方下call_soldier就不會忘記歸零

另一個做法是讓計數器到達3就自動歸零, 在這個做法下把上面觸發的command改為
(做法二)command:
#add waited_count 1
#if (@waited_count = 3) {#forall {fighter|warrior|battler} {give 300 album to %i;y};waited_count=0}

或者不歸零, 每次是3的倍數就觸發
(做法三)command:
#add waited_count 1
#if {(@waited_count \ 3) = 0} {#forall {fighter|warrior|battler} {give 300 album to %i;y}}

後面這二種做法, 都是不靠其他地方的設定(不在叫軍人之前歸零這裡要用的變數), 在這個觸發裡就處理完所有的事
感覺起來好像很好, 之後要改東西的時候不會有少改的地方,
但這二個做法有風險, 機有可能會亂掉

例如, 某次呼叫軍人的時候, 其中有一隻軍人在死亡狀態無法呼叫,
這時會停機, 你可以手動決定要用二隻軍人打, 或是等軍人復活

如果是做法一, 我可以手動給bandage然後繼續, 或者等軍人復活再下一次call_soldier, 不會出問題
但在做法二跟做法三裡, 在第一次失敗時因為count已經到達2, 下次叫軍人時, 第一隻軍人到的時候就會發動觸發, 造成機錯亂
當然我一定要保持所有東西在這個觸發裡的話, 我可以用一些小技巧,
例如count=1的時候(第一隻軍人到)設一個alarm在多久之後把count歸零,
當count沒有正確到達3的時候就會發生作用,來解決上面機錯亂的問題
(做法四)command:
#add waited_count 1
#if (@waited_count = 3) {#alarm {+60} {waited_count=0}} //60是假設軍人最遲60秒內全會到
#if (@waited_count = 3) {#forall {fighter|warrior|battler} {give 300 album to %i;y};waited_count=0}

但這個作法我是覺得把簡單的事情做複雜了, 而且還是有可能造成其他的問題(例如60秒內叫了二次軍人)
所以我推薦的是做法一



例二:
留言版的讀者提問

如果連績放完五pe時,會連續出現五次體力恢復,如以體力恢復為觸發,要如何等第五次後才重新集氣,放pe呢?

假設說收到的訊息是像下面這樣, 而且已知是等5次

你的體力恢復了一些。
你的體力恢復了一些。
你的體力恢復了一些。
你的體力恢復了一些。
你的體力恢復了一些。

觸發可以寫

pattern:
你的體力恢復了一些。
command:
#add waited_count 1
#if (@waited_count = 5) {<重新集氣,放pe>}

相同的, 在下體力恢復的命令前要設waited_count=0

arrow
arrow
    全站熱搜

    suzin 發表在 痞客邦 留言(1) 人氣()