package javastory.game.data;
import java.util.Map;
import javastory.channel.client.ISkill;
import javastory.channel.client.Skill;
import javastory.tools.StringUtil;
import javastory.wz.WzData;
import javastory.wz.WzDataDirectoryEntry;
import javastory.wz.WzDataFileEntry;
import javastory.wz.WzDataProvider;
import javastory.wz.WzDataProviderFactory;
import javastory.wz.WzDataTool;
import com.google.common.collect.Maps;
public final class SkillInfoProvider {
private static final Map<Integer, ISkill> skills = Maps.newHashMap();
private static final Map<Integer, SummonSkillEntry> summonSkills = Maps.newHashMap();
private final static WzData stringData = WzDataProviderFactory.getDataProvider("String.wz").getData("Skill.img");
private SkillInfoProvider() {
}
public static ISkill getSkill(final int id) {
if (!skills.isEmpty()) {
return skills.get(Integer.valueOf(id));
}
System.out.println(":: Loading SkillInfoProvider ::");
final WzDataProvider datasource = WzDataProviderFactory.getDataProvider("Skill.wz");
final WzDataDirectoryEntry root = datasource.getRoot();
for (final WzDataFileEntry topDir : root.getFiles()) {
// Loop thru jobs
if (topDir.getName().length() > 8) {
continue;
}
for (final WzData job : datasource.getData(topDir.getName())) {
// Loop thru each jobs
if (!job.getName().equals("skill")) {
continue;
}
for (final WzData skill : job) {
// Loop thru each jobs
if (skill == null) {
continue;
}
final int skillId = Integer.parseInt(skill.getName());
skills.put(skillId, Skill.loadFromData(skillId, skill));
final WzData summonData = skill.getChildByPath("summon/attack1/info");
if (summonData == null) {
continue;
}
final SummonSkillEntry summonSkillEntry = new SummonSkillEntry(summonData);
summonSkills.put(skillId, summonSkillEntry);
}
}
}
return null;
}
public static String getSkillName(final int id) {
String strId = Integer.toString(id);
strId = StringUtil.getLeftPaddedStr(strId, '0', 7);
final WzData skillroot = stringData.getChildByPath(strId);
if (skillroot != null) {
return WzDataTool.getString(skillroot.getChildByPath("name"), "");
}
return null;
}
public static SummonSkillEntry getSummonData(final int skillid) {
return summonSkills.get(skillid);
}
}