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 1f1b0741c..e417657b9 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 @@ -233,6 +233,7 @@ public class BehaviorUtil { .setUnitId(Integer.toString(hero.getTemplateId())) .setUnitSkillIds(heroSkill.substring(0,heroSkill.length()-1)) .setProperty(property.substring(0, property.length()-1)) + .setPosition(teamPosHeroInfo.getPosition()) .build(); heroFightInfos.add(heroFightInfo); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/TeamPosManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/TeamPosManager.java index 963528c92..c56173c00 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/TeamPosManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/TeamPosManager.java @@ -88,6 +88,8 @@ public class TeamPosManager extends MongoBase { public void setCurTeamPosId(int curTeamPosId) { this.curTeamPosId = curTeamPosId; + //缓存失效 + cachePassskill.remove(curTeamPosId); } public Map> getCacheTeamPro() { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java index 292dc38e6..948ebc5f0 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/CombatLogic.java @@ -738,34 +738,42 @@ public class CombatLogic { public List passiveskillEffect(User user,Hero targetHero,int teamId){ List passiveskillEffect = new ArrayList<>(); - if(teamId == 0){ - List heroSkillList = HeroLogic.getInstance().getHeroSkillList(user, targetHero); - heroSkillList.forEach(skill->{ - SPassiveSkillLogicConfig config = SPassiveSkillLogicConfig.getConfig(skill); - if(config!=null &&config.getEffectiveRange()!=1 && PassiveskillCalEnum.contains(config.getType())){ - passiveskillEffect.add(config.getId()); - } - }); - return passiveskillEffect; - } - List result = user.getTeamPosManager().getCachePassskill().get(teamId); - if(result!=null){ - return result; - } - Map heroMap = user.getHeroManager().getHeroMap(); - List teamPosHeroInfos = user.getTeamPosManager().getTeamPosForHero().get(teamId); + List heroSkillList = HeroLogic.getInstance().getHeroSkillList(user, targetHero); + heroSkillList.forEach(skill->{ + SPassiveSkillLogicConfig config = SPassiveSkillLogicConfig.getConfig(skill); + if(config!=null &&config.getEffectiveRange()!=1 && config.getType()!=94 && PassiveskillCalEnum.contains(config.getType())){ + passiveskillEffect.add(config.getId()); + } + }); + if(teamId!=0){ + List result = user.getTeamPosManager().getCachePassskill().get(teamId); + if(result!=null){ + passiveskillEffect.addAll(result); + return passiveskillEffect; + } + Map heroMap = user.getHeroManager().getHeroMap(); + List teamPosHeroInfos = user.getTeamPosManager().getTeamPosForHero().get(teamId); - for(TeamPosHeroInfo teamPosHeroInfo :teamPosHeroInfos){ - Hero hero = heroMap.get(teamPosHeroInfo.getHeroId()); - List heroSkillList = HeroLogic.getInstance().getHeroSkillList(user, hero); + for(TeamPosHeroInfo teamPosHeroInfo :teamPosHeroInfos){ + Hero hero = heroMap.get(teamPosHeroInfo.getHeroId()); + List heroSkillListTmp = HeroLogic.getInstance().getHeroSkillList(user, hero); + heroSkillListTmp.forEach(skill->{ + SPassiveSkillLogicConfig config = SPassiveSkillLogicConfig.getConfig(skill); + if(config!=null &&config.getEffectiveRange()!=1 && config.getType()==94){ + passiveskillEffect.add(config.getId()); + } + }); + } + user.getTeamPosManager().updatePassSkillTeamPos(teamId,passiveskillEffect); + }else{ heroSkillList.forEach(skill->{ SPassiveSkillLogicConfig config = SPassiveSkillLogicConfig.getConfig(skill); - if(config!=null &&config.getEffectiveRange()!=1 && PassiveskillCalEnum.contains(config.getType())){ + if(config!=null &&config.getEffectiveRange()!=1 && config.getType()==94){ passiveskillEffect.add(config.getId()); } }); } - user.getTeamPosManager().updatePassSkillTeamPos(teamId,passiveskillEffect); + return passiveskillEffect; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/passiveSkillCal/PassiveSkillProcessor.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/passiveSkillCal/PassiveSkillProcessor.java index 84175ee03..5085e073f 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/passiveSkillCal/PassiveSkillProcessor.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/passiveSkillCal/PassiveSkillProcessor.java @@ -6,5 +6,5 @@ import config.SPassiveSkillLogicConfig; import java.util.Map; public interface PassiveSkillProcessor { - void process(SPassiveSkillLogicConfig config, Hero hero, Map sourceMap, Map heroSkillAdMap); + void process(SPassiveSkillLogicConfig config, Hero hero, Map heroSkillAdMap); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/passiveSkillCal/PassiveskillCalEnum.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/passiveSkillCal/PassiveskillCalEnum.java index 9e366ad5f..9a0ce70e1 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/passiveSkillCal/PassiveskillCalEnum.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/fight/passiveSkillCal/PassiveskillCalEnum.java @@ -9,7 +9,7 @@ import java.util.Map; //90 94 171 public enum PassiveskillCalEnum { - SingleAdd(90,(config,hero,sourceMap,heroSkillAdMap)->{ + SingleAdd(90,(config,hero,heroSkillAdMap)->{ float[] value = config.getValue(); int battlePropertyId = (int) value[0]; SPropertyConfig sPropertyConfig = SPropertyConfig.getsPropertyConfigByBattlePID(battlePropertyId); @@ -23,10 +23,10 @@ public enum PassiveskillCalEnum { parm = value[1]*10000; } - int extreeValue = (int) cal(optCode, sourceMap.getOrDefault(sPropertyConfig.getPropertyId(), 0), parm); + int extreeValue = (int) cal(optCode, parm); heroSkillAdMap.put(sPropertyConfig.getPropertyId(),heroSkillAdMap.getOrDefault(sPropertyConfig.getPropertyId(),0)+extreeValue); }), - AllAdd(94,(config,hero,sourceMap,heroSkillAdMap)->{ + AllAdd(94,(config,hero,heroSkillAdMap)->{ float[] value = config.getValue(); int battlePropertyId = (int) value[1]; SPropertyConfig sPropertyConfig = SPropertyConfig.getsPropertyConfigByBattlePID(battlePropertyId); @@ -39,10 +39,10 @@ public enum PassiveskillCalEnum { } parm = value[0]*10000; } - int extreeValue = (int) cal(optCode, sourceMap.getOrDefault(sPropertyConfig.getPropertyId(), 0), parm); + int extreeValue = (int) cal(optCode, parm); heroSkillAdMap.put(sPropertyConfig.getPropertyId(),heroSkillAdMap.getOrDefault(sPropertyConfig.getPropertyId(),0)+extreeValue); }), - HEROAFTER100ADD(171,(config,hero,sourceMap,heroSkillAdMap)->{ + HEROAFTER100ADD(171,(config,hero,heroSkillAdMap)->{ float[] value = config.getValue(); int battlePropertyId = (int) value[0]; SPropertyConfig sPropertyConfig = SPropertyConfig.getsPropertyConfigByBattlePID(battlePropertyId); @@ -87,7 +87,6 @@ public enum PassiveskillCalEnum { /** * @param optCode - * @param source * @param parm * a(当前属性) oa(战斗初始属性)b(增量) * 1 加算 a+b 增益 @@ -95,19 +94,19 @@ public enum PassiveskillCalEnum { * 3 减算 a-b 减益 * 4 乘减算 a*(1-b) 减益 对当前属性其效果,不是基础属性 */ - public static float cal(int optCode,int source,float parm){ + public static float cal(int optCode,float parm){ switch (optCode){ case 1:{ return parm; } case 2:{ - return parm*10000; + return parm; } case 3:{ return -parm; } case 4:{ - return -parm*10000; + return -parm; } } return 0f; 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 be8781135..02dd41285 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 @@ -679,8 +679,6 @@ public class HeroLogic{ HeroInfoProto.UpHeroLevelResponse build = HeroInfoProto.UpHeroLevelResponse.newBuilder().setHeroId(heroId).setTargetLevel(hero.getLevel()).build(); //发送成功消息 MessageUtil.sendMessage(session,1,MessageTypeProto.MessageType.UP_HERO_LEVEL_RESPONSE_VALUE,build,true); - calHeoForce(user,hero); - } /** @@ -1023,21 +1021,39 @@ public class HeroLogic{ int especialEquipId = equipTalismana[1]; Map sEquipTalismana = SEquipTalismana.equipTalismanaStarMap.get(especialEquipId); sEquipTalismana.forEach((k,v)->{ - if(kskillList.add(i)); } }); return skillList; } + public void coverSkill(List heroSkillList){ + Set coverSkillIds = new HashSet<>(); + heroSkillList.forEach(skill->{ + SPassiveSkillLogicConfig config = SPassiveSkillLogicConfig.getConfig(skill); + if(config!=null &&config.getCoverID()!=0){ + coverSkillIds.add(config.getCoverID()); + } + }); + heroSkillList.removeAll(coverSkillIds); + } + public StringBuilder getHeroSkills(User user,Hero hero, StringBuilder sb){ List heroSkillList = getHeroSkillList(user, hero); - heroSkillList.forEach(skill->{ + coverSkill(heroSkillList); + for(int i=0;i> equipTalismanaMap = SEquipTalismana.equipTalismanaStarMap; SEquipTalismana equipTali = equipTalismanaMap.get(equipTempId).get(tempStar); + Arrays.stream(equipTali.getProperty()).forEach(e->{ + System.out.println("----------" + e[0] +"----" +e[1] ); + }); + combinedAttribute(equipTali.getProperty(),heroAllAttribute); } @@ -1343,7 +1363,7 @@ public class HeroLogic{ heroSkillList.forEach(skill->{ SPassiveSkillLogicConfig config = SPassiveSkillLogicConfig.getConfig(skill); if(config.getValue()[2] !=4){ - PassiveskillCalEnum.calEnumMap.get(config.getType()).getPassiveSkillProcessor().process(config,hero,heroAllAttribute,heroSkillAdMap); + PassiveskillCalEnum.calEnumMap.get(config.getType()).getPassiveSkillProcessor().process(config,hero,heroSkillAdMap); } }); @@ -1351,11 +1371,13 @@ public class HeroLogic{ combinedAttribute(heroSkillAdMap,heroAllAttribute); heroSkillAdMap.clear(); } + calInteractAdd(heroAllAttribute); + heroSkillList.forEach(skill->{ SPassiveSkillLogicConfig configTmp = SPassiveSkillLogicConfig.getConfig(skill); if(configTmp.getValue()[2] ==4){ - PassiveskillCalEnum.calEnumMap.get(configTmp.getType()).getPassiveSkillProcessor().process(configTmp,hero,heroAllAttribute,heroSkillAdMap); + PassiveskillCalEnum.calEnumMap.get(configTmp.getType()).getPassiveSkillProcessor().process(configTmp,hero,heroSkillAdMap); } }); if(!heroSkillAdMap.isEmpty()){ @@ -1373,6 +1395,7 @@ public class HeroLogic{ + public Map calRobotHeroAttribute(SCHero scHero,int heroLevel,int heroBrekId,int[] pokemonIds,int pokemonLevel,boolean isForce){ Map heroAllAttribute = calRobotHeroAllAttribute(scHero.getId(),heroLevel,heroBrekId,isForce); heroAllAttribute.put(HeroAttributeEnum.CurHP.getPropertyId(),heroAllAttribute.get(GlobalsDef.HP_TYPE)); @@ -2047,15 +2070,6 @@ public class HeroLogic{ } hero.setIsLock(lockState); MessageUtil.sendMessage(session,1,responseMsgId,null,true); - - Map pokemonAttributeMap = new HashMap<>(); - Map pokemonMap = user.getPokemonManager().getPokemonMap(); - for(Pokemon pokemon : pokemonMap.values()){ - combinePokemonAttribute(pokemonAttributeMap, pokemon,false); - } - for(Map.Entry item : pokemonAttributeMap.entrySet()){ - LOGGER.info("the proId={},the value={}",item.getKey(),item.getValue()); - } } /** @@ -2116,9 +2130,9 @@ public class HeroLogic{ int userLevel = user.getPlayerInfoManager().getLevel(); for(HeroInfoProto.SoulEquipPos item:soulEquipIdsList){ int equipId = item.getEquipId(); - int[] sign_locations = SSpecialConfig.getOnceArrayValue("Sign_Location"); - int position = item.getPosition(); - if(positionsign_locations.length-1 || userLevel < sign_locations[position]){ + int[] sign_locations = SSpecialConfig.getOnceArrayValue(SSpecialConfig.Sign_Location); + int position = item.getPosition()-1; + if(position<0||position>sign_locations.length|| position>sign_locations.length-1 || userLevel < sign_locations[position]){ throw new ErrorCodeException(ErrorCode.SERVER_DEFINE); } SEquipConfig sEquipConfig = STableManager.getConfig(SEquipConfig.class).get(equipId); 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 bb80bf1a7..a790f56d6 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/FightDataUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/FightDataUtil.java @@ -80,6 +80,7 @@ public class FightDataUtil { unitData.set("professionId", sMonster.getProfession()); unitData.set("camp", 1); unitData.set("type", sMonster.getType()); + unitData.set("position", i+1); unitData.set("quality", sMonster.getQuality()); unitData.set("element",sMonster.getPropertyName()); if (unitSkill.length==1){ @@ -249,6 +250,7 @@ public class FightDataUtil { unitData.set("camp", postion); unitData.set("type", 1); unitData.set("quality", 1); + unitData.set("position", data.getPosition()); unitData.set("element", hero.getPropertyName()); unitData.set("skill", getSkill(skillIds[0])); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java index 23beb1c2d..e8c454833 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java @@ -351,7 +351,7 @@ public class ItemUtil { String rewardStr = dropInfo.split("\\|")[0]; String weight = dropInfo.split("\\|")[1]; String[] rewards= rewardStr.split("#"); - String[] weights= rewardStr.split("#"); + String[] weights= weight.split("#"); for (int i = 0; i < rewards.length; i++) { int rewardId = Integer.valueOf(rewards[i]); if (dropAddition.contains(rewardId)) { diff --git a/tablemanager/src/main/java/config/SPassiveSkillLogicConfig.java b/tablemanager/src/main/java/config/SPassiveSkillLogicConfig.java index 02c1b254d..c857f0f81 100644 --- a/tablemanager/src/main/java/config/SPassiveSkillLogicConfig.java +++ b/tablemanager/src/main/java/config/SPassiveSkillLogicConfig.java @@ -56,4 +56,8 @@ public class SPassiveSkillLogicConfig implements BaseConfig { public int getEffectiveRange() { return effectiveRange; } + + public int getCoverID() { + return coverID; + } } \ No newline at end of file