/** * 获取用户当前阵型 * * @param player */ public void getForm(Player player) { // 获取用户当前对应的阵型配置,找不到配置直接返回错误 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) { form = initBattleForm(human, template); } String[] positions = form.getPositions(); // 根据当前阵法和阵法配置构造返回消息 List<FormPosition> list = new ArrayList<FormPosition>(); for (int open : template.getOpenPositions()) { if (open > 0 && open <= positions.length && StringUtils.isNotEmpty(positions[open - 1])) { list.add(new FormPosition(open, positions[open - 1])); } else { list.add(new FormPosition(open, "-1")); } } // 返回初始化消息 GCForm msg = new GCForm(); msg.setFormPositions(list.toArray(new FormPosition[0])); msg.setMaxPos(template.getMaxPos()); player.sendMessage(msg); }
/** * 根据客户端提供的阵型位置修改用户阵型 * * @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); } } }