《鬥陣特攻》

推出全新工作坊功能

推出全新工作坊功能

工作坊讓你用前所未有的方式建立遊戲,你可以利用腳本為喜歡的現有《鬥陣特攻》遊戲模式新增規則和特別的遊戲條件。其中,規則可以發揮各種作用,像是改變英雄的行動模式或技能效果、調整玩家承受傷害和接受治療的狀況,甚至在特定狀況下顯示文字。

你可以建立一個真正火熱、稱為地板燒燙燙的遊戲模式。使得英雄踏在地面上就會著火:

目錄

打開工作坊

打開工作坊的方法為點選對戰 > 自訂與搜尋遊戲 > 建立遊戲 > 設定 > 工作坊.

建立腳本

建立腳本時你必須:

  1. 新增規則
  2. 選擇事件
  3. 新增條件(選擇性)
  4. 新增動作

開始進行這項作業已後,只要欄位許可,你可以盡情新增各種規則、條件和動作。

新增規則

規則為腳本中自由度極高的部分。每一個腳本都必須有一條以上的規則。

每條規則都有選擇性的備註,並具有:

  • 事件: 定義規則套用的時機。進一步說明請見選擇事件
  • 條件: 為一組選擇性選單,達成所選擇的項目時,便會套用規則。進一步說明請見新增條件
  • 動作: 為一組選單,滿足事件和規則時,便會發生所選擇的動作。進一步說明請見新增動作

需要新增規則時,點選新增規則

選擇事件

事件用於定義規則套用的時機。遊戲裡發生事件時,便會建立一次的規則判定。每一次的規則判定都會對條件進行評量,並個別執行動作。

在編輯器裡建立一條規則時,便會自動新增一起事件。你得選擇想要的事件類型。

選擇事件類型的方法:

  1. 點選事件旁的下拉選單。
  2. 選擇其中一個項目:

    事件類型 備註
    Ongoing - Global

    在遊戲開始時建立一次規則判定。規則判定在整場遊戲裡都有效。

    • 由於規則判定在整場遊戲裡都有效,條件有時會通過判定,有時則不會通過判定。條件第一次即通過判定時,便會執行動作。
    • 條件一開始未通過判定,但後來通過時,會嘗試再次執行動作。
    Ongoing - Each Player

    每位玩家加入遊戲時,均建立一次的規則判定。規則判定持續至玩家離開或遊戲結束。每一次規則判定都會個別追蹤條件及執行動作。

    • 由於規則判定在玩家仍在遊戲裡都有效,條件有時會通過判定,有時則不會通過判定。條件第一次即通過判定時,便會執行動作。
    • 條件一開始未通過判定,但後來通過時,會嘗試再次執行動作。
    Player Earned Elimination

    玩家取得擊殺參與時執行規則。一位玩家同一時間只能啟動一次規則判定。

    • 一位玩家參與一個對手的擊殺時,會對條件進行檢查。每項條件都通過時,便會執行動作。其中任何一項條件未通過時,不會執行動作。
    Player Dealt Final Blow

    玩家取得最後一擊時執行規則。一位玩家同一時間只能啟動一次規則判定。

    • 玩家給予對手最後一擊時,會對條件進行檢查。每項條件都通過時,便會執行動作。其中任何一項條件未通過時,不會執行動作。
    Player Dealt Damage

    玩家造成傷害時執行規則。一位玩家同一時間只能啟動一次規則判定。

    • 玩家給予對手傷害時,會對條件進行檢查。每項條件都通過時,便會執行動作。其中任何一項條件未通過時,不會執行動作。
    Player Took Damage

    玩家受到傷害時執行規則。一位玩家同一時間只能啟動一次規則判定。

    • 玩家受到對手給予的傷害時,會對條件進行檢查。每項條件都通過時,便會執行動作。其中任何一項條件未通過時,不會執行動作。
    Player Died

    玩家陣亡時執行規則。一位玩家同一時間只能啟動一次規則判定。

    • 一位玩家陣亡時,會對條件進行檢查。每項條件都通過時,便會執行動作。其中任何一項條件未通過時,不會執行動作。
  3. 需要時,可進一步設定受此事件影響的隊伍玩家。選項為:

    選項 備註
    All 事件發生對象為所有隊伍,包括自由模式的所有玩家。
    Team 1/隊伍 1(或目前隊名) 事件發生對象僅限該隊伍的成員。
    Team 2/隊伍 2(或目前隊名) 事件發生對象僅限該隊伍的成員。
    選項 備註
    All 事件發生對象為全體玩家。
    Slot 0 至 Slot 5 (0 號欄位至 5 號欄位) 事件發生對象為僅限所選欄位的玩家。在隊伍遊戲中,一個欄位可能會放入兩名玩家(兩個隊伍各一人)
    Slot 6 至 Slot 11 (6 號欄位至 11 號欄位)_ 事件發生對象為僅限所選欄位的玩家。只會在自由混戰模式顯示。
    Specific Hero 玩家選用特定英雄時,才會發生事件。

新增條件

新增一項規則或一起事件後,你可以選擇新增一個以上的條件。條件為一組選擇性選單,必須滿足所選擇的項目,規則才會執行所選擇的動作。當條件所連結的規則中,事件類型為「Ongoing - Global」或「Ongoing - Each Player」時,必須持續確認判定是否有效。所連結的規則中,事件類型為其他類型時,則在發生選擇的事件時,才會進行確認。規則並未與條件連結時,則在事件發生後,會儘快嘗試執行動作。每個條件由兩項Value(數值)產生,以運作子比較、檢查是否為 True(是)。進一步說明請見數值(Value)

新增條件的方法:

  1. 點一下條件旁的新增
  2. 填入Value(數值)。
    • 注意: 數值需輸入(例如,「Hero of」數值需要指定選擇該英雄的玩家)時,數值輸入欄會顯示於下方。
  3. 選擇運作子。運作子為:
    • == 等於
    • != 不等於
    • > 大於
    • >= 大於或等於
    • < 小於
    • <= 小於或等於

檢查遊戲內全體玩家人數是否等於存活玩家人數。

  • Value:「Number of Living Players」是確認存活玩家總人數。
    • Team: Team 是確認一支隊伍的所有玩家。
    • Team: All 是確認所有隊伍的所有玩家。
  • Operator: == 代表第一個數值必須等於第二個數值,條件才會為 True。
  • Value:「Number of Living Players」是確認存活玩家總人數。
    • Team: Team 是確認一支隊伍的所有玩家。
    • Team:All 是確認所有隊伍的所有玩家。

其他範例:

  • IsFlagBeingCarried(Victim) == False: 遭擊殺玩家不得帶有旗幟。
  • IsCrouching(Event Player) == True: 當事件啟動時,玩家必須蹲下。
  • NumberOfFinalBlows(Attacker) > 10:攻擊中的玩家已取得超過 10 個最後一擊。

新增動作

動作用於改變遊戲內容。執行順序為從上到下。開始執行動作選單:

  • 必須發生規則相關事件。
  • 規則的所有條件必須為 True(或不存在條件)。
    • 若事件類型為「Ongoing - Global」或「Ongoing - Each Player」,則在每一個條件第一次通過判定時,會執行選擇的動作。條件一開始未通過判定,但後來通過時,會嘗試再次執行動作。

除等待動作以外(進一步說明請見等待動作),所有動作都必須立即執行。 每個動作都由零個或更多輸入項目組成,說明遊戲的變更方式。每個輸入項目都會有一組Value(數值)。該數值為一組資訊,或取得資訊的說明。進一步說明請見Value(數值)

新增動作的方法:

  1. 點一下動作旁的新增
  2. 選擇一個動作,用於說明遊戲的變更方式。
  3. 經由下拉式選單,為每一個新的輸入項目選擇一個Value(數值)。
    • 注意: 部分動作會創造出物件或持續性行為。部分動作可能會有一個稱為「ReEvaluation」的輸入項目。 這個輸入項目決定該動作的其他輸入項目為固定(物件或進行中行為維持不變)或浮動(輸入項目的數值改變時,物件或進行中行為也會隨之變更)。

動作

  • Pause Match Time: 暫停目前對戰的時間。
  • Modify the Global Variable(T, Add, 5): 將 Global Variable T 提升 5。
  • Set Invisible(Event Player, Enemies): 對於敵人而言,執行此規則的玩家為隱形。

ReEvaluation輸入項目動作

  • Create Icon(All Players(All Teams), Global Variable(P), Alert, Position): 在 Global Variable "P" 所定位置為建立一個所有人可見的警戒圖示。持續重新評量位置,意即 Global Variable "P" 之後改變時,圖示也會跟著移動到新位置。
  • Create Icon(All Players(All Teams)、Global Variable(P)、Alert、None): 在 Global Variable "P" 所定位置為建立一個所有人可見的警戒圖示,但不重新評量。即使 Global Variable "P" 之後改變,也不會更新圖示位置。

動作類型

選單中有多種動作可選擇,其中一些必須特別留意:

迴圈 (Loop) 動作會從第一個項目開始執行一系列的動作。迴圈動作可分為四類:

  • Loop: 系列動作均從頭開始。
  • Loop If: 動作條件輸入項目經評量所得Value為非 0 或非 False 時,從頭開始執行系列動作。
  • Loop if Condition Is True: 所有規則條件均通過時,從頭開始執行系列動作。
  • Loop if Condition Is True:所有規則條件均通過時,從頭開始執行系列動作。

在開始執行系列動作前,必定執行Wait動作時,才允許迴圈動作。

允許 不允許

此內容在迴圈前有Wait等待動作,因此是受允許的內容。

此內容無Wait等待動作,因此是不受允許的內容。

Wait(等待)為一項動作,在一段時間經過後才會執行後續動作。等待時間最短為 0.25 秒。

Wait動作有三個行為選項:

  • Ignore Condition:選擇這個項目時,動作執行不會受到條件或其他事件的干擾。
    • 事件類型為「Ongoing - Global」或「Ongoing - Each Player」時,條件若於未通過和通過判定間轉換,則不會發生任何結果。
    • 該事件為為任何其他類型的事件,且對象為同一事件玩家時,則完全忽略該事件。
  • Abort When False:選擇這個項目後,當條件開始未通過判定時,系列動作便會停止執行。
  • Restart When True:選擇這個項目後,發生下列任一狀況時,動作的執行將會從頭開始:
    • 事件類型為「Ongoing - Global」或「Ongoing - Each Player」,且條件從未通過判定轉換為通過時。
    • 事件類型為任何其他類型、對象為同一事件玩家,且所有條件均通過判定時。

其他資訊

Strings 會產生一組字串,並具有以下輸入項目:

  • String:顯示的文字文字中帶有大括號 {} 圍起的數值時,會代入對應輸入項目填入的Value(數值)。
  • {0}:此項Value轉換為文字後,取代字串裡的 {0}。該Value可為任何類型。
  • {1}:此項Value轉換為文字後,取代字串裡的 {1}。該Value可為任何類型。
  • {2}:此項Value轉換為文字後,取代字串裡的 {2}。該Value可為任何類型。
  • String("Hello", Null, Null, Null):產生字串 "Hello"
  • String("{0} vs {1}", Hero(Ana), Hero(Pharah), Null):產生字串 "Ana vs Pharah"

字串互相結合,形成複雜度較高的字串:

  • String("{0} vs {1}", Hero(Ana), String("{0} and {1}", Hero(Pharah), Hero(Genji), Null), Null):產生字串 "Ana vs Pharah and Genji"

在同一個的自訂遊戲中,玩家使用不同語言時,將字串放入條件或存入變數可能會帶來問題,因此不允許這方面的功能。

Value(數值)為一組資訊,作為條件、動作或另一項數值的輸入項目,或是資訊取得的說明。數值可相互結合。

數值項目繁多,因此不予列舉。但均為工作坊編輯器所定義的項目。你可能會看到以下項目:

Value(數值) 備註
Number 提供輸入項目所定範圍內之一組實數。
Vector 提供輸入項目所定範圍內之一組三維數值,用於指示位置和方向。
Team 指定一個特定隊伍,像是隊伍 1、隊伍 2 或所有隊伍。
Hero 指示一位特定英雄。
Null 指示不存在一位玩家或物件時。
True 提供 True(是) 之數值
False 提供 False(否) 之數值
Compare 提供 True 或 False 之數值,取決於說明的比較為是或否。
Event Player 提供執行該次規則判定的玩家。無此玩家時,則為 Null。
Attacker 指示該次規則判定的攻擊方。無攻擊方時,則為 Null。
Victim 指示該次規則判定的受攻擊方。無受攻擊方時,則為 Null。
Current Array Element 搭配 True For Any、If True For All、Filtered Array 或 Sorted Array Value 使用時,提供目前考慮的數值。

數值可能會存入Array(集合),其中為一系列數值。

  • 多個動作和數值可產生或改變集合。
    • 例如:「All Players」數值會列出目前遊戲內的每一位玩家。
    • 你也可以用「Modify Global Variable」或「Modify Player Variable」動作的「Append To Array」操作來建立自己的集合。
  • 輸入項目預期取得一組集合但實際取得其他種類的數值時,會將數值複製進一組單一元素的集合,使其便於供輸入項目使用。同樣地,輸入項目預期取得其他種類的數值,但實際取得一組集合時,會使用集合裡的第一個數值(若為空集合,則為 0)。

Variable(變數)為暫時儲存Value(數值),供後來取用的功能。除String(字串)以外,任何數值都可儲存於變數中。所有變數的第一個數字值均為 0。

腳本裡有兩種變數:

  • Global Variable: 綜合變數共有 26 組,依序標為 A 至 Z。每一組變數均具有一組個別的數值或數值集合。
  • Player Variable:玩家變數共有 26 組,依序標為 A 至 Z。每一組變數均具有一組個別的數值或數值集合。

一組變數可執行三種操作:

  • 設置 (Setting): 「設置綜合變數 (Set Global Variable)」以及「設置玩家變數 (Set Player Variable) 會將變數設為新數值,取代原先數值。
  • 變更 (Modifying):「變更綜合數值 (Modify Global Variable)」以及「變更玩家數值 (Modify Player Variable)」可變更變數內的數值,方法為算術操作(加、乘等)或集合操作(附加、刪除)。
  • 追蹤 (Chasing): 「隨時追蹤綜合變數 (Chase Global Variable Over Time)」、「隨時追蹤玩家變數 (Chase Player Variable Over Time)、「定期追蹤綜合變數 (Chase Global Variable at Rate)」以及「定期追蹤玩家變數 (Chase Player Variable at Rate)」會隨時或定期變更變數。
    • 追蹤的Destination(終點)可為一個Number(數字)或一組Vector(向量)(,或任何取得數字或向量之一組數值)。
      • 終點為數字時,則在追蹤開始前,變數數值必須為數字,才可讓追蹤功能正確運作。
      • 終點為向量時,則在追蹤開始前,變數數值必須為向量,才可讓追蹤功能正確運作。
      • 為終點啟用ReEvaluation(重新評量)時,即使先前已抵達終點,也得視需要更新追蹤功能,才可對已變更的終點進行追蹤。關於ReEvaluatoin的進一步說明請見新增動作
    • 你可以使用「停止追蹤(Stop Chasing Global Variable)」以及「(Stop Chasing Player Variable)」行動來取消追蹤。
      • 追蹤經取消時,變數會維持目前數值,可能介於追蹤開始時間點以及終點之間。

範例

準備好付諸行動了嗎?試著建立一個遊戲模式吧!我們會為您介紹需要新增的項目以及原因:

我們將引導你製作「地板燒燙燙」。在這個模式裡,英雄接觸地面會著火並受到傷害。

  1. 首先,確認你想玩這個模式的地圖。
    • 點選對戰 > 自訂與搜尋遊戲 > 建立遊戲 > 設定 > 地圖
    • 選擇你想要測試遊戲的地圖,並關閉其他選擇。
  2. 接著進入工作坊。
    • 點選返回
    • 點選工作坊
  3. 接下來該製作腳本!先新增第一個規則。
    • 點選新增規則
    • 在備註欄裡輸入在地面時會不斷燃燒 (Start Burning If On Ground)。讓你瞭解這個規則使得玩家接觸地面時會著火。
    • 接著,改變事件類型,讓我們瞭解應該執行這項規則的時機。
      • 從事件的下拉選單選擇「Ongoing - Each Player」,使得遊戲裡每位玩家會受到個別評量。
      • 其他下拉式選單都採用預設選項。
    • 接下來,新增一個條件。這個條件會決定是否執行規則。如果你希望規則一律實行,則條件保留空白。
      • 在條件點選新增
      • 從第一個Value(數值)下拉選單選擇Is On Ground。當玩家站在地面上的時候,這個數值會標為True(是)。
      • 其他下拉式選單都採用預設選項,再點選確認
        • Event Player代表「適用規則的玩家」。
    • 最後,我們會新增動作。條件為是時,會發生所選擇的動作。
      • 這個動作使得英雄站在地面上時開始著火。
        • 在動作點選新增
        • 從動作的下拉選單選擇Set Status(設置狀態)
        • 從Status(狀態)的下拉選單選擇Burning(燃燒)
        • Duratoin(持續時間)的數字調整到10,000
        • 其他下拉式選單都採用預設選項,再點選確認
  4. 接下來測試看看英雄會不會著火!
    • 點選返回兩次。
    • 在建立對戰畫面點一下開始
    • 選擇一位英雄。
    • 進入遊戲之後,你選擇的英雄應該會著火。
    • 按下 Esc 並點選開啟工作坊編輯器繼續製作腳本。
  5. 現在新增另一個規則,使得英雄跳躍或滯空的時候不會著火。
    • 此時不需要建立一個全新的規則,只需要複製剛才建立的規則。
    • 在已建立的規則旁點選複製
      • 點選貼上規則
      • 將說明更改為不在地面就不會燃燒 (Stop Burning When In the Air)。讓你瞭解這個規則使得你的英雄在跳躍或滯空時,燃燒效果會停止。
      • 保持目前的事件類型。
      • 接下來編輯條件。這個條件會決定是否執行規則。
        • 點選現有條件 "Is On Ground(Event Player) == True"。
        • 在Value下拉選單選擇False(否)
        • 其他下拉式選單都採用預設選項,再點選確認
      • 接著,輪到編輯動作。動作會使得你的英雄未接觸地面時,燃燒效果停止。
        • 點選現有動作 "Set Status (Event Player, Null, Burning, 10000)."
        • 從動作的下拉選單選擇Clear Status(清除狀態)
        • 從狀態的下拉選單選擇Burning(燃燒)
        • 其他下拉式選單都採用預設選項,再點選確認
  6. 接下來測試看看英雄在空中的時候,燃燒效果會不會停止!
    • 點選返回兩次。
    • 進入遊戲之後,你選擇的英雄應該會著火。讓英雄跳起來,看看燃燒效果會不會停止。
    • 按下 Esc 並點選開啟工作坊編輯器繼續製作腳本。
  7. 最後,我們要讓英雄接觸地面的時候受到傷害。
    • 展開「在地面時會不斷燃燒 (Start Burning If On Ground)」規則。
    • 在動作點選新增。這個行動會使得英雄接觸地面時受到傷害。
      • 從作動的下拉選單選擇Damage Over Time(持續傷害)
      • Duration的數字調整到9,999
      • Damage Per Second的數字調整到30
      • 其他下拉式選單都採用預設選項,再點選確認
    • 展開「不在地面就不會燃燒 (Stop Burning If Not On Ground)」規則。
      • 在動作點選 新增 。這個動作會使得英雄未接觸地面時不會受到傷害。
      • 從動作的下拉選單選擇Stop All Damage Over Time(停止持續傷害)
  8. 接下來看看你的英雄是不是在接觸地面時受到傷害,在跳躍或滯空的時候不會受到傷害。
    1. 點選返回兩次。
    2. 離開重生點,看看你的英雄是否受到傷害。
    3. 跳起來看看英雄是否不再受到傷害。
  9. 完成了!現在地上都是熔岩!

現在我們以更全面的角度審視稱為「同英雄對決死鬥」的遊戲模式。在這個模式裡,所有玩家在每一個相當短的回合裡都會玩同一位英雄。回合結束時,每一位玩家會按照一個隨機、預定的名單來決定他們下個回合使用的英雄。最後一回合結束時,取得最多擊殺的玩家獲勝。

例如,在一場遊戲裡,每位玩家可能在一開始使用麥卡利,接著在第二回合改用法拉;在另一場遊戲裡,每位玩家可能在一開始使用奪命女,接著在第二回合改用艾西。因為名單的產生方式,你不太可能會玩過重複的名單!

現在,讓我們來製作同英雄對決死鬥的腳本吧!

  • 點選 對戰 > 自訂與搜尋遊戲 > 建立遊戲 > 設定 > 工作坊
  • 首先,我們建立一個規則,用來決定這個模式的英雄名單。
    • 這個名單會在 Global Variable "L" 裡作為Array(集合)儲存。
      • 集合內可為任何內容,像是玩家名單、英雄名單、數字列表、單一數值,或是一個數值都沒有(稱為空集合)。
      • 集合中每一個數值都會儲存於一個從 0 開始計數的獨特索引。索引及對應的數值有時會稱為「元素 (Element)」。
      • 集合的順序也有關係,像[Reaper(死神), Winston(溫斯頓), Mercy(慈悲)][Mercy(慈悲), Winston(溫斯頓), Reaper(死神)]是不一樣的集合。
      • 集合中可能具有多種類型。例如,可能存在以下集合:[123, Reaper, True, -4.5].
      • 當一個輸入項目預期一組集合,但實際取得單一數值時,輸入項目會將這個數值放入一個元素的一個集合中。
      • 輸入項目預期取得單一數值,實際取得一組集合時,會取得集合裡的第一個數值(若為空集合,則為 0)。
    • 新增一個規則,並在備註裡輸入規則的目的。
    • 將事件類型設為Ongoing - Global。此時,只會進行一次的規則判定。
    • 該規則不具任何條件,因此在遊戲開始時就會執行。
    • 新增動作方法:
      • 動作: Set Global Variable(設置綜合變數):
        • Variable: L
      • Value: Hero
        • Hero: 你想玩的英雄。
      這樣就會創造出英雄集合。名單中第一個英雄的「Set Global Variable」動作設為「L」。
    • 只有一個可以玩的英雄會讓遊戲變得索然無味,我們應該新增更多!新增你想要的動作,越多越好:
      • 動作: Modify Global Variable(變更綜合變數)
        • Variable: L
      • Operation: Append (附加)
      • Value: Hero
        • Hero: 你想玩的英雄。
      這樣就會在之前建立的集合「L」之中加入新的英雄。第一個動作以「Modify Global Variable」開始,而非「Set Global Variable」時,集合會從 0 開始。所有變數的預設值為 0,因此不予設置會得到像 [0, Pharah, Hanzo, Ana,...] 的集合
    • 接著為這個規則新增最後一個動作。這個規則會取一份隨機的 Global Variable L(英雄集合),從 0 位置複製隨機集合,並包括這個遊戲模式應有的英雄數量。這一份集合會儲存回 Global Variable L,以你原本提供的英雄名單得到隨機變換順序的子集合。
      • 例如:一開始的英雄名單為 [Ashe(艾西), Doomfist(毀滅拳王), Hanzo(半藏), McCree(麥卡利), Pharah(法拉), Soldier:76(士兵 76), Zenyatta(禪亞塔), Widowmaker(奪命女), Ana(安娜)] ,隨機集合可能會是 [Hanzo(半藏), Pharah(法拉), Widowmaker(奪命女), Ana(安娜), Ashe(艾西), Doomfist(毀滅拳王), Soldier:76(士兵 76), Zenyatta(禪亞塔), McCree(麥卡利)] ,而取其中部分時可能會是 [Hanzo(半藏), Pharah(法拉), Widowmaker(奪命女), Ana(安娜), Ashe(艾西), Doomfist(毀滅拳王)]
  • 下個規則可確保無論如何,所有玩家在同一時間都會玩同一個英雄。
    • 新增一個規則,並在備註裡輸入規則的目的。
    • 將事件類型設為Ongoing - Each Player。這樣每位玩家都會執行個別的規則判定。
    • 新增兩個條件,指定英雄在這些條件上必須為是:
      • 回合數「Global Variable "R"」必須少於英雄名單的英雄數量。無法成立時,遊戲就會結束,不會繼續指定英雄。回合數從 0 開始計數,因此 6 個回合的最後一個回合數是 5。由於所有變數的預設值為 0,Global Variable "R" 不設為 0 是合理的。
        • Value: Global Variable
          • Variable:R
        • Operator: <
        • Value:Count Of
          • Array:Global Variable
            • Variable:L
      • 這些會確認一位特定玩家使用的英雄是否不同於那個回合數的指定英雄。這裡提到的「Event Player」為事件玩家,而特殊數值反映出這位玩家目前進行規則判定。目前回合的「指定英雄」為目前英雄名單 (Global Variable "L") 對應索引的英雄。由於目前回合儲存於 Global Variable "R",指定英雄可經由「集合內數值 (Value In Array)」取得。
        • Value:Hero Of
          • Player:Event Player
        • Operator: !=
        • Value:Value in Array
          • Array:Global Variable
            • Variable:L
          • Index:Global Variable
            • Variable: R
    • 我們得知玩家必須更換英雄時,新增兩個將執行的動作。
      • 其中,第一個動作使得Event Player使用指定英雄。這個動作的第一個輸入項目為必須玩指定英雄的玩家,第二個輸入項目則是英雄,因此填入指定英雄。
        • Action: Start Forcing Player To Be Hero
        • Player:Event Player
        • Hero:Value In Array
          • Array:Global Variable
            • Variable:L
          • Index:Global Variable
            • Variable:R
      • 第二個動作事先載入名單內的下一個英雄,使玩家無需經過長時間的英雄更換。每個玩家都會玩同一位英雄,但事先載入還是會個別執行。會這樣處理的原因在於每位玩家可能需要為英雄事先載入不同英雄造型透過增加數值為 Global Variable "R" 加 1 後,動作事先載入的對象為下一個英雄,而非目前的英雄。在最後一回合裡,Array Global Variable "L" 的集合索引會超出範圍。由於集合裡超出範圍的數值都會視為 0,預期取得英雄的動作在取得 0 之後,動作就不會執行,因此這一點不會造成問題。
        • Action:Preload Hero
        • Player:Event Player
        • Hero: Value In Array
          • Array:Global Variable
            • Variable:L
          • Index:Add
            • Value:Global Variable
              • Variable:R
            • Value:Number
              • Number:1.00
  • 下一個要定的規則會在每一回合尚未初始化時進行設置。
    • 新增一個規則,並在備註裡輸入規則的目的。
    • 將事件類型設為Ongoing - Global。此時,只會進行一次的規則判定。
    • 新增三個條件,這些條件必須為是,回合才會開始:
      • 遊戲必須為進行中。這代表已經進入「召集英雄」畫面以及設置時間,但遊戲還沒有結束。
        • Value: Is Game In Progress
        • Operator: ==
        • Value:True
      • Global Variable I 必須為 False(否)。這個變數用於說明目前回合是否初始化。不設置 Global Variable I 會使其數值為 0,在這類的比較中會視同為 False(否)。
        • Value:Global Variable
          • Variable:I
        • Operator: ==
        • Value:False
      • 回合數「Global Variable "R"」必須少於英雄名單的英雄數量。
        • Value:Global Variable
          • Variable:R
        • Operator: <
        • Value:Count Of
          • Array:Global Variable
            • Variable:L
    • 瞭解所有條件為True(是)後,回合必須初始化。新增一些動作來達成這個目的:
      • 第一個動作讓核心遊戲模式瞭解遊戲不應該因為一般認定標準而結束。在死鬥中,代表遊戲不會因為倒數時間結束,或一位玩家的分數達到獲勝標準而結束。執行這個動作後,在腳本重新啟動內建遊戲結束機制,或另行宣告獲勝玩家前,一場遊戲並不會結束。
        • 動作:Disable Built-in Game Mode Completion
      • 下一個行動將遊戲模式的倒數計時器設為一個回合的時間。
        • 動作: Set Match Time
        • Time:Number
        • Number:60.00
      • 這個動作將 Global Variable "I" 設為 True(是),因此在 Global Variable "I" 設為 False(否)之前,不會再度發生初始化。
        • 動作:Set Global Variable
        • Variable: I
        • Value: 是 (True)
  • 在這個規則中,會等到目前回合的倒數計時結束後,再進行下一回合。
    • 新增一個規則,並在備註裡輸入規則的目的。
    • 將事件類型設為Ongoing - Global。此時,只會進行一次的規則判定。
    • 新增兩項條件,且兩者皆為是時,遊戲才會進行下一回合:
      • 遊戲必須為進行中。這代表已經進入「召集英雄」畫面以及設置時間,但遊戲還沒有結束。
        • Value: Is Game In Progress
        • Operator: ==
        • Value: True
      • 目前的倒數時間必須為 0,代表目前回合的倒數已經結束。
        • Value:Match Time
        • Operator: ==
        • Value:Number
          • Number: 0.00
    • 這些條件均滿足,且回合結束時,遊戲會進入下一個回合數,並將下一個回合標為尚未初始化。這個目的藉由新增兩個動作達成:
      • 這個動作讓其他規則瞭解遊戲進入下一個回合。
        • 動作: Modify Global Variable
        • Variable:R
        • Operation:Add
        • Value:Number
          • Number:1.00
      • 這個動作將 Global Variable "I" 設為 False,使其他規則瞭解需要為新的回合初始化。
        • 動作:Set Global Variable
        • Variable:I
        • Value:False
  • 最後一個規則在所有回合結束後將遊戲結束。
    • 新增一個規則,並在備註裡輸入規則的目的。
    • 將事件類型設為Ongoing - Global。此時,只會進行一次的規則判定。
    • 新增一個條件,用於確認 Global Variable "R" 是否等於 Global Variable "L" 的元素數量。 此項為是時,英雄名單裡的每個英雄都輪過一個回合,代表遊戲應該結束。
      • Value:Global Variable
        • Variable:R
      • Operator: ==
      • Value:Count Of
        • Array:Global Variable
          • Variable: L
    • 條件為是時,這個行動會啟動內建的遊戲模式結束機制。由於倒數計時為 0,遊戲會立即結束,展開標準的遊戲結束流程。
      • 動作: Enable Build-in Game Mode Completion

為腳本除錯

完成腳本製作後,可以使用工作坊檢查功能來確認腳本在遊戲裡的運作狀況,看看哪些動作和條件會啟動,同時檢查腳本內的任何問題。

使用工作坊檢查功能的方法:

  1. 以你製作的腳本開始遊戲。
  2. 按下Esc
  3. 按下打開腳本除錯器
  4. 按下啟動。這個功能預設為不予啟動。

工作坊檢查功能的組成項目:

  • 執行項目 (Entry):執行項目讓你瞭解目前正在進行的事項。
  • 備註: 這裡顯示規則有關的備註。
  • 條件: 列出執行動作所需滿足的條件。
  • 動作: 列出所執行的動作。
  • 時間軸(Timeline Scrubber): 時間軸讓你可以將遊戲進行前進或後退。

腳本分享

建立一個良好的腳本之後,在接下來的六個月裡,你可以和全球其他玩家(或是好友)分享。你製作的腳本可以在所有平台使用,無論你用哪一個平台製作。

分享腳本方法:

  1. 點選 對戰 > 自訂與搜尋遊戲 > 建立遊戲 > 設定 > 分享
  2. 點選複製
  3. 把連結寄給其他人!

開啟腳本

發現有個玩家分享了你有興趣的腳本時:

  1. 點選 對戰 > 自訂與搜尋遊戲 > 建立遊戲 > 設定 > 載入
  2. 輸入連結。
  3. 點一下確認

小撇步

  • 使用快捷鍵讓你更容易開啟工作坊檢查功能。設置快捷鍵的方法為按下 Esc > 選項 > 控制。往下滾動到開啟工作坊檢查功能,再設定快捷鍵。
  • 工作坊檢查功能不但讓你瞭解發生哪些事情,也會讓你瞭解哪些事情沒有發生(還有背後的原因)!
  • 別忘了預先設置遊戲!其中某些設定會完整提供,讓你不需要從頭找解決方案。
  • 發現事件的狀況不同於預期時,Event Player(事件玩家)可能正在執行系列動作。從規則裡確認Wait(等待動作),特別是其中任何用於忽略條件時。
  • 需要選擇地圖上某一地點時,可使用「Vector(向量)」數值並點一下攝影機圖示。
  • 當你希望玩家在遊戲裡使用英雄後,才開始執行腳本,「Has Spawned」會是個相當好用的數值。
  • 如果你希望遊戲在設置以及選擇你的英雄階段才開始執行規則,可以使用「Is Game In Progress」數值。
  • 將一個數值分配給變數,再經由工作坊檢查功能進行確認,可以更容易瞭解在遊戲進行中會回饋哪些數值。
  • 你可以利用「Last Created Entity」數值來儲存最近製作的效果或圖示,讓你可以在之後摧毀這個物件。
  • 結合篩選數列以及「All Players On Objective」或「Players Within Radius」等數值讓你可以輕易篩選滿足特定標準(陣亡、存活、狀態效果等)的玩家。
  • 需要篩選行為時,可以使用「Skip If(若...跳過)」動作,在特定條件為是時,跳過任何數量的動作。此時,跳過的動作需要「Abort(取消)」動作來避免執行受篩選行為。
  • 你可以輸入文字來篩選下拉選單的選項。
  • 當你的數值預期取得集合,但實際並未取得時,會將輸入項目作為單一數值的集合。
    • 在相反的狀況下,也會採取相同的機制:當你的數值預期取得單一資料,但實際取得一組集合時,會取得集合中 0 號位置的元素。
  • 將製作內容分為多個動作或條件,讓你能更容易瞭解問題發生在哪個環節。
  • 不確定動作、數值或輸入項目有什麼作用時,PC 版玩家可以把遊標移動到那個項目,而家機版可以選擇「顯示詳細資訊(Show Details)」來查看說明。
  • 記得在備註裡輸入資訊,讓自己瞭解規則在做些什麼!
  • 還有,多測試!
下一篇文章
《魔獸世界》
3天

《魔獸世界:經典版》:世界首領與 PvP 榮譽系統已經開放

準備好在《魔獸世界:經典版》中測試自己的本領。PvP 榮譽系統及團隊副本首領:領主卡札克與艾索雷苟斯皆已推出!