/**
   * @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);
    }
  }
Beispiel #8
0
  /**
   * Сформировать внешность по данным с хмл.
   *
   * @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();
 }