package scripting.reactor;
import client.MapleClient;
import database.DatabaseConnection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
import scripting.AbstractScriptManager;
import server.maps.MapleReactor;
import server.maps.ReactorDropEntry;
import tools.FileoutputUtil;
public class ReactorScriptManager extends AbstractScriptManager {
private static final ReactorScriptManager instance = new ReactorScriptManager();
private final Map<Integer, List<ReactorDropEntry>> drops = new HashMap();
public static final ReactorScriptManager getInstance() {
return instance;
}
public void act(MapleClient c, MapleReactor reactor) {
try {
Invocable iv = getInvocable("反应堆/" + reactor.getReactorId() + ".js", c);
if (iv == null) {
if (c.getPlayer().isShowPacket()) {
c.getPlayer().dropMessage(5, "未找到 反应堆 文件中的 " + reactor.getReactorId() + ".js 文件.");
}
FileoutputUtil.log(FileoutputUtil.Reactor_ScriptEx_Log, "未找到 反应堆 文件中的 " + reactor.getReactorId() + ".js 文件.");
return;
}
ScriptEngine scriptengine = (ScriptEngine) iv;
ReactorActionManager rm = new ReactorActionManager(c, reactor);
scriptengine.put("rm", rm);
iv.invokeFunction("act", new Object[0]);
} catch (ScriptException | NoSuchMethodException e) {
System.err.println("执行反应堆文件出错 反应堆ID: " + reactor.getReactorId() + ", 反应堆名称: " + reactor.getName() + " 错误信息: " + e);
FileoutputUtil.log(FileoutputUtil.Reactor_ScriptEx_Log, "执行反应堆文件出错 反应堆ID: " + reactor.getReactorId() + ", 反应堆名称: " + reactor.getName() + " 错误信息: " + e);
}
}
public List<ReactorDropEntry> getDrops(int reactorId) {
List ret = (List) this.drops.get(Integer.valueOf(reactorId));
if (ret != null) {
return ret;
}
ret = new LinkedList();
try {
try (PreparedStatement ps = DatabaseConnection.getConnection().prepareStatement("SELECT * FROM reactordrops WHERE reactorid = ?")) {
ps.setInt(1, reactorId);
try (ResultSet rs = ps.executeQuery()) {
while (rs.next()) {
ret.add(new ReactorDropEntry(rs.getInt("itemid"), rs.getInt("chance"), rs.getInt("questid")));
}
}
ps.close();
}
} catch (SQLException e) {
System.err.println("从SQL中读取箱子的爆率出错.箱子的ID: " + reactorId + " 错误信息: " + e);
FileoutputUtil.log(FileoutputUtil.Reactor_ScriptEx_Log, "从SQL中读取箱子的爆率出错.箱子的ID: " + reactorId + " 错误信息: " + e);
}
this.drops.put(reactorId, ret);
return ret;
}
public void clearDrops() {
this.drops.clear();
}
}