henrybobo

Lv.1 初心者
管理成員
管理員
註冊
2022-08-27
文章
310
評分
77
聲望
0
【MapleStory 副本 Event 教學】從零開始寫 Event 副本腳本!
— By 楓之谷腳本教學專區




📌 什麼是 Event 副本?
Event 副本
是指可以由 EventManager(事件管理器) 控制的特殊地圖,玩家進入副本後,系統可以設定時間限制、條件觸發、怪物生成、獎勵發放等功能。這種副本主要用於 BOSS 挑戰、團隊副本(PQ)、活動地圖等

在 MapleStory 私服中,你可以使用 JavaScript 來編寫 Event 副本,並透過 NPC 或 特殊入口 讓玩家加入副本。

✨ 本篇教學適合:
✅ 完全不會寫楓之谷 JS 腳本的新手
✅ 想學習 Event 副本腳本的 GM
✅ 需要撰寫 Boss 副本或組隊任務的私服管理員




🛠 副本腳本的基本架構
Event 副本的腳本一般放在 /scripts/event 資料夾內,副本的開始與結束由 EventManager 控制。基本的腳本結構如下:

JavaScript:
function init() {
em.setProperty("state", "0");
em.setProperty("leader", "true");
}

function setup(eim, leaderid) {
em.setProperty("state", "1");



var eim = em.newInstance("副本名稱"); 
var map = eim.setInstanceMap(副本地圖ID); 
map.resetFully(); 

eim.startEventTimer(30 * 60 * 1000); // 30 分鐘倒數 
return eim; 

}

📌 主要的函數解釋:
✔ init() - 初始化副本狀態,通常在伺服器啟動時執行
✔ setup(eim, leaderid) - 創建副本,並設置倒數計時
✔ em.newInstance("副本名稱") - 創建一個新的副本實例
✔ eim.setInstanceMap(地圖ID) - 設定副本的地圖
✔ map.resetFully() - 重置地圖,清除怪物與道具
✔ eim.startEventTimer(時間) - 設定副本的時間限制




📝 副本完整腳本範例 - 簡單 BOSS 副本
以下是完整的 簡單 Boss 副本腳本,當玩家進入副本後,BOSS 會在 指定座標 出現,擊敗 BOSS 後即可獲得獎勵!

JavaScript:
var returnMap = 910000000; // 副本結束後回到自由市場
var bossId = 8800002; // 怪物 ID(暗黑龍王)
var timeLimit = 30 * 60 * 1000; // 30 分鐘

function init() {
em.setProperty("state", "0");
}

function setup(eim) {
em.setProperty("state", "1");
var eim = em.newInstance("BossPQ");



var map = eim.setInstanceMap(240060000); // 設定副本地圖 
map.resetFully(); 

var mob = em.getMonster(bossId); 
map.spawnMonsterOnGroundBelow(mob, new java.awt.Point(890, 230)); 

eim.startEventTimer(timeLimit); 
return eim; 

}

function playerEntry(eim, player) {
var map = eim.getMapInstance(0);
player.changeMap(map, map.getPortal(0));
}

function changedMap(eim, player, mapid) {
if (mapid != 240060000) {
eim.unregisterPlayer(player);
if (eim.disposeIfPlayerBelow(0, returnMap)) {
em.setProperty("state", "0");
}
}
}

function scheduledTimeout(eim) {
eim.disposeIfPlayerBelow(100, returnMap);
}

function playerExit(eim, player) {
eim.unregisterPlayer(player);
if (eim.disposeIfPlayerBelow(0, returnMap)) {
em.setProperty("state", "0");
}
}

function monsterValue(eim, mobId) {
if (mobId == bossId) {
eim.broadcastPlayerMsg(5, "恭喜!你擊敗了 BOSS!");
}
return 1;
}

✨ 副本流程解析:
🔹 setup(eim) - 創建副本,並召喚 BOSS
🔹 playerEntry(eim, player) - 讓玩家進入副本
🔹 changedMap(eim, player, mapid) - 檢查玩家是否離開副本
🔹 scheduledTimeout(eim) - 設定時間到後強制結束副本
🔹 monsterValue(eim, mobId) - 當 BOSS 死亡時,公告訊息並發放獎勵




🚀 如何讓玩家進入副本?
你可以透過 NPC 腳本 來讓玩家加入副本。例如:

JavaScript:
function start() {
cm.sendSimple("歡迎來到暗黑龍王挑戰!\r\n#L0#開始挑戰#l");
}

function action(mode, type, selection) {
if (mode == 1 && selection == 0) {
var em = cm.getEventManager("BossPQ");
if (em == null) {
cm.sendOk("副本不存在,請聯繫管理員!");
} else {
var eim = em.getInstance(cm.getPlayer().getName());
if (eim == null) {
eim = em.startInstance(cm.getPlayer());
}
cm.getPlayer().changeMap(eim.getMapInstance(0), eim.getMapInstance(0).getPortal(0));
}
}
cm.dispose();
}

這樣玩家與 NPC 對話時,就能選擇 「開始挑戰」,並進入副本。




🎯 結語
現在你已經學會了 如何撰寫 Event 副本腳本,並能讓玩家透過 NPC 進入副本
 
  • Like
反饋: plumbossom