From c2bbab2c13ace33a3917a51b8db090fcd1e7382a Mon Sep 17 00:00:00 2001 From: lvxinran Date: Fri, 27 Nov 2020 10:49:24 +0800 Subject: [PATCH] =?UTF-8?q?=E7=81=B5=E5=85=BD=E5=88=86=E9=A1=B5=EF=BC=8C?= =?UTF-8?q?=E8=83=8C=E5=8C=85=E5=B7=B2=E6=BB=A1=20=20=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ljsd/jieling/exception/ErrorCode.java | 1 + .../ljsd/jieling/globals/GlobalItemType.java | 2 +- .../handler/pokemon/GetAllPokemonHandler.java | 10 +-- .../ljsd/jieling/logic/hero/HeroLogic.java | 46 ++++++------- .../ljsd/jieling/logic/mail/MailLogic.java | 2 +- .../java/com/ljsd/jieling/util/ItemUtil.java | 65 +++++++++++++------ .../com/ljsd/jieling/util/MessageUtil.java | 6 +- 7 files changed, 79 insertions(+), 53 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/exception/ErrorCode.java b/serverlogic/src/main/java/com/ljsd/jieling/exception/ErrorCode.java index 255754601..3fac00b47 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/exception/ErrorCode.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/exception/ErrorCode.java @@ -156,6 +156,7 @@ public enum ErrorCode implements IErrorCode { NOT_IN_TAKE_TIME(126, "不在领取期间"), USER_LEVE_DOWN(127,"玩家等级不够"), HAS_AWAKE(130,"已达最大星级"), + BAG_FULL(135,"背包内存储空间不足,无法领取附件"), SERVER_DEFINE_SELF(20000,"操作失败") ; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/globals/GlobalItemType.java b/serverlogic/src/main/java/com/ljsd/jieling/globals/GlobalItemType.java index 29c1318a5..7e7afc8eb 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/globals/GlobalItemType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/globals/GlobalItemType.java @@ -13,7 +13,7 @@ public interface GlobalItemType { int CARD = 1; // 卡牌 int CARD_FRAGMENT = 2; // 卡牌碎片 int EQUIP = 3; //装备 - int POKENMON_COMONPENT = 4; //异妖组件 + int POKENMON_COMONPENT = 4; //异妖组件(暂时无用) int RANDOM_ITME = 5; // 随机道具 int RUNNE = 6; //符文 int BLUE_IMAGE=7; // 蓝图 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/pokemon/GetAllPokemonHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/pokemon/GetAllPokemonHandler.java index 825eee3e2..b542c346c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/pokemon/GetAllPokemonHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/pokemon/GetAllPokemonHandler.java @@ -4,18 +4,20 @@ import com.ljsd.jieling.handler.BaseHandler; import com.ljsd.jieling.logic.hero.HeroLogic; import com.ljsd.jieling.netty.cocdex.PacketNetData; import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.protocols.HeroInfoProto; import com.ljsd.jieling.protocols.MessageTypeProto; import org.springframework.stereotype.Component; @Component -public class GetAllPokemonHandler extends BaseHandler { +public class GetAllPokemonHandler extends BaseHandler { @Override public MessageTypeProto.MessageType getMessageCode() { return MessageTypeProto.MessageType.GET_ALL_POKEMON_REQUEST; - }; + } + @Override - public void process(ISession iSession, PacketNetData netData) throws Exception { - HeroLogic.getInstance().getAllPokemon(iSession); + public void processWithProto(ISession iSession, HeroInfoProto.GetAllPokemonRequest proto) throws Exception { + HeroLogic.getInstance().getAllPokemon(iSession,proto.getStart()); } } 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 58b6ce0e7..10b901d2a 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 @@ -2900,7 +2900,7 @@ public class HeroLogic{ * @param iSession * @throws Exception */ - public void getAllPokemon(ISession iSession) throws Exception { + public void getAllPokemon(ISession iSession,int start) throws Exception { int uid = iSession.getUid(); User user = UserManager.getUser(uid); PokemonManager pokemonManager = user.getPokemonManager(); @@ -2916,32 +2916,32 @@ public class HeroLogic{ for(String key:removeKey){ pokemonManager.removePokemon(key); } -// -// //TODO 测试 -// if(pokemonMap.isEmpty()){ -// for(SDifferDemonsConfig sDifferDemonsConfig : SDifferDemonsConfig.sDifferDemonsConfigMap.values() ){ -// pokemonManager.addPokemon(new Pokemon(sDifferDemonsConfig.getId())); -// } -// } + List pokemonInfoList = new ArrayList<>(); -// + + int pageSize = Global.SEND_CARD_COUNT; + int index = 0; for(Pokemon pokemon : pokemonMap.values()){ - pokemonInfoList.add(CBean2Proto.getPokemon(pokemon)); + if(index>=start&&index teamPokemonInfos = new ArrayList<>(); - for (Map.Entry entry : pokemonManager.getPokemonTeamMap().entrySet()) { - CommonProto.TeamPokemonInfo teamPokemonInfo = CommonProto.TeamPokemonInfo.newBuilder() - .setPokemonId(entry.getValue()) - .setPosition(entry.getKey()) - .build(); - teamPokemonInfos.add(teamPokemonInfo); + HeroInfoProto.GetAllPokemonResponse.Builder builder = HeroInfoProto.GetAllPokemonResponse.newBuilder().addAllPokemonInfo(pokemonInfoList); + if(pokemonInfoList.size() teamPokemonInfos = new ArrayList<>(); + for (Map.Entry entry : pokemonManager.getPokemonTeamMap().entrySet()) { + CommonProto.TeamPokemonInfo teamPokemonInfo = CommonProto.TeamPokemonInfo.newBuilder() + .setPokemonId(entry.getValue()) + .setPosition(entry.getKey()) + .build(); + teamPokemonInfos.add(teamPokemonInfo); + } + builder.addAllTeamPokemonInfos(teamPokemonInfos) + .addAllPokemonGot(pokemonManager.getPokemonGot()) + .addAllPokemonBookEnabled(pokemonManager.getPokemonBookEnabled()); } - HeroInfoProto.GetAllPokemonResponse build = HeroInfoProto.GetAllPokemonResponse.newBuilder().addAllPokemonInfo(pokemonInfoList) - .addAllTeamPokemonInfos(teamPokemonInfos) - .addAllPokemonGot(pokemonManager.getPokemonGot()) - .addAllPokemonBookEnabled(pokemonManager.getPokemonBookEnabled()) - .build(); - MessageUtil.sendMessage(iSession,1,MessageTypeProto.MessageType.GET_ALL_POKEMON_RESPONSE_VALUE,build,true); + MessageUtil.sendMessage(iSession,1,MessageTypeProto.MessageType.GET_ALL_POKEMON_RESPONSE_VALUE,builder.build(),true); } /** diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mail/MailLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mail/MailLogic.java index 68e8b9553..c24ebf552 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mail/MailLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mail/MailLogic.java @@ -233,6 +233,7 @@ public class MailLogic { if (isLimit){ throw new ErrorCodeException(ErrorCode.ITEM_POCKET_IS_FULL); } + CommonProto.Drop.Builder dropBuilder = ItemUtil.drop(user, itemArr, BIReason.TAKE_MAIL_REWARD); for (String mailId : mailIdsList){ Mail mail = mailManager.getMail(mailId); mail.setState(Global.MAIL_DRAW_ST_GOT); @@ -240,7 +241,6 @@ public class MailLogic { mail.setNoUseDeleteTime(TimeUtils.now()+TimeUtils.DAY*Global.MAIL_NOUSE_DELETE_TIME); mailManager.addMail(mail); } - CommonProto.Drop.Builder dropBuilder = ItemUtil.drop(user, itemArr, BIReason.TAKE_MAIL_REWARD); PlayerInfoProto.TakeMailResponse takeMailResponse = PlayerInfoProto.TakeMailResponse.newBuilder() .setDrop(dropBuilder) 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 86c4631bc..af50fb789 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java @@ -549,7 +549,6 @@ public class ItemUtil { private static int getItemType(SItem sItem) { int itemType = sItem.getItemType(); switch (sItem.getItemType()) { - case GlobalItemType.POKENMON_COMONPENT: case GlobalItemType.RUNNE: case GlobalItemType.CARD_FRAGMENT: case GlobalItemType.BLUE_IMAGE: @@ -594,6 +593,9 @@ public class ItemUtil { List itemProtoList = new CopyOnWriteArrayList<>(); ItemManager itemManager = user.getItemManager(); List sendToFront = new CopyOnWriteArrayList<>(); + //超过上限不能直接获得 + Map extraItem = new HashMap<>(itemMap.size()); + for (Map.Entry entry : itemMap.entrySet()) { SItem sItem = SItem.getsItemMap().get (entry.getKey()); int itemNumlimit = sItem.getItemNumlimit(); @@ -611,15 +613,30 @@ public class ItemUtil { 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(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(),extraItem.getOrDefault(entry.getKey(),0)+entry.getValue()); + } continue; } - if (item.getItemNum() + entry.getValue() >= itemNumlimit){ + if (item.getItemNum() + entry.getValue() > itemNumlimit){ if(sItem.getId()==Global.MISSING_ROOM_ITEM&&reason==BIReason.ADVENTURE_BASE_REWARD){ item.setItemNum(item.getItemNum() + entry.getValue()); }else{ - itemNum = itemNumlimit -item.getItemNum(); - item.setItemNum(itemNumlimit); + if(reason==BIReason.TAKE_MAIL_REWARD){ + throw new ErrorCodeException(ErrorCode.BAG_FULL); + }else{ + extraItem.put(entry.getKey(),extraItem.getOrDefault(entry.getKey(),0)+entry.getValue()); + continue; + } } }else{ item.setItemNum(item.getItemNum() + entry.getValue()); @@ -629,20 +646,12 @@ public class ItemUtil { if(itemNum>=0){ itemProtoList.add(CBean2Proto.getItem(item,itemNum)); } -// int eventType = ParamEventBean.UserItemEvent; -// if(currencyMap.contains(entry.getKey())){ -// eventType = ParamEventBean.UserCurrencyEvent; -// } -// KtEventUtils.onKtEvent(user, eventType,reason,GlobalsDef.addReason,entry.getKey(),itemNum,item.getItemNum()); + + ReportUtil.onReportEvent(user,ReportEventEnum.GET_ITEM.getType(),itemNum,String.valueOf(reason),item.getItemId()); + baseItemReport(user,item.getItemId(),itemNum,1,reason); - if(sItem.getItemType() == GlobalItemType.POKENMON_COMONPENT && sItem.getQuantity()>=SSpecialConfig.getIntegerValue(SSpecialConfig.lamp_lottery_differ_content_parm)){ - SDifferDemonsConfig sDifferDemonsConfig = SDifferDemonsConfig.sDifferDemonsConfigMapByComId.get(sItem.getId()); - String nickName = user.getPlayerInfoManager().getNickName(); - String message = SErrorCodeEerverConfig.getI18NMessage("lamp_lottery_differ_content_"+ sItem.getQuantity(), new Object[]{nickName,sDifferDemonsConfig.getName(),sItem.getName()}); - ChatLogic.getInstance().sendSysChatMessage(message,Global.LUCKY_LUCK,sItem.getId(),0,0,0,0,0); - } if(sItem.getId() == Global.EXP){ userLevelUp(user,itemNum); } @@ -665,11 +674,25 @@ public class ItemUtil { //日志记录 ItemLogic.getInstance().addItemLog(new ItemLog(user.getId(),0,user.getPlayerInfoManager().getLevel(),String.valueOf(TimeUtils.now()),reason,sItem.getId(),itemNum,item.getItemNum())); } + 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()){ - MessageUtil.sendBagIndication(user.getId(),0,sendToFront); + 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.getI18NMessage("item_max_mail_content",new String[]{item.getName(),String.valueOf(item.getItemNumlimit())}); + MailLogic.getInstance().sendMail(user.getId(),title,content,builder.toString(),TimeUtils.nowInt(),Global.MAIL_EFFECTIVE_TIME); + builder = new StringBuilder(); + } } } @@ -815,7 +838,7 @@ public class ItemUtil { } if(!sendToFront.isEmpty()){ - MessageUtil.sendBagIndication(user.getId(),1,sendToFront); + MessageUtil.sendBagIndication(user.getId(),1,sendToFront,false); } } @@ -871,7 +894,7 @@ public class ItemUtil { } user.getItemManager().setItemMap(itemMap); if(!sendToFront.isEmpty()){ - MessageUtil.sendBagIndication(user.getId(),0,sendToFront); + MessageUtil.sendBagIndication(user.getId(),0,sendToFront,false); } for(PropertyItem equip:equips){ equipsToBag(user,isVictory,equip,rewardStr); @@ -965,10 +988,10 @@ public class ItemUtil { sendToFront.add(CBean2Proto.getItem(myItem,-1)); } if(!sendToFront.isEmpty()){ - MessageUtil.sendBagIndication(user.getId(),0,sendToFront); + MessageUtil.sendBagIndication(user.getId(),0,sendToFront,false); } if(!sendTemToFront.isEmpty()){ - MessageUtil.sendBagIndication(user.getId(),1,sendTemToFront); + MessageUtil.sendBagIndication(user.getId(),1,sendTemToFront,false); } user.getUserMissionManager().onGameEvent(user,GameEvent.CONSUMER_MATERIAL,useItemMap); Poster.getPoster().dispatchEvent(new UseItemEvent(user.getId(),useItemMap)); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/MessageUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/util/MessageUtil.java index d42e712bb..2b0ee10b9 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/MessageUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/MessageUtil.java @@ -95,15 +95,15 @@ public class MessageUtil { user.getPlayerInfoManager().setReds(reds); } - public static void sendBagIndication(int sendUid,int type, List sendToFront) { + public static void sendBagIndication(int sendUid,int type, List sendToFront,boolean isMax) { if(null!= SimpleTransaction.current()){ - PlayerInfoProto.UpdateBagIndication.Builder build = PlayerInfoProto.UpdateBagIndication.newBuilder().addAllItem(sendToFront).setType(type); + PlayerInfoProto.UpdateBagIndication.Builder build = PlayerInfoProto.UpdateBagIndication.newBuilder().addAllItem(sendToFront).setType(type).setIsMax(isMax?1:0); SimpleTransaction.current().dealWhileCommit(new SimpleTransaction.SendTask(build.build(), MessageTypeProto.MessageType.UPDATE_BAG_INDICATION_VALUE)); return; } ISession session = OnlineUserManager.sessionMap.get(sendUid); if(session!=null){ - PlayerInfoProto.UpdateBagIndication build = PlayerInfoProto.UpdateBagIndication.newBuilder().addAllItem(sendToFront).setType(type).build(); + PlayerInfoProto.UpdateBagIndication build = PlayerInfoProto.UpdateBagIndication.newBuilder().addAllItem(sendToFront).setType(type).setIsMax(isMax?1:0).build(); MessageUtil.sendIndicationMessage(session,1,MessageTypeProto.MessageType.UPDATE_BAG_INDICATION_VALUE,build,true); } }