返回教學列表
JS教學

NPC 中級教學與基礎函數運用

(一) 邏輯運算子用法

在撰寫腳本判斷條件時,如果我們不只要判斷一個東西是否成立,而是需要同時檢查多個條件時,就會頻繁使用到以下幾種邏輯運算子:

運算子 1: && (且 / AND)

這代表當左右數值同時成立時,才會進入判斷成立的區塊。

var status = -1; var A = true; var B = true; function start() { if (A && B) { cm.sendOk("參數 A 跟 參數 B 皆為 true"); } else { cm.sendOk("參數 A 跟 參數 B 有一個非 true"); } cm.dispose(); }

💡 說明:因為初始定義 A 跟 B 皆賦予了 true,所以這句 if (A && B) 會成立,執行此 NPC 便會跳出「皆為 true」的對話窗。

運算子 2: || (或 / OR)

這代表只要左右數值其中一個成立,就會進入判斷成立的區塊。

var status = -1; var A = true; var B = false; function start() { if (A || B) { cm.sendOk("參數 A 跟 參數 B 其中之一為 true"); } else { cm.sendOk("參數 A 跟 參數 B 皆不為 true"); } cm.dispose(); }

💡 說明:就算 B 是 false,但因為 A 滿足了 true,這句 if(A || B) 依然算作成立。

運算子 3: != (不等於) 與 == (等於)

用來檢查兩個數值或變數是否相等。

var status = -1; var A = true; var B = true; function start() { if (A != B) { cm.sendOk("參數 A 跟 參數 B 的值不同"); } else if (A == B) { cm.sendOk("參數 A 跟 參數 B 的值相同"); } cm.dispose(); }

(二) NPC 基本函數用法

在寫任務、商店或是對話流程時,最依賴的就是 cm 底下的腳本函數。常見的函數與其定義如下:

  • dispose 結束與 NPC 的對話,讓你可以再次與其他 NPC 對話而不卡住。 用法:cm.dispose();
  • sendNext 顯示一個帶有「下一個」按鈕的對話窗。 用法:cm.sendNext("[文本]");
  • sendPrev 顯示一個帶有「上一個」按鈕的對話窗。 用法:cm.sendPrev("[文本]");
  • sendNextPrev 顯示一個帶有「上一個」、「下一個」按鈕的對話窗。 用法:cm.sendNextPrev("[文本]");
  • sendOk 顯示一個帶有「確認」按鈕的對話窗。 用法:cm.sendOk("[文本]");
  • sendYesNo 顯示一個帶有「是」、「否」按鈕的對話窗,「否」將預設結束對話。 用法:cm.sendYesNo("[文本]");
  • sendAcceptDecline 顯示一個帶有「接受」、「拒絕」按鈕的對話窗,「拒絕」將預設結束對話。 用法:cm.sendAcceptDecline("[文本]");
  • sendSimple 顯示一個不帶有任何確認按鈕的對話框(通常用來搭配 #L選項清單# )。 用法:cm.sendSimple("[文本]");
  • sendStyle 顯示一個選擇造型(髮型/臉型)的預覽對話框。 用法:cm.sendStyle("[文本]", [變數]); // 需先宣告該變數裝載要變的清單
  • warp 傳送角色到指定的地圖。 用法:cm.warp([地圖ID], [傳送點]); // 預設可設定 [傳送點] 為 0
  • openShop 開啟對應 ID 的商店視窗。 用法:cm.openShop([商店ID]);
  • haveItem 檢查角色是否有道具 (背包或身上)。傳回 true / false。 用法:cm.haveItem([道具ID]);
  • gainItem 給予或收回角色道具。 用法:cm.gainItem([道具ID], [數量]); // 設定負數代表收回道具
  • changeJob 強制修改角色的職業。 用法:cm.changeJob([職業ID]);
  • getJob 取得角色的職業代碼。 用法:cm.getJob();
  • startQuest 強制讓角色開始某項任務。 用法:cm.startQuest([任務ID]);
  • completeQuest 強制讓角色完成某項任務。 用法:cm.completeQuest([任務ID]);
  • forfeitQuest 強制讓角色放棄某項任務。 用法:cm.forfeitQuest([任務ID]);
  • getMeso 取得角色的楓幣數量。 用法:cm.getMeso();
  • gainMeso 給予或收回角色楓幣。 用法:cm.gainMeso([數量]); // 設定負數代表收回楓幣
  • gainExp 給予角色經驗值。 用法:cm.gainExp([數量]); // 設定負數代表倒扣經驗值
  • getLevel 取得角色的等級。 用法:cm.getLevel();
  • teachSkill 教導角色某特定技能。 用法:cm.teachSkill([技能ID], [技能等級], [技能最大等級]);
  • modifyCSPoint 給予或收回角色的商城點數。 用法 1:cm.modifyCSPoint([點數], [種類]); // [種類]:1 = GASH,2 = 楓葉點數
    用法 2:cm.modifyCSPoint([點數], [種類], true); // true = 是否在聊天框顯示訊息