Class AbstractScriptManager
- Direct Known Subclasses:
EventScriptManager, NPCScriptManager, ReactorScriptManager
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic voidcleanNpc(int id) 將指定 NPC 的快取引擎自靜態npcs對應表移除。static void清空整個靜態npcsNPC 引擎快取。protected InvocablegetInvocable(String path, MapleClient c) 解析並載入scripts/<path>腳本,回傳可供呼叫其函式的Invocable。protected InvocablegetInvocable(String path, MapleClient c, boolean npc) 解析並載入scripts/<path>腳本,回傳可供呼叫其函式的Invocable。
-
Constructor Details
-
AbstractScriptManager
public AbstractScriptManager()
-
-
Method Details
-
getInvocable
解析並載入scripts/<path>腳本,回傳可供呼叫其函式的Invocable。等同於
getInvocable(String, MapleClient, boolean)並將npc設為false(非 NPC 腳本,不參與npcs全域快取)。- Parameters:
path- 相對於scripts/的腳本路徑(例如"quest/1000.js")c- 觸發此腳本的連線(可為null;用於取出/寫回 per-client 引擎快取)- Returns:
- 已 eval 完成的腳本
Invocable;若腳本檔不存在或 eval 失敗則為null
-
getInvocable
解析並載入scripts/<path>腳本,回傳可供呼叫其函式的Invocable。解析流程:先嘗試從連線的 per-client 引擎快取取出(
MapleClient.getScriptEngine(String)); 若無,則檢查腳本檔是否存在,再向引擎接縫ScriptEngines.fresh(String)索取一個全新的 GraalJS 引擎(C8 收尾後一律 GraalJS、正式環境 Nashorn-free),以偵測到的編碼 (StringUtil.codeString(String))讀入並eval整個檔案,最後將引擎寫回連線快取。快取語意:引擎以
MapleClient為單位快取,因此在執行期間編輯.js檔 在快取清除(重載指令或重新連線)前不會生效。當npc為true時,引擎另會登記進 靜態npcs對應表(注意此HashMap非同步化)。失敗模式與副作用:腳本內含的
ScriptException/IOException會被攔截、寫入AbstractScriptManager.txt並回傳null(即「靜默失能」—— 呼叫端通常會吞掉而不向玩家報錯)。當c.getPlayer().getDebugMessage()為真時,會於各階段 對玩家送出"getInvocable - PartN"除錯訊息(封包送出)。對已存在 NPC 引擎的重入會向玩家送出 「請打 @ea 解除異常狀態」提示。- Parameters:
path- 相對於scripts/的腳本路徑(例如"npc/9010000.js")c- 觸發此腳本的連線(可為null;為null時略過快取與除錯訊息)npc- 是否為 NPC 腳本:為true時參與靜態npcs快取與重入提示- Returns:
- 已 eval 完成的腳本
Invocable;若腳本檔不存在或 eval 失敗則為null
-
cleanNpc
public static void cleanNpc(int id) 將指定 NPC 的快取引擎自靜態npcs對應表移除。路徑由
id組成"scripts/npc/<id>.js";若該項不存在則為無作用。注意此處 僅清除全域npcs快取,並不影響各MapleClient內的 per-client 引擎快取。- Parameters:
id- 要清除快取的 NPC 編號
-
cleanNpcs
public static void cleanNpcs()清空整個靜態npcsNPC 引擎快取。僅清除全域
npcs對應表;各MapleClient的 per-client 引擎快取不受影響。
-