重构主角神觉系统
parent
5d19ec5926
commit
5177a3807b
|
|
@ -2795,14 +2795,10 @@ public class HeroLogic {
|
|||
// ... 总属性计算 ...
|
||||
Map<Integer, Long> heroAllAttribute = calHeroAllAttribute(user, hero, isForce);
|
||||
heroAllAttribute.put(HeroAttributeEnum.CurHP.getPropertyId(), heroAllAttribute.get(GlobalsDef.HP_TYPE));
|
||||
|
||||
// 主角六道神脉(要先计算并返回对灵兽,神兵,变身卡的属性加成,用于他们的系统计算)
|
||||
Map<Integer,Integer> systemPropAdd = null;
|
||||
// Map<Integer,Integer> systemPropAdd = applyPlayerMeridiansAttribute(heroAllAttribute,user);
|
||||
// 主角属性加成
|
||||
applyPlayerAndSkill(heroAllAttribute, user,systemPropAdd);
|
||||
applyPlayerAndSkill(heroAllAttribute, user);
|
||||
// 灵兽和神兵
|
||||
applyPokemonAndMagicSoldierAttribute(heroAllAttribute, teamId, user,systemPropAdd);
|
||||
applyPokemonAndMagicSoldierAttribute(heroAllAttribute, teamId, user);
|
||||
// 图鉴,皮肤,称号,坐骑等。。。
|
||||
applyBonusesAttribute(heroAllAttribute, hero.getSkin(), user);
|
||||
// 四象心法增加总属性
|
||||
|
|
@ -2837,6 +2833,8 @@ public class HeroLogic {
|
|||
applyTeamAttribute(heroAllAttribute, isForce, teamId, user);
|
||||
// 被动技能
|
||||
applyPassiveSkillAttribute(heroAllAttribute, hero, teamId, user);
|
||||
// 主角六道神脉
|
||||
applyPlayerMeridiansAttribute(heroAllAttribute,user);
|
||||
|
||||
//pvp队伍加成特殊处理,必须放在最后
|
||||
if (!isForce && !TeamEnum.isPvpTeam(teamId)) {
|
||||
|
|
@ -2851,7 +2849,7 @@ public class HeroLogic {
|
|||
return heroAllAttribute;
|
||||
}
|
||||
|
||||
private void applyPokemonAndMagicSoldierAttribute(Map<Integer, Long> heroAllAttribute, int teamId, User user,Map<Integer,Integer> add) {
|
||||
private void applyPokemonAndMagicSoldierAttribute(Map<Integer, Long> heroAllAttribute, int teamId, User user) {
|
||||
// ... 灵兽和神兵属性加成逻辑 ...
|
||||
int num = Optional.ofNullable(user.getTeamPosManager().getTeamPosForHero().get(teamId)).map(List::size).orElse(0);
|
||||
if (num == 0) {
|
||||
|
|
@ -2859,28 +2857,14 @@ public class HeroLogic {
|
|||
}
|
||||
//森罗环境固定为5
|
||||
int heroNum = teamId == TeamEnum.TRIAL_TEAM.getTeamId() ? 5 : num;
|
||||
// 灵兽属性
|
||||
// 灵兽战力
|
||||
int[][] pokemonAttr = calPokemonAttribute(user.getPokemonManager());
|
||||
for (int i = 0; i < pokemonAttr.length; i++) {
|
||||
pokemonAttr[i][1] = pokemonAttr[i][1] / heroNum;
|
||||
}
|
||||
// 神兵属性
|
||||
int[][] magicSoldierAttribute = calMagicSoldierAttribute(user.getMagicSoldierManager());
|
||||
if(add != null && add.size() > 0){
|
||||
if(add.containsKey(PlayerGodAddSystemType.LING_SHOU)){
|
||||
int value = add.get(PlayerGodAddSystemType.LING_SHOU);
|
||||
for (int i = 0; i < pokemonAttr.length; i++) {
|
||||
pokemonAttr[i][1] = (int)(pokemonAttr[i][1] * (1 + value / 10000d));
|
||||
}
|
||||
}
|
||||
if(add.containsKey(PlayerGodAddSystemType.SHEN_BING)){
|
||||
int value = add.get(PlayerGodAddSystemType.SHEN_BING);
|
||||
for (int i = 0; i < magicSoldierAttribute.length; i++) {
|
||||
magicSoldierAttribute[i][1] = (int)(magicSoldierAttribute[i][1] * (1 + value / 10000d));
|
||||
}
|
||||
}
|
||||
}
|
||||
combinedAttribute(pokemonAttr, heroAllAttribute);
|
||||
// 神兵战力
|
||||
int[][] magicSoldierAttribute = calMagicSoldierAttribute(user.getMagicSoldierManager());
|
||||
combinedAttribute(magicSoldierAttribute, heroAllAttribute);
|
||||
}
|
||||
|
||||
|
|
@ -3054,7 +3038,7 @@ public class HeroLogic {
|
|||
}
|
||||
}
|
||||
|
||||
private void applyPlayerAndSkill(Map<Integer, Long> heroAllAttribute, User user,Map<Integer,Integer> add) {
|
||||
private void applyPlayerAndSkill(Map<Integer, Long> heroAllAttribute, User user) {
|
||||
// ... 主角属性和主角技能 ...
|
||||
SPlayerLevelConfig playerLevelConfig = SPlayerLevelConfig.sPlayerLevelConfigMap.get(user.getPlayerInfoManager().getLevel());
|
||||
if (playerLevelConfig != null) {
|
||||
|
|
@ -3064,7 +3048,7 @@ public class HeroLogic {
|
|||
// 主角技能
|
||||
for (TransformationInfo info : user.getHeroManager().getTransformationList().values()) {
|
||||
// 变身卡英雄属性
|
||||
calPlayerCardToHeroAttribute(heroAllAttribute, info.getCardId(), info.getStar(), info.getLevel(),add);
|
||||
calPlayerCardToHeroAttribute(heroAllAttribute, info.getCardId(), info.getStar(), info.getLevel());
|
||||
}
|
||||
|
||||
// 主角属性加成
|
||||
|
|
@ -3541,15 +3525,11 @@ public class HeroLogic {
|
|||
* @param heroAllAttribute
|
||||
* @param user
|
||||
*/
|
||||
private Map<Integer,Integer> applyPlayerMeridiansAttribute(Map<Integer, Long> heroAllAttribute, User user) {
|
||||
Map<Integer,Integer> prop = new HashMap<>();
|
||||
private void applyPlayerMeridiansAttribute(Map<Integer, Long> heroAllAttribute, User user) {
|
||||
Map<Integer,Integer> map = user.getPlayerInfoManager().getPlayerGodMeridiansLevels();
|
||||
if(map == null || map.size() <=0){
|
||||
return prop;
|
||||
}
|
||||
//获取用户神觉塔层数
|
||||
int towerNum = user.getPlayerInfoManager().getPlayerGodTowerNum();
|
||||
HashMap<Integer, Long> attrMap = new HashMap<>();
|
||||
Map<Integer, Long> attrMap = new HashMap<>();
|
||||
for(int type:map.keySet()){
|
||||
if(!map.containsKey(type)){
|
||||
continue;
|
||||
|
|
@ -3577,19 +3557,16 @@ public class HeroLogic {
|
|||
attrMap.put(ints[0], attrMap.getOrDefault(ints[0], 0L) + ints[1]);
|
||||
}
|
||||
}
|
||||
if (propConfig.getSystemProperty() != null && propConfig.getSystemProperty().length >= 1) {
|
||||
for (int[] ints : propConfig.getSystemProperty()) {
|
||||
prop.put(ints[0], prop.getOrDefault(ints[0], 0) + ints[1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}else{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
// for(int key:attrMap.keySet()){
|
||||
// System.out.println("神觉key---------" + key + "-----value:" + attrMap.get(key));
|
||||
// }
|
||||
combinedAttribute(attrMap, heroAllAttribute);
|
||||
return prop;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -4221,7 +4198,9 @@ public class HeroLogic {
|
|||
totalForce += playerSkill.getFight();
|
||||
}
|
||||
}
|
||||
System.out.println("**************************总战力" + totalForce);
|
||||
//异常战力处理
|
||||
this.dealErrorForce(targetUser,totalForce);
|
||||
// System.out.println("**************************总战力" + totalForce);
|
||||
// LOGGER.info("calTeamTotalForce uid={} teamId={} 总战力={} 耗时={}ms", targetUser.getId(), teamId, totalForce, TimeUtils.now() - now);
|
||||
return totalForce;
|
||||
}
|
||||
|
|
@ -4410,19 +4389,6 @@ public class HeroLogic {
|
|||
combinedAttribute(playerProperty, attrMap);
|
||||
}
|
||||
}
|
||||
|
||||
//主角神觉(成神)的主角技增伤加成
|
||||
int playerGodLevel = playerInfoManager.getPlayerGodLevel();
|
||||
if(playerGodLevel <=0){
|
||||
return;
|
||||
}
|
||||
SBecomeAGodLevel godLevelConfig = SBecomeAGodLevel.map.get(playerGodLevel);
|
||||
if(godLevelConfig != null){
|
||||
int [][] godProp = godLevelConfig.getProperty();
|
||||
if(godProp != null && godProp.length > 0){
|
||||
combinedAttribute(godProp, attrMap);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -4457,7 +4423,7 @@ public class HeroLogic {
|
|||
* @param star
|
||||
* @param level
|
||||
*/
|
||||
public void calPlayerCardToHeroAttribute(Map<Integer, Long> attrMap, int tmpId, int star, int level,Map<Integer,Integer> add) {
|
||||
public void calPlayerCardToHeroAttribute(Map<Integer, Long> attrMap, int tmpId, int star, int level) {
|
||||
try {
|
||||
// 身外化身加成
|
||||
Map<Integer, SChangingCard> changingCardMap = STableManager.getConfig(SChangingCard.class);
|
||||
|
|
@ -4465,43 +4431,19 @@ public class HeroLogic {
|
|||
if (card == null) {
|
||||
return;
|
||||
}
|
||||
int value = 0;
|
||||
if(add!= null && add.size() > 0){
|
||||
if(add.containsKey(PlayerGodAddSystemType.BIAN_SHEN)){
|
||||
value = add.get(PlayerGodAddSystemType.BIAN_SHEN);
|
||||
}
|
||||
}
|
||||
// 变身卡单独提供得属性
|
||||
int[][] cardProp = card.getPropList();
|
||||
if(value > 0){
|
||||
for (int i = 0; i < cardProp.length; i++) {
|
||||
cardProp[i][1] = (int)(cardProp[i][1] * (1 + value / 10000d));
|
||||
}
|
||||
}
|
||||
combinedAttribute(cardProp, attrMap);
|
||||
combinedAttribute(card.getPropList(), attrMap);
|
||||
//变身卡升星属性
|
||||
SChangingCardStar cardStar = SChangingCardStar.getPoolMap().get(card.getStar()).get(star);
|
||||
if (cardStar != null) {
|
||||
int[][] starProp = cardStar.getExp();
|
||||
if(value > 0){
|
||||
for (int i = 0; i < starProp.length; i++) {
|
||||
starProp[i][1] = (int)(starProp[i][1] * (1 + value / 10000d));
|
||||
}
|
||||
}
|
||||
combinedAttribute(starProp, attrMap);
|
||||
combinedAttribute(cardStar.getExp(), attrMap);
|
||||
}
|
||||
//变身卡升级属性
|
||||
Map<Integer, SChangingCardLevel> poolConfig = SChangingCardLevel.getConfigByPoolId(card.getLevelUpPool());
|
||||
if (poolConfig != null) {
|
||||
List<SChangingCardLevel> levelList = poolConfig.values().stream().filter(n -> n.getLevel() == level).collect(Collectors.toList());
|
||||
if (!levelList.isEmpty()) {
|
||||
int[][] levelProp = levelList.get(0).getPropList();
|
||||
if(value > 0){
|
||||
for (int i = 0; i < levelProp.length; i++) {
|
||||
levelProp[i][1] = (int)(levelProp[i][1] * (1 + value / 10000d));
|
||||
}
|
||||
}
|
||||
combinedAttribute(levelProp, attrMap);
|
||||
combinedAttribute(levelList.get(0).getPropList(), attrMap);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
|
|
@ -7611,4 +7553,68 @@ public class HeroLogic {
|
|||
public final static HeroLogic instance = new HeroLogic();
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理神觉塔可能引起的异常战力
|
||||
* @param user
|
||||
* @param force
|
||||
*/
|
||||
public void dealErrorForce(User user,long force){
|
||||
long now = System.currentTimeMillis();
|
||||
PlayerManager playerManager = user.getPlayerInfoManager();
|
||||
long createTime = playerManager.getCreateTime();
|
||||
long have = now - createTime;
|
||||
int haveDay = (int)(have / TimeUtils.ONE_DAY);
|
||||
//30天内战力超5亿,打印神觉属性
|
||||
if(haveDay <= 30 &&force > 500000000){
|
||||
Map<Integer,Long> prop = this.showPlayerMeridiansAttribute(user);
|
||||
LOGGER.error("异常的神觉加成,当前战力---" + force + "------神觉加成---" + prop.toString());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 展示主角神觉加成属性
|
||||
* @param user
|
||||
* @return
|
||||
*/
|
||||
private Map<Integer,Long> showPlayerMeridiansAttribute(User user) {
|
||||
Map<Integer,Integer> map = user.getPlayerInfoManager().getPlayerGodMeridiansLevels();
|
||||
//获取用户神觉塔层数
|
||||
int towerNum = user.getPlayerInfoManager().getPlayerGodTowerNum();
|
||||
Map<Integer, Long> attrMap = new HashMap<>();
|
||||
for(int type:map.keySet()){
|
||||
if(!map.containsKey(type)){
|
||||
continue;
|
||||
}
|
||||
SBecomeAGodSetting config = SBecomeAGodSetting.getConfigBytype(type);
|
||||
if(config == null){
|
||||
continue;
|
||||
}
|
||||
//根据层数获取解锁的属性库
|
||||
int[] floor = config.getFloor();
|
||||
int[] propertyGit = config.getPropertyGit();
|
||||
int num = 0;
|
||||
int level = map.get(type);
|
||||
for(int i = 0;i<floor.length;i++){
|
||||
if(floor[i] <= towerNum){
|
||||
//有解锁的属性库,但是要判断索引是否越界
|
||||
if(i<propertyGit.length){
|
||||
int propertyId = propertyGit[i];
|
||||
SBecomeAGodPropertyGit propConfig = SBecomeAGodPropertyGit.getSBecomeAGodPropertyGitByTypeAndLevel(propertyId,level);
|
||||
if(propConfig == null){
|
||||
continue;
|
||||
}
|
||||
if (propConfig.getProperty() != null) {
|
||||
for (int[] ints : propConfig.getProperty()) {
|
||||
attrMap.put(ints[0], attrMap.getOrDefault(ints[0], 0L) + ints[1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}else{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return attrMap;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue