package server.life;
import database.DatabaseConnection;
import java.awt.Point;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import tools.Pair;
public class MobSkillFactory {
private final Map<Pair<Integer, Integer>, MobSkill> mobSkillCache = new HashMap();
private static final MobSkillFactory instance = new MobSkillFactory();
public MobSkillFactory() {
initialize();
}
public static MobSkillFactory getInstance() {
return instance;
}
public static MobSkill getMobSkill(int skillId, int level) {
return (MobSkill) instance.mobSkillCache.get(new Pair(Integer.valueOf(skillId), Integer.valueOf(level)));
}
private void initialize() {
try {
Connection con = DatabaseConnection.getConnection();
PreparedStatement ps = con.prepareStatement("SELECT * FROM wz_mobskilldata");
ResultSet rs = ps.executeQuery();
while (rs.next()) {
this.mobSkillCache.put(new Pair(Integer.valueOf(rs.getInt("skillid")), Integer.valueOf(rs.getInt("level"))), get(rs));
}
rs.close();
ps.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private MobSkill get(ResultSet rs) throws SQLException {
List toSummon = new ArrayList();
String[] summs = rs.getString("summons").split(", ");
if ((summs.length <= 0) && (rs.getString("summons").length() > 0)) {
toSummon.add(Integer.valueOf(Integer.parseInt(rs.getString("summons"))));
}
for (String s : summs) {
if (s.length() > 0) {
toSummon.add(Integer.valueOf(Integer.parseInt(s)));
}
}
Point lt = null;
Point rb = null;
if ((rs.getInt("ltx") != 0) || (rs.getInt("lty") != 0) || (rs.getInt("rbx") != 0) || (rs.getInt("rby") != 0)) {
lt = new Point(rs.getInt("ltx"), rs.getInt("lty"));
rb = new Point(rs.getInt("rbx"), rs.getInt("rby"));
}
final MobSkill ret = new MobSkill(rs.getInt("skillid"), rs.getInt("level"));
ret.addSummons(toSummon);
ret.setCoolTime(rs.getInt("interval") * 1000);
ret.setDuration(rs.getInt("time") * 1000);
ret.setHp(rs.getInt("hp"));
ret.setMpCon(rs.getInt("mpcon"));
ret.setSpawnEffect(rs.getInt("spawneffect"));
ret.setX(rs.getInt("x"));
ret.setY(rs.getInt("y"));
ret.setProp(rs.getInt("prop") / 100f);
ret.setLimit((short)rs.getInt("limit"));
ret.setOnce(rs.getByte("once") > 0);
ret.setLtRb(lt,rb);
return ret;
}
}