diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/BehaviorUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/BehaviorUtil.java index 3781be6c4..a40b7f103 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/BehaviorUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/behavior/BehaviorUtil.java @@ -247,7 +247,7 @@ public class BehaviorUtil { return CommonProto.FightTeamInfo. newBuilder() .addAllFightUnitList(heroFightInfos) - .setTeamSkillList(HeroLogic.getInstance().getPokenmonSkills(user)) + .addAllPokemonUnitList(HeroLogic.getInstance().getPokemonSkills(user)) .setTeamPassiveList(HeroLogic.getInstance().getPokenmonPassiveSkills(user,teamId)) .build(); } @@ -381,7 +381,10 @@ public class BehaviorUtil { String monsterTeamSkill = MonsterUtil.getMonsterTeamSkillByGroup(groupId); List monsterGroupList = new ArrayList<>(); if (monsterByGroup.size() > mosterNum){ - CommonProto.FightTeamInfo monsterTeamInfo = CommonProto.FightTeamInfo.newBuilder().addAllFightUnitList(monsterByGroup.get(mosterNum)).setTeamSkillList(monsterTeamSkill).build(); + CommonProto.FightTeamInfo monsterTeamInfo = CommonProto.FightTeamInfo.newBuilder() + .addAllFightUnitList(monsterByGroup.get(mosterNum)) +// .setTeamSkillList(monsterTeamSkill) + .build(); monsterGroupList.add(monsterTeamInfo); } return monsterGroupList; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/room/RoomMatchRequestHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/room/RoomMatchRequestHandler.java index 01bc7b110..ddb722f85 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/room/RoomMatchRequestHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/room/RoomMatchRequestHandler.java @@ -120,8 +120,8 @@ public class RoomMatchRequestHandler extends BaseHandler{ String heroSkill = HeroLogic.getInstance().getHeroSkills(mine, hero,skillSb ).toString(); userBloodySnpInfo.updateHeroSkill(heroId,heroSkill.substring(0, heroSkill.length() - 1)); } - String pokenmonSkills = HeroLogic.getInstance().getPokenmonSkills(mine); - userBloodySnpInfo.setPokenmonSkills(pokenmonSkills); +// String pokenmonSkills = HeroLogic.getInstance().getPokenmonSkills(mine); +// userBloodySnpInfo.setPokenmonSkills(pokenmonSkills); Map heroAllAttribute = BloodLogic.getInstance().battleRecord(mine, myteamId,null); userBloodySnpInfo.setHeroAllAttributes(heroAllAttribute); int maxHp = 0; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_role_gm.java b/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_role_gm.java index 6f8773588..6a5468be0 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_role_gm.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_role_gm.java @@ -219,9 +219,9 @@ public class Cmd_role_gm extends GmRoleAbstract { } nodeInfo.setBossHP(bossHP); - if (self.getPokemonManager().getPokemonMap().size()!=0) { + if (self.getPokemonManager().getPokemonTeamMap().size()!=0) { //玩家未激活异妖(神器)时,敌人阵容中不会出现异妖;激活异妖后,由敌人数据来源方决定战斗时是否有敌方异妖。 - String pokenmonSkills = HeroLogic.getInstance().getPokenmonSkills(user); +// String pokenmonSkills = HeroLogic.getInstance().getPokenmonSkills(user); String pokenmonPassiveSkills = HeroLogic.getInstance().getPokenmonPassiveSkills(user, snapTeamId); // List teamPosForPokenInfos = user.getTeamPosManager().getTeamPosForPoken().get(snapTeamId); // if (null!=teamPosForPokenInfos) { @@ -231,7 +231,7 @@ public class Cmd_role_gm extends GmRoleAbstract { // } // fightInfo.setPokenmonIds(pokens); // } - fightInfo.setPokenmonSkills(pokenmonSkills); +// fightInfo.setPokenmonSkills(pokenmonSkills); fightInfo.setPassiveSkills(pokenmonPassiveSkills); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/blood/BloodLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/blood/BloodLogic.java index 23682a765..9e8295755 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/blood/BloodLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/blood/BloodLogic.java @@ -126,7 +126,7 @@ public class BloodLogic { return CommonProto.FightTeamInfo. newBuilder() .addAllFightUnitList(heroDefendFightInfos) - .setTeamSkillList(pokmanSkill) +// .addAllPokemonUnitList(HeroLogic.getInstance().getPokemonSkills(user)) .setTeamPassiveList(passiveSkill) .build(); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/championship/ChampionshipLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/championship/ChampionshipLogic.java index f79282801..071a80030 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/championship/ChampionshipLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/championship/ChampionshipLogic.java @@ -690,8 +690,8 @@ public class ChampionshipLogic { String heroSkill = HeroLogic.getInstance().getHeroSkills(user, hero, skillSb).toString(); fightInfo.updateHeroSkill(heroId, heroSkill.substring(0, heroSkill.length() - 1)); } - String pokenmonSkills = HeroLogic.getInstance().getPokenmonSkills(user); - fightInfo.setPokenmonSkills(pokenmonSkills); +// String pokenmonSkills = HeroLogic.getInstance().getPokenmonSkills(user); +// fightInfo.setPokenmonSkills(pokenmonSkills); String pokenmonPassiveSkills = HeroLogic.getInstance().getPokenmonPassiveSkills(user, snapTeamId); fightInfo.setPassiveSkills(pokenmonPassiveSkills); memberInfo.setFightInfo(fightInfo); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/expedition/ExpeditionLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/expedition/ExpeditionLogic.java index 026f90304..79d641a41 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/expedition/ExpeditionLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/expedition/ExpeditionLogic.java @@ -586,9 +586,9 @@ public class ExpeditionLogic { if (self.getPokemonManager().getPokemonMap().size()!=0) { //玩家未激活异妖(神器)时,敌人阵容中不会出现异妖;激活异妖后,由敌人数据来源方决定战斗时是否有敌方异妖。 - String pokenmonSkills = HeroLogic.getInstance().getPokenmonSkills(user); +// String pokenmonSkills = HeroLogic.getInstance().getPokenmonSkills(user); String pokenmonPassiveSkills = HeroLogic.getInstance().getPokenmonPassiveSkills(user, snapTeamId); - fightInfo.setPokenmonSkills(pokenmonSkills); +// fightInfo.setPokenmonSkills(pokenmonSkills); fightInfo.setPassiveSkills(pokenmonPassiveSkills); } @@ -1042,7 +1042,7 @@ public class ExpeditionLogic { return CommonProto.FightTeamInfo. newBuilder() .addAllFightUnitList(heroFightInfos) - .setTeamSkillList(HeroLogic.getInstance().getPokenmonSkills(user)) + .addAllPokemonUnitList(HeroLogic.getInstance().getPokemonSkills(user)) .setTeamPassiveList(pokenmonPassiveSkills) .setSpecialPassive(SpecialForTeamBuildEnum.toParm(teamId,user)) .build(); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildFightLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildFightLogic.java index dd609cb79..e3125489a 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildFightLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildFightLogic.java @@ -352,8 +352,8 @@ public class GuildFightLogic { String heroSkill = HeroLogic.getInstance().getHeroSkills(user, hero,skillSb ).toString(); fightInfo.updateHeroSkill(heroId,heroSkill.substring(0, heroSkill.length() - 1)); } - String pokenmonSkills = HeroLogic.getInstance().getPokenmonSkills(user); - fightInfo.setPokenmonSkills(pokenmonSkills); +// String pokenmonSkills = HeroLogic.getInstance().getPokenmonSkills(user); +// fightInfo.setPokenmonSkills(pokenmonSkills); String pokenmonPassiveSkills = HeroLogic.getInstance().getPokenmonPassiveSkills(user, 501); fightInfo.setPassiveSkills(pokenmonPassiveSkills); redisUtil.putMapEntry(RedisKey.FAMILY_FIGHT, String.valueOf(guildInfo.getId()), String.valueOf(entry.getKey()), fightInfo); 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 ef4ec5f17..ed643dcd1 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 @@ -297,7 +297,7 @@ public class FightUtil { return CommonProto.FightTeamInfo. newBuilder() .addAllFightUnitList(heroFightInfos) - .setTeamSkillList(HeroLogic.getInstance().getPokenmonSkills(user)) + .addAllPokemonUnitList(HeroLogic.getInstance().getPokemonSkills(user)) .setTeamPassiveList(HeroLogic.getInstance().getPokenmonPassiveSkills(user,teamId)) .setSpecialPassive(SpecialForTeamBuildEnum.toParm(teamId,user)) .build(); @@ -334,7 +334,7 @@ public class FightUtil { return CommonProto.FightTeamInfo. newBuilder() .addAllFightUnitList(heroFightInfos) - .setTeamSkillList(HeroLogic.getInstance().getPokenmonSkills(user)) + .addAllPokemonUnitList(HeroLogic.getInstance().getPokemonSkills(user)) .setTeamPassiveList(HeroLogic.getInstance().getPokenmonPassiveSkills(user,teamId)) .setSpecialPassive(SpecialForTeamBuildEnum.toParm(teamId,user)) .build(); @@ -376,7 +376,7 @@ public class FightUtil { return CommonProto.FightTeamInfo. newBuilder() .addAllFightUnitList(heroFightInfos) - .setTeamSkillList(HeroLogic.getInstance().getPokenmonSkills(user)) + .addAllPokemonUnitList(HeroLogic.getInstance().getPokemonSkills(user)) .setTeamPassiveList(HeroLogic.getInstance().getPokenmonPassiveSkills(user,teamId)) .build(); } @@ -422,7 +422,7 @@ public class FightUtil { return CommonProto.FightTeamInfo. newBuilder() .addAllFightUnitList(heroFightInfos) - .setTeamSkillList(HeroLogic.getInstance().getRobotPokenmonSkills(sArenaRobotConfig)) +// .addAllPokemonUnitList(HeroLogic.getInstance().getPokemonSkills(user)) .setTeamPassiveList(HeroLogic.getInstance().getRobotPokenmonPassiveSkills(sArenaRobotConfig)) .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 ffe0aa12f..b27172260 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 @@ -64,6 +64,8 @@ public class HeroLogic{ public static List transTemplate = new ArrayList<>(); public static List equipSkillPositionTemaplge = new ArrayList<>(6); private static Map> transTemplateByHeroPropertyName = new HashMap<>(); + + private static List pokemonTemplate = new ArrayList<>(); static { transTemplate.add(HeroAttributeEnum.CurHP.getPropertyId()); // 生命 transTemplate.add(HeroAttributeEnum.Hp.getPropertyId()); // 最大生命 @@ -117,6 +119,22 @@ public class HeroLogic{ equipSkillPositionTemaplge.add(4); equipSkillPositionTemaplge.add(5); equipSkillPositionTemaplge.add(6); + + pokemonTemplate.add(HeroAttributeEnum.CurHP.getPropertyId()); // 生命 + pokemonTemplate.add(HeroAttributeEnum.Hp.getPropertyId()); // 最大生命 + pokemonTemplate.add(HeroAttributeEnum.Attack.getPropertyId()); // 攻击力 + pokemonTemplate.add(HeroAttributeEnum.PhysicalDefence.getPropertyId());// 护甲 + pokemonTemplate.add(HeroAttributeEnum.MagicDefence.getPropertyId()); // 魔抗 + pokemonTemplate.add(HeroAttributeEnum.Speed.getPropertyId()); // 速度 + pokemonTemplate.add(HeroAttributeEnum.DamageBocusFactor.getPropertyId()); // 伤害加成系数 + pokemonTemplate.add(HeroAttributeEnum.DamageReduceFactor.getPropertyId()); // 伤害减免系数 + pokemonTemplate.add(HeroAttributeEnum.Hit.getPropertyId()); // 命中率 + pokemonTemplate.add(HeroAttributeEnum.Dodge.getPropertyId()); // 闪避率 + pokemonTemplate.add(HeroAttributeEnum.CritFactor.getPropertyId()); // 暴击率 + pokemonTemplate.add(HeroAttributeEnum.CritDamageFactor.getPropertyId()); // 暴击伤害系数 + pokemonTemplate.add(HeroAttributeEnum.AntiCritDamageFactor.getPropertyId()); // 抗暴率 + pokemonTemplate.add(HeroAttributeEnum.TreatFacter.getPropertyId()); // 治疗加成系数 + pokemonTemplate.add(HeroAttributeEnum.CureFacter.getPropertyId()); // 受治疗 } private static final String VERTICAL = "|"; private static final String DIVISION = "#"; @@ -1320,25 +1338,40 @@ public class HeroLogic{ return sb; } - public String getPokenmonSkills(User user){ - StringBuilder pokenSkillResult = new StringBuilder(); + public List getPokemonSkills(User user){ //todo 灵兽 Map pokemonTeamMap = user.getPokemonManager().getPokemonTeamMap(); - int[] blockUnlockLevel = SSpiritAnimalSetting.sSpiritAnimalSetting.getBlockUnlockLevel(); PokemonManager pokemonManager = user.getPokemonManager(); - for(int i = 0;i pokemonInfos = new ArrayList<>(); + for(Map.Entry entry:pokemonTeamMap.entrySet()){ + Pokemon pokemon = pokemonManager.getPokemonMap().get(entry.getValue()); + + if(pokemon==null){ + continue; } + SSpiritAnimalSkill sSpiritAnimalSkill = SSpiritAnimalSkill.skillByAnimalAndStar.get(pokemon.getTmpId()).get(pokemon.getStar()); + Map map = calOnePokemonAttribute(pokemonManager, entry.getValue()); + StringBuilder propertyBuilder = getOnePokemonProperty(map,pokemon.getLevel()); + CommonProto.FightUnitInfo info = CommonProto.FightUnitInfo.newBuilder() + .setPosition(entry.getKey()) + .setStar(pokemon.getStar()) + .setProperty(propertyBuilder.toString()) + .setUnitId(String.valueOf(pokemon.getTmpId())).setUnitSkillIds(String.valueOf(sSpiritAnimalSkill.getId())).build(); + pokemonInfos.add(info); } - return pokenSkillResult.toString(); + return pokemonInfos; } public String getPokenmonPassiveSkills(User user,int teamId){ @@ -1402,9 +1435,8 @@ public class HeroLogic{ PokemonManager pokemonManager = user.getPokemonManager(); SCHero scHero = SCHero.getsCHero().get(hero.getTemplateId()); - int profession = scHero.getProfession(); int heroNum = user.getTeamPosManager().getTeamPosForHero().get(teamId).size(); - int[][] pokemonAttr = calPokenmonAttribute(pokemonManager); + int[][] pokemonAttr = calPokemonAttribute(pokemonManager); for(int i = 0 ; i pokemonAttributeMap = new HashMap<>(); Map pokemonTeamMap = pokemonManager.getPokemonTeamMap(); for(Map.Entry entry:pokemonTeamMap.entrySet()){ @@ -2256,6 +2288,60 @@ public class HeroLogic{ return resultArray; } + /** + * 计算一个灵兽的属性 + * @param pokemonManager + * @return + */ + private Map calOnePokemonAttribute(PokemonManager pokemonManager,String pokemonId){ + Map pokemonAttributeMap = new HashMap<>(); + Pokemon pokemon = pokemonManager.getPokemonMap().get(pokemonId); + Map oneAttrMap = new HashMap<>(); + SSpiritAnimal animal = STableManager.getConfig(SSpiritAnimal.class).get(pokemon.getTmpId()); + oneAttrMap.put(GlobalsDef.HP_TYPE,(int)animal.getHp()); + oneAttrMap.put(GlobalsDef.ATTACK_TYPE,(int)animal.getAttack()); + + oneAttrMap.put(GlobalsDef.PHYSICAL_DEFENCE_TYPE,(int)animal.getPhysicalDefence()); + + oneAttrMap.put(GlobalsDef.MAGIC_DEFENCE_TYPE,(int)animal.getMagicDefence()); + //等级增量 + SSpiritAnimalLevel levelConfig = SSpiritAnimalLevel.configByQualityAndLevel.get(animal.getQuality()).get(pokemon.getLevel()); + int[][] characterLevelPara = levelConfig.getCharacterLevelPara(); + for(int[] para:characterLevelPara){ + oneAttrMap.put(para[0],oneAttrMap.getOrDefault(para[0],0)+para[1]); + } + //星级增量 + SSpiritAnimalStar starConfig = SSpiritAnimalStar.configByQualityAndStar.get(animal.getQuality()).get(pokemon.getStar()); + int starPara = starConfig.getStarPara(); + for(int key:oneAttrMap.keySet()){ + pokemonAttributeMap.put(key,pokemonAttributeMap.getOrDefault(key,0)+(int)(oneAttrMap.getOrDefault(key,0)*(1+starPara/10000d))); + } + return pokemonAttributeMap; + } + + /** + * 获取一个灵兽的属性字符串 + * @param propertyMap + * @param level + * @return + */ + private StringBuilder getOnePokemonProperty(Map propertyMap,int level){ + StringBuilder builder = new StringBuilder(); + builder.append(level); + for(int propId:pokemonTemplate){ + builder.append("#"); +// Hit(53), +// CureFacter(57), +// TreatFacter(58), 这三个默认要给前端传1 + if(propId==HeroAttributeEnum.Hit.getPropertyId()||propId==HeroAttributeEnum.CureFacter.getPropertyId()||propId==HeroAttributeEnum.TreatFacter.getPropertyId()){ + builder.append(propertyMap.getOrDefault(propId,1)); + }else{ + builder.append(propertyMap.getOrDefault(propId,0)); + } + } + return builder; + } + //todo 灵兽 public int calAllPokenmonForce(User user){ // Map pokemonAttributeMap = new HashMap<>(); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/FightDataUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/util/FightDataUtil.java index 8d6b652db..8a19fed89 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/FightDataUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/FightDataUtil.java @@ -113,7 +113,8 @@ public class FightDataUtil { enemyData.rawset(i+1, unitData); } - enemyData.set("monsterList", getTeamSkill(data.getTeamSkillList().trim(),1)); + //todo 灵兽技能 + enemyData.set("monsterList", getPokemonSkill(data.getPokemonUnitListList(),1)); enemyData.set("teamPassive", new LuaTable()); return enemyData; @@ -193,7 +194,8 @@ public class FightDataUtil { playerData.set("teamSkill",""); playerData.set("teamPassive", getTeamPassive(heroTeam.getTeamPassiveList())); playerData.set("outData",heroTeam.getSpecialPassive()); - playerData.set("monsterList", getTeamSkill(heroTeam.getTeamSkillList(),0)); + //todo 灵兽技能 + playerData.set("monsterList", getPokemonSkill(heroTeam.getPokemonUnitListList(),0)); playerData.set("firstCamp",first?1:0); return playerData; } @@ -236,23 +238,22 @@ public class FightDataUtil { } //组装灵兽技能数据 camp=0 自己 1 对方 - private static LuaValue getTeamSkill(String pokemonSkill,int camp) { + private static LuaValue getPokemonSkill(List pokemonUnitList, int camp) { LuaValue teamSkill = new LuaTable(); - if (StringUtil.isEmpty(pokemonSkill)){ + if (pokemonUnitList.isEmpty()){ return teamSkill; } - String[] skills = pokemonSkill.trim().split("#"); - for (int i = 0; i < skills.length; i++) { - String skillAndPos = skills[i]; - if(skillAndPos.equals("0")){ + for (int i = 0; i < pokemonUnitList.size(); i++) { + String skillId = pokemonUnitList.get(i).getUnitSkillIds(); + if(skillId.equals("0")){ continue; } - SSpiritAnimalSkill sSpiritAnimalSkill = STableManager.getConfig(SSpiritAnimalSkill.class).get(Integer.valueOf(skillAndPos)); + SSpiritAnimalSkill sSpiritAnimalSkill = STableManager.getConfig(SSpiritAnimalSkill.class).get(Integer.valueOf(skillId)); LuaValue monster = new LuaTable(); monster.set("id",sSpiritAnimalSkill.getSpiritAnimalMatch()); monster.set("star",sSpiritAnimalSkill.getStarMatch()); monster.set("camp",camp); - monster.set("position",i+1); + monster.set("position",pokemonUnitList.get(i).getPosition()); LuaValue skill= new LuaTable(); int[] skillIDList = sSpiritAnimalSkill.getSkillIDList(); for(int j = 0 ; j 0){ // teamSkill.rawset(i + 1, getSkill(skillAndPosItem[1],skillAndPosItem[0]));