精華區beta WOW 關於我們 聯絡資訊
看到之前的 [巨集] 技能冷卻中施放寫法 討論串 其中ironsalami salami zonhan 的一些對於 施法佇列的解釋 讓我產生了一些想法、臆 測 不過由於內容過於瑣碎,版上能看得懂的人大概不超過30位,並由於疏於排版導致不易閱 讀,故視為無用文 由於我原文是打在notepad上,轉貼過來時,可能出現了某些排版錯誤,不過反正對此有 興趣的人也不多,我就不修正了 若有大德願意幫我重新排版,自然感激不盡。 另外附上google doc版,給有興趣深入瞭解者。 http://goo.gl/qngs4 我在此假設 4.X 巨集冷卻判斷施法 可能是由兩個主要機制決定 分別是 施法佇列 和 巨集執行 兩個內建規則決定 並非吾人之前以為的單一機制決定 所以我在此建立一個簡單的測試 首先 先解釋 施法佇列機制 和巨集的執行 如何影響巨集 引用 zonhan的圖 Player Client Network Server ───── ───────────────── ──── ─────── 無法施放 ↑ │yes 無施放中 │ 進入 技能 施放開始 處理施法時間後 按技能1 →判定cd┴─→施法佇列─────→並送出訊息──→ 判定施法完成 ↑ no ↑ │ │ │ │ 按技能2 ─┘ │ │ │ │ │ │ └──────────────────┘ 送回施法完成訊息 而巨集的執行 按照目前已知的模式 推測是由 "由上而下"(top to down) 並且每執行一 次(相當於每按一次) 巨集都會從新讀取一次 如欲錯誤則當掉跳開(即不執行巨集=巨集無效) 故當吾人巨集寫作 /cast 技能A /cast 技能B 若 技能A是屬於一需要冷卻之技能 ex: 閃電鏈 神聖之火 技能B是不需要冷卻之技能 ex: 閃電箭 懲擊 當吾人spam巨集時 開始唱 技能A 接著 因為施法佇列的緣故 會將技能B排進 佇列 但當技能A施放完畢 進入CD後 受到 巨集執行偵測到 技能A無法使用導致巨集錯誤跳開, 則不會施放技能B 用時間流程圖來看 SPAM巨集 詠唱技能A 技能A進入CD 詠唱技能B 技能A結束CD 詠唱技能A 施法佇列 空 技能B 技能B 空 空 技能B 巨集真假值 真 真 假 假 真 真 若吾人更仔細測試 會發現 施法佇列 只能儲存一個法術 並且是最後施放的法術 當吾人將巨集改為 /cast 技能A /cast 技能B /cast 技能C 若 技能A是屬於一需要冷卻之技能 ex: 閃電鏈 神聖之火 技能B是不需要冷卻之技能 ex: 閃電箭 懲擊 技能C是另外一個不需要冷卻之技能 ex: 閃電箭 懲擊 測試結果會發現 技能B 不會出現 正確的說法是 被技能C給擠掉了,這同時也能證明巨集 的執行模式是從上而下的 用時間流程圖來看 SPAM巨集 詠唱技能A 技能A進入CD 詠唱技能B 技能A結束CD 詠唱技能A 施法佇列 空 技能C 技能C 空 空 技能C 巨集真假值 真 真 假 假 真 真 接著吾人來對/castsequence進行測試 在之前我已提到了 利用塞進 "無主動技能的物品" 取代 空值 原因與理由在此不再重複 敘述 /castsequence 技能A,1 /castsequence 1,技能B 若 技能A和技能B是均屬不需要冷卻之不同技能並且在不設reset條件(或長時間reset條件 ) 由於技能AB均不需要CD,故巨集執行必為真 結果基本等於 /castsequence 技能A,技能B 並且有無spam巨集 結果均相同 但在此吾人無法判斷出施法佇列對此巨集的影響 固進一步 /castsequence 技能A,1,1 /castsequence 1,技能B,1 /castsequence 1,1,技能C 若 技能A和技能B和技能C是均屬不需要冷卻之不同技能並且在不設reset條件(或長時間 reset條件) 這時結果就出現差異 沒有spam時結果相當於 /castsequence 技能A,技能B,技能C 有spam時結果就與spam頻率有關出現隨機施法 可能出現ABCBCBABCACA 這其中要注意到的一點是 任一技能不會連續出現 (利用這個特性,吾人可以做到與/castrandom不同的特點 => 不重複隨機施法 ,取 決於spam速度) 至於實際上有沒有用,鄙人就不知道了 另一要注意的點是 若將巨集後綴省略的話 /castsequence 技能A /castsequence 1,技能B /castsequence 1,1,技能C 沒有spam時結果相當於 /castsequence 技能A 有spam時結果就與spam頻率有關出現隨機施法 這一點表示吾人可以同時針對場合將不同需求的巨集放在一起 以上出現隨機施法結果吾人應該即視為 施法佇列的影響 接著吾人加入reset=0的條件進行測試 /castsequence reset=0 技能A,1,1 /castsequence reset=0 1,技能B,1 /castsequence reset=0 1,1,技能C 沒有spam時結果相當於 /castsequence 技能A 有spam時結果就與spam頻率有關出現隨機施法 可能出現AACBBCCACA 這其中要注意到的一點是 任一技能會重複出現,即相當於舊版(2.X)/castrandom的功能!! 並且加入reset=0條件後 是否省略巨集後綴,其結果與加上後綴並無差異!! 接著吾人要加入判斷巨集執行的條件加以測試/castsequence 即加入需要冷卻的技能!!! 也就是本篇主題 優度順序巨集施放探討的重點 吾人將巨集 /castsequence 技能A,1 /castsequence 1,技能B 若技能A和技能B都是需要冷卻且冷卻時間不同的技能 其結果 不論是否spam均可視為 /castsequence 技能A,技能B 這表示吾人會受限於技能A的冷卻時間(其原因是當技能A進入冷卻時,會判斷巨集當掉) 另外當吾人省略掉巨集後綴時 /castsequence 技能A /castsequence 1,技能B 其結果 不spam時 為 /castsequence 技能A spam時 為 /castsequence 技能A,技能B 但這裡要特別注意 若吾人將 行次 順序變更 /castsequence 1,技能B /castsequence 技能A,1 將會發現 決定巨集可否執行的關鍵變為技能B 所以從此結果我們可以知道 關鍵在於 第一行 我們要放無CD之技能 接著我們更進一步研究 三層的技能組 /castsequence 技能A,1,1 /castsequence 1,技能B,1 /castsequence 1,1,技能C 若技能ABC都是需要冷卻且冷卻時間不同的技能 其結果 不論是否spam均可視為 /castsequence 技能A,技能B,技能C 其他結果均跟上述2層測試差不多,故省略之 接著我們加入reset=0 之條件 /castsequence reset=0 技能A,1,1 /castsequence reset=0 1,技能B,1 /castsequence reset=0 1,1,技能C 若技能ABC都是需要冷卻且冷卻時間不同的技能,且冷卻時間A > B > C 其結果 不spam時 為 /castsequence reset=0 技能A 但spam時,會因為頻率的不同而產生很大的差異,可能會出現以下結果 A AB AC ABC 也就是說第一行的技能和spam頻率會決定結果 若我們改變行次順序時 /castsequence reset=0 1,1,技能C /castsequence reset=0 1,技能B,1 /castsequence reset=0 技能A,1,1 其結果 不spam時 為 /castsequence reset=0 技能A 但spam時,能夠完美達到冷卻CD完成即施放, 其原因在於行次的改變使巨集不會因為長CD之技能A在首行而導致巨集被當掉 若吾人省略巨集後綴時 /castsequence reset=0 技能A /castsequence reset=0 1,技能B /castsequence reset=0 1,1,技能C 或改變行次順序並省略後綴 /castsequence reset=0 1,1,技能C /castsequence reset=0 1,技能B /castsequence reset=0 技能A 均與上述不省略結果相同 接著討論最後一項問題,這也是我目前還搞不清的迷茫地帶之一,也是本篇最難懂的部分 即 優先度要如何安排 比方說,有兩個技能同時CD好,我要如何優先施放A而不是技能B 目前吾人從上述之測試可以看出 spam影響的是施法佇列 而 技能的行次則影響巨集的執 行或當掉 另外 是否加入reset=0條件 和 巨集後綴的變更(即升冪或降冪) 則對技能優先似乎有特 別的影響 就我觀察歸納,推測 巨集後綴的變更(即升冪或降冪)主要影響需冷卻之技能技能優先權 reset=0條件 主要決定是否需要跳開冷卻技能 比方說 我引用前述 /castsequence 技能A,1 /castsequence 1,技能B 若技能A和技能B都是需要冷卻且冷卻時間不同的技能 其結果 不論是否spam均可視為 /castsequence 技能A,技能B 這表示吾人會受限於技能A的冷卻時間(其原因是當技能A進入冷卻時,會判斷巨集當掉) 當巨集改成 /castsequence 1,技能A /castsequence 技能B,1 其結果會變成 /castsequence 技能B,技能A 但巨集執行仍受限於技能A之CD 而若 加入reset=0條件 /castsequence reset=0 技能A,1 /castsequence reset=0 1,技能B /castsequence reset=0 1,技能A /castsequence reset=0 技能B,1 此兩種寫法 在spam下結果均與上述不加入reset相同 從此可推得,除了行次序外,巨集的後綴次序(即升冪或降冪)安排也會影響巨集是否會被 當掉 以下兩點注意 若技能A CD時間 > 技能B /castsequence reset=0 技能A,1 /castsequence reset=0 1,技能B 會因為技能A進入CD 使巨集當掉 但修正成 法一 改變行次 /castsequence reset=0 1,技能B /castsequence reset=0 技能A,1 法二 改變冪次 /castsequence reset=0 1,技能A /castsequence reset=0 技能B,1 但遇到3層以上,狀況就會相當複雜 我在此假設遇到一狀況要求如下 吾人有ABCDEF六項技能 其中ABCDE是需要冷卻之技能,且優先度A >> B >> C >> D >> E 且CD時間C >> D >> E >> A >> B 其餘空檔則使用F技能(無冷卻之技能) 撇開起手順序不講,我們只討論輸出中的優先順序施放 我們可以做出如下之巨集,當然這只是我的理論推測,並無實際驗證支持 先由優先順序排出 A,1,1,1,1,1 1,B,1,1,1,1 1,1,C,1,1,1 1,1,1,D,1,1 1,1,1,1,E,1 1,1,1,1,1,F 再由CD長短排列 1,1,1,1,1,F 1,B,1,1,1,1 A,1,1,1,1,1 1,1,1,1,E,1 1,1,1,D,1,1 1,1,C,1,1,1 再由是否有冷卻CD加入reset=0條件 /castsequence 1,1,1,1,1,F /castsequence reset=0 1,B,1,1,1,1 /castsequence reset=0 A,1,1,1,1,1 /castsequence reset=0 1,1,1,1,E,1 /castsequence reset=0 1,1,1,D,1,1 /castsequence reset=0 1,1,C,1,1,1 估計大概結果就長這模樣吧,不過由於都是推測居多,大概9成機會還需要修正 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.120.222.219 ※ 編輯: k0286 來自: 140.120.222.219 (08/19 00:53)
anumber:得證 08/19 01:06
asgard1991:故得證 08/19 01:10
clse0190:Q.E.D 08/19 01:13
eDrifter:看沒有, 不過還是推. 另外求高手幫給個精簡版. 08/19 01:14
Cycylno:推薦這篇文章 08/19 01:24
anumber:實測後的確能接近目標要求,但是技能序列越多,要跳過的1 08/19 01:26
anumber:越多,故無法達到無縫接續施法? 08/19 01:26
zonhan:技能越多會卡越多1, 可能要設按鍵連發才能接近無縫吧 XD 08/19 01:31
anumber:而且這招對中文版有利 英文版排三個技能就滿了阿!!(翻桌 08/19 01:33
Cycylno:測試到三層就怪怪的 = =" 是我spam的不夠快嗎? 08/19 01:35
anumber:因為每按一次就要跳過一次1 08/19 01:42
Cycylno:三層可行,不過每招都要在GCD結束前半秒按才行 08/19 01:54
Cycylno:如果GCD結束才按就會亂掉,不然就很完美 08/19 01:55
hollynight:這寫法 是在寫論文嗎XD 08/19 02:04
lisyu:還是射擊獵安定,三個技能擺上去就收工了 08/19 02:35
salami:其實這些iron以前幾乎都測過了...我們才會說 不是只是佇列 08/19 02:38
salami:問題 而是巨集本身也有很大的影響 08/19 02:38
salami:後來發現跟上進度的沒幾個人 還有HQ版友出來亂..乾脆不說了 08/19 02:39
salami:只用佇列 根本沒辦法解釋所有的現象 08/19 02:41
salami:而且後端要開發實用的巨集 也不可能停在佇列的部分 08/19 02:41
salami:很早就在開發巨集部分 特別是連續施法這一塊了.. 08/19 02:42
Wolfen:得證! 08/19 02:58
holymars:看起來最需要克服的問題是同一個巨集中有數個cast 08/19 03:33
holymars:sequence,同時帶有reset條件時,client端執行的判斷機制 08/19 03:33
holymars:我心中有些初步想法了 之後上線測試看看對不對好了.. 08/19 03:34
galaxy4552:不無用阿 寫的很好! 有M的價值 08/19 03:40
HQ1030:某人很在意被我亂的事情啊? :P 要不要考慮寫個冰法macro 08/19 13:35
HQ1030:目前冰法可是有很多短cd的招可以拿來當這測試的範本 08/19 13:35
k0286:看到大家很熱心討論 我很高興...可是不要都用寄信的阿~~~~ 08/19 14:23
k0286:我quit已久,很多問題 大家寫信給我 我也回答不出來 08/19 14:23
k0286:如果PO上來會害羞的話 我可以幫忙匿名代PO 08/19 14:24
k0286:需要的話 請跟我說一聲... 08/19 14:24