diff --git a/serverlogic/src/main/java/com/ljsd/jieling/core/GlobalsDef.java b/serverlogic/src/main/java/com/ljsd/jieling/core/GlobalsDef.java index 76188f10c..684e21d89 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/core/GlobalsDef.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/core/GlobalsDef.java @@ -2,6 +2,7 @@ package com.ljsd.jieling.core; public interface GlobalsDef { String DEFAULT_NAME = "无名妖灵师"; + int VERSION_CODE=1;//后端兼容版本号 int MAP_MISSION_RETURN = -9999; int MAP_MISSION_FAILURE = -10000; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/exception/ErrorCode.java b/serverlogic/src/main/java/com/ljsd/jieling/exception/ErrorCode.java index 507f87e39..a9edf6c2c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/exception/ErrorCode.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/exception/ErrorCode.java @@ -175,6 +175,7 @@ public enum ErrorCode implements IErrorCode { SIXIANG_UP_LIMIT(144,"强化已达上限"), CROSS_YXLD_OVER(145,"赛季结算中"), RIDING_SWARD_BET_TWO(146,"一轮比赛最多押注两次!"), + PRACTICE_LEVE_DOWN(147,"修行等级不足"), ; private static final Set CodeSet = new HashSet<>(); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java b/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java index 79e9fa9b6..c6d332636 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java @@ -365,4 +365,5 @@ public interface BIReason { int RIDING_SWARD_BET = 1216;//御剑行押注消耗 int LEVEL_UP_REWARD = 1220;// 玩家升级赠与的道具 + int PRACTICE_SKILL_UP_COST=1221;//修行技能升级消耗 } \ No newline at end of file diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java index 11eefbfe2..162b85ccb 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java @@ -2,6 +2,7 @@ package com.ljsd.jieling.handler; import com.ljsd.GameApplication; import com.ljsd.jieling.config.clazzStaticCfg.HeroStaticConfig; +import com.ljsd.jieling.core.GlobalsDef; import com.ljsd.jieling.db.redis.RedisKey; import com.ljsd.jieling.db.redis.RedisUtil; import com.ljsd.jieling.globals.Global; @@ -158,6 +159,10 @@ public class GetPlayerInfoHandler extends BaseHandler{ }); } + if (playerInfoManager.getVersionCode()!= GlobalsDef.VERSION_CODE) { + calPractiveSkillData(user); + playerInfoManager.setVersionCode(GlobalsDef.VERSION_CODE); + } // 处理玩家旧头像框,兼容,一个玩家只执行一次 PlayerLogic.getInstance().checkOldHeadFrame(user); // 魂印图鉴,旧数据容错 @@ -181,6 +186,7 @@ public class GetPlayerInfoHandler extends BaseHandler{ List sixiangxinfaInfos = getSixiangxinfaInfos(heroManager); int randomCount =SLotterySpecialConfig.getLotteryListByDifferentType(7).iterator().next().getCount()- user.getHeroManager().getRandomPoolByType().getOrDefault(11,new HashMap<>()).getOrDefault(7,0); StoreLogic.reloadStoreInfo(user,7);//重载功能商店 + ListpracticeSkillInfos=getPracticeSkillInfos(heroManager); // 开服时间戳 long openTime = TimeUtils.stringToTimeLong2(GameApplication.serverConfig.getOpenTime()); PlayerInfoProto.GetPlayerInfoResponse getPlayerInfoResponse @@ -229,6 +235,7 @@ public class GetPlayerInfoHandler extends BaseHandler{ .addAllSixiangInfos(sixiangxinfaInfos) .setServerOpenTime((int) (openTime / 1000)) .setXiuweiLevel(heroManager.getXiuweiLevel()) + .addAllPracticeSkillInfos(practiceSkillInfos) .build(); ReportUtil.onReportEvent(user, ReportEventEnum.APP_LOGIN.getType()); try { @@ -252,6 +259,7 @@ public class GetPlayerInfoHandler extends BaseHandler{ } } + ///登录获取四象心法数据 private List getSixiangxinfaInfos(HeroManager heroManager) { Map sixiangDataMap = heroManager.getSixiangDataMap(); List sixiangxinfaInfos = new ArrayList<>(sixiangDataMap.size()); @@ -277,6 +285,18 @@ public class GetPlayerInfoHandler extends BaseHandler{ return sixiangxinfaInfos; } + private List getPracticeSkillInfos(HeroManager heroManager) { + ListpracticeSkillInfos=new ArrayList<>(heroManager.getPracticeSkillMap().size()); + for (Map.Entry entry : heroManager.getPracticeSkillMap().entrySet()) { + CommonProto.PracticeSkillInfo skillInfo=CommonProto.PracticeSkillInfo.newBuilder() + .setSkillId(entry.getKey()) + .setSkillLv(entry.getValue()) + .build(); + practiceSkillInfos.add(skillInfo); + } + return practiceSkillInfos; + } + /** * 初始化英雄星级map(针对老号) * @param user @@ -311,5 +331,16 @@ public class GetPlayerInfoHandler extends BaseHandler{ } } } + //修行技能数据兼容 + private void calPractiveSkillData(User user) { + Map xiuxianConfigMap = STableManager.getConfig(SXiuXian.class); + for (int i = 1; i <= user.getHeroManager().getPracticeLevel(); i++) { + SXiuXian xiuxianConfig = xiuxianConfigMap.get(i); + if (xiuxianConfig.getPlayerSkill() == null) continue; + for (int skillId : xiuxianConfig.getPlayerSkill()) { + user.getHeroManager().setPracticeSkillMap(skillId, 1); + } + } + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/gtw/GetWorldArenaChallengeRequestHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/gtw/GetWorldArenaChallengeRequestHandler.java index a2531b4e8..c460e8f48 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/gtw/GetWorldArenaChallengeRequestHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/gtw/GetWorldArenaChallengeRequestHandler.java @@ -159,9 +159,10 @@ public class GetWorldArenaChallengeRequestHandler extends BaseHandler1000) { ArenaOfUser arenaOfUser = CrossServiceLogic.getInstance().query(proto.getChallengeUid()); - teamInfo = FightUtil.makeCrossPersonData(arenaOfUser,proto.getTeamId()); - arenaEnemys =ArenaLogic.getInstance().getUserCrossArenaEnemy(crossGroup,arenaOfUser,proto.getChallengeRank(),false).build(); defendForce = arenaOfUser.getHeroManager().getTotalForceByTeam().get(proto.getTeamId()); + teamInfo = FightUtil.makeCrossPersonData(arenaOfUser,proto.getTeamId(),defendForce); + arenaEnemys =ArenaLogic.getInstance().getUserCrossArenaEnemy(crossGroup,arenaOfUser,proto.getChallengeRank(),false).build(); + } else { //机器人 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/hero/PracticeSkillUpRequestHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/hero/PracticeSkillUpRequestHandler.java new file mode 100644 index 000000000..56fc69234 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/hero/PracticeSkillUpRequestHandler.java @@ -0,0 +1,58 @@ +package com.ljsd.jieling.handler.hero; + +import com.ljsd.jieling.exception.ErrorCode; +import com.ljsd.jieling.exception.ErrorCodeException; +import com.ljsd.jieling.globals.BIReason; +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.dao.HeroManager; +import com.ljsd.jieling.logic.dao.SixiangProfessionInfo; +import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.util.ItemUtil; +import com.ljsd.jieling.util.MessageUtil; +import config.SFourQuadrantConfig; +import config.SPlayerSkill; +import org.springframework.stereotype.Component; +import rpc.protocols.CommonProto; +import rpc.protocols.HeroInfoProto; +import rpc.protocols.MessageTypeProto; + +import java.util.*; + +@Component +public class PracticeSkillUpRequestHandler extends BaseHandler { + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.PRACTICE_SKILL_UP_REQUEST; + } + + //修行技能升级协议 + @Override + public void processWithProto(ISession session, HeroInfoProto.PracticeSkillUpRequest proto) throws Exception { + int skillId=proto.getSkillId();//修行技能id + int uid = session.getUid(); + User user = UserManager.getUser(uid); + HeroManager heroManager=user.getHeroManager(); + int practiceLv=heroManager.getPracticeLevel(); + int skillLv=0; + if (heroManager.getPracticeSkillMap().containsKey(skillId)){ + skillLv=heroManager.getPracticeSkillMap().get(skillId); + } + int nextSkillLv=skillLv+1; + SPlayerSkill nextPlayerSkill=SPlayerSkill.GetSPlayerSkill(skillId,nextSkillLv); + if (nextPlayerSkill==null||practiceLv practiceSkillMap = new HashMap<>(); /** * 紫府神印 */ @@ -453,6 +458,15 @@ public class HeroManager extends MongoBase { return practiceLevel; } + public Map getPracticeSkillMap() { + return practiceSkillMap; + } + + public void setPracticeSkillMap(int skillId,int skillLv) { + this.practiceSkillMap.put(skillId,skillLv); + updateString("practiceSkillMap."+skillId, skillLv); + } + public void setPracticeLevel(int practiceLevel) { this.practiceLevel = practiceLevel; updateString("practiceLevel", practiceLevel); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java index 95b76399f..0ef4b7158 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java @@ -72,6 +72,8 @@ public class PlayerManager extends MongoBase { private int maxForce; //玩家历史最高战力 + private int versionCode;//兼容版本号 + private Map guidePoints = new HashMap<>(); private Map vipInfo = new HashMap<>(); @@ -1283,13 +1285,21 @@ public class PlayerManager extends MongoBase { this.sevenWorldRelic.put(id,status); updateString("sevenWorldRelic",sevenWorldRelic); } - + public int getRidingSwardNum() { return ridingSwardNum; } public void setRidingSwardNum(int ridingSwardNum) { this.ridingSwardNum = ridingSwardNum; - updateString("ridingSwardNum",ridingSwardNum); + updateString("ridingSwardNum", ridingSwardNum); + } + public int getVersionCode() { + return versionCode; + } + + public void setVersionCode(int versionCode) { + this.versionCode = versionCode; + updateString("versionCode",versionCode); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightUtil.java index a33dca3c5..419a1ea38 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/FightUtil.java @@ -293,6 +293,7 @@ public class FightUtil { newBuilder() .addAllFightUnitList(heroFightInfos) .addAllPokemonUnitList(HeroLogic.getInstance().getPokemonSkills(user)) + .setForceScore(HeroLogic.getInstance().calTeamForce(user,teamId)) .build(); } @@ -339,6 +340,7 @@ public class FightUtil { .addAllPokemonUnitList(HeroLogic.getInstance().getPokemonSkills(user)) .setTeamPassiveList(HeroLogic.getInstance().getPokenmonPassiveSkills(user, teamId)) .setSpecialPassive(SpecialForTeamBuildEnum.toParm(teamId, user)) + .setForceScore(HeroLogic.getInstance().calTeamForce(user,teamId)) .build(); } @@ -405,6 +407,7 @@ public class FightUtil { .addAllPokemonUnitList(HeroLogic.getInstance().getPokemonSkills(user)) .setTeamPassiveList(HeroLogic.getInstance().getPokenmonPassiveSkills(user, teamId)) .setSpecialPassive(SpecialForTeamBuildEnum.toParm(teamId, user)) + .setForceScore(HeroLogic.getInstance().calTeamForce(user,teamId)) .build(); } @@ -444,6 +447,7 @@ public class FightUtil { .addAllPokemonUnitList(HeroLogic.getInstance().getPokemonSkills(user)) .setTeamPassiveList(HeroLogic.getInstance().getPokenmonPassiveSkills(user, teamId)) .setSpecialPassive(SpecialForTeamBuildEnum.toParm(teamId, user)) + .setForceScore(HeroLogic.getInstance().calTeamForce(user,teamId)) .build(); } @@ -486,6 +490,7 @@ public class FightUtil { .addAllFightUnitList(heroFightInfos) .addAllPokemonUnitList(HeroLogic.getInstance().getPokemonSkills(user)) .setTeamPassiveList(HeroLogic.getInstance().getPokenmonPassiveSkills(user, teamId)) + .setForceScore(HeroLogic.getInstance().calTeamForce(user,teamId)) .build(); } @@ -533,6 +538,7 @@ public class FightUtil { .addAllFightUnitList(heroFightInfos) // .addAllPokemonUnitList(HeroLogic.getInstance().getPokemonSkills(user)) .setTeamPassiveList(HeroLogic.getInstance().getRobotPokenmonPassiveSkills(sArenaRobotConfig)) + .setForceScore(sArenaRobotConfig.getTotalForce()) .build(); } @@ -588,6 +594,7 @@ public class FightUtil { .addAllFightUnitList(heroFightInfos) // .addAllPokemonUnitList(HeroLogic.getInstance().getPokemonSkills(user)) .setTeamPassiveList(HeroLogic.getInstance().getRobotPokenmonPassiveSkills(sArenaRobotConfig)) + .setForceScore(sArenaRobotConfig.getTotalForce()) .build(); } @@ -633,7 +640,7 @@ public class FightUtil { return robotInfo; } - public static CommonProto.FightTeamInfo makeCrossPersonData(ArenaOfUser arenaOfUser, int teamId) { + public static CommonProto.FightTeamInfo makeCrossPersonData(ArenaOfUser arenaOfUser, int teamId,long deforce) { List heroFightInfos = new ArrayList<>(); ArenaOfHeroManager heroManager = arenaOfUser.getHeroManager(); List teamPosHeroInfos = heroManager.getTeams().get(teamId); @@ -662,6 +669,7 @@ public class FightUtil { .addAllFightUnitList(heroFightInfos) .addAllPokemonUnitList(HeroLogic.getInstance().getCrossPokemonSkills(arenaOfUser)) .setTeamPassiveList("") + .setForceScore(deforce) .build(); } @@ -704,6 +712,7 @@ public class FightUtil { .addAllFightUnitList(heroFightInfos) .addAllPokemonUnitList(HeroLogic.getInstance().getCrossPokemonSkills(user)) .setTeamPassiveList("") + .setForceScore(HeroLogic.getInstance().calTeamForce(user,teamId)) .build(); } else { //其他服玩家 @@ -741,6 +750,7 @@ public class FightUtil { .addAllFightUnitList(heroFightInfos) .addAllPokemonUnitList(HeroLogic.getInstance().getCrossPokemon(crossArenaManager)) .setTeamPassiveList("") + .setForceScore(addforcerpc) .build(); } } 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 2b47d1f15..87c6e371c 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 @@ -55,6 +55,7 @@ import config.*; import manager.STableManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.data.mongodb.core.aggregation.ArithmeticOperators; import rpc.protocols.*; import sun.security.ssl.Debug; import util.MathUtils; @@ -2380,9 +2381,29 @@ public class HeroLogic{ .setPosition(entry.getKey()) .setStar(pokemon.getStar()) .setProperty(propertyBuilder.toString()) - .setUnitId(String.valueOf(pokemon.getTmpId())).setUnitSkillIds(String.valueOf(sSpiritAnimalSkill.getId())).build(); + .setUnitId(String.valueOf(pokemon.getTmpId())) + .setUnitSkillIds(String.valueOf(sSpiritAnimalSkill.getId())) + .build(); pokemonInfos.add(info); } + String skillStr=""; + for (Map.Entry entry : user.getHeroManager().getPracticeSkillMap().entrySet()) { + int skillId=SPlayerSkill.GetSPlayerSkill(entry.getKey(),entry.getValue()).getId(); + if (skillStr.isEmpty()){ + skillStr+= skillId; + }else{ + skillStr+= "#"+skillId; + } + } + CommonProto.FightUnitInfo skillInfo = CommonProto.FightUnitInfo + .newBuilder() + .setUnitId("0") + .setUnitSkillIds(skillStr) + .setProperty("0") + .setPosition(100) + .setSkinId(0) + .build(); + pokemonInfos.add(skillInfo); return pokemonInfos; } @@ -3123,6 +3144,24 @@ public class HeroLogic{ return l; } + ///获取最高战斗力 + public long calTeamForce(User user,int teamId){ + return user.getPlayerInfoManager().getMaxForce(); + //之前是当前编队战斗力 + /*long teamForce = 0; + List teamHeros = user.getTeamPosManager().getTeamPosForHero().get(teamId); + if (teamHeros==null||teamHeros.isEmpty()) { + return teamForce; + } + for (TeamPosHeroInfo teamHero : teamHeros) { + Hero _hero = user.getHeroManager().getHero(teamHero.getHeroId()); + long heroForce = calHeoForce(user, _hero, teamId); + teamForce += heroForce; + } + LOGGER.info("编队id:{} 战斗力:{}",teamId,teamForce); + return teamForce;*/ + } + public int calForce( Map heroAllAttribute ){ double result = 0; diff --git a/tablemanager/src/main/java/config/SPlayerSkill.java b/tablemanager/src/main/java/config/SPlayerSkill.java new file mode 100644 index 000000000..b1b2b17c6 --- /dev/null +++ b/tablemanager/src/main/java/config/SPlayerSkill.java @@ -0,0 +1,98 @@ +package config; + +import manager.STableManager; +import manager.Table; + +import java.util.HashMap; +import java.util.Map; + +@Table(name ="PlayerSkill") +public class SPlayerSkill implements BaseConfig { + + private int id; + + private int skillID; + + private int xiuxianId; + + private int[]skillIDList; + + private int[]releasePoint; + + private int[][]releaseLimit; + + private int cDCount; + + private int level; + + private int[][] lvupCost; + + private int sort; + + private static Map>mapData; + + public static Map sPrivilegeTypeConfigMap; + + @Override + public void init() throws Exception { + mapData=new HashMap<>(); + sPrivilegeTypeConfigMap= STableManager.getConfig(SPlayerSkill.class); + for (Map.Entry integer : sPrivilegeTypeConfigMap.entrySet()) { + SPlayerSkill skill=integer.getValue(); + if (!mapData.containsKey(skill.getSkillID())){ + MapskillMap=new HashMap<>(); + mapData.put(skill.getSkillID(),skillMap); + } + mapData.get(skill.getSkillID()).put(skill.getLevel(),skill); + } + } + + public int getId() { + return id; + } + + public int getSkillID() { + return skillID; + } + + public int getXiuxianId() { + return xiuxianId; + } + + public int[] getSkillIDList() { + return skillIDList; + } + + public int[] getReleasePoint() { + return releasePoint; + } + + public int[][] getReleaseLimit() { + return releaseLimit; + } + + public int getcDCount() { + return cDCount; + } + + public int getLevel() { + return level; + } + + public int[][] getLvupCost() { + return lvupCost; + } + + public int getSort() { + return sort; + } + + public static SPlayerSkill GetSPlayerSkill(int skillId,int skillLv){ + if (!mapData.containsKey(skillId)||!mapData.get(skillId).containsKey(skillLv))return null; + return mapData.get(skillId).get(skillLv); + } + + public static Map> getMapData() { + return mapData; + } +} \ No newline at end of file