属性计算 目标属性也是万分比计算 (bug多了万分比加成于同一个一级属性 只会有一个生效)

back_recharge
zhangshanxue 2020-06-11 10:55:25 +08:00
parent 0f430e6a09
commit c015b1ea18
1 changed files with 22 additions and 6 deletions

View File

@ -1543,11 +1543,13 @@ public class HeroLogic{
/** /**
* *
* @param heroAllAttribute *
*
*/ */
public void calInteractAdd(Map<Integer, Integer> heroAllAttribute){ public void calInteractAdd(Map<Integer, Integer> heroAllAttribute){
Map<Integer,Integer> propertyPercentMap = new HashMap<>(); Map<Integer,Integer> propertyPercentMap = new HashMap<>();
Iterator<Map.Entry<Integer, Integer>> iterator = heroAllAttribute.entrySet().iterator(); Iterator<Map.Entry<Integer, Integer>> iterator = heroAllAttribute.entrySet().iterator();
Map<Integer, Integer> newAddAttribute = new HashMap<>();
while (iterator.hasNext()){ while (iterator.hasNext()){
Map.Entry<Integer, Integer> item = iterator.next(); Map.Entry<Integer, Integer> item = iterator.next();
Integer propertyId = item.getKey(); Integer propertyId = item.getKey();
@ -1559,23 +1561,37 @@ public class HeroLogic{
if(targetPropertyId == 0){ if(targetPropertyId == 0){
continue; continue;
} }
SPropertyConfig stargetPro = SPropertyConfig.getsPropertyConfigByPID(targetPropertyId);
if(stargetPro==null){
continue;
}
int style = sPropertyConfig.getStyle(); int style = sPropertyConfig.getStyle();
Integer effectValue = item.getValue(); Integer effectValue = item.getValue();
Integer targetValue = heroAllAttribute.get(targetPropertyId);
if(style == GlobalsDef.ABSOLUTE_TYPE){ //如果目标属性也是万分比 直接加
effectValue += targetValue; if(style == GlobalsDef.ABSOLUTE_TYPE||stargetPro.getStyle()==GlobalsDef.PERCENT_TYPE){
heroAllAttribute.put(targetPropertyId,effectValue); if(heroAllAttribute.containsKey(targetPropertyId)){
Integer targetValue = heroAllAttribute.getOrDefault(targetPropertyId,0);
effectValue += targetValue;
heroAllAttribute.put(targetPropertyId,effectValue);
}else {
newAddAttribute.merge(targetPropertyId,effectValue,(a, b) -> a+b);
}
}else{ }else{
propertyPercentMap.put(targetPropertyId,effectValue); propertyPercentMap.put(targetPropertyId,effectValue);
} }
iterator.remove(); iterator.remove();
} }
heroAllAttribute.putAll(newAddAttribute);
for(Map.Entry<Integer,Integer> item : propertyPercentMap.entrySet()){ for(Map.Entry<Integer,Integer> item : propertyPercentMap.entrySet()){
Integer propertyId = item.getKey(); Integer propertyId = item.getKey();
Integer propertyValue = heroAllAttribute.get(propertyId); Integer propertyValue = heroAllAttribute.getOrDefault(propertyId,0);
heroAllAttribute.put(propertyId,BigDecimal.valueOf(propertyValue).multiply(BigDecimal.valueOf(item.getValue()).divide(BigDecimal.valueOf(10000f))).intValue()+propertyValue); heroAllAttribute.put(propertyId,BigDecimal.valueOf(propertyValue).multiply(BigDecimal.valueOf(item.getValue()).divide(BigDecimal.valueOf(10000f))).intValue()+propertyValue);
} }
Integer maxHp = heroAllAttribute.get(HeroAttributeEnum.Hp.getPropertyId()); Integer maxHp = heroAllAttribute.get(HeroAttributeEnum.Hp.getPropertyId());
Integer curHp = heroAllAttribute.get(HeroAttributeEnum.CurHP.getPropertyId()); Integer curHp = heroAllAttribute.get(HeroAttributeEnum.CurHP.getPropertyId());
if(maxHp!=null && curHp!=null && curHp > maxHp){ if(maxHp!=null && curHp!=null && curHp > maxHp){