diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SEndlessDifficulty.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SEndlessDifficulty.java index 442e0c396..a44e3e4dd 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/SEndlessDifficulty.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SEndlessDifficulty.java @@ -17,6 +17,8 @@ public class SEndlessDifficulty implements BaseConfig{ private int[] rewardId; + private int[] mapPool; + public static Map difficultyMap; public static Map difficultyMonster; @@ -75,4 +77,8 @@ public class SEndlessDifficulty implements BaseConfig{ public int[] getRewardId() { return rewardId; } + + public int[] getMapPool() { + return mapPool; + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SEndlessMapConfig.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SEndlessMapConfig.java index c7579b862..fec377119 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/config/SEndlessMapConfig.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SEndlessMapConfig.java @@ -25,6 +25,8 @@ public class SEndlessMapConfig implements BaseConfig { private int[][] initializeCount; + private int mapStoreId; + public static Map sEndlessMapConfigMap; public static Map> initRandomPointMap; @@ -75,4 +77,8 @@ public class SEndlessMapConfig implements BaseConfig { public int[][] getInitializeCount() { return initializeCount; } + + public int getMapStoreId() { + return mapStoreId; + } } \ No newline at end of file diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/family/FamilyFightAttackHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/family/FamilyFightAttackHandler.java index bb221cafd..0c602d794 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/family/FamilyFightAttackHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/family/FamilyFightAttackHandler.java @@ -17,6 +17,7 @@ public class FamilyFightAttackHandler extends BaseHandler heroInfo,int teamId){ + public CommonProto.FightTeamInfo fightDataMakeUp(Map heroSkills ,Map heroInfo,String pokmanSkill){ List heroDefendFightInfos = new ArrayList<>(); for (Map.Entry entry : heroInfo.entrySet()) { - Hero hero = user.getHeroManager().getHero(entry.getKey()); - if (hero == null) { - continue; - } - StringBuilder skillSb = new StringBuilder(); StringBuilder propertySb = new StringBuilder(); - String heroSkill = HeroLogic.getInstance().getHeroSkills(user, hero, skillSb).toString(); - String property = HeroLogic.getInstance().getHeroPropertyBuilder(propertySb, hero, entry.getValue().getAttribute()).toString(); + String heroSkill = heroSkills.get(entry.getKey()); + String property = HeroLogic.getInstance().getHeroPropertyBuilder(propertySb, entry.getValue(), entry.getValue().getAttribute()).toString(); CommonProto.FightUnitInfo heroFightInfo = CommonProto.FightUnitInfo .newBuilder() - .setUnitId(Integer.toString(hero.getTemplateId())) + .setUnitId(Integer.toString(entry.getValue().getTempleteId())) .setUnitSkillIds(heroSkill.substring(0, heroSkill.length() - 1)) .setProperty(property.substring(0, property.length() - 1)) .build(); @@ -123,7 +118,7 @@ public class BloodLogic { CommonProto.FightTeamInfo fightDefendTeamInfo = CommonProto.FightTeamInfo. newBuilder() .addAllFightUnitList(heroDefendFightInfos) - .setTeamSkillList(HeroLogic.getInstance().getPokenmonSkills(user, teamId)) + .setTeamSkillList(pokmanSkill) .build(); return fightDefendTeamInfo; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/FamilyFightInfo.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/FamilyFightInfo.java index 0481cdf13..9e3aab23a 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/FamilyFightInfo.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/FamilyFightInfo.java @@ -1,5 +1,6 @@ package com.ljsd.jieling.logic.dao; +import java.util.HashMap; import java.util.Map; public class FamilyFightInfo { @@ -9,6 +10,9 @@ public class FamilyFightInfo { private int buildId; private int starCount; private int force; + private Map heroSkills = new HashMap<>(); + private String pokenmonSkills; + public Map getHeroAttribute() { return heroAttribute; @@ -57,4 +61,23 @@ public class FamilyFightInfo { public void setForce(int force) { this.force = force; } + public void updateHeroSkill(String heroId, String skills){ + heroSkills.put(heroId,skills); + } + + public Map getHeroSkills() { + return heroSkills; + } + + public void setHeroSkills(Map heroSkills) { + this.heroSkills = heroSkills; + } + + public String getPokenmonSkills() { + return pokenmonSkills; + } + + public void setPokenmonSkills(String pokenmonSkills) { + this.pokenmonSkills = pokenmonSkills; + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/FamilyHeroInfo.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/FamilyHeroInfo.java index 1700f1bc4..df26181a5 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/FamilyHeroInfo.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/FamilyHeroInfo.java @@ -1,5 +1,6 @@ package com.ljsd.jieling.logic.dao; +import java.util.HashMap; import java.util.Map; public class FamilyHeroInfo { 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 41f6fa2e3..cabb03705 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 @@ -286,14 +286,13 @@ public class GuildFightLogic { } int familyTotalStar = 0; //血量记录处理,星级记录处理 + for (Map.Entry entry : defendInfo.entrySet()) { User user = UserManager.getUser(entry.getKey()); int memberType = GuildLogic.getMemberType(entry.getKey(), guildInfo.getMembers()); int[] buffInfo = redisUtil.getMapEntry(RedisKey.FAMILY_FIGHT_BUFF, gid.toString(), entry.getValue().toString(), int[].class); FamilyFightInfo fightInfo = new FamilyFightInfo(); //血量处理,buff处理 - - int force = HeroLogic.getInstance().calTeamTotalForce(user, 501, false); if(force==0){ force = HeroLogic.getInstance().calTeamTotalForce(user, 1, false); @@ -303,6 +302,20 @@ public class GuildFightLogic { fightInfo.setBuildId(entry.getValue()); fightInfo.setStarCount(guildSetting.getStarNum()[memberType-1]); fightInfo.setForce(force); + List teamPosHeroInfoList = user.getTeamPosManager().getTeamPosForHero().get(501); + if(teamPosHeroInfoList==null||teamPosHeroInfoList.size()<1){ + teamPosHeroInfoList = user.getTeamPosManager().getTeamPosForHero().get(1); + } + Map heroMap = user.getHeroManager().getHeroMap(); + for(TeamPosHeroInfo teamPosHeroInfo : teamPosHeroInfoList){ + String heroId = teamPosHeroInfo.getHeroId(); + Hero hero = heroMap.get(heroId); + StringBuilder skillSb = new StringBuilder(); + String heroSkill = HeroLogic.getInstance().getHeroSkills(user, hero,skillSb ).toString(); + fightInfo.updateHeroSkill(heroId,heroSkill.substring(0, heroSkill.length() - 1)); + } + String pokenmonSkills = HeroLogic.getInstance().getPokenmonSkills(user, 501); + fightInfo.setPokenmonSkills(pokenmonSkills); redisUtil.putMapEntry(RedisKey.FAMILY_FIGHT, String.valueOf(guildInfo.getId()), String.valueOf(entry.getKey()), fightInfo); familyTotalStar+=fightInfo.getStarCount(); } @@ -366,7 +379,7 @@ public class GuildFightLogic { /** * 战斗之后数据更新 */ - public static void familyFightResult(ISession session, int defendUid, MessageTypeProto.MessageType messageType) throws Exception { + public static void familyFightResult(ISession session, int defendUid,int gid, MessageTypeProto.MessageType messageType) throws Exception { User userAttack = UserManager.getUser(session.getUid()); RedisUtil redisUtil = RedisUtil.getInstence(); //战斗次数 @@ -375,13 +388,10 @@ public class GuildFightLogic { attackCount = 0; } redisUtil.putMapEntry(RedisKey.FAMILY_FIGHT_ATTACK_COUNT,"",String.valueOf(userAttack.getId()),attackCount+1); - User userDefend = UserManager.getUser(defendUid); - int defendGuildId = userDefend.getPlayerInfoManager().getGuildId(); - int defendBuildId = GuilidManager.guildInfoMap.get(defendGuildId).getDefendInfo().get(defendUid); - FamilyFightInfo defendInfo = redisUtil.getMapEntry(RedisKey.FAMILY_FIGHT, String.valueOf(defendGuildId), String.valueOf(userDefend.getId()), FamilyFightInfo.class); + FamilyFightInfo defendInfo = redisUtil.getMapEntry(RedisKey.FAMILY_FIGHT, String.valueOf(gid), String.valueOf(defendUid), FamilyFightInfo.class); Map heroAttribute = defendInfo.getHeroAttribute(); //防守血量处理 - CommonProto.FightTeamInfo fightDefendTeamInfo = BloodLogic.getInstance().fightDataMakeUp(userDefend,heroAttribute,501); + CommonProto.FightTeamInfo fightDefendTeamInfo = BloodLogic.getInstance().fightDataMakeUp(defendInfo.getHeroSkills(),heroAttribute,defendInfo.getPokenmonSkills()); //攻击者血量处理 CommonProto.FightTeamInfo fightAttackTeamInfo = null; List heroAttackFightInfos = new ArrayList<>(); @@ -395,7 +405,7 @@ public class GuildFightLogic { } StringBuilder skillSb = new StringBuilder(); StringBuilder propertySb = new StringBuilder(); - String heroSkill = HeroLogic.getInstance().getHeroSkills(userDefend, hero, skillSb).toString(); + String heroSkill = HeroLogic.getInstance().getHeroSkills(userAttack, hero, skillSb).toString(); Map heroAttributeMap = HeroLogic.getInstance().calHeroNotBufferAttribute(userAttack, hero, false, 502); for(Map.Entry blood:attackBloodMap.entrySet()){ if(teamHero.getHeroId().equals(blood.getKey())){ @@ -461,7 +471,9 @@ public class GuildFightLogic { indexAttack++; } }else{ - int memberType = GuildLogic.getMemberType(defendUid, GuilidManager.guildInfoMap.get(defendGuildId).getMembers()); + PlayerInfoCache player = RedisUtil.getInstence().getMapEntry(RedisKey.PLAYER_INFO_CACHE, "", String.valueOf(defendUid), PlayerInfoCache.class); + + int memberType =player.getGuildPosition(); int maxStar = sGuildSetting.getStarNum()[memberType-1]; int lessStar = maxStar - dieCount*maxStar/5; //倍数k(maxStar/5) @@ -471,10 +483,10 @@ public class GuildFightLogic { redisUtil.putMapEntry(RedisKey.FAMILY_ATTACK_BLOOD,String.valueOf(userAttack.getId()),attack.getHeroId(),100); } } - redisUtil.putMapEntry(RedisKey.FAMILY_FIGHT, String.valueOf(defendGuildId), String.valueOf(userDefend.getId()), defendInfo); + redisUtil.putMapEntry(RedisKey.FAMILY_FIGHT, String.valueOf(gid), String.valueOf(defendUid), defendInfo); //发送indication Family.DefeatResponse fightResponse = Family.DefeatResponse.newBuilder().setUid(defendUid).setTeamLostStar(getStar).build(); - GuildLogic.sendIndicationToMember(GuilidManager.guildInfoMap.get(userDefend.getPlayerInfoManager().getGuildId()), MessageTypeProto.MessageType.FAMILY_DEFEATE_INDICATION,fightResponse); +// GuildLogic.sendIndicationToMember(GuilidManager.guildInfoMap.get(gid), MessageTypeProto.MessageType.FAMILY_DEFEATE_INDICATION,fightResponse); GuildLogic.sendIndicationToMember(GuilidManager.guildInfoMap.get(userAttack.getPlayerInfoManager().getGuildId()), MessageTypeProto.MessageType.FAMILY_DEFEATE_INDICATION,fightResponse); //获得星数处理 int attackGuildId = userAttack.getPlayerInfoManager().getGuildId(); @@ -485,11 +497,11 @@ public class GuildFightLogic { } redisUtil.zsetAddOne(attackRankKey,String.valueOf(userAttack.getId()),starCount+getStar); //建筑星数 - Integer haveGotStar = redisUtil.getMapEntry(RedisKey.FAMILY_FIGHT_CAL_STAR, String.valueOf(attackGuildId), String.valueOf(defendBuildId), int.class); + Integer haveGotStar = redisUtil.getMapEntry(RedisKey.FAMILY_FIGHT_CAL_STAR, String.valueOf(attackGuildId), String.valueOf(defendInfo.getBuildId()), int.class); if(haveGotStar==null){ haveGotStar = 0; } - redisUtil.putMapEntry(RedisKey.FAMILY_FIGHT_CAL_STAR,String.valueOf(attackGuildId),String.valueOf(defendBuildId),haveGotStar+getStar); + redisUtil.putMapEntry(RedisKey.FAMILY_FIGHT_CAL_STAR,String.valueOf(attackGuildId),String.valueOf(defendInfo.getBuildId()),haveGotStar+getStar); Family.FamilyFightAttackResponse response = Family.FamilyFightAttackResponse.newBuilder().setResult(fightResult[0]).setStarCount(getStar).setData(fightData).build(); userAttack.getUserMissionManager().onGameEvent(userAttack, GameEvent.FAMILY_FIGHT_ATTACK); MessageUtil.sendMessage(session, 1, messageType.getNumber(), response, true); @@ -626,6 +638,9 @@ public class GuildFightLogic { redisUtil.removeMapEntrys(RedisKey.FAMILY_FIGHT_BUFF,index,String.valueOf(i)); } GuildInfo guildInfo = GuilidManager.guildInfoMap.get(Integer.parseInt(index)); + if(guildInfo==null){ + continue; + } //删除进攻血量信息 for(Map.Entry> entry:guildInfo.getMembers().entrySet()){ for(Integer attackId:entry.getValue()){ @@ -661,7 +676,7 @@ public class GuildFightLogic { } LOGGER.info("{}公会结算",str); // Map enemyDefendInfo = GuilidManager.guildInfoMap.get(enemyFamily).getDefendInfo(); - Map fightInfo = redisUtil.getMapValues(RedisKey.FAMILY_FIGHT, "", Integer.class, FamilyFightInfo.class); + Map fightInfo = redisUtil.getMapValues(RedisKey.FAMILY_FIGHT, String.valueOf(enemyFamily), Integer.class, FamilyFightInfo.class); for(Map.Entry defend:fightInfo.entrySet()){ if(defend!=null){ buildStar[defend.getValue().getBuildId()-1] = buildStar[defend.getValue().getBuildId()-1]+defend.getValue().getStarCount();