/** * @param node данные с хмл. * @param playerClass класс игрока. * @return массив скиллов. */ private final SkillTemplate[][] parseSkills(Node node, PlayerClass playerClass) { Array<SkillTemplate[]> skills = Arrays.toArray(SkillTemplate[].class, 2); // получаем таблицу скилов SkillTable skillTable = SkillTable.getInstance(); for (Node child = node.getFirstChild(); child != null; child = child.getNextSibling()) if ("skill".equals(child.getNodeName())) { // получаем значения аргументов VarTable vars = VarTable.newInstance(child); // получаем ид скила int id = vars.getInteger("id"); // получаем темплейт скила SkillTemplate[] template = skillTable.getSkills(playerClass.getId(), id); // если такой есть if (template != null) // вносим skills.add(template); } // сжимаем список skills.trimToSize(); // возвращаем массив return skills.array(); }
/** * @param node данные с хмл. * @return массив выдаваемых итемов. */ private final int[][] parseItems(Node node) { Array<int[]> items = Arrays.toArray(int[].class); // получаем таблицу итемов ItemTable itemTable = ItemTable.getInstance(); for (Node child = node.getFirstChild(); child != null; child = child.getNextSibling()) if ("item".equals(child.getNodeName())) { // получаем значения аргументов VarTable vars = VarTable.newInstance(child); int id = vars.getInteger("id"); int count = vars.getInteger("count"); // получаем if,kjy итема ItemTemplate template = itemTable.getItem(id); // если такого итема на сервере нет, пропускаем if (template == null) continue; // вносим итем items.add(Arrays.toIntegerArray(id, count)); } // сжимаем массив items.trimToSize(); // возвращаем return items.array(); }
/** * @param node данные с хмл. * @return массив скилов. */ private final Array<SkillTemplate[]> parseSkills(Node node) { Array<SkillTemplate[]> skills = Arrays.toArray(SkillTemplate[].class, 2); // получаем таблицу скилов SkillTable skillTable = SkillTable.getInstance(); for (Node child = node.getFirstChild(); child != null; child = child.getNextSibling()) if ("skill".equals(child.getNodeName())) { // получаем значения аргументов VarTable vars = VarTable.newInstance(child); int id = vars.getInteger("id"); int classId = vars.getInteger("class"); // получаем темплейт скила SkillTemplate[] template = skillTable.getSkills(classId, id); // если такой есть if (template != null) // вносим skills.add(template); } return skills; }
public CrystalTemplate(CrystalType type, VarTable vars) { super(type, vars); try { stackType = StackType.valueOfXml(vars.getString("stackType", "none")); noStack = vars.getBoolean("noStack", true); } catch (Exception e) { e.printStackTrace(); } }
/** * @param node данные с хмл. * @param stats таблица параметров. * @param funcs набор функций. * @param playerClass класс игрока. * @param items массив итемов. * @param skills массив скилов. */ private final void parseTemplate( Node node, VarTable stats, Func[] funcs, PlayerClass playerClass, int[][] items, SkillTemplate[][] skills) { for (Node child = node.getFirstChild(); child != null; child = child.getNextSibling()) if ("race".equals(child.getNodeName())) { // парсим атрибуты VarTable vars = VarTable.newInstance(child); // получаем расу Race race = vars.getEnum("type", Race.class); // контейнер скилов Array<SkillTemplate[]> skillList = null; // парсим рассовые скилы for (Node temp = child.getFirstChild(); temp != null; temp = temp.getNextSibling()) if ("skills".equals(temp.getNodeName())) skillList = parseSkills(temp); // вносим классовые скилы for (SkillTemplate[] skill : skills) skillList.add(skill); // сжимаем массив skillList.trimToSize(); int modelId = vars.getInteger("male", -1); if (modelId != -1) result.add( new PlayerTemplate( stats, funcs, playerClass, race, Sex.MALE, modelId, items, skillList.array())); modelId = vars.getInteger("female", -1); if (modelId != -1) result.add( new PlayerTemplate( stats, funcs, playerClass, race, Sex.FEMALE, modelId, items, skillList.array())); } }
/** @param node данные с хмл. */ private final void parseTemplate(Node node) { VarTable vars = VarTable.newInstance(node); // получаем класс игрока PlayerClass pclass = vars.getEnum("class", PlayerClass.class); VarTable set = null; int[][] items = null; SkillTemplate[][] skills = null; Func[] funcs = new Func[0]; for (Node child = node.getFirstChild(); child != null; child = child.getNextSibling()) { if (child.getNodeType() != Node.ELEMENT_NODE) continue; else if ("stats".equals(child.getNodeName())) set = VarTable.newInstance(child, "stat", "name", "val"); else if ("funcs".equals(child.getNodeName())) funcs = parseFuncs(child); else if ("items".equals(child.getNodeName())) items = parseItems(child); else if ("skills".equals(child.getNodeName())) skills = parseSkills(child, pclass); else if ("races".equals(child.getNodeName())) parseTemplate(child, set, funcs, pclass, items, skills); } }
public RegionWarBattleAction(Node node) { super(node); try { // парсим параметры VarTable vars = VarTable.newInstance(node, "set", "name", "val"); this.battleMaxRange = vars.getInteger("battleMaxRange", ConfigAI.DEFAULT_BATTLE_MAX_RANGE); this.reactionMaxRange = vars.getInteger("reactionMaxRange", ConfigAI.DEFAULT_REACTION_MAX_RANGE); // получаем таблицу сообщений MessagePackageTable messageTable = MessagePackageTable.getInstance(); this.switchTargetMessages = messageTable.getPackage( vars.getString("switchTargetMessages", ConfigAI.DEFAULT_SWITCH_TARGET_MESSAGES)); } catch (Exception e) { log.warning(this, e); throw new IllegalArgumentException(e); } }
/** * Сформировать внешность по данным с хмл. * * @param appearance внешность, в которую вносить данные. * @param vars таблица параметров. * @return новая внешность. */ public static <T extends PlayerAppearance> T fromXML(T appearance, VarTable vars) { Array<Field> fields = ReflectionUtils.getAllFields(appearance.getClass(), Object.class, true, "pool", "objectId"); try { for (Field field : fields) { boolean old = field.isAccessible(); field.setAccessible(true); field.setInt(appearance, vars.getInteger(field.getName(), field.getInt(appearance))); field.setAccessible(old); } } catch (IllegalArgumentException | IllegalAccessException e) { Loggers.warning(appearance.getClass(), e); } return appearance; }
@Override protected VarTable create() { return VarTable.newInstance(); }