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