返回教學列表
JS教學

基礎 NPC 腳本撰寫入門 - 領取獎勵範例

在楓之谷私服中,NPC 的對話、給予道具、判斷條件等功能,都是透過 JavaScript (JS) 腳本來實現的。這篇文章將透過一段簡單的「領取獎勵」範例代碼,帶您了解基礎的 NPC 撰寫結構。

💡 完整範例代碼

這是一個基礎的領取獎勵腳本,限制次數並發送獎勵道具給玩家:

var 道具代碼 = 4000000; var 道具數量 = 1; var 可領取次數 = 1; var log = "4/10獎勵領取"; function start() { status = -1; action(1, 0, 0); } function action(mode, type, selection) { if (mode == 0 || (mode == -1 && status == 0)) { cm.dispose(); return; } mode == 1 ? status++ : status--; if (status == 0) { var msg = ""; msg += "是否確認領取 #i" + 道具代碼 + ":# x " + 道具數量 + " 個"; cm.sendYesNo(msg); } if (status == 1) { if (cm.getPlayer().getPrizeLog(log) >= 可領取次數) { cm.sendOk("此帳號已領取 " + 可領取次數 + " 次 已達領取上限"); cm.dispose(); return; } else { cm.gainItem(道具代碼, 道具數量); cm.getPlayer().setPrizeLog(log); cm.sendOk("獎勵已經發給你囉 剩餘可領取次數 " + (可領取次數 - cm.getPlayer().getPrizeLog(log)) + " 次"); cm.dispose(); return; } } }

📖 程式碼解析

1. 變數設定 (自訂義參數)

一開始我們先宣告腳本會用到的變數。將可能會頻繁修改的數字或字串宣告在最上方的好處是:日後如果要改獎勵,只需要改上面這幾行就好,不用去底下找程式碼修改。

  • 道具代碼:想發送的獎勵代碼(例如 4000000 是蝸牛殼)。
  • log:這是紀錄的名稱(Key),用來辨識玩家是否領過該活動的獎勵。

2. start() 函數 (程式進入點)

當玩家點擊 NPC 時,系統會第一時間呼叫 start() 函數。在這裡我們通常會把對話頁數(status)設為 -1,然後呼叫 action(1, 0, 0) 讓程式直接進入到 status == 0 的第一個對話階段。

3. action() 函數與點擊判斷

action(mode, type, selection) 控制了與玩家的所有互動判斷:

  • mode 判斷:玩家如果按下「結束對話」或「否」,mode 會回傳 0,此時腳本會執行 cm.dispose() 關閉對話。反之按下「是」或「下一步」,mode == 1,這時我們的對話狀態 status 就會 +1。
  • status 分頁:利用 if (status == 0)if (status == 1) 來控制每個階段 NPC 該說什麼話。

4. 條件判斷與給予獎勵

腳本中最核心的發放判斷邏輯撰寫於 status == 1 之中:

  • getPrizeLog(log):用來查詢該帳號對於這項 log 的領取次數。
  • if ( ... >= 可領取次數):大於等於上限次數時,會發送「已達上限」的訊息並結束對話。
  • cm.gainItem()setPrizeLog(log):發送道具給玩家,並且增加該帳號領取的紀錄。

學會這套基礎框架後,你就能夠輕鬆做出簽到、禮包兌換或是各種每日任務的 NPC 囉!快去試試看吧!