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 6dffecf67..80cb484bf 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 @@ -2795,14 +2795,10 @@ public class HeroLogic { // ... 总属性计算 ... Map heroAllAttribute = calHeroAllAttribute(user, hero, isForce); heroAllAttribute.put(HeroAttributeEnum.CurHP.getPropertyId(), heroAllAttribute.get(GlobalsDef.HP_TYPE)); - - // 主角六道神脉(要先计算并返回对灵兽,神兵,变身卡的属性加成,用于他们的系统计算) - Map systemPropAdd = null; -// Map 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 heroAllAttribute, int teamId, User user,Map add) { + private void applyPokemonAndMagicSoldierAttribute(Map 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 heroAllAttribute, User user,Map add) { + private void applyPlayerAndSkill(Map 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 applyPlayerMeridiansAttribute(Map heroAllAttribute, User user) { - Map prop = new HashMap<>(); + private void applyPlayerMeridiansAttribute(Map heroAllAttribute, User user) { Map map = user.getPlayerInfoManager().getPlayerGodMeridiansLevels(); - if(map == null || map.size() <=0){ - return prop; - } //获取用户神觉塔层数 int towerNum = user.getPlayerInfoManager().getPlayerGodTowerNum(); - HashMap attrMap = new HashMap<>(); + Map 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 attrMap, int tmpId, int star, int level,Map add) { + public void calPlayerCardToHeroAttribute(Map attrMap, int tmpId, int star, int level) { try { // 身外化身加成 Map 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 poolConfig = SChangingCardLevel.getConfigByPoolId(card.getLevelUpPool()); if (poolConfig != null) { List 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 prop = this.showPlayerMeridiansAttribute(user); + LOGGER.error("异常的神觉加成,当前战力---" + force + "------神觉加成---" + prop.toString()); + } + } + + /** + * 展示主角神觉加成属性 + * @param user + * @return + */ + private Map showPlayerMeridiansAttribute(User user) { + Map map = user.getPlayerInfoManager().getPlayerGodMeridiansLevels(); + //获取用户神觉塔层数 + int towerNum = user.getPlayerInfoManager().getPlayerGodTowerNum(); + Map 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