diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SCHeroRankUpConfig.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SCHeroRankUpConfig.java index 4ce60c4f5..7f5152f6e 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/SCHeroRankUpConfig.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SCHeroRankUpConfig.java @@ -1,5 +1,6 @@ package com.ljsd.jieling.config; +import com.ljsd.jieling.core.GlobalsDef; import com.ljsd.jieling.logic.STableManager; import com.ljsd.jieling.logic.Table; @@ -36,11 +37,10 @@ public class SCHeroRankUpConfig implements BaseConfig{ if(!result.containsKey(type)){ result.put(type,new TreeMap<>()); } - if(type == 1){ - result.get(type).put(scHeroRankUpConfig.getLimitLevel(),scHeroRankUpConfig); - }else{ + if(type == GlobalsDef.UP_STAR_TYPE){ result.get(type).put(scHeroRankUpConfig.getLimitStar(),scHeroRankUpConfig); } + result.get(type).put(scHeroRankUpConfig.getLimitLevel(),scHeroRankUpConfig); } scHeroRankUpConfigByType = result; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SGameSetting.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SGameSetting.java index ca9f197b6..e910437d8 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/SGameSetting.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SGameSetting.java @@ -60,11 +60,14 @@ public class SGameSetting implements BaseConfig { return actionPowerRormula; } - public float calSpeed(float speed, int level){ + public float calSpeed(float speed, int breakTimes){ + if(breakTimes == 0){ + return 0; + } float result = speed; int length = speedFormula.length; for(int i=0;i< speedFormula.length;i++){ - double pow = Math.pow(level, --length); + double pow = Math.pow(breakTimes, --length); result += speedFormula[i]*pow; } return result; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SHeroLevlConfig.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SHeroLevlConfig.java index 276e2dd8f..d20e6e284 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/SHeroLevlConfig.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SHeroLevlConfig.java @@ -16,6 +16,8 @@ public class SHeroLevlConfig implements BaseConfig{ private float characterLevelPara; + private float speedLevelPara; + private int[][] consume; @@ -49,4 +51,8 @@ public class SHeroLevlConfig implements BaseConfig{ public int[][] getConsume() { return consume; } + + public float getSpeedLevelPara() { + return speedLevelPara; + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/core/GlobalsDef.java b/serverlogic/src/main/java/com/ljsd/jieling/core/GlobalsDef.java index 29e52b9d2..114471c80 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/core/GlobalsDef.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/core/GlobalsDef.java @@ -13,4 +13,8 @@ public interface GlobalsDef { int MagicDefence_TYPE =4; int SPEED_TYPE =5; + // + int RANKUP_PARA_TYPE =1; + int BREAK_PARA_TYPE =2; + } 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 5f86eaa3e..86d493b70 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 @@ -268,8 +268,14 @@ public class HeroLogic { MessageUtil.sendErrorResponse(session,0,MessageTypeProto.MessageType.UP_HERO_STAR_RESPONSE_VALUE,""); return; } - int oldStar = targetHero.getStar(); + int oldStar = targetHero.getStar(); + Map scHeroRankUpConfigByType = SCHeroRankUpConfig.getScHeroRankUpConfigByType(GlobalsDef.UP_STAR_TYPE); + SCHeroRankUpConfig scHeroRankUpConfig = scHeroRankUpConfigByType.get(oldStar); + if( targetHero.getLevel() < scHeroRankUpConfig.getLimitLevel()){ + MessageUtil.sendErrorResponse(session,0,MessageTypeProto.MessageType.UP_HERO_STAR_RESPONSE_VALUE,"等级不够"); + return; + } SCHero scHero = SCHero.getsCHero().get(targetHero.getTemplateId()); Map consumeMaterialInfoByPosition = scHero.getConsumeMaterialInfoOfPositionByStar(oldStar + 1); boolean canUse = true; @@ -324,11 +330,10 @@ public class HeroLogic { } if(!canUse){ - MessageUtil.sendErrorResponse(session,0,MessageTypeProto.MessageType.UP_HERO_STAR_RESPONSE_VALUE,""); + MessageUtil.sendErrorResponse(session,0,MessageTypeProto.MessageType.UP_HERO_STAR_RESPONSE_VALUE,"所选英雄不符合"); return; } - Map scHeroRankUpConfigByType = SCHeroRankUpConfig.getScHeroRankUpConfigByType(GlobalsDef.UP_STAR_TYPE); - SCHeroRankUpConfig scHeroRankUpConfig = scHeroRankUpConfigByType.get(oldStar); + int[][] consumeMaterial = scHeroRankUpConfig.getConsumeMaterial(); boolean enoughCost = ItemUtil.itemCost(user, consumeMaterial); if(!enoughCost){ @@ -354,21 +359,53 @@ public class HeroLogic { } //初始属性*(1+化境增长)*等级系数 + 初始属性*突破系数 + public Map calHeroAllAttribute(Hero hero){ + Map result = new HashMap<>(); + int templateId = hero.getTemplateId(); + SCHero scHero = SCHero.getsCHero().get(templateId); + SHeroLevlConfig sHeroLevlConfig = SHeroLevlConfig.getsCHero().get(hero.getLevel()); + float characterLevelPara = sHeroLevlConfig.getCharacterLevelPara(); + Map paraForHero = getParaForHero(hero); + Map baseValueMap = new HashMap<>(); + baseValueMap.put(GlobalsDef.HP_TYPE,getBaseValueByType(scHero,GlobalsDef.HP_TYPE)); + baseValueMap.put(GlobalsDef.ATTACK_TYPE,getBaseValueByType(scHero,GlobalsDef.ATTACK_TYPE)); + baseValueMap.put(GlobalsDef.PhysicalDefence_TYPE,getBaseValueByType(scHero,GlobalsDef.PhysicalDefence_TYPE)); + baseValueMap.put(GlobalsDef.MagicDefence_TYPE,getBaseValueByType(scHero,GlobalsDef.MagicDefence_TYPE)); + baseValueMap.put(GlobalsDef.SPEED_TYPE,getBaseValueByType(scHero,GlobalsDef.SPEED_TYPE)); + for(Map.Entry item : baseValueMap.entrySet()){ + Integer attributeType = item.getKey(); + Float heroBaseValue = item.getValue(); + if(attributeType == GlobalsDef.SPEED_TYPE){ + result.put (attributeType,(int)(heroBaseValue * sHeroLevlConfig.getSpeedLevelPara() + SGameSetting.getGameSetting().calSpeed(heroBaseValue, hero.getBreakId()))); + } + result.put(attributeType,(int)(heroBaseValue * ( 1 + paraForHero.get(GlobalsDef.RANKUP_PARA_TYPE)/10000.f) * characterLevelPara + heroBaseValue * paraForHero.get(GlobalsDef.BREAK_PARA_TYPE)/10000.f)); + } - public float calHeroAttribute(Hero hero,int type){ + return result; + } + public int calHeroAttribute(Hero hero,int type){ + //计算化境增长 int templateId = hero.getTemplateId(); SCHero scHero = SCHero.getsCHero().get(templateId); float baseValue = getBaseValueByType(scHero,type); + SHeroLevlConfig sHeroLevlConfig = SHeroLevlConfig.getsCHero().get(hero.getLevel()); + float characterLevelPara = sHeroLevlConfig.getCharacterLevelPara(); + Map paraForHero = getParaForHero(hero); + if(type == GlobalsDef.SPEED_TYPE){ + return (int)(baseValue * sHeroLevlConfig.getSpeedLevelPara() + SGameSetting.getGameSetting().calSpeed(baseValue, hero.getBreakId())); + } + return (int)(baseValue * ( 1 + paraForHero.get(GlobalsDef.RANKUP_PARA_TYPE)/10000.f) * characterLevelPara + baseValue * paraForHero.get(GlobalsDef.BREAK_PARA_TYPE)/10000.f); + } - float characterLevelPara = SHeroLevlConfig.getsCHero().get(hero.getLevel()).getCharacterLevelPara(); - //计算化境增长 + private Map getParaForHero(Hero hero){ + Map result = new HashMap<>(2); Map scHeroRankUpConfigByTypeOfStar = SCHeroRankUpConfig.getScHeroRankUpConfigByType(GlobalsDef.UP_STAR_TYPE); SCHeroRankUpConfig scHeroRankUpConfig = scHeroRankUpConfigByTypeOfStar.get(hero.getStar()); float rankupPara =0.0f; if( scHeroRankUpConfig!=null ){ rankupPara = scHeroRankUpConfig.getRankupPara(); } - //突破系数 + //突破系数 float breakPara = 0.0f; int heroLevel = hero.getLevel(); Map scHeroRankUpConfigByTypOfBreak = SCHeroRankUpConfig.getScHeroRankUpConfigByType(GlobalsDef.BREAK_TYPE); @@ -380,13 +417,9 @@ public class HeroLogic { break; } } - - if(type == GlobalsDef.SPEED_TYPE){ - return SGameSetting.getGameSetting().calSpeed(baseValue,heroLevel); - } - - return baseValue * ( 1 + rankupPara/10000.f) + characterLevelPara * breakPara; - + result.put(GlobalsDef.RANKUP_PARA_TYPE,rankupPara); + result.put(GlobalsDef.BREAK_PARA_TYPE,breakPara); + return result; } private float getBaseValueByType(SCHero scHero,int type){ @@ -415,7 +448,8 @@ public class HeroLogic { //todo 计算英雄战斗力 战斗力 = 生命*0.7 + (护甲 + 魔坑)*5 + 攻击 *10 + (暴击率 + 效果命中率 )*5 +(属性攻击率 + 属性防御率)*30 public int calHeoForce(Hero hero){ - double heroBaseForce = calHeroAttribute(hero, GlobalsDef.HP_TYPE) * 0.7 + (calHeroAttribute(hero, GlobalsDef.PhysicalDefence_TYPE) + calHeroAttribute(hero, GlobalsDef.MagicDefence_TYPE)) * 5 + calHeroAttribute(hero, GlobalsDef.ATTACK_TYPE) * 10; + Map heroAllAttribute = calHeroAllAttribute(hero); + double heroBaseForce = heroAllAttribute.get(GlobalsDef.HP_TYPE) * 0.7 + (heroAllAttribute.get(GlobalsDef.PhysicalDefence_TYPE) + heroAllAttribute.get(GlobalsDef.MagicDefence_TYPE)) * 5 + heroAllAttribute.get(GlobalsDef.ATTACK_TYPE) * 10; //todo 计算装备加成 float equipAddForce =0.0f; int result = (int) (heroBaseForce + equipAddForce);