package scripting;
import client.MapleClient;
import database.DatabaseConnection;
import java.io.PrintStream;
import java.sql.Connection;
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 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 final void act(MapleClient c, MapleReactor reactor) {
try {
Invocable iv = getInvocable("reactor/" + reactor.getReactorId() + ".js", c);
if (iv == null) {
return;
}
ScriptEngine scriptengine = (ScriptEngine) iv;
ReactorActionManager rm = new ReactorActionManager(c, reactor);
scriptengine.put("rm", rm);
iv.invokeFunction("act", new Object[0]);
} catch (Exception e) {
System.err.println("Error executing reactor script. ReactorID: " + reactor.getReactorId() + ", ReactorName: " + reactor.getName() + ":" + e);
FileoutputUtil.log("Log_Script_Except.txt", "Error executing reactor script. ReactorID: " + reactor.getReactorId() + ", ReactorName: " + reactor.getName() + ":" + e);
}
}
public final List<ReactorDropEntry> getDrops(int rid) {
List ret = (List) this.drops.get(Integer.valueOf(rid));
if (ret != null) {
return ret;
}
ret = new LinkedList();
PreparedStatement ps = null;
ResultSet rs = null;
try {
Connection con = DatabaseConnection.getConnection();
ps = con.prepareStatement("SELECT * FROM reactordrops WHERE reactorid = ?");
ps.setInt(1, rid);
rs = ps.executeQuery();
while (rs.next()) {
ret.add(new ReactorDropEntry(rs.getInt("itemid"), rs.getInt("chance"), rs.getInt("questid")));
}
rs.close();
ps.close();
} catch (SQLException e) {
System.err.println("Could not retrieve drops for reactor " + rid + e);
return ret;
} finally {
try {
if (rs != null) {
rs.close();
}
if (ps != null) {
ps.close();
}
} catch (SQLException ignore) {
return ret;
}
}
this.drops.put(Integer.valueOf(rid), ret);
return ret;
}
public final void clearDrops() {
this.drops.clear();
}
}