/** * 吃技能/升级 * * @author hzw * @date 2014-9-11下午2:26:39 * @param msgMap * @param channelId * @throws Exception @Description */ @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) public void eatManualSkill(Map<String, Object> msgMap, String channelId) throws Exception { MessageData syncMsgData = new MessageData(); int instPlayerId = getInstPlayerId(channelId); if (instPlayerId == 0) { MessageUtil.sendFailMsg(channelId, msgMap, StaticCnServer.fail_PlayerIdVerfy); return; } int instPlayerManualSkillId = (Integer) msgMap.get("instPlayerManualSkillId"); String instPlayerManualSkillIdList = (String) msgMap.get("instPlayerManualSkillIdList"); String[] paramList = instPlayerManualSkillIdList.split(";"); int expsum = 0; InstPlayerManualSkill instPlayerManualSkill = getInstPlayerManualSkillDAL().getModel(instPlayerManualSkillId, instPlayerId); if (instPlayerId != instPlayerManualSkill.getInstPlayerId()) { MessageUtil.sendFailMsg(channelId, msgMap, StaticCnServer.fail_differentPlayers); return; } for (String str : paramList) { InstPlayerManualSkill obj = getInstPlayerManualSkillDAL().getModel(ConvertUtil.toInt(str), instPlayerId); if (instPlayerId != obj.getInstPlayerId()) { MessageUtil.sendFailMsg(channelId, msgMap, StaticCnServer.fail_differentPlayers); return; } if (obj.getIsUse() > 0) { MessageUtil.sendFailMsg(channelId, msgMap, StaticCnServer.fail_manualSkillIsUse); return; } DictManualSkill dictManualSkill = DictMap.dictManualSkillMap.get(obj.getManualSkillId() + ""); expsum += FormulaUtil.eatManualSkillExp(obj.getLevel()) + dictManualSkill.getExp() + obj.getExp(); } // 等级,经验计算 Map<String, Integer> retMap = FormulaUtil.calcManualSkillLevel( instPlayerManualSkill.getLevel(), instPlayerManualSkill.getExp() + expsum); int level = retMap.get("level"); int exp = retMap.get("exp"); instPlayerManualSkill.setLevel(level); instPlayerManualSkill.setExp(exp); getInstPlayerManualSkillDAL().update(instPlayerManualSkill, instPlayerId); OrgFrontMsgUtil.orgSyncMsgData( StaticSyncState.update, instPlayerManualSkill, instPlayerManualSkill.getId(), instPlayerManualSkill.getResult(), syncMsgData); // 删除被吃技能 for (String str : paramList) { InstPlayerManualSkill obj = getInstPlayerManualSkillDAL().getModel(ConvertUtil.toInt(str), instPlayerId); getInstPlayerManualSkillDAL().deleteById(obj.getId(), instPlayerId); OrgFrontMsgUtil.orgSyncMsgData(StaticSyncState.delete, obj, obj.getId(), "", syncMsgData); } MessageUtil.sendSyncMsg(channelId, syncMsgData); MessageUtil.sendSuccMsg(channelId, msgMap); }