From 371d8af39d2b07864e94dcef9338e9f0b40260b7 Mon Sep 17 00:00:00 2001 From: wangyuan Date: Tue, 2 Apr 2019 14:51:17 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A9=BF=E5=A4=9A=E4=BB=B6=E8=A3=85=E5=A4=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jieling/handler/EquipWearHandler.java | 2 +- .../java/com/ljsd/jieling/logic/dao/Hero.java | 5 ++ .../ljsd/jieling/logic/hero/HeroLogic.java | 55 ++++++++++++------- 3 files changed, 42 insertions(+), 20 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/EquipWearHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/EquipWearHandler.java index a493bdc38..0992bc9d7 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/EquipWearHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/EquipWearHandler.java @@ -17,7 +17,7 @@ public class EquipWearHandler extends BaseHandler{ @Override public void process(ISession iSession, PacketNetData netData) throws Exception { HeroInfoProto.EquipWearRequest equipWearRequest = HeroInfoProto.EquipWearRequest.parseFrom(netData.parseClientProtoNetData()); - HeroLogic.getInstance().wearEquipOpt(iSession,equipWearRequest.getHeroId(),equipWearRequest.getEquipId()); + HeroLogic.getInstance().wearEquipOpt(iSession,equipWearRequest.getHeroId(),equipWearRequest.getEquipIdList()); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Hero.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Hero.java index 4c986c889..039655751 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Hero.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/Hero.java @@ -160,6 +160,11 @@ public class Hero extends MongoBase { this.equipByPositionMap.put(position,equipId); } + public void updateMutliEquipPositionMap(Map equipByPositionMapTmp) throws Exception { + this.equipByPositionMap.putAll(equipByPositionMapTmp); + updateString("equipByPositionMap" ,equipByPositionMap); + } + public void removeEquip(int position){ String value = this.equipByPositionMap.get(position); if (value!=null){ 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 4ea408bfe..9d20b7dd4 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 @@ -792,33 +792,50 @@ public class HeroLogic { } } + public boolean checkEquipForWear(Hero hero,EquipManager equipManager,List equipIds, Map equipInfos ){ + if(equipIds == null || equipIds.isEmpty()){ + return false; + } + Map equipMap = equipManager.getEquipMap(); + for(String equipId : equipIds){ + Equip equip =equipMap.get(equipId); + if( null == equip || null == hero ){ + return false; + } + if(!StringUtil.isEmpty(equip.getHeroId())){ + return false; + } + int equipIdTid = equip.getEquipId(); + SEquipConfig sEquipConfig = SEquipConfig.getsEquipConfigById(equipIdTid); + int position = sEquipConfig.getPosition(); + int professionLimit = sEquipConfig.getProfessionLimit(); + SCHero scHero = SCHero.getsCHero().get(hero.getTemplateId()); + if(professionLimit!=0 && scHero.getProfession()!= professionLimit){ + return false; + } + equipInfos.put(position,equipId); + } + if(equipInfos.size()!=equipIds.size()){ + return false; + } + return true; + + } + // equip TODO 装备会导致英雄属性发生变化 - public void wearEquipOpt(ISession session,String heroId,String equipId) throws Exception { + public void wearEquipOpt(ISession session,String heroId,List equipIds) throws Exception { int uid = session.getUid(); User user = UserManager.getUser(uid); - Hero hero = user.getHeroManager().getHero(heroId); - Equip equip = user.getEquipManager().getEquipMap().get(equipId); - if( null == equip || null == hero ){ - MessageUtil.sendErrorResponse(session,0,MessageTypeProto.MessageType.EQUIP_WEAR_RESPONSE_VALUE,""); - return; - } - if(!StringUtil.isEmpty(equip.getHeroId())){ - MessageUtil.sendErrorResponse(session,0,MessageTypeProto.MessageType.EQUIP_WEAR_RESPONSE_VALUE,""); - return; - } - int equipIdTid = equip.getEquipId(); - SEquipConfig sEquipConfig = SEquipConfig.getsEquipConfigById(equipIdTid); - int position = sEquipConfig.getPosition(); - int professionLimit = sEquipConfig.getProfessionLimit(); - SCHero scHero = SCHero.getsCHero().get(hero.getTemplateId()); - if(professionLimit!=0 && scHero.getProfession()!= professionLimit){ - MessageUtil.sendErrorResponse(session,0,MessageTypeProto.MessageType.EQUIP_WEAR_RESPONSE_VALUE,""); + Hero hero = user.getHeroManager().getHeroMap().get(heroId); + Map equipInfoTmp = new HashMap<>(6); + if(!checkEquipForWear(hero,user.getEquipManager(),equipIds,equipInfoTmp)){ + MessageUtil.sendErrorResponse(session,0,MessageTypeProto.MessageType.EQUIP_WEAR_RESPONSE_VALUE,"equip.wrong"); return; } - hero.updateEquipPositionMap(position,equipId); + hero.updateMutliEquipPositionMap(equipInfoTmp); LOGGER.info("the heroTid={},the force={}",hero.getTemplateId(),calHeoForce(user,hero));