Exemplo n.º 1
0
  /**
   * 根据客户端提供的阵型位置修改用户阵型
   *
   * @param player
   * @param message
   */
  public void modifyFormOrder(Player player, CGFormPosition message) {
    // 获取用户当前对应的阵型配置,找不到配置直接返回错误
    Human human = player.getHuman();
    FormTemplate template = getFormTemplate(human.getVocationType(), human.getLevel());
    if (template == null) {
      player.sendErrorPromptMessage(SkillLangConstants_80000.TEMPLATE_NOT_FOUND);
      return;
    }

    // 获取用户当前阵法,找不到返回错误
    BattleForm form = human.getBattleForm();
    if (form == null) {
      player.sendErrorPromptMessage(SkillLangConstants_80000.TEMPLATE_NOT_FOUND);
      return;
    }

    // 获取用户提供的阵型站位信息,判断是否都站在有效位置上,是否有玩家,是否存在重复id
    String[] positions = new String[BattleForm.TotalPositions];
    int totalPos = 0;
    boolean hasHuman = false;
    Map<String, String> allPets = new HashMap<String, String>();
    for (FormPosition position : message.getPetPositions()) {
      // 初步判断信息有效,即位置上的id不为空,并且位置在阵法规定的范围内
      String petSn = position.getPetSn();
      int formPos = position.getPosition();
      if (StringUtils.isNotEmpty(petSn) && formPos > 0 && formPos <= positions.length) {
        // 判断是否存在重复id或重复位置
        if (allPets.containsKey(petSn) || StringUtils.isNotEmpty(positions[formPos - 1])) {
          player.sendErrorPromptMessage(SkillLangConstants_80000.DUPLICATE_PET);
          return;
        }

        // 判断是否为玩家本身
        if (!hasHuman) {
          hasHuman = petSn.equals(human.getUUID());
        }

        // 判断是否为玩家所属角色,如果是则放入阵法信息中
        if (human.getRole(petSn) != null) {
          positions[formPos - 1] = petSn;
          allPets.put(petSn, petSn);
          totalPos++;
        }
      }
    }

    // 判断阵型中总人数是否超过阵法最大人数限制
    if (totalPos > template.getMaxPos()) {
      player.sendErrorPromptMessage(SkillLangConstants_80000.OUT_OF_MAX_POSITIONS);
      return;
    }

    // 如果玩家不在阵型中返回错误
    if (!hasHuman) {
      player.sendErrorPromptMessage(SkillLangConstants_80000.NO_PLAYER_IN_FORM);
      return;
    }

    // 保存阵法信息
    form.setPositions(positions);
    form.setModified();

    // 更新玩家武将是否在阵型的状态
    for (Pet pet : human.getPetManager().getPets()) {
      if (form.isBattle(pet.getUUID())) {
        pet.getPropertyManager().setIsInBattle(true);
        pet.snapChangedProperty(true);
      } else {
        pet.getPropertyManager().setIsInBattle(false);
        pet.snapChangedProperty(true);
      }
    }
  }