package server.life; import java.awt.Point; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import provider.MapleData; import provider.MapleDataProvider; import provider.MapleDataProviderFactory; import provider.MapleDataTool; import tools.Pair; public class MobSkillFactory { protected Map<Pair<Integer, Integer>, MobSkill> mobSkill; public static MobSkillFactory getInstance() { return SingletonHolder.instance; } private MobSkillFactory() { this.mobSkill = new HashMap(); initialize(); } private void initialize() { this.mobSkill.clear(); MapleDataProvider dataSource = MapleDataProviderFactory.getDataProvider(new File(System.getProperty("wzpath", "wz") + "/Skill.wz")); MapleData skillRoot = dataSource.getData("MobSkill.img"); for (MapleData skillData : skillRoot.getChildren()) { for (MapleData levelData : skillData.getChildByPath("level").getChildren()) { int skillId = Integer.parseInt(skillData.getName()); int level = Integer.parseInt(levelData.getName()); List toSummon = new ArrayList(); for (int i = 0; (i <= 200) && (levelData.getChildByPath(String.valueOf(i)) != null); i++) { toSummon.add(MapleDataTool.getInt(levelData.getChildByPath(String.valueOf(i)), 0)); } MapleData ltdata = levelData.getChildByPath("lt"); Point lt = null; if (ltdata != null) { lt = (Point) ltdata.getData(); } MapleData rbdata = levelData.getChildByPath("rb"); Point rb = null; if (rbdata != null) { rb = (Point) rbdata.getData(); } MobSkill ret = new MobSkill(skillId, level); ret.addSummons(toSummon); ret.setCoolTime(MapleDataTool.getInt("interval", levelData, 0) * 1000); ret.setDuration(MapleDataTool.getInt("time", levelData, 0) * 1000); ret.setHp(MapleDataTool.getInt("hp", levelData, 100)); ret.setMpCon(MapleDataTool.getInt("mpCon", levelData, 0)); ret.setSpawnEffect(MapleDataTool.getInt("summonEffect", levelData, 0)); ret.setX(MapleDataTool.getInt("x", levelData, 1)); ret.setY(MapleDataTool.getInt("y", levelData, 1)); ret.setProp(MapleDataTool.getInt("prop", levelData, 100) / 100.0F); ret.setLimit((short) MapleDataTool.getInt("limit", levelData, 0)); ret.setOnce(MapleDataTool.getInt("summonOnce", levelData, 0) > 0); ret.setLtRb(lt, rb); this.mobSkill.put(new Pair(skillId, level), ret); } } MapleData skillData; // FileoutputUtil.log("共加载 " + this.mobSkill.size() + " 个怪物技能信息..."); } public MobSkill getMobSkill(int skillId, int level) { return (MobSkill) this.mobSkill.get(new Pair(skillId, level)); } private static class SingletonHolder { protected static final MobSkillFactory instance = new MobSkillFactory(); } }