diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java index 5b0e5790c..41c8fa3a8 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java @@ -2770,6 +2770,7 @@ public class HeroLogic { int equipForce = 0; Iterator> iterator = hero.getEquipByHongmengPositionMap(heroManager).entrySet().iterator(); Map intensifyMap = user.getEquipManager().getEquipIntensifyMap(); + Map strengthenMap = STableManager.getConfig(SEquipStrengthen.class); // 套装list初始化 ArrayList suiteNumList = new ArrayList<>(); while (iterator.hasNext()) { @@ -2779,10 +2780,13 @@ public class HeroLogic { Map propertyValueByIdMap = new HashMap<>(); for (int[] prop : property) { // 家园装备强化属性 - Integer level = intensifyMap.get(sEquipConfig.getPosition()); + Integer levelId = intensifyMap.get(sEquipConfig.getPosition()); long value = prop[1]; - if (level != null){ - value = prop[1] + (prop[1]/100L*level); + if (levelId != null){ + SEquipStrengthen strengthen = strengthenMap.get(levelId); + if(strengthen != null){ + value = value + (value/100L*strengthen.getRate()); + } } propertyValueByIdMap.put(prop[0], value); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/home/HomeLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/home/HomeLogic.java index a4dcfd51c..1c43481a6 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/home/HomeLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/home/HomeLogic.java @@ -52,102 +52,95 @@ public class HomeLogic { */ public void architectureUpLv(ISession session, PlayerInfoProto.ArchitectureOperateRequest proto) throws Exception { User user = UserManager.getUser(session.getUid()); - List idsList = proto.getIdsList(); + //xxxx 目前只允许升级一个建筑,多个建筑一键升级需要优化 + int id = proto.getIdsList().get(0); // 1:普通升级, 2:立即完成 int type = proto.getType(); ArrayList list = new ArrayList<>(); // 当前时间 int now = TimeUtils.nowInt(); Map config = STableManager.getConfig(SHomeLandLevel.class); - for (Integer id : idsList) { - // 建筑信息验证 - ArchitectureInfo info = user.getPlayerInfoManager().getArchitectureInfoMap().get(id); - if (info == null) { - LOGGER.error("浮生门建筑升级,数据库内找不到建筑poolId:{}", id); - continue; - } - SHomeLandLevel landLevel = config.get(info.getId()); - if (landLevel == null){ - LOGGER.error("浮生门建筑升级,策划表内找不到建筑levelId:{}", info.getId()); - continue; - } - //升级前置条件 - int[] rule = landLevel.getRule(); - if (rule != null && rule.length > 1){ - ArchitectureInfo info1 = user.getPlayerInfoManager().getArchitectureInfoMap().get(rule[0]); - if (info1 == null){ - LOGGER.error("浮生门建筑升级,前置建筑未解锁,升级建筑levelId:{},前置建筑poolId:{}",id,rule[0]); - continue; - } - int level = Optional.ofNullable(config.get(info1.getId())).map(SHomeLandLevel::getlevel).orElse(0); - if (level < rule[1]){ - LOGGER.error("浮生门建筑升级,前置建筑等级不足,升级建筑levelId:{},前置建筑levelId:{}",id,info1.getId()); - continue; - } - } - // 最高等级 - int maxId = config.values().stream().filter(v->v.getPoolID()==landLevel.getPoolID()).mapToInt(SHomeLandLevel::getlevel).max().orElse(0); - if (info.getId() == maxId) { - LOGGER.error("浮生门建筑升级,建筑等级最高,id:{}", info.getId()); - continue; - } - // 需要消耗的道具 - int[][] items = landLevel.getCost(); - boolean cost = ItemUtil.checkCostLong(user, items, 1); - if (!cost) { - LOGGER.error("浮生门建筑升级,建筑升级要求道具不足,建筑levelId:{},道具要求:{}", info.getId(),Arrays.toString(items)); - continue; - } - // 普通升级 - if (info.getUpLvEndTime() == 0){ - int endTime = landLevel.getTime(); - info.setUpLvEndTime(now + endTime); - } - // 特殊情况 - else if (info.getUpLvEndTime() <= now){ - // 升级 - architectureUpLvEnd(user, landLevel.getPoolID(), info); - // 可以继续升级 - if (info.getId() < maxId){ - SHomeLandLevel landLevel1 = config.get(info.getId()); - info.setUpLvEndTime(landLevel1.getTime() + now); - } - } - // 取消 - if (type == 3){ - info.setUpLvEndTime(0); - } - // 立即完成 - if (type == 2 && info.getUpLvEndTime() > now){ - // 验证特权次数 - boolean countBol = PlayerLogic.getInstance().checkAndUpdate(user, proto.getPrivilageTypeId(), 1); - // 无特权,消耗道具 - if (!countBol || proto.getPrivilageTypeId() == 0) { - // 条件: 单位/s 道具id 道具数量 - String[] stringValue = SSpecialConfig.getStringValue(SSpecialConfig.HONGMENG_LATTICE_PRICE).split("#"); - // 立即升级消耗的道具 - double time = Math.max(info.getUpLvEndTime() - now,0); - // 每一个单位的消耗 - double oneCost = Integer.parseInt(stringValue[0]) * Integer.parseInt(stringValue[2]); - // 总消耗数量,向上取整 - double count = Math.ceil(time / oneCost); - int[][] cost1 = {{Integer.parseInt(stringValue[1]), (int) count}}; - boolean itemCost = ItemUtil.itemCost(user, cost1, BIReason.ARCHITECTURE_IMMEDIATELY_UP_LEVEL, 0); - if (!itemCost){ - LOGGER.error("浮生门建筑升级,立刻升级失败,道具不足,建筑levelId:{},道具要求:{}", info.getId(),Arrays.toString(cost1)); - continue; - } - } - architectureUpLvEnd(user, landLevel.getPoolID(), info); - } - ItemUtil.itemCost(user, items, BIReason.ARCHITECTURE_UP_LEVEL, 0); - // 最后更新 - user.getPlayerInfoManager().putArchitectureInfo(landLevel.getPoolID(),info); - // 需要更新的建筑信息 - CommonProto.ArchitectureInfo.Builder builder = CommonProto.ArchitectureInfo.newBuilder() - .setId(info.getId()).setProductionStartTime(info.getProductionStartTime()).setUpLvEndTime(info.getUpLvEndTime()); - list.add(builder.build()); + // 建筑信息验证 + ArchitectureInfo info = user.getPlayerInfoManager().getArchitectureInfoMap().get(id); + if (info == null) { + throw new ErrorCodeException(ErrorCode.SERVER_DEFINE,"浮生门建筑升级,数据库内找不到建筑poolId:"+id); } + SHomeLandLevel landLevel = config.get(info.getId()); + if (landLevel == null){ + throw new ErrorCodeException(ErrorCode.SERVER_DEFINE,"浮生门建筑升级,策划表内找不到建筑levelId:"+info.getId()); + } + //升级前置条件 + int[] rule = landLevel.getRule(); + if (rule != null && rule.length > 1){ + ArchitectureInfo info1 = user.getPlayerInfoManager().getArchitectureInfoMap().get(rule[0]); + if (info1 == null){ + throw new ErrorCodeException(ErrorCode.SERVER_DEFINE,"浮生门建筑升级,前置建筑未解锁,升级建筑levelId:"+info.getId()+",前置建筑poolId:"+rule[0]); + } + int level = Optional.ofNullable(config.get(info1.getId())).map(SHomeLandLevel::getlevel).orElse(0); + if (level < rule[1]){ + throw new ErrorCodeException(ErrorCode.SERVER_DEFINE,"浮生门建筑升级,前置建筑等级不足,升级建筑levelId:"+info.getId()+",前置建筑levelId:"+info1.getId()); + } + } + // 最高等级 + int maxId = config.values().stream().filter(v->v.getPoolID()==landLevel.getPoolID()).mapToInt(SHomeLandLevel::getlevel).max().orElse(0); + if (info.getId() == maxId) { + throw new ErrorCodeException(ErrorCode.LEVE_MAX,"浮生门建筑升级,建筑等级最高,升级建筑levelId:"+info.getId()); + } + // 需要消耗的道具 + int[][] items = landLevel.getCost(); + boolean cost = ItemUtil.checkCostLong(user, items, 1); + if (!cost) { + throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH,"浮生门建筑升级,建筑升级要求道具不足,建筑levelId:"+info.getId()+",道具要求:"+Arrays.toString(items)); + } + // 普通升级 + if (info.getUpLvEndTime() == 0){ + int endTime = landLevel.getTime(); + info.setUpLvEndTime(now + endTime); + } + // 特殊情况 + else if (info.getUpLvEndTime() <= now){ + // 升级 + architectureUpLvEnd(user, landLevel.getPoolID(), info); + // 可以继续升级 + if (info.getId() < maxId){ + SHomeLandLevel landLevel1 = config.get(info.getId()); + info.setUpLvEndTime(landLevel1.getTime() + now); + } + } + // 取消 + if (type == 3){ + info.setUpLvEndTime(0); + } + // 立即完成 + if (type == 2 && info.getUpLvEndTime() > now){ + // 验证特权次数 + boolean countBol = PlayerLogic.getInstance().checkAndUpdate(user, proto.getPrivilageTypeId(), 1); + // 无特权,消耗道具 + if (!countBol || proto.getPrivilageTypeId() == 0) { + // 条件: 单位/s 道具id 道具数量 + String[] stringValue = SSpecialConfig.getStringValue(SSpecialConfig.HONGMENG_LATTICE_PRICE).split("#"); + // 立即升级消耗的道具 + double time = Math.max(info.getUpLvEndTime() - now,0); + // 每一个单位的消耗 + double oneCost = Integer.parseInt(stringValue[0]) * Integer.parseInt(stringValue[2]); + // 总消耗数量,向上取整 + double count = Math.ceil(time / oneCost); + int[][] cost1 = {{Integer.parseInt(stringValue[1]), (int) count}}; + boolean itemCost = ItemUtil.itemCost(user, cost1, BIReason.ARCHITECTURE_IMMEDIATELY_UP_LEVEL, 0); + if (!itemCost){ + throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH,"浮生门建筑升级,立刻升级失败道具不足,建筑levelId:"+info.getId()+",道具要求:"+Arrays.toString(cost1)); + } + } + architectureUpLvEnd(user, landLevel.getPoolID(), info); + } + ItemUtil.itemCost(user, items, BIReason.ARCHITECTURE_UP_LEVEL, 0); + // 最后更新 + user.getPlayerInfoManager().putArchitectureInfo(landLevel.getPoolID(),info); + // 需要更新的建筑信息 + CommonProto.ArchitectureInfo.Builder infoBuilder = CommonProto.ArchitectureInfo.newBuilder() + .setId(info.getId()).setProductionStartTime(info.getProductionStartTime()).setUpLvEndTime(info.getUpLvEndTime()); + list.add(infoBuilder.build()); + PlayerInfoProto.HomeInfoResponse.Builder builder = PlayerInfoProto.HomeInfoResponse.newBuilder().addAllInfos(list); MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.HomeInfoResponse_VALUE, builder.build()); } @@ -188,11 +181,11 @@ public class HomeLogic { for (ArchitectureInfo info : infoMap.values()) { oneArchitectureEarnings(user,info,nowInt,drop); } - // 栖云阁领取 - Map landInfoMap = user.getPlayerInfoManager().getLandInfoMap(); - for (LandInfo value : landInfoMap.values()) { - oneLandEarnings(user,value,nowInt,drop); - } + // TODO: 2021/12/28 栖云阁领取 +// Map landInfoMap = user.getPlayerInfoManager().getLandInfoMap(); +// for (LandInfo value : landInfoMap.values()) { +// oneLandEarnings(user,value,nowInt,drop); +// } } // 单个收获 else {