Class EventScriptManager
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionfinal voidcancel()static String[]掃描scripts/event/目錄,回傳所有事件腳本的基底名稱(去掉.js副檔名)。final EventManagergetEventManager(String event) static final intfinal voidinit()static void彙整所有頻道的活動腳本載入結果並輸出精簡日誌。final booleanreloadEvent(String requested) 只重新載入單一活動腳本(scripts/event/<名稱>.js),不影響其他已載入的活動。Methods inherited from class AbstractScriptManager
cleanNpc, cleanNpcs, getInvocable, getInvocable
-
Constructor Details
-
EventScriptManager
-
-
Method Details
-
getNewInstanceMapId
public static final int getNewInstanceMapId() -
discoverEventScripts
掃描scripts/event/目錄,回傳所有事件腳本的基底名稱(去掉.js副檔名)。自 2026-06-04 起,要載入哪些活動/PQ 腳本改由本目錄掃描決定,不再讀
settings.ini的net.sf.odinms.channel.events(該鍵已移除)。目錄即「開關」: 要停用某活動,移除或更名其.js,或將它移進子資料夾(掃描不遞迴,僅取目錄直屬的*.js)即可。掃描結果以不分大小寫排序回傳以求穩定;解析失敗或語法錯誤的腳本(如既有的
BossQuest.js)由EventScriptManager(ChannelServer, String[])載入時優雅略過 (getInvocable回傳null→ 不加入),不會中斷其餘腳本載入。- Returns:
- 事件腳本基底名稱陣列(已排序);找不到
scripts/event目錄時回傳空陣列
-
logLoadSummary
public static void logLoadSummary()彙整所有頻道的活動腳本載入結果並輸出精簡日誌。開服(
ChannelServer.startChannel_Main())與!reloadevents/!reloadall都會「每個頻道各建一個EventScriptManager」,各頻道讀的是同一份scripts/event/目錄、結果通常完全一致。本方法須在所有頻道都建立完成後呼叫:- 各頻道結果一致 → 只印一行摘要(與舊版逐頻道輸出的格式相同,但不再重複 channel.count 次)。
- 有頻道載入結果與多數頻道不同(代表該頻道載入異常)→ 該頻道另外以警告單獨印出,並列出失敗檔名。
-
getEventManager
-
reloadEvent
只重新載入單一活動腳本(scripts/event/<名稱>.js),不影響其他已載入的活動。對應 GM 指令
!reloadevent <副本名稱>;相對於ChannelServer.reloadEvents()(重建整個EventScriptManager)只動目標一支,正在進行中的其他活動/PQ 實例不受波及。名稱以
discoverEventScripts()的掃描結果做不分大小寫比對,採用磁碟上的正規檔名大小寫 (故!reloadevent pirate也能命中Pirate.js);找不到對應檔即回傳false。 event 引擎不快取(getInvocable每次讀磁碟),故重載必拿到最新檔內容。流程刻意採「先建後換」: 先讀檔、new EventManager、init完成,再以put換掉舊項、最後cancel舊項, 使併發的getEventManager(String)永遠看得到舊或新其一、不會出現短暫缺漏。- Parameters:
requested- GM 輸入的副本名稱(大小寫不拘;對應scripts/event/下的檔名)- Returns:
true表已重載成功;false表找不到該腳本或其解析/載入失敗(語法錯)
-
init
public final void init() -
cancel
public final void cancel()
-