diff --git a/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_general.java b/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_general.java index 3870f4763..d6012e2f3 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_general.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_general.java @@ -6,16 +6,18 @@ import com.ljsd.jieling.db.redis.RedisUtil; import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.logic.activity.ActivityLogic; import com.ljsd.jieling.logic.activity.ActivityType; -import com.ljsd.jieling.logic.dao.Item; -import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.*; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.family.GuildLogic; import com.ljsd.jieling.util.ItemUtil; import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * 通用修复,在线后台修改玩家数据 + * // general unlockfaxiang uid */ public class Cmd_general extends GmAbstract { @@ -102,6 +104,32 @@ public class Cmd_general extends GmAbstract { } LOGGER.info("查询用户字符串......{}",args[1]); break; + case "unlockfaxiang": + try { + int uid = Integer.parseInt(args[1]); + User user = UserManager.getUser(uid); + if (user == null){ + LOGGER.error("用户找不到"); + }else { + EquipManager equipManager = user.getEquipManager(); + List faxiangList = equipManager.getFaxiangList(); + Map heroMap = user.getHeroManager().getHeroMap(); + for (PropertyItem item : faxiangList) { + String faxiangId = item.getId(); + String heroId = item.getHeroId(); + if (!heroId.isEmpty()){ + Hero hero = heroMap.get(heroId); + if (hero == null || !hero.getFaxiangList().contains(faxiangId)){ + equipManager.unloadFaxiang(faxiangId); + } + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + LOGGER.info("卸载用户法相......{}",args[1]); + break; default: break; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java index 825b451a8..b92ed1817 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserManager.java @@ -169,7 +169,7 @@ public class UserManager { user.getUserMissionManager().onGameEvent(user, GameEvent.BEGINNER); user.getUserMissionManager().onGameEvent(user, GameEvent.VIP_LEVLUP, MissionType.VIP_LEVEL,0); Poster.getPoster().dispatchEvent(new NewWelfareEvent(user, NewWelfareTypeEnum.LOGIN_TIMES.getType(),1)); - ReportUtil.onReportEvent(user, ReportEventEnum.CREATE_ROLE.getType());//先发送注册事件 + ActivityLogic.getInstance().newPlayerOpenActivityMission(user); ItemUtil.drop(user,gameSetting.getBornItem(), BIReason.USER_BORN_REWARD); HeroManager heroManager = user.getHeroManager(); Map heroMap = heroManager.getHeroMap(); @@ -179,10 +179,9 @@ public class UserManager { teamPosManager.addTeamOfInitPlayer(teamHeros); long force = HeroLogic.getInstance().calTeamTotalForce(user, 1); playerManager.setMaxForce(force); - ActivityLogic.getInstance().newPlayerOpenActivityMission(user); user.getExpeditionManager().setExpeditionLeve(1); CrossServiceLogic.getInstance().saveBasicPlayerToRedis(user);//初始化角色 - KtEventUtils.onKtEvent(user, ParamEventBean.UserRegister); + ReportUtil.onReportEvent(user, ReportEventEnum.CREATE_ROLE.getType());//先发送注册事件 } public static User getUser(int uid,boolean canNull) throws Exception { 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 5a09aebcb..99160c407 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 @@ -6376,7 +6376,7 @@ public class HeroLogic { } // 避免zero异常 if (count == 0) { - throw new ErrorCodeException(ErrorCode.SYS_ERROR_CODE); + count = averageNum; } return count / averageNum; } 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..d0f42368e 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,50 @@ 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); + // id + switch (id){ + case Global.EXP://经验 + userLevelUp(user, itemNum); + break; + case Global.TREASURE_SCORE://青龙秘宝积分 + treasureLevelUp(user); + break; + case Global.DAILY_TASK_REMOVE_ITEM: + user.getUserMissionManager().onGameEvent(user, GameEvent.ONE_MISSION_TYPE_CONSUME, MissionType.DAILY_TASK_FINISH, (int) itemNum); + break; + default:break; } - if (sItem.getId() == Global.TREASURE_SCORE) { - treasureLevelUp(user); + + // 类型 + switch (sItem.getItemType()){ + 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 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 (id != Global.EXP){ + sendToFront.add(CBean2Proto.getItem(item, -1)); } - - 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)); } // 发送装备图鉴修改推送 @@ -824,21 +810,31 @@ public class ItemUtil { dropBuilder.addAllItemlist(itemProtoList); } - boolean extraBol = !extraItem.isEmpty(); - if (!sendToFront.isEmpty() || extraBol) { - MessageUtil.sendBagIndication(user.getId(), 0, sendToFront, extraBol); + // 经验道具特殊,不发邮件 + Iterator> iterator = extraItem.entrySet().iterator(); + while (iterator.hasNext()){ + Integer itemId = iterator.next().getKey(); + SItem item = SItem.getsItemMap().get(itemId); + if (item.getId() == Global.EXP){ + iterator.remove(); + } } + boolean extraBol = !extraItem.isEmpty(); if (extraBol) { StringBuilder builder = new StringBuilder(); for(Map.Entry entry : extraItem.entrySet()){ + SItem item = SItem.getsItemMap().get(entry.getKey()); 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(); } + MessageUtil.sendBagIndication(user.getId(), 0, sendToFront, true); + } + else if (!sendToFront.isEmpty()) { + MessageUtil.sendBagIndication(user.getId(), 0, sendToFront, false); } Poster.getPoster().dispatchEvent(new AddItemEvent(user.getId(),itemMap)); @@ -968,13 +964,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 +984,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 +994,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 +1097,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: