From 2aa1651e994e5d8dc277cb97612da9f783bc6c88 Mon Sep 17 00:00:00 2001 From: duhui Date: Thu, 8 Dec 2022 16:33:13 +0800 Subject: [PATCH] =?UTF-8?q?=E9=9C=80=E6=B1=82=EF=BC=9Agm=E5=8F=AF=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E6=9C=80=E6=97=A9=E6=99=8B=E5=8D=87=E7=A5=9E=E5=B0=8A?= =?UTF-8?q?11=E3=80=8112=E7=BA=A7=E5=BE=97=E4=B8=89=E4=BA=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ljsd/jieling/db/redis/RedisKey.java | 2 + .../ljsd/jieling/handler/TakeMailHandler.java | 5 +- .../ljsd/jieling/jbean/gm/UserGodLvVo.java | 84 ++++++++ .../jieling/logic/GlobalDataManaager.java | 1 + .../logic/activity/event/AddItemEvent.java | 14 +- .../activity/eventhandler/AddItemHandler.java | 45 +++++ .../java/com/ljsd/jieling/util/ItemUtil.java | 182 +++--------------- 7 files changed, 173 insertions(+), 160 deletions(-) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/jbean/gm/UserGodLvVo.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/logic/activity/eventhandler/AddItemHandler.java diff --git a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java index 6ba03d888..103ca1d1b 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java @@ -381,6 +381,8 @@ public class RedisKey { public static final String GM_ACTIVITY_INFO = "GM_ACTIVITY_INFO";//GM活动信息 + public static final String GOD_LEVEL_UP_TIME = "GOD_LEVEL_UP_TIME";//晋升神尊等级排序 + public static Set familyKey = new HashSet<>(); /** * 四灵试炼,0:首次通关,1:最低战力 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/TakeMailHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/TakeMailHandler.java index fbfa495d8..0fb934b27 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/TakeMailHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/TakeMailHandler.java @@ -3,11 +3,11 @@ package com.ljsd.jieling.handler; import com.ljsd.jieling.logic.mail.MailLogic; import com.ljsd.jieling.netty.cocdex.PacketNetData; import com.ljsd.jieling.network.session.ISession; -import rpc.protocols.MessageTypeProto; -import rpc.protocols.PlayerInfoProto; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; +import rpc.protocols.MessageTypeProto; +import rpc.protocols.PlayerInfoProto; import java.util.List; @@ -28,6 +28,5 @@ public class TakeMailHandler extends BaseHandler { PlayerInfoProto.TakeMailRequest takeMailRequest = PlayerInfoProto.TakeMailRequest.parseFrom(message); List mailIdsList = takeMailRequest.getMailIdsList(); MailLogic.getInstance().takeMail(iSession,mailIdsList, userId); - } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/jbean/gm/UserGodLvVo.java b/serverlogic/src/main/java/com/ljsd/jieling/jbean/gm/UserGodLvVo.java new file mode 100644 index 000000000..e1e62b2c0 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/jbean/gm/UserGodLvVo.java @@ -0,0 +1,84 @@ +package com.ljsd.jieling.jbean.gm; + +import com.ljsd.GameApplication; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.player.PlayerLogic; +import util.TimeUtils; + +/** + * @Author hj + * @Date 2022/12/8 16:00:38 + * @Description: + * @Version 1.0 + */ +public class UserGodLvVo { + //角色id + private int uid; + //角色名称 + private String name; + //区服id + private String serverId; + //创角时间 + private String createTime; + //神尊等级 + private int godLv; + //神尊等级到达时间 + private String upTime; + + public UserGodLvVo(User user) { + this.uid = user.getId(); + this.name = user.getPlayerInfoManager().getNickName(); + this.serverId = String.valueOf(GameApplication.serverId); + this.createTime = TimeUtils.getTimeStamp2(user.getPlayerInfoManager().getCreateTime()); + this.godLv = PlayerLogic.getInstance().getGodPrivilegeLv(user); + this.upTime = TimeUtils.getTimeStamp2(TimeUtils.now()); + } + + public int getUid() { + return uid; + } + + public void setUid(int uid) { + this.uid = uid; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getServerId() { + return serverId; + } + + public void setServerId(String serverId) { + this.serverId = serverId; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public int getGodLv() { + return godLv; + } + + public void setGodLv(int godLv) { + this.godLv = godLv; + } + + public String getUpTime() { + return upTime; + } + + public void setUpTime(String upTime) { + this.upTime = upTime; + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java index 7e6c62e79..53a0df632 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java @@ -304,6 +304,7 @@ public class GlobalDataManaager implements IManager { new SummonTreasureHandler(); new ArchitectureUnLockHandler(); new SaveHeroForceEventHandler(); + new AddItemHandler(); new GmActivityLogic(); ChampionshipLogic.minuteCheck(true); GuildFightLogic.minuteCheckForCarFight(); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/AddItemEvent.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/AddItemEvent.java index d3bbc9fbe..17f833142 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/AddItemEvent.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/AddItemEvent.java @@ -4,20 +4,20 @@ import java.util.Map; public class AddItemEvent implements IEvent { - private int useId; - Map useItemMap; + private int userId; + Map useItemMap; - public AddItemEvent(int useId, Map useItemMap) { - this.useId = useId; + public AddItemEvent(int userId, Map useItemMap) { + this.userId = userId; this.useItemMap = useItemMap; } - public Map getUseItemMap() { + public Map getUseItemMap() { return useItemMap; } - public int getUseId() { - return useId; + public int getUserId() { + return userId; } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/eventhandler/AddItemHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/eventhandler/AddItemHandler.java new file mode 100644 index 000000000..e1c474652 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/eventhandler/AddItemHandler.java @@ -0,0 +1,45 @@ +package com.ljsd.jieling.logic.activity.eventhandler; + +import com.ljsd.GameApplication; +import com.ljsd.jieling.db.redis.RedisKey; +import com.ljsd.jieling.db.redis.RedisUtil; +import com.ljsd.jieling.jbean.gm.UserGodLvVo; +import com.ljsd.jieling.logic.activity.IEventHandler; +import com.ljsd.jieling.logic.activity.event.AddItemEvent; +import com.ljsd.jieling.logic.activity.event.IEvent; +import com.ljsd.jieling.logic.activity.event.Poster; +import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.player.PlayerLogic; + +/** + * @author lvxinran + * @date 2020/1/7 + * @discribe + */ +public class AddItemHandler implements IEventHandler{ + public AddItemHandler() { + Poster.getPoster().listenEvent(this, AddItemEvent.class); + } + + @Override + public void onEvent(IEvent event) throws Exception { + if (!(event instanceof AddItemEvent)) { + return; + } + AddItemEvent itemEvent = (AddItemEvent) event; + User user = UserManager.getUser(itemEvent.getUserId()); + // 包含神尊经验道具,itemId:1352 + if (itemEvent.getUseItemMap().containsKey(1352)){ + int lv = PlayerLogic.getInstance().getGodPrivilegeLv(user); + String key = RedisKey.GOD_LEVEL_UP_TIME + ":" + GameApplication.serverId + ":" + lv; + String uid = String.valueOf(user.getId()); + UserGodLvVo userGodLvVo = RedisUtil.getInstence().getMapValue(key, uid, UserGodLvVo.class); + if (userGodLvVo == null){ + userGodLvVo = new UserGodLvVo(user); + RedisUtil.getInstence().putMapEntry(key, uid, userGodLvVo); + } + } + } + +} 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 bfabc8338..a98ad1e9c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java @@ -712,144 +712,7 @@ public class ItemUtil { * @throws Exception */ public static void addItem(User user, Map itemMap,CommonProto.Drop.Builder dropBuilder,int reason) throws Exception { - if (itemMap.isEmpty()) { - return; - } - EquipManager equipManager=user.getEquipManager(); - List itemProtoList = new CopyOnWriteArrayList<>(); - ItemManager itemManager = user.getItemManager(); - List sendToFront = new CopyOnWriteArrayList<>(); - //超过上限不能直接获得 - Map extraItem = new HashMap<>(itemMap.size()); - ListchangeEquipList=null; - for (Map.Entry entry : itemMap.entrySet()) { - SItem sItem = SItem.getsItemMap().get (entry.getKey()); - if (sItem.getItemBaseType()==6){ - equipManager.addEquipList(entry.getKey()); - } - 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(entry.getKey(),entry.getValue()); - changeEquipList.add(entry.getKey()); - } - long itemNumlimit = sItem.getItemNumlimit(); - long itemNum = entry.getValue().intValue(); - if(itemNum <= 0){ - continue; - } - if (itemNum >= itemNumlimit){ - itemNum = itemNumlimit; - } - Item item = itemManager.getItem(entry.getKey()); - if (item == null) { - item = itemManager.newItem(entry.getKey(), itemNum); - } else { - if(sItem.getId()==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){ - continue; - } - if(reason==BIReason.TAKE_MAIL_REWARD){ - throw new ErrorCodeException(ErrorCode.BAG_FULL); - }else{ - extraItem.put(entry.getKey(), (int) (extraItem.getOrDefault(entry.getKey(),0)+entry.getValue())); - } - continue; - } - if (item.getItemNum() + entry.getValue() > itemNumlimit){ - if(sItem.getId()==Global.MISSING_ROOM_ITEM&&reason==BIReason.ADVENTURE_BASE_REWARD){ - item.setItemNum((int) (item.getItemNum() + entry.getValue())); - }else{ - if(reason==BIReason.TAKE_MAIL_REWARD){ - throw new ErrorCodeException(ErrorCode.BAG_FULL); - }else{ - extraItem.put(entry.getKey(), (int) (extraItem.getOrDefault(entry.getKey(),0)+entry.getValue())); - continue; - } - } - }else{ - item.setItemNum(item.getItemNum() + entry.getValue()); - - } - } - if(itemNum>=0){ - 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.DONGHAIXUNXIAN_UPDATE,MissionType.GET_TRANSFIGURATION_CARD_NUM,sItem.getQuantity(),Integer.MAX_VALUE); - count-=Integer.MAX_VALUE; - } - user.getUserMissionManager().onGameEvent(user, GameEvent.DONGHAIXUNXIAN_UPDATE,MissionType.GET_TRANSFIGURATION_CARD_NUM,sItem.getQuantity(),(int)count); - } - -// ReportUtil.onReportEvent(user,ReportEventEnum.GET_ITEM.getType(),itemNum,String.valueOf(reason),item.getItemId()); - int eventType = ParamEventBean.UserItemEvent; - if(currencyMap.contains(entry.getKey())){ - eventType = ParamEventBean.UserCurrencyEvent; - } - KtEventUtils.onKtEvent(user, eventType,reason,GlobalsDef.addReason,entry.getKey(),itemNum,item.getItemNum()); - - baseItemReport(user,item.getItemId(),(int)itemNum,1,reason); - - if(sItem.getId() == Global.EXP){ - userLevelUp(user,itemNum); - } - if(sItem.getId() == Global.TREASURE_SCORE){ - treasureLevelUp(user); - } - 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); - } - } else if (sItem.getItemType() == GlobalItemType.SOUL_MARK) { - user.getUserMissionManager().onGameEvent(user, GameEvent.GOT_SOUL_MARK, sItem.getId(), (int)itemNum); - } - if(sItem.getId()==Global.DAILY_TASK_REMOVE_ITEM){ - user.getUserMissionManager().onGameEvent(user,GameEvent.DAILY_TASK_TYPE,(int)itemNum,user); - } - //日志记录 - ItemLogic.getInstance().addItemLog(new ItemLog(user,0,reason,item,itemNum)); - } - //发送装备图鉴修改推送 - SendEquipBookIndication(user.getId(),itemManager,changeEquipList); - - for(Map.Entry entry:extraItem.entrySet()){ - itemProtoList.add(CBean2Proto.getItem(itemManager.getItemMap().get(entry.getKey()),entry.getValue())); - } - if (dropBuilder != null) { - dropBuilder.addAllItemlist(itemProtoList); - } - - if(!sendToFront.isEmpty()||extraItem.size()>0){ - MessageUtil.sendBagIndication(user.getId(),0,sendToFront,extraItem.size()>0); - } - if(extraItem.size()>0){ - StringBuilder builder = new StringBuilder(); - for(Map.Entry entry:extraItem.entrySet()){ - 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(); - } - } - + addItemByMail(user,itemMap,dropBuilder,reason); } /** @@ -870,18 +733,17 @@ public class ItemUtil { Map extraItem = new HashMap<>(itemMap.size()); ListchangeEquipList=null; for (Map.Entry entry : itemMap.entrySet()) { - SItem sItem = SItem.getsItemMap().get(entry.getKey()); + SItem sItem = SItem.getsItemMap().get (entry.getKey()); if (sItem.getItemBaseType()==6){ equipManager.addEquipList(entry.getKey()); } - if (sItem.getItemType()==3){ + 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(entry.getKey(),entry.getValue()); changeEquipList.add(entry.getKey()); } - long itemNumlimit = sItem.getItemNumlimit(); long itemNum = entry.getValue().intValue(); if(itemNum <= 0){ @@ -931,8 +793,21 @@ 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.DONGHAIXUNXIAN_UPDATE,MissionType.GET_TRANSFIGURATION_CARD_NUM,sItem.getQuantity(),Integer.MAX_VALUE); + count-=Integer.MAX_VALUE; + } + user.getUserMissionManager().onGameEvent(user, GameEvent.DONGHAIXUNXIAN_UPDATE,MissionType.GET_TRANSFIGURATION_CARD_NUM,sItem.getQuantity(),(int)count); + } - ReportUtil.onReportEvent(user,ReportEventEnum.GET_ITEM.getType(),itemNum,String.valueOf(reason),item.getItemId()); + int eventType = ParamEventBean.UserItemEvent; + if(currencyMap.contains(entry.getKey())){ + eventType = ParamEventBean.UserCurrencyEvent; + } + KtEventUtils.onKtEvent(user, eventType,reason,GlobalsDef.addReason,entry.getKey(),itemNum,item.getItemNum()); baseItemReport(user,item.getItemId(),(int)itemNum,1,reason); @@ -947,18 +822,18 @@ public class ItemUtil { 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(),itemNum,reason); + ReportUtil.onReportEvent(user,ReportEventEnum.GET_EQUIP.getType(),sItem.getId(),(int)itemNum,reason); } - } else if (sItem.getItemType() == GlobalItemType.SOUL_MARK) { - user.getUserMissionManager().onGameEvent(user, GameEvent.GOT_SOUL_MARK, sItem.getId(), itemNum); + } + if (sItem.getItemType() == GlobalItemType.SOUL_MARK) { + user.getUserMissionManager().onGameEvent(user, GameEvent.GOT_SOUL_MARK, sItem.getId(), (int)itemNum); } if(sItem.getId()==Global.DAILY_TASK_REMOVE_ITEM){ - user.getUserMissionManager().onGameEvent(user,GameEvent.DAILY_TASK_TYPE,itemNum,user); + user.getUserMissionManager().onGameEvent(user,GameEvent.DAILY_TASK_TYPE,(int)itemNum,user); } //日志记录 ItemLogic.getInstance().addItemLog(new ItemLog(user,0,reason,item,itemNum)); } - //发送装备图鉴修改推送 SendEquipBookIndication(user.getId(),itemManager,changeEquipList); @@ -968,6 +843,7 @@ public class ItemUtil { if (dropBuilder != null) { dropBuilder.addAllItemlist(itemProtoList); } + if(!sendToFront.isEmpty()||extraItem.size()>0){ MessageUtil.sendBagIndication(user.getId(),0,sendToFront,extraItem.size()>0); } @@ -977,15 +853,21 @@ public class ItemUtil { 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.getI18NMessage("item_max_mail_content",new String[]{item.getName(),String.valueOf(item.getItemNumlimit())}); + 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(); } } - + Poster.getPoster().dispatchEvent(new AddItemEvent(user.getId(),itemMap)); return 1; } - ///发送装备图鉴修改推送 + + /** + * 发送装备图鉴修改推送 + * @param _uid + * @param _itemManage + * @param _equipList + */ private static void SendEquipBookIndication(int _uid,ItemManager _itemManage, List_equipList){ if (_equipList==null||_equipList.isEmpty())return; ListequipList=new ArrayList<>();