diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SFloodConfig.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SFloodConfig.java index 2597bc7f9..b403991e9 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/SFloodConfig.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SFloodConfig.java @@ -16,14 +16,18 @@ public class SFloodConfig implements BaseConfig { private int battleTime; - + + private static Map sFloodConfigMap; @Override public void init() throws Exception { - + sFloodConfigMap = STableManager.getConfig(SFloodConfig.class); } + public static Map getsFloodConfigMap() { + return sFloodConfigMap; + } - public int getId() { + public int getId() { return id; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java index 0157fd36f..832c7ea86 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java @@ -2287,7 +2287,7 @@ public class MapLogic { MessageUtil.sendErrorResponse(session, 0, messageType.getNumber(), "fightId 有误"); return; } - SFloodConfig sFloodConfig = STableManager.getConfig(SFloodConfig.class).get(fightId); + SFloodConfig sFloodConfig =SFloodConfig.getsFloodConfigMap().get(fightId); if (sFloodConfig == null) { LOGGER.info("endFight() uid=>{} fightId=>{} SLevelDifficultyConfig == null", uid, fightId); MessageUtil.sendErrorResponse(session, 0, messageType.getNumber(), ""); @@ -2355,7 +2355,7 @@ public class MapLogic { CommonProto.FightTeamInfo fightTeamInfo = builder.build(); List monsterTeamList = BehaviorUtil.getFightTeamInfos(valueMap); - SFloodConfig sFloodConfig = STableManager.getConfig(SFloodConfig.class).get(checkFightId); + SFloodConfig sFloodConfig = SFloodConfig.getsFloodConfigMap().get(checkFightId); if (sFloodConfig == null) { LOGGER.info("endFight() uid=>{} fightId=>{} SLevelDifficultyConfig == null", uid, checkFightId); MessageUtil.sendErrorResponse(session, 0, messageType.getNumber(), ""); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogic.java index 686e958a3..baafa748c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/item/ItemLogic.java @@ -502,16 +502,16 @@ public class ItemLogic { /** * 占星 + * * @param session session - * @param time 次数 50一档 + * @param time 次数 50一档 * @throws Exception */ - public void soulEquipRand(ISession session,int time) throws Exception{ + public void soulEquipRand(ISession session, int time) throws Exception { int uid = session.getUid(); User user = UserManager.getUser(uid); int currentPool = user.getEquipManager().getSoulEquipPool(); - int[][] cost = time == 50 ? new int[1][]:new int[50][]; //跳卡池 SEquipTalismanaLottery lottery = SEquipTalismanaLottery.getsEquipTalismanaLotteryMap().get(currentPool); @@ -520,55 +520,72 @@ public class ItemLogic { } currentPool = MathUtils.randomFromWeight(lottery.getProbability()); - //50cost SEquipTalismanaLottery lotteryRepeat = SEquipTalismanaLottery.getsEquipTalismanaLotteryMap().get(currentPool); if (null == lotteryRepeat) { throw new Exception("SEquipTalismanaLottery 配置不存在" + currentPool); } - if(time==50){ - cost[0]=lotteryRepeat.getRepeatedlyCost(); + int[][] tempCost = new int[1][]; + if (time == 50) { + tempCost[0] = lotteryRepeat.getRepeatedlyCost(); } - //next cost and drop - int[] droplist = new int[time]; Map itemMap = new HashMap<>(); - for (int i = 0; i < time; i++) { + + ArrayList droplist = new ArrayList<>(); + int realTime = 0; + int randTime = time == 1 ? 1 : 50; + for (int i = 0; i < randTime; i++) { SEquipTalismanaLottery lotteryIn = SEquipTalismanaLottery.getsEquipTalismanaLotteryMap().get(currentPool); if (null == lotteryIn) { throw new Exception("SEquipTalismanaLottery 配置不存在" + currentPool); } - if(time!=50){ - cost[i] = lotteryIn.getCostItem(); + if (time != 50) { int itemId = lotteryIn.getCostItem()[0]; int itemNum = lotteryIn.getCostItem()[1]; itemMap.merge(itemId, itemNum, (a, b) -> b + a); boolean result = ItemUtil.checkCost(user, itemMap); if (!result) { + itemMap.merge(itemId, itemNum, (a, b) -> a - b); break; } } - droplist[i]=(MathUtils.randomFromWeight(lotteryIn.getDrop())); + droplist.add(MathUtils.randomFromWeight(lotteryIn.getDrop())); currentPool = MathUtils.randomFromWeight(lottery.getProbability()); + realTime++; + } + if (time != 50) { + tempCost = new int[itemMap.size()][2]; + int index = 0; + for (Map.Entry entry : itemMap.entrySet()) { + tempCost[index][0] = entry.getKey(); + tempCost[index][1] = entry.getValue(); + index++; + } } - boolean enoughCost = ItemUtil.itemCost(user, cost, BIReason.RANDOM_SOULEQUIP_CONSUME, 0); + boolean enoughCost = ItemUtil.itemCost(user, tempCost, BIReason.RANDOM_SOULEQUIP_CONSUME, 0); if (!enoughCost) { MessageUtil.sendErrorResponse(session, 0, MessageTypeProto.MessageType.SOUL_RAND_EQUIP_RESPONSE_VALUE, "道具不足"); return; } - + if (realTime == 0) { + MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.SOUL_RAND_EQUIP_RESPONSE_VALUE, HeroInfoProto.SoulRandResponse.newBuilder().setTime(0).build(), true); + return; + } user.getEquipManager().setSoulEquipPool(currentPool); - CommonProto.Drop.Builder drop = ItemUtil.drop(user, droplist,1,0,BIReason.RANDOM_SOULEQUIP); + int[] dropArray = droplist.stream().mapToInt(Integer::valueOf).toArray(); + CommonProto.Drop.Builder drop = ItemUtil.drop(user, dropArray, 1, 0, BIReason.RANDOM_SOULEQUIP); HeroInfoProto.SoulRandResponse.Builder builder = HeroInfoProto.SoulRandResponse.newBuilder(); builder.setDrop(drop); builder.setPos(currentPool); - user.getUserMissionManager().onGameEvent(user,GameEvent.FIND_STAR,time); + builder.setTime(realTime); + user.getUserMissionManager().onGameEvent(user, GameEvent.FIND_STAR, time); MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.SOUL_RAND_EQUIP_RESPONSE_VALUE, builder.build(), true); - } + public static int getSoulCfgIdByEquipId(int equipId,int leve){ return equipId*100+leve; }