From 58e69654a20d02e10ae006437cec7b16c9bf6abc Mon Sep 17 00:00:00 2001 From: P0nk Date: Sat, 17 Apr 2021 22:25:07 +0200 Subject: [PATCH] Let scripts access Java classes Fix script attempting to schedule with non-long (double) time value --- scripts/event/Boats.js | 4 +++- src/main/java/scripting/AbstractScriptManager.java | 14 ++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/scripts/event/Boats.js b/scripts/event/Boats.js index 48daf46225..69d75f7019 100644 --- a/scripts/event/Boats.js +++ b/scripts/event/Boats.js @@ -60,7 +60,9 @@ function takeoff() { em.setProperty("docked","false"); - if(Math.random() < 0.42) em.schedule("approach", (invasionStartTime + (Math.random() * invasionDelayTime))); + if (Math.random() < 0.42) { + em.schedule("approach", (invasionStartTime + Math.trunc((Math.random() * invasionDelayTime)))); + } em.schedule("arrived", rideTime); } diff --git a/src/main/java/scripting/AbstractScriptManager.java b/src/main/java/scripting/AbstractScriptManager.java index 4ff3bfa50c..1e3c54635c 100644 --- a/src/main/java/scripting/AbstractScriptManager.java +++ b/src/main/java/scripting/AbstractScriptManager.java @@ -24,10 +24,7 @@ package scripting; import client.MapleClient; import tools.FilePrinter; -import javax.script.ScriptEngine; -import javax.script.ScriptEngineFactory; -import javax.script.ScriptEngineManager; -import javax.script.ScriptException; +import javax.script.*; import java.io.File; import java.io.FileReader; import java.io.IOException; @@ -49,7 +46,10 @@ public abstract class AbstractScriptManager { if (!scriptFile.exists()) { return null; } + ScriptEngine engine = sef.getScriptEngine(); + applyLooserGraalSecurity(engine); + try (FileReader fr = new FileReader(scriptFile)) { engine.eval(fr); } catch (final ScriptException | IOException t) { @@ -70,6 +70,12 @@ public abstract class AbstractScriptManager { return engine; } + private void applyLooserGraalSecurity(ScriptEngine scriptEngine) { + Bindings bindings = scriptEngine.getBindings(ScriptContext.ENGINE_SCOPE); + bindings.put("polyglot.js.allowHostAccess", true); + bindings.put("polyglot.js.allowHostClassLookup", true); + } + protected void resetContext(String path, MapleClient c) { c.removeScriptEngine("scripts/" + path); }