Package scripting


package scripting
遊戲內容腳本層:以 GraalJS 執行 scripts/ 下的 NPC/任務/傳送門/反應爐/活動 JavaScript。

本 package 是「Java 伺服器」與「約 2,700 支第一方遊戲內容腳本」之間的橋接層。所有腳本引擎 皆由單一接縫 ScriptEngines 建立:它把 GraalJS 配置成與 Nashorn 對齊(nashorn-compat、 allowAllAccess,加上兩條 load-bearing 的「JS 數字 → Java StringBoolean」隱式 強制映射),並提供 event 引擎所需的序列化進入代理。8→25 升級的 Track B(Nashorn → GraalJS)遷移 完成後,正式環境已 Nashorn-free。

各類腳本由對應的 ScriptManager 載入並驅動,皆繼承共用基底 AbstractScriptManager (負責解析路徑、取得引擎、eval 檔案並回傳 Invocable、per-MapleClient 快取): NPC 對話由 NPCScriptManagerNPCConversationManager(於 JS 中即全域 cm); 傳送門由 PortalScriptManagerPortalScriptPortalPlayerInteraction; 反應爐由 ReactorScriptManagerReactorActionManager; 活動/組隊任務/王怪則由 EventScriptManagerEventManagerEventInstanceManagerAbstractPlayerInteraction 是所有腳本類型共用的腳本 API 基底,封裝對角色與地圖等子系統的操作。

腳本以名稱參照 src/ 的類別(封包 builder、cmpi API 等),故跨 package 的移動或改名可能在執行期使腳本拋 PolyglotException 而被進入點靜默吞掉;MapleClient 持有 per-client 的引擎快取,因此編輯腳本後需以重載指令清除快取方能生效。