2. NPC對話樣式與多段對話

1.影音教學

2.NPC對話樣式及語法

sendOk

cm.sendOk("這是我的第一個 NPC 腳本");
僅有一個確認的按鈕
僅有一個確認的按鈕

sendYesNo

cm.sendYesNo("這是我的第一個 NPC 腳本");
有確認及取消的按鈕
有確認及取消的按鈕

sendSimple & sendNext

cm.sendSimple ("這是我的第一個 NPC 腳本");
cm.sendNext("這是我的第一個 NPC 腳本");
僅有下個的按鈕
僅有下個的按鈕

sendAcceptDecline

cm.sendAcceptDecline("這是我的第一個 NPC 腳本");
有接受及拒絕的按鈕
有接受及拒絕的按鈕

3.多段對話

程式範例

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 = 否則如果

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

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

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

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

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

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

如果(10 > 0){
  伏地挺身20下
}

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

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

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

流程控制變數

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

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

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

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

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *