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 e27852234..5e8e192ae 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 @@ -65,36 +65,42 @@ 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 || sFoodsConfig.getContiue()!=0){ - return value; - } - for(int[] effectPara : sFoodsConfig.getEffectPara()){ - int effectId = effectPara[0]; - int effectValue = effectPara[1]; - SPropertyConfig sPropertyConfig = SPropertyConfig.getsPropertyConfigByPID(effectId); - if( sPropertyConfig.getStyle() == GlobalsDef.PERCENT_TYPE){ - if(effectId == HeroAttributeEnum.CurHpExtra.getPropertyId()){ - effectId = HeroAttributeEnum.CurHP.getPropertyId(); - effectValue = value.get(HeroAttributeEnum.Hp.getPropertyId()) * effectValue/10000; - }else{ - if(sPropertyConfig.getTargetPropertyId()!=0){ - effectId = sPropertyConfig.getTargetPropertyId(); - effectValue = value.get(effectId) * effectValue/10000; + public Map bufferOneHeroAttrAfterEat(Map value,int foodId) { + List foodIds = new ArrayList<>(); + foodIds.add(foodId); + return bufferOneHeroAttrAfterEat(value,foodIds); + } + public Map bufferOneHeroAttrAfterEat(Map value,List foodIds){ + Map effectValueMap = new HashMap<>(); + for(int foodId:foodIds){ + SFoodsConfig sFoodsConfig = STableManager.getConfig(SFoodsConfig.class).get(foodId); + if(value.get(HeroAttributeEnum.CurHP.getPropertyId()) == 0 || sFoodsConfig.getContiue()!=0){ + return value; + } + for(int[] effectPara : sFoodsConfig.getEffectPara()){ + int effectId = effectPara[0]; + int effectValue = effectPara[1]; + SPropertyConfig sPropertyConfig = SPropertyConfig.getsPropertyConfigByPID(effectId); + if( sPropertyConfig.getStyle() == GlobalsDef.PERCENT_TYPE){ + if(effectId == HeroAttributeEnum.CurHpExtra.getPropertyId()){ + effectId = HeroAttributeEnum.CurHP.getPropertyId(); + effectValue = value.get(HeroAttributeEnum.Hp.getPropertyId()) * effectValue/10000; + }else{ + if(sPropertyConfig.getTargetPropertyId()!=0){ + effectId = sPropertyConfig.getTargetPropertyId(); + effectValue = Double.valueOf(value.get(effectId) /10000d* effectValue).intValue(); + } } } + effectValueMap.put(effectId,effectValueMap.getOrDefault(effectId,0)+effectValue); } - - if(!value.containsKey(effectId)){ - value.put(effectId,effectValue); - continue; - } - int finalValue = value.get(effectId) + effectValue; + } + for(Map.Entry entry:effectValueMap.entrySet()){ + int finalValue = value.get(entry.getKey()) + entry.getValue(); if(finalValue < 0){ finalValue = 0; } - if(effectId == HeroAttributeEnum.CurHP.getPropertyId()){ + if(entry.getKey() == HeroAttributeEnum.CurHP.getPropertyId()){ Integer maxValue = value.get(HeroAttributeEnum.Hp.getPropertyId()); if(finalValue>maxValue){ finalValue = maxValue; @@ -103,7 +109,7 @@ public class CombatLogic { finalValue =1; } } - value.put( effectId,finalValue ); + value.put(entry.getKey(),finalValue ); } return value; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightUtil.java index 03a0326f6..edf4c0467 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightUtil.java @@ -218,9 +218,8 @@ public class FightUtil { for(Map.Entry tempProperty:trailHero.getProperty().entrySet()){ propertyMap.put(tempProperty.getKey(),tempProperty.getValue()); } - for(int buffId:buffIds){ - CombatLogic.getInstance().bufferOneHeroAttrAfterEat(propertyMap,buffId); - } + CombatLogic.getInstance().bufferOneHeroAttrAfterEat(propertyMap,buffIds); + }else{ propertyMap = trailHero.getProperty(); }