diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java index d76ec7659..3c72d8ad7 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java @@ -698,44 +698,30 @@ public class ItemUtil { List itemProtoList = new ArrayList<>(); List sendToFront = new ArrayList<>(); Map extraItem = new HashMap<>(itemMap.size()); - List changeEquipList = null; + List changeEquipList = new ArrayList<>(); for (Map.Entry entry : itemMap.entrySet()) { int itemId = entry.getKey(); long itemNum = entry.getValue(); - - SItem sItem = SItem.getsItemMap().get(itemId); - if (sItem.getItemType() == GlobalItemType.SOUL_MARK) { - equipManager.addSoulGeal(itemId); - } - - if (sItem.getItemType() == 3 && reason != BIReason.EQUIP_UNLOAD_REWARD && reason != BIReason.UPHERO_DECOMPOS_HERO_REWARD && reason != BIReason.DECOMPOS_HERO_REWARD) { - if (changeEquipList == null) { - changeEquipList = new ArrayList<>(); - } - itemManager.setEquipBookMap(itemId, itemNum); - changeEquipList.add(itemId); - } - - long itemNumlimit = sItem.getItemNumlimit(); if (itemNum <= 0) { continue; } - if (itemNum >= itemNumlimit) { - itemNum = itemNumlimit; - } + SItem sItem = SItem.getsItemMap().get(itemId); + int id = sItem.getId(); + long itemNumlimit = sItem.getItemNumlimit(); + + itemNum = Math.min(itemNum, itemNumlimit); Item item = itemManager.getItem(itemId); if (item == null) { item = itemManager.newItem(itemId, itemNum); } else { - if (sItem.getId() == Global.MISSING_ROOM_ITEM && reason == BIReason.ADVENTURE_BASE_REWARD) { + if (id == Global.MISSING_ROOM_ITEM && reason == BIReason.ADVENTURE_BASE_REWARD) { itemNumlimit = SPlayerLevelConfig.getsPlayerLevelConfigMap().get(user.getPlayerInfoManager().getLevel()).getMazeTreasureMax(); } - if (item.getItemNum() > itemNumlimit) { - if (sItem.getId() == Global.MISSING_ROOM_ITEM && reason == BIReason.ADVENTURE_BASE_REWARD) { + if (id == Global.MISSING_ROOM_ITEM && reason == BIReason.ADVENTURE_BASE_REWARD) { continue; } if (reason == BIReason.TAKE_MAIL_REWARD) { @@ -746,9 +732,10 @@ public class ItemUtil { continue; } - if (item.getItemNum() + itemNum > itemNumlimit) { - if (sItem.getId() == Global.MISSING_ROOM_ITEM && reason == BIReason.ADVENTURE_BASE_REWARD) { - item.setItemNum((int) (item.getItemNum() + itemNum)); + long num = item.getItemNum() + itemNum; + if (num > itemNumlimit) { + if (id == Global.MISSING_ROOM_ITEM && reason == BIReason.ADVENTURE_BASE_REWARD) { + item.setItemNum(num); } else { if (reason == BIReason.TAKE_MAIL_REWARD) { return 2; @@ -758,7 +745,7 @@ public class ItemUtil { } } } else { - item.setItemNum(item.getItemNum() + itemNum); + item.setItemNum(num); } } @@ -766,51 +753,41 @@ public class ItemUtil { itemProtoList.add(CBean2Proto.getItem(item, itemNum)); } - // 触发任务,东海寻仙 - if (sItem.getItemType() == GlobalItemType.TRANSFORMATION_CARD) { - long count = itemNum; - while (count >= Integer.MAX_VALUE) { - user.getUserMissionManager().onGameEvent(user, GameEvent.ONE_MISSION_TYPE_CONSUME, MissionType.GET_TRANSFIGURATION_CARD_NUM, sItem.getQuantity(), Integer.MAX_VALUE); - count -= Integer.MAX_VALUE; - } - user.getUserMissionManager().onGameEvent(user, GameEvent.ONE_MISSION_TYPE_CONSUME, MissionType.GET_TRANSFIGURATION_CARD_NUM, sItem.getQuantity(), (int) count); - } - - int eventType = ParamEventBean.UserItemEvent; - if (ifCurrency(itemId)) { - eventType = ParamEventBean.UserCurrencyEvent; - } - KtEventUtils.onKtEvent(user, eventType, reason, GlobalsDef.addReason, itemId, itemNum, item.getItemNum()); - + // 日志记录 baseItemReport(user, itemId, (int) itemNum, 1, reason); + // 日志记录 + ItemLogic.getInstance().addItemLog(new ItemLog(user, 0, reason, item, itemNum)); - if (sItem.getId() == Global.EXP) { - userLevelUp(user, itemNum); - } - if (sItem.getId() == Global.TREASURE_SCORE) { - treasureLevelUp(user); + switch (id){ + case Global.EXP://经验 + userLevelUp(user, itemNum); + break; + case Global.TREASURE_SCORE://青龙秘宝积分 + treasureLevelUp(user); + break; + case GlobalItemType.EQUIP://装备 + if (reason != BIReason.EQUIP_UNLOAD_REWARD && reason != BIReason.DECOMPOS_HERO_REWARD && reason != BIReason.UPHERO_DECOMPOS_HERO_REWARD) { + itemManager.setEquipBookMap(itemId, itemNum); + changeEquipList.add(itemId); + user.getUserMissionManager().onGameEvent(user, GameEvent.GET_EQUIP, id, (int) itemNum); + ReportUtil.onReportEvent(user, ReportEventEnum.GET_EQUIP.getType(), id, (int) itemNum, reason); + } + break; + case GlobalItemType.SOUL_MARK://魂印 + equipManager.addSoulGeal(itemId); + user.getUserMissionManager().onGameEvent(user, GameEvent.ONE_MISSION_TYPE_CONSUME, MissionType.GOT_SOUL_MARK, id, (int) itemNum); + break; + case Global.DAILY_TASK_REMOVE_ITEM: + user.getUserMissionManager().onGameEvent(user, GameEvent.ONE_MISSION_TYPE_CONSUME, MissionType.DAILY_TASK_FINISH, (int) itemNum); + break; + case GlobalItemType.TRANSFORMATION_CARD://东海寻仙 + user.getUserMissionManager().onGameEvent(user, GameEvent.ONE_MISSION_TYPE_CONSUME, MissionType.GET_TRANSFIGURATION_CARD_NUM, sItem.getQuantity(), (int) itemNum); + break; + default:break; } extraDropAop(user, dropBuilder, sItem); sendToFront.add(CBean2Proto.getItem(item, -1)); - - if (sItem.getItemType() == GlobalItemType.EQUIP) { - if (reason != BIReason.EQUIP_UNLOAD_REWARD && reason != BIReason.DECOMPOS_HERO_REWARD && reason != BIReason.UPHERO_DECOMPOS_HERO_REWARD) { - user.getUserMissionManager().onGameEvent(user, GameEvent.GET_EQUIP, sItem.getId(), (int) itemNum); - ReportUtil.onReportEvent(user, ReportEventEnum.GET_EQUIP.getType(), sItem.getId(), (int) itemNum, reason); - } - } - - if (sItem.getItemType() == GlobalItemType.SOUL_MARK) { - user.getUserMissionManager().onGameEvent(user, GameEvent.ONE_MISSION_TYPE_CONSUME, MissionType.GOT_SOUL_MARK, sItem.getId(), (int) itemNum); - } - - if (sItem.getId() == Global.DAILY_TASK_REMOVE_ITEM) { - user.getUserMissionManager().onGameEvent(user, GameEvent.ONE_MISSION_TYPE_CONSUME, MissionType.DAILY_TASK_FINISH, (int) itemNum); - } - - // 日志记录 - ItemLogic.getInstance().addItemLog(new ItemLog(user, 0, reason, item, itemNum)); } // 发送装备图鉴修改推送 @@ -832,9 +809,12 @@ public class ItemUtil { if (extraBol) { StringBuilder builder = new StringBuilder(); for(Map.Entry entry : extraItem.entrySet()){ + SItem item = SItem.getsItemMap().get(entry.getKey()); + if (item.getItemType() == Global.EXP){ + continue; + } builder.append(entry.getKey()).append("#").append(entry.getValue()); String title = SErrorCodeEerverConfig.getI18NMessage("item_max_mail_title"); - SItem item = SItem.getsItemMap().get(entry.getKey()); String content = SErrorCodeEerverConfig.getI18NMessageNeedConvert("item_max_mail_content",new String[]{item.getName(),String.valueOf(item.getItemNumlimit())},new int[]{1,0},"#"); MailLogic.getInstance().sendMail(user.getId(),title,content,builder.toString(),TimeUtils.nowInt(),Global.MAIL_EFFECTIVE_TIME); builder = new StringBuilder(); @@ -968,13 +948,14 @@ public class ItemUtil { * 孙龙宝藏升级 //zsx 保留 TODO 由事件分发到 Activitylogic 去处理 */ public static void treasureLevelUp(User user) throws Exception { + PlayerManager playerInfoManager = user.getPlayerInfoManager(); List activities = SGlobalActivity.sGlobalActivityMapByType.get(ActivityType.TREASURE); SGlobalActivity activity = activities.stream().filter(a -> user.getActivityManager().getActivityMissionMap().containsKey(a.getId())).findAny().orElse(null); if(activity==null){ return; } - STreasureSunlongConfig levelConfig = STreasureSunlongConfig.levelTreasureConfigMap.get(activity.getId()).get(user.getPlayerInfoManager().getTreasureLevel()); + STreasureSunlongConfig levelConfig = STreasureSunlongConfig.levelTreasureConfigMap.get(activity.getId()).get(playerInfoManager.getTreasureLevel()); if (levelConfig != null) { //需要先确定下每级真实需要的经验,与客户端实现方式同步,认为表里填的升到下一级所需经验是前边各级经验总和 int[][] integral = levelConfig.getIntegral(); @@ -987,9 +968,9 @@ public class ItemUtil { costItems = new int[][]{{integral[0][0], integral[0][1] - lastLevelConfig.getIntegral()[0][1]}}; } while(levelConfig != null && ItemUtil.itemCost(user, costItems, BIReason.TREASURE_LEVEL_UP_CONSUME, 1)){ - user.getPlayerInfoManager().addTreasureLevel(); + playerInfoManager.addTreasureLevel(); lastLevelConfig = levelConfig; - levelConfig = STreasureSunlongConfig.levelTreasureConfigMap.get(activity.getId()).get(user.getPlayerInfoManager().getTreasureLevel()); + levelConfig = STreasureSunlongConfig.levelTreasureConfigMap.get(activity.getId()).get(playerInfoManager.getTreasureLevel()); if (levelConfig != null && levelConfig.getIntegral().length > 0) { integral = levelConfig.getIntegral(); costItems = new int[][]{{integral[0][0],integral[0][1] - lastLevelConfig.getIntegral()[0][1]}}; @@ -997,8 +978,8 @@ public class ItemUtil { } } PlayerInfoProto.TreasureLevelUpIndication indication = PlayerInfoProto.TreasureLevelUpIndication.newBuilder() - .setHadBuy(user.getPlayerInfoManager().getHadBuyTreasure()) - .setLevel(user.getPlayerInfoManager().getTreasureLevel()).build(); + .setHadBuy(playerInfoManager.getHadBuyTreasure()) + .setLevel(playerInfoManager.getTreasureLevel()).build(); MessageUtil.sendIndicationMessage(OnlineUserManager.getSessionByUid(user.getId()),1,MessageTypeProto.MessageType.TREASURE_LEVELUP_INDICATION_VALUE,indication,true); } @@ -1100,7 +1081,7 @@ public class ItemUtil { /** * type = 1获得 2 消耗 */ - public static void baseItemReport(User user,int itemId,int itemNum,int type,int reason) throws Exception { + public static void baseItemReport(User user,int itemId, long itemNum,int type,int reason) throws Exception { ReportEventEnum item; switch (itemId){ case ReportUtil.COIN_ID: