重构主角神觉系统

master_yuenan
DESKTOP-C3M45P4\dengdan 2026-06-08 19:29:45 +08:00
parent 5d19ec5926
commit 5177a3807b
1 changed files with 86 additions and 80 deletions

View File

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