diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SCHero.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SCHero.java index 5624bf2e4..9fab8500f 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/SCHero.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SCHero.java @@ -94,7 +94,7 @@ public class SCHero implements BaseConfig{ if(!consumeMaterialInfoByStarTmp.containsKey(star)){ consumeMaterialInfoByStarTmp.put(star,new HashMap<>()); } - consumeMaterialInfoByStarTmp.get(star).put(position,new ConsumeMaterialInfo(position,nums)); + consumeMaterialInfoByStarTmp.get(star).put(position,new ConsumeMaterialInfo(groupID,nums)); } scHero.setConsumeMaterialInfoOfPositionByStar(consumeMaterialInfoByStarTmp); 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 7417b5dae..3c7a2e835 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 @@ -3,9 +3,7 @@ package com.ljsd.jieling.logic.hero; import com.ljsd.GameApplication; import com.ljsd.jieling.config.*; import com.ljsd.jieling.core.GlobalsDef; -import com.ljsd.jieling.globals.Global; import com.ljsd.jieling.logic.dao.*; -import com.ljsd.jieling.logic.item.ItemLogic; import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.protocols.CommonProto; import com.ljsd.jieling.protocols.HeroInfoProto; @@ -351,23 +349,35 @@ public class HeroLogic { return; } Map consumeMaterialInfoByPosition = scHero.getConsumeMaterialInfoOfPositionByStar(oldStar + 1); + if(consumeMaterialInfoByPosition ==null){ + MessageUtil.sendErrorResponse(session,0,MessageTypeProto.MessageType.UP_HERO_STAR_RESPONSE_VALUE,""); + return; + } boolean canUse = true; - List removeHeroIds = new ArrayList<>(); + Set removeHeroIds = new HashSet<>(); + int needTotalHeroNums = 0; + if(consumeMaterialInfoByPosition.size()!=consumeMaterialsList.size()){ + MessageUtil.sendErrorResponse(session,0,MessageTypeProto.MessageType.UP_HERO_STAR_RESPONSE_VALUE,"所选英雄不符合"); + return; + } for(HeroInfoProto.ConsumeMaterial consumeMaterial1 : consumeMaterialsList){ int position = consumeMaterial1.getPosition(); SCHero.ConsumeMaterialInfo consumeMaterialInfo = consumeMaterialInfoByPosition.get(position); + int nums = consumeMaterialInfo.getNums(); + needTotalHeroNums+=nums; List heroIdsList = consumeMaterial1.getHeroIdsList(); SHeroRankupGroup sHeroRankupGroup = SHeroRankupGroup.getsHeroRankupGroup(consumeMaterialInfo.getGroupID()); + int isSame = sHeroRankupGroup.getIssame(); + int starLimit = sHeroRankupGroup.getStarLimit(); + int isSameClan = sHeroRankupGroup.getIsSameClan(); + int isId = sHeroRankupGroup.getIsId(); for(String consumeHero : heroIdsList){ Hero hero = heroManager.getHero(consumeHero); if( null == hero ){ canUse =false; break; } - int isSame = sHeroRankupGroup.getIssame(); - int starLimit = sHeroRankupGroup.getStarLimit(); - int isSameClan = sHeroRankupGroup.getIsSameClan(); - int isId = sHeroRankupGroup.getIsId(); + if( 1 == isSame) { if(hero.getTemplateId() != targetHero.getTemplateId()){ @@ -400,6 +410,12 @@ public class HeroLogic { } removeHeroIds.add(consumeHero); } + + } + + if(needTotalHeroNums!=removeHeroIds.size()){ + canUse=false; + LOGGER.error("hero num not enough"); } if(!canUse){ @@ -423,7 +439,7 @@ public class HeroLogic { - public void recyleHeroBySystem(User user,List removeHeroIds){ + public void recyleHeroBySystem(User user,Set removeHeroIds){ HeroManager heroManager = user.getHeroManager(); for(String useHeroId : removeHeroIds){ heroManager.removeHero(useHeroId);