package org.reunionemu.jreunion.server; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Vector; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.reunionemu.jcommon.ParsedItem; import org.reunionemu.jcommon.Parser; import org.reunionemu.jreunion.game.Player; import org.reunionemu.jreunion.game.Player.Race; import org.reunionemu.jreunion.game.Skill; public class SkillManager { java.util.Map<Integer,Skill> skills = new HashMap<Integer,Skill>(); java.util.Map<Race,List<Skill>> defaultSkills = new HashMap<Race,List<Skill>>(); public SkillManager(){ Parser parser = Reference.getInstance().getSkillReference(); Iterator<ParsedItem> iter = parser.getItemListIterator(); while(iter.hasNext()){ ParsedItem item = iter.next(); if(!item.checkMembers(new String[]{"Id","Class"})){ continue; } int id = Integer.parseInt(item.getMemberValue("Id")); String className = "org.reunionemu.jreunion.game.skills."+item.getMemberValue("Class"); Skill skill = (Skill) ClassFactory.create(className, this, id); if(skill==null){ LoggerFactory.getLogger(SkillManager.class).warn("Failed to load Skill {id:"+id+" name:" +item.getName()+"}"); continue; } skill.setName(item.getName()); skills.put(id, skill); } parser.clear(); for(Race race : Race.values()){ List<Skill> raceSkillList = new Vector<Skill>(); raceSkillList.add(skills.get(0)); switch(race) { case BULKAN: { raceSkillList.add(skills.get(1)); raceSkillList.add(skills.get(1)); raceSkillList.add(skills.get(2)); raceSkillList.add(skills.get(17)); raceSkillList.add(skills.get(18)); raceSkillList.add(skills.get(19)); raceSkillList.add(skills.get(31)); raceSkillList.add(skills.get(37)); raceSkillList.add(skills.get(38)); raceSkillList.add(skills.get(39)); raceSkillList.add(skills.get(40)); raceSkillList.add(skills.get(41)); raceSkillList.add(skills.get(60)); raceSkillList.add(skills.get(61)); raceSkillList.add(skills.get(71)); raceSkillList.add(skills.get(75)); raceSkillList.add(skills.get(100)); break; } case KAILIPTON: { raceSkillList.add(skills.get(3)); raceSkillList.add(skills.get(4)); raceSkillList.add(skills.get(5)); raceSkillList.add(skills.get(7)); raceSkillList.add(skills.get(8)); raceSkillList.add(skills.get(10)); raceSkillList.add(skills.get(11)); raceSkillList.add(skills.get(12)); raceSkillList.add(skills.get(13)); raceSkillList.add(skills.get(14)); raceSkillList.add(skills.get(15)); raceSkillList.add(skills.get(26)); raceSkillList.add(skills.get(27)); raceSkillList.add(skills.get(28)); raceSkillList.add(skills.get(47)); raceSkillList.add(skills.get(48)); raceSkillList.add(skills.get(49)); raceSkillList.add(skills.get(50)); raceSkillList.add(skills.get(51)); raceSkillList.add(skills.get(52)); raceSkillList.add(skills.get(62)); raceSkillList.add(skills.get(63)); raceSkillList.add(skills.get(64)); raceSkillList.add(skills.get(72)); raceSkillList.add(skills.get(76)); break; } case AIDIA: { raceSkillList.add(skills.get(6)); raceSkillList.add(skills.get(22)); raceSkillList.add(skills.get(24)); raceSkillList.add(skills.get(32)); raceSkillList.add(skills.get(33)); raceSkillList.add(skills.get(34)); raceSkillList.add(skills.get(53)); raceSkillList.add(skills.get(54)); raceSkillList.add(skills.get(55)); raceSkillList.add(skills.get(56)); raceSkillList.add(skills.get(57)); raceSkillList.add(skills.get(58)); raceSkillList.add(skills.get(67)); raceSkillList.add(skills.get(68)); raceSkillList.add(skills.get(69)); raceSkillList.add(skills.get(70)); raceSkillList.add(skills.get(73)); raceSkillList.add(skills.get(78)); break; } case HUMAN: { raceSkillList.add(skills.get(20)); raceSkillList.add(skills.get(21)); raceSkillList.add(skills.get(29)); raceSkillList.add(skills.get(30)); raceSkillList.add(skills.get(35)); raceSkillList.add(skills.get(36)); raceSkillList.add(skills.get(42)); raceSkillList.add(skills.get(43)); raceSkillList.add(skills.get(44)); raceSkillList.add(skills.get(45)); raceSkillList.add(skills.get(46)); raceSkillList.add(skills.get(65)); raceSkillList.add(skills.get(66)); raceSkillList.add(skills.get(74)); raceSkillList.add(skills.get(77)); break; } case HYBRIDER: { raceSkillList.add(skills.get(79)); raceSkillList.add(skills.get(80)); raceSkillList.add(skills.get(81)); raceSkillList.add(skills.get(82)); raceSkillList.add(skills.get(83)); raceSkillList.add(skills.get(84)); raceSkillList.add(skills.get(85)); raceSkillList.add(skills.get(86)); raceSkillList.add(skills.get(87)); raceSkillList.add(skills.get(88)); raceSkillList.add(skills.get(89)); raceSkillList.add(skills.get(90)); raceSkillList.add(skills.get(91)); raceSkillList.add(skills.get(92)); raceSkillList.add(skills.get(93)); raceSkillList.add(skills.get(94)); raceSkillList.add(skills.get(95)); raceSkillList.add(skills.get(96)); raceSkillList.add(skills.get(97)); raceSkillList.add(skills.get(98)); break; } default: continue; } defaultSkills.put(race, raceSkillList); } LoggerFactory.getLogger(SkillManager.class).info("Loaded "+skills.size()+" skills"); } public Skill getSkill(int id){ return skills.get(id); } public void loadSkills(Player player){ Race race = player.getRace(); synchronized(player){ player.getSkills().clear(); for(Skill skill : defaultSkills.get(race)){ player.getSkills().put(skill, 0); } } switch(race){ case KAILIPTON: player.setSkillLevel(getSkill(3),1); //Fireball player.setSkillLevel(getSkill(4),1); //Lightning Ball player.setSkillLevel(getSkill(12),1); //Pebble Shot } } }