From c01405846d508b4f2653afb00d07dc7a87650c82 Mon Sep 17 00:00:00 2001 From: wangyuan Date: Wed, 13 Nov 2019 16:06:50 +0800 Subject: [PATCH] fix battle buffer --- .../ljsd/jieling/handler/map/MapLogic.java | 13 +++++ .../ljsd/jieling/logic/fight/CombatLogic.java | 57 +++++++++---------- .../ljsd/jieling/logic/hero/HeroLogic.java | 7 ++- .../jieling/logic/player/PlayerLogic.java | 4 ++ 4 files changed, 49 insertions(+), 32 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java index d9e64963c..f23f2cf65 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java @@ -27,6 +27,7 @@ import com.ljsd.jieling.logic.activity.event.StoryEvent; import com.ljsd.jieling.logic.dao.*; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.fight.CheckFight; +import com.ljsd.jieling.logic.fight.CombatLogic; import com.ljsd.jieling.logic.fight.FightType; import com.ljsd.jieling.logic.hero.HeroAttributeEnum; import com.ljsd.jieling.logic.hero.HeroLogic; @@ -358,6 +359,17 @@ public class MapLogic { LOGGER.info("enterMap() uid=>{} team pos is wrong ", uid, teamId); return "阵容有误"; } + if(2 == initType && teamId!=401){ + Map foodBufferMap = mapManager.getFoodBufferMap(); + for(Map.Entry item : foodBufferMap.entrySet()){ + Integer value = item.getValue(); + if(value<=-1){ + SFoodsConfig sFoodsConfig = STableManager.getConfig(SFoodsConfig.class).get(item.getKey()); + CombatLogic.getInstance().updateHeroAttributJustOne(user,teamPosHeroInfos,sFoodsConfig,heroAllAttributeMap,true); + } + } + } + mapManager.setTeamId(teamId); mapManager.setHeroAllAttributeMap(heroAllAttributeMap); return ""; @@ -534,6 +546,7 @@ public class MapLogic { } } mapManager.setCurXY(curXY); + mapManager.updateFoodBufferByStep(cells.size()); } MapInfoProto.MapUpdateResponse mapUpdateResponse = MapInfoProto.MapUpdateResponse.newBuilder() .setLeftTime(getLeftTime(user, true)) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java index 0d6ef0fb9..7f5172656 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java @@ -28,6 +28,7 @@ import com.ljsd.jieling.logic.store.StoreLogic; import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.protocols.CommonProto; import com.ljsd.jieling.protocols.FightInfoProto; +import com.ljsd.jieling.protocols.HeroInfoProto; import com.ljsd.jieling.protocols.MessageTypeProto; import com.ljsd.jieling.util.*; import config.*; @@ -62,7 +63,7 @@ public class CombatLogic { public Map bufferOneHeroAttrAfterEat(Map value,int foodId){ SFoodsConfig sFoodsConfig = STableManager.getConfig(SFoodsConfig.class).get(foodId); - if(value.get(HeroAttributeEnum.CurHP.getPropertyId()) == 0){ + if(value.get(HeroAttributeEnum.CurHP.getPropertyId()) == 0 || sFoodsConfig.getContiue()!=0){ return value; } for(int[] effectPara : sFoodsConfig.getEffectPara()){ @@ -76,15 +77,8 @@ public class CombatLogic { }else{ if(sPropertyConfig.getTargetPropertyId()!=0){ effectId = sPropertyConfig.getTargetPropertyId(); - effectValue = value.get(effectId) + effectValue/10000; - }else{ - int baseValue = 0; - if(value.containsKey(effectId)){ - baseValue = value.get(effectId); - } - effectValue = baseValue + effectValue/10000; + effectValue = value.get(effectId) * effectValue/10000; } - } } @@ -135,29 +129,34 @@ public class CombatLogic { int contiue = sFoodsConfig.getContiue(); if(contiue==0){ contiue=-1; - int teamId = mapManager.getTeamId(); - List teamPosHeroInfoList = user.getTeamPosManager().getTeamPosForHero().get(teamId); - Map foodAddMap = new HashMap<>(); - getFoodAttributeAdd(GlobalsDef.FOOD_ADDITION_BATTLE_TYPE, GlobalsDef.FOOD_EAT_AFFECT_PERSON, foodAddMap, sFoodsConfig); - for (TeamPosHeroInfo heroInfo : teamPosHeroInfoList) { - Hero hero = user.getHeroManager().getHero(heroInfo.getHeroId()); - if (hero == null) { - continue; - } - Map heroAllAttribute = user.getMapManager().getHeroAllAttributeByHeroId(hero.getId()); - if(heroAllAttribute == null || heroAllAttribute.get(HeroAttributeEnum.CurHP.getPropertyId()) <= 0){ - continue; - } - - HeroLogic.getInstance().combinedAttribute(foodAddMap,heroAllAttribute); - HeroLogic.getInstance().calInteractAdd(heroAllAttribute); - heroAllAttributeMap.put(hero.getId(), heroAllAttribute); - } - mapManager.setHeroAllAttributeMap(heroAllAttributeMap); } mapManager.eatFood(foodIdOrEventId,contiue); } + public void updateHeroAttributJustOne(User user,List teamPosHeroInfoList,SFoodsConfig sFoodsConfig, Map> heroAllAttributeMap,boolean isRecory){ + Map foodAddMap = new HashMap<>(); + getFoodAttributeAdd(GlobalsDef.FOOD_ADDITION_BATTLE_TYPE, GlobalsDef.FOOD_EAT_AFFECT_PERSON, foodAddMap, sFoodsConfig); + for (TeamPosHeroInfo heroInfo : teamPosHeroInfoList) { + Hero hero = user.getHeroManager().getHero(heroInfo.getHeroId()); + if (hero == null) { + continue; + } + Map heroAllAttribute = new HashMap<>(); + if(isRecory){ + heroAllAttribute =heroAllAttributeMap.get(hero.getId()); + }else { + heroAllAttribute = user.getMapManager().getHeroAllAttributeByHeroId(hero.getId()); + if(heroAllAttribute == null || heroAllAttribute.get(HeroAttributeEnum.CurHP.getPropertyId()) <= 0){ + continue; + } + } + HeroLogic.getInstance().combinedAttribute(foodAddMap,heroAllAttribute); + HeroLogic.getInstance().calInteractAdd(heroAllAttribute); + heroAllAttributeMap.put(hero.getId(), heroAllAttribute); + } + user.getMapManager().setHeroAllAttributeMap(heroAllAttributeMap); + } + public Map attributeByEatFood( User user,int type,int target){ Map foddAddResult = new HashMap<>(); MapManager mapManager = user.getMapManager(); @@ -944,8 +943,8 @@ public class CombatLogic { String randomReward = ItemUtil.getReward(randomItemMap, randomCardMap, randomEquipMap, randomRandomMap); if(randomReward.length()!=0){ reward = reward + "|" + randomReward; + MailLogic.getInstance().sendMail(user.getId(),title,content,reward,now, Global.MAIL_EFFECTIVE_TIME); } - MailLogic.getInstance().sendMail(user.getId(),title,content,reward,now, Global.MAIL_EFFECTIVE_TIME); } mainLevelManager.afterTakeStateReward(true,0); myResult = true; 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 fa4409016..164678142 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 @@ -1313,9 +1313,10 @@ public class HeroLogic { if(foodAddMap.isEmpty()){ return heroAllAttribute; } - combinedAttribute(foodAddMap,heroAllAttribute); - calInteractAdd(heroAllAttribute); - return heroAllAttribute; + Map heroAllAttributeCopy = new HashMap<>(heroAllAttribute); + combinedAttribute(foodAddMap,heroAllAttributeCopy); + calInteractAdd(heroAllAttributeCopy); + return heroAllAttributeCopy; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java index b36813b6d..dffa3565c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java @@ -330,6 +330,10 @@ public class PlayerLogic { } if(hadNum itemMap = new HashMap<>(1); + if(reson == BIReason.VIP_LEVEL_REWARD){ + Map privilegePreMap = SVipLevelConfig.getsVipLevelConfigMap().get(vipLevel - 1).getPrivilegeMap(); + hadNum = privilegePreMap.get(dailyGift[1]); + } itemMap.put(dailyGift[0],num-hadNum); ItemUtil.addItem(user,itemMap,null, reson); }