Let scripts access Java classes

Fix script attempting to schedule with non-long (double) time value
This commit is contained in:
P0nk
2021-04-17 22:25:07 +02:00
parent fcd879f97c
commit 58e69654a2
2 changed files with 13 additions and 5 deletions

View File

@@ -60,7 +60,9 @@ function takeoff() {
em.setProperty("docked","false"); 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); em.schedule("arrived", rideTime);
} }

View File

@@ -24,10 +24,7 @@ package scripting;
import client.MapleClient; import client.MapleClient;
import tools.FilePrinter; import tools.FilePrinter;
import javax.script.ScriptEngine; import javax.script.*;
import javax.script.ScriptEngineFactory;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import java.io.File; import java.io.File;
import java.io.FileReader; import java.io.FileReader;
import java.io.IOException; import java.io.IOException;
@@ -49,7 +46,10 @@ public abstract class AbstractScriptManager {
if (!scriptFile.exists()) { if (!scriptFile.exists()) {
return null; return null;
} }
ScriptEngine engine = sef.getScriptEngine(); ScriptEngine engine = sef.getScriptEngine();
applyLooserGraalSecurity(engine);
try (FileReader fr = new FileReader(scriptFile)) { try (FileReader fr = new FileReader(scriptFile)) {
engine.eval(fr); engine.eval(fr);
} catch (final ScriptException | IOException t) { } catch (final ScriptException | IOException t) {
@@ -70,6 +70,12 @@ public abstract class AbstractScriptManager {
return engine; 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) { protected void resetContext(String path, MapleClient c) {
c.removeScriptEngine("scripts/" + path); c.removeScriptEngine("scripts/" + path);
} }