1.NPC對話樣式及語法

sendOk

javascript
📋 複製
cm.sendOk("這是我的第一個 NPC 腳本");

僅有一個確認的按鈕

僅有一個確認的按鈕

sendYesNo

javascript
📋 複製
cm.sendYesNo("這是我的第一個 NPC 腳本");

有確認及取消的按鈕

有確認及取消的按鈕

sendSimple & sendNext

javascript
📋 複製
cm.sendSimple("這是我的第一個 NPC 腳本");
cm.sendNext("這是我的第一個 NPC 腳本");

僅有下個的按鈕

僅有下個的按鈕

sendAcceptDecline

javascript
📋 複製
cm.sendAcceptDecline("這是我的第一個 NPC 腳本");

有接受及拒絕的按鈕

有接受及拒絕的按鈕

2.多段對話

程式範例

javascript
📋 複製
var status = -1;

function action(mode, type, selection) {
   status = (mode == 1 ? status + 1 : cm.dispose());

   if(status == 0){
      cm.sendAcceptDecline("這是第一次對話");
   }
   
   else if(status == 1){
      cm.sendAcceptDecline("這是第二次對話");
   }
   
   else if(status == 2){
      cm.sendAcceptDecline("這是第三次對話");
   }
   
   else if(status == 3){
      cm.sendAcceptDecline("這是第四次對話");
      cm.dispose()
   }
  
}

程式解析

邏輯判斷語法

從程式裡看出這個腳本總共有4段對話
控制目前要說哪一句話最關鍵的就是判斷式
這裡用到的判斷式是程式語言基礎語法
if = 如果
else if = 否則如果

text
📋 複製
如果(天氣 == 下雨){ //此處的兩個== 代表是等同的意思
  出門要帶傘
}

//若前面的如果沒有符合條件 就會去執行下面的否則如果

否則如果(天氣 == 下雪){
  出門要穿大衣
}

//若前面的否則如果沒有符合條件 就會去執行下面的否則如果

否則如果(天氣 == 太陽){
  出門要擦防曬
}

簡單來說 if else 的邏輯判斷 只會有一個成立並且執行
哪怕底下的條件也都符合
也只會執行最先碰到的判斷
為了幫助大家理解
這邊再舉一個例子

text
📋 複製
如果(10 > 0){
  伏地挺身20下
}

否則如果(20 > 0){
  引體向上10下
}

否則如果(30 > 0){
  仰臥起坐20下
}

從這三個判斷可以看出
三個條件都是符合條件的
但是最先碰到的是最上面的 如果(10 > 0)
那就需要做伏地挺身20下
至於 否則如果(20 > 0) 跟 否則如果(30 > 0) 就不再做判斷了

流程控制變數

大家有注意到有一個 status 的東西
這東西就是負責控制腳本目前進展到哪一個步驟
action裡面
可以看到
status = (mode == 1 ? status + 1 : cm.dispose());
這個寫法叫做三元運算子 (ternary operator)
是 if else 的簡化寫法
還原如下

text
📋 複製
//如果
if (mode == 1){
  status = status + 1 //將目前進程+1
}
//否則
else{
  cm.dispose( )
}

此處使用的是 else 而非 else if
請注意如果是上述用法
當 if 不成立的時候
會直接執行 else 內部的指令

另外mode是什麼 ?
當玩家點選 確定、接受、下一步 這類的對話選項
mode就會是1 表示 腳本進展需要往前
因此才有這個判斷式

為了方便對照,這裡整理 status 數值對應到哪一句對話:

status對應對話
0第一次對話
1第二次對話
2第三次對話
3第四次對話(並結束對話)

還沒看過第一篇的可以先從這裡開始:教你寫出NPC腳本

想更深入了解上面用到的 if 判斷語法,下一篇會完整拆解:NPC腳本 if判斷教學