diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/equip/EquipLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/equip/EquipLogic.java index 00c363880..117615076 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/equip/EquipLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/equip/EquipLogic.java @@ -23,7 +23,6 @@ import rpc.protocols.MessageTypeProto; import rpc.protocols.PlayerInfoProto; import java.util.*; -import java.util.stream.Collectors; public class EquipLogic { private static final Logger LOGGER = LoggerFactory.getLogger(EquipLogic.class); @@ -114,7 +113,7 @@ public class EquipLogic { /** * 强化法相,或法相升星 */ - public void strongthenFaxiangEquip(ISession session, String faxiangID, int targetLv, int action) throws Exception { + public void strongthenFaxiangEquip(ISession session, String faxiangID, int targetLv, int action, List costID) throws Exception { User user = UserManager.getUser(session.getUid()); EquipManager equipManager = user.getEquipManager(); Faxiang faxiang = equipManager.getFaxiang(faxiangID); @@ -174,7 +173,7 @@ public class EquipLogic { } HashMap costMap = new HashMap<>(); - StringBuilder equipCostStr = new StringBuilder(); + int count = 0; int num = faxiang.getStar(); while (num < targetLv){ SFaxiangStarConfig starConfig = starConfigMap.get(num); @@ -183,9 +182,9 @@ public class EquipLogic { } // 整合道具 for (int[] prop : starConfig.getPropList()) { + // 法相消耗本体 if (prop[0] == 0){ - // 法相 - equipCostStr.append(faxiang.getItemId()).append("#").append(num).append("#").append(prop[1]).append("|"); + count = prop[1]; continue; } // 道具 @@ -196,13 +195,13 @@ public class EquipLogic { // 先校验,后消耗 boolean checkCost = ItemUtil.checkCostLong(user,costMap); - boolean costFaxiang = costFaxiang(user, equipCostStr.toString(), false); + boolean costFaxiang = costFaxiang(user, costID, count, false); if (!checkCost || !costFaxiang){ throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH,"SFaxiangLevelConfig 升级道具数量不足:"+faxiang.getStrongLv()); } faxiang.setStar(targetLv); ItemUtil.itemCostLong(user,costMap, BIReason.UP_FAXIANG_EQUIP_STAR_COST,0); - costFaxiang(user, equipCostStr.toString(), true); + costFaxiang(user, costID, count, true); } equipManager.putFaxiang(faxiang); MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.STRONGTHEN_FAXIANG_EQUIP_RESPONSE_VALUE, null, true); @@ -211,40 +210,27 @@ public class EquipLogic { /** * 消耗法相道具 */ - private boolean costFaxiang(User user, String costStr, boolean cost){ - if (costStr == null || costStr.isEmpty()){ - return true; + private boolean costFaxiang(User user, List costID, int num, boolean cost){ + if (costID == null){ + costID = new ArrayList<>(); } - LOGGER.info("验证消耗法相道具,uid:{}, prop:{}, bol:{}",user.getId(),costStr,cost); - EquipManager equipManager = user.getEquipManager(); - HashSet set = new HashSet<>(); - Map>> map = equipManager.getFaxiangCostMap(); - int total = 0; - String[] oneSplit = costStr.split("\\|"); - for (String one : oneSplit) { - String[] value = one.split("#"); - // 每条有三个数据 - if (value.length != 3){ - return false; - } - // 根据 法相道具id#法相星级#法相数量 验证 - List list = map.getOrDefault(Integer.parseInt(value[0]), new HashMap<>()).getOrDefault(Integer.parseInt(value[1]), new ArrayList<>()); - int num = Integer.parseInt(value[2]); - if (list.size() < num){ - return false; - } - List faxiangList = list.subList(0, num); - set.addAll(faxiangList.stream().map(Faxiang::getId).collect(Collectors.toList())); - total+=num; - } - if (total < set.size()){ + LOGGER.info("验证消耗法相道具,uid:{}, prop:{}, num:{}, bol:{}",user.getId(),costID,num,cost); + if (costID.size() != num){ return false; } + EquipManager equipManager = user.getEquipManager(); + for (String id : costID) { + Faxiang faxiang = equipManager.getFaxiang(id); + if (faxiang == null || faxiang.getStrongLv() > 0 || faxiang.getStar() > 0) { + return false; + } + } + if (cost){ - for (String key : set) { + for (String key : costID) { equipManager.removeFaxiang(key); } - LOGGER.info("验证消耗了法相道具,uid:{}, prop:{}",user.getId(),costStr); + LOGGER.info("升星消耗了法相道具,uid:{}, prop:{}",user.getId(),costID); } return true; }