hero atribute

back_recharge
wangyuan 2019-01-28 11:16:43 +08:00
parent 79285dde1a
commit f9ef5ffb1b
5 changed files with 68 additions and 21 deletions

View File

@ -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;
}

View File

@ -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;

View File

@ -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;
}
}

View File

@ -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;
}

View File

@ -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<Integer, SCHeroRankUpConfig> 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<Integer,SCHero.ConsumeMaterialInfo> 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<Integer, SCHeroRankUpConfig> 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<Integer,Integer> calHeroAllAttribute(Hero hero){
Map<Integer,Integer> 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<Integer, Float> paraForHero = getParaForHero(hero);
Map<Integer,Float> 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<Integer,Float> 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<Integer, Float> 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<Integer,Float> getParaForHero(Hero hero){
Map<Integer,Float> result = new HashMap<>(2);
Map<Integer, SCHeroRankUpConfig> 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<Integer, SCHeroRankUpConfig> 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<Integer, Integer> 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);