diff --git a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java index 3f28406a0..c4e942e75 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java @@ -116,6 +116,8 @@ public class RedisKey { public static final String FAMILY_FIGHT = "FAMILY_FIGHT" ; public static final String FAMILY_FIGHT_RANK = "FAMILY_FIGHT_RANK"; public static final String FAMILY_FIGHT_MATCHING_RANK ="FAMILY_FIGHT_MATCHING_RANK"; + //公会战进攻获得星数排行榜 + public static final String FAMILY_FIGHT_STAR_RANK = "FAMILY_FIGHT_STAR_RANK"; public static final String OPERATE_FAMILY = "OPERATE_FAMILY"; public static final String OPERATE_FAMILY_APPLY = "OPERATE_FAMILY_APPLY"; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/family/FamilyDefendDetailInfoHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/family/FamilyDefendDetailInfoHandler.java index 13d8168fd..400875517 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/family/FamilyDefendDetailInfoHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/family/FamilyDefendDetailInfoHandler.java @@ -1,7 +1,7 @@ package com.ljsd.jieling.handler.family; import com.ljsd.jieling.handler.BaseHandler; -import com.ljsd.jieling.logic.family.GuildLogic; +import com.ljsd.jieling.logic.family.GuildFightLogic; import com.ljsd.jieling.netty.cocdex.PacketNetData; import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.protocols.Family; @@ -20,6 +20,6 @@ public class FamilyDefendDetailInfoHandler extends BaseHandler { byte[] bytes = netData.parseClientProtoNetData(); Family.FamilyDefendDetailViewRequest request = Family.FamilyDefendDetailViewRequest.parseFrom(bytes); - GuildLogic.viewDefendDetailInfo(iSession,request.getPlayerId(), MessageTypeProto.MessageType.FAMILY_VIEW_DEFEND_DETAIL_RESPONSE); + GuildFightLogic.viewDefendDetailInfo(iSession,request.getPlayerId(), MessageTypeProto.MessageType.FAMILY_VIEW_DEFEND_DETAIL_RESPONSE); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/family/FamilyDefendInfoHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/family/FamilyDefendInfoHandler.java index cbee9021e..ad2757f07 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/family/FamilyDefendInfoHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/family/FamilyDefendInfoHandler.java @@ -1,10 +1,9 @@ package com.ljsd.jieling.handler.family; import com.ljsd.jieling.handler.BaseHandler; -import com.ljsd.jieling.logic.family.GuildLogic; +import com.ljsd.jieling.logic.family.GuildFightLogic; import com.ljsd.jieling.netty.cocdex.PacketNetData; import com.ljsd.jieling.network.session.ISession; -import com.ljsd.jieling.protocols.Family; import com.ljsd.jieling.protocols.MessageTypeProto; import org.springframework.stereotype.Component; @@ -18,6 +17,6 @@ public class FamilyDefendInfoHandler extends BaseHandler { @Override public void process(ISession iSession, PacketNetData netData) throws Exception { - GuildLogic.viewDefendInfo(iSession,MessageTypeProto.MessageType.FAMILY_VIEW_DEFEND_RESPONSE); + GuildFightLogic.viewDefendInfo(iSession,MessageTypeProto.MessageType.FAMILY_VIEW_DEFEND_RESPONSE); } } 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 new file mode 100644 index 000000000..bb221cafd --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/family/FamilyFightAttackHandler.java @@ -0,0 +1,22 @@ +package com.ljsd.jieling.handler.family; + +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.family.GuildFightLogic; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.protocols.Family; +import com.ljsd.jieling.protocols.MessageTypeProto; +import org.springframework.stereotype.Component; + +@Component +public class FamilyFightAttackHandler extends BaseHandler { + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.FAMILY_FIGHT_ATTACK_REQUEST; + } + + @Override + public void processWithProto(ISession iSession, Family.FamilyFightAttackRequest proto) throws Exception { + int attackUid = proto.getAttackUid(); + GuildFightLogic.familyFightResult(iSession,attackUid, MessageTypeProto.MessageType.FAMILY_FIGHT_ATTACK_RESPONSE); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/family/FamilyFightInfoHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/family/FamilyFightInfoHandler.java index 90ba47b6a..91ca2585c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/family/FamilyFightInfoHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/family/FamilyFightInfoHandler.java @@ -1,7 +1,7 @@ package com.ljsd.jieling.handler.family; import com.ljsd.jieling.handler.BaseHandler; -import com.ljsd.jieling.logic.family.GuildLogic; +import com.ljsd.jieling.logic.family.GuildFightLogic; import com.ljsd.jieling.netty.cocdex.PacketNetData; import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.protocols.MessageTypeProto; @@ -16,6 +16,6 @@ public class FamilyFightInfoHandler extends BaseHandler { @Override public void process(ISession iSession, PacketNetData netData) throws Exception { - GuildLogic.viewFightInfo(iSession, MessageTypeProto.MessageType.FAMILY_FIGHT_INFO_RESPONSE); + GuildFightLogic.viewFightInfo(iSession, MessageTypeProto.MessageType.FAMILY_FIGHT_INFO_RESPONSE); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/family/FamilyPersonalResultHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/family/FamilyPersonalResultHandler.java new file mode 100644 index 000000000..ab80a395d --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/family/FamilyPersonalResultHandler.java @@ -0,0 +1,21 @@ +package com.ljsd.jieling.handler.family; + +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.family.GuildFightLogic; +import com.ljsd.jieling.netty.cocdex.PacketNetData; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.protocols.MessageTypeProto; +import org.springframework.stereotype.Component; + +@Component +public class FamilyPersonalResultHandler extends BaseHandler { + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.FAMILY_PERSONAL_FIGHT_RESULT_REQUEST; + } + @Override + public void process(ISession iSession, PacketNetData netData) throws Exception { + GuildFightLogic.personalFightResult(iSession,MessageTypeProto.MessageType.FAMILY_PERSONAL_FIGHT_RESULT_RESPONSE); + } + +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/family/FamilyQuickSetDefendHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/family/FamilyQuickSetDefendHandler.java index 81f62d212..fc0f07203 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/family/FamilyQuickSetDefendHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/family/FamilyQuickSetDefendHandler.java @@ -1,7 +1,7 @@ package com.ljsd.jieling.handler.family; import com.ljsd.jieling.handler.BaseHandler; -import com.ljsd.jieling.logic.family.GuildLogic; +import com.ljsd.jieling.logic.family.GuildFightLogic; import com.ljsd.jieling.netty.cocdex.PacketNetData; import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.protocols.Family; @@ -20,6 +20,6 @@ public class FamilyQuickSetDefendHandler extends BaseHandler { byte[] bytes = netData.parseClientProtoNetData(); Family.FamilyQuickDefendRequest request = Family.FamilyQuickDefendRequest.parseFrom(bytes); - GuildLogic.quickSetDefend(iSession,request.getBuildId(),request.getUid(), MessageTypeProto.MessageType.FAMILY_QUICK_SET_DEFEND_RESPONSE); + GuildFightLogic.quickSetDefend(iSession,request.getBuildId(),request.getUid(), MessageTypeProto.MessageType.FAMILY_QUICK_SET_DEFEND_RESPONSE); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/family/FamilyRound.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/family/FamilyRound.java new file mode 100644 index 000000000..698dc4901 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/family/FamilyRound.java @@ -0,0 +1,14 @@ +package com.ljsd.jieling.handler.family; + +public class FamilyRound { + + public static final int FAMILY_FIGHT_START = 9; + + public static final int FAMILY_FIGHT_DEFEND_END = 10; + + public static final int FAMILY_FIGHT_MATCHING_END =11; + + public static final int FAMILY_FIGHT_ATTACK_END = 12; + + public static final int FAMILY_FIGHT_END = 13; +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/family/FamilyRoundInfoHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/family/FamilyRoundInfoHandler.java new file mode 100644 index 000000000..d13a6d7cb --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/family/FamilyRoundInfoHandler.java @@ -0,0 +1,21 @@ +package com.ljsd.jieling.handler.family; + +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.family.GuildFightLogic; +import com.ljsd.jieling.netty.cocdex.PacketNetData; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.protocols.MessageTypeProto; +import org.springframework.stereotype.Component; + +@Component +public class FamilyRoundInfoHandler extends BaseHandler { + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.FAMILY_FIGHT_ROUND_INFO_REQUEST; + } + + @Override + public void process(ISession iSession, PacketNetData netData) throws Exception { + GuildFightLogic.getFamilyFightRoundInfo(iSession, MessageTypeProto.MessageType.FAMILY_FIGHT_ROUND_INFO_RESPONSE); + } +} 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 new file mode 100644 index 000000000..485666759 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildFightLogic.java @@ -0,0 +1,475 @@ +package com.ljsd.jieling.logic.family; + +import com.ljsd.jieling.config.SGuildSetting; +import com.ljsd.jieling.db.redis.RedisKey; +import com.ljsd.jieling.db.redis.RedisUtil; +import com.ljsd.jieling.handler.family.FamilyRound; +import com.ljsd.jieling.handler.map.behavior.BehaviorUtil; +import com.ljsd.jieling.logic.dao.*; +import com.ljsd.jieling.logic.dao.root.GuildInfo; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.fight.CheckFight; +import com.ljsd.jieling.logic.hero.HeroAttributeEnum; +import com.ljsd.jieling.logic.hero.HeroLogic; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.protocols.CommonProto; +import com.ljsd.jieling.protocols.Family; +import com.ljsd.jieling.protocols.MessageTypeProto; +import com.ljsd.jieling.util.FightDataUtil; +import com.ljsd.jieling.util.MathUtils; +import com.ljsd.jieling.util.MessageUtil; +import com.ljsd.jieling.util.TimeUtils; +import org.luaj.vm2.LuaValue; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.redis.core.ZSetOperations; + +import java.util.*; + +public class GuildFightLogic { + private static final Logger LOGGER = LoggerFactory.getLogger(GuildFightLogic.class); + /** + * 公会战状态 + */ + private static int status; + private static boolean startMatching; + + /** + * 查看工会布防信息 + * + * @param session + * @param messageType + * @throws Exception + */ + public static void viewDefendInfo(ISession session, MessageTypeProto.MessageType messageType) throws Exception { + User user = UserManager.getUser(session.getUid()); + int gid = user.getPlayerInfoManager().getGuildId(); + GuildInfo guildInfo = GuilidManager.guildInfoMap.get(gid); + Map defendInfo = guildInfo.getDefendInfo(); + Family.FamilyDefendViewResponse.Builder response = Family.FamilyDefendViewResponse.newBuilder(); + for (Map.Entry entry : defendInfo.entrySet()) { + Family.FamilyDefendInfo.Builder defend = Family.FamilyDefendInfo.newBuilder(); + defend.setStarCount(5); + defend.setUid(entry.getKey()); + defend.setBuildId(entry.getValue()); + defend.setCurForce(HeroLogic.getInstance().calTeamTotalForce(UserManager.getUser(entry.getKey()), 501, false)); + response.addInfo(defend); + } + MessageUtil.sendMessage(session, 1, messageType.getNumber(), response.build(), true); + + } + + /** + * 查看公会具体布防信息 + * + * @param session + * @param uid + * @param messageType + * @throws Exception + */ + public static void viewDefendDetailInfo(ISession session, int uid, MessageTypeProto.MessageType messageType) throws Exception { + User user = UserManager.getUser(uid); + int guildId = user.getPlayerInfoManager().getGuildId(); + FamilyFightInfo fightInfo = RedisUtil.getInstence().getMapEntry(RedisKey.FAMILY_FIGHT, String.valueOf(guildId), String.valueOf(uid), FamilyFightInfo.class); + TeamPosManager teamPosManager = user.getTeamPosManager(); + CommonProto.Team.Builder team = CommonProto.Team.newBuilder(); + CommonProto.TeamOneTeamInfo.Builder oneInfo = CommonProto.TeamOneTeamInfo.newBuilder(); + for(Map.Entry entry:fightInfo.getHeroAttribute().entrySet()){ + int templateId = entry.getValue().getTempleteId(); + team.addHeroTid(templateId); + Map attribute = entry.getValue().getAttribute(); + if(status==3){ + int remainHp = attribute.get(HeroAttributeEnum.CurHP.getPropertyId())*100/attribute.get(HeroAttributeEnum.Hp.getPropertyId()); + LOGGER.info("血量为百分之{}",remainHp); + oneInfo.addRemainHp(remainHp); + } + } + oneInfo.setTeam(team); + oneInfo.setTotalForce(HeroLogic.getInstance().calTeamTotalForce(user, 501, false)); + if (teamPosManager.getTeamPosForPoken().get(1) != null && teamPosManager.getTeamPosForPoken().get(1).size() > 0) { + for (TeamPosForPokenInfo posForPokenInfo : teamPosManager.getTeamPosForPoken().get(1)) { + oneInfo.addPokemonInfos(posForPokenInfo.getPokenId()); + } + } + Family.FamilyDefendDetailViewResponse.Builder response = Family.FamilyDefendDetailViewResponse.newBuilder(); + response.setTeamInfo(oneInfo); + MessageUtil.sendMessage(session, 1, messageType.getNumber(), response.build(), true); + } + + /** + * 一键布防、调整布防 + * + * @param session + * @param messageType + */ + public static void quickSetDefend(ISession session, int buildId, int uid, MessageTypeProto.MessageType messageType) throws Exception { + User user = UserManager.getUser(uid); + TeamPosManager teamPosManager = user.getTeamPosManager(); + if (teamPosManager.getTeamPosForHero().get(501) == null || teamPosManager.getTeamPosForHero().get(501).size() < 1) { + teamPosManager.updateTeamPosByTeamId(501, teamPosManager.getTeamPosForHero().get(1)); + } + if (buildId == 0) { + buildId = 1; + } + GuildInfo guildInfo = GuilidManager.guildInfoMap.get(user.getPlayerInfoManager().getGuildId()); + SGuildSetting guildSetting = SGuildSetting.sGuildSetting; + int memberType = GuildLogic.getMemberType(uid, guildInfo.getMembers()); + guildInfo.updateDefendInfo(uid, buildId); + Family.FamilyDefendInfo.Builder defend = Family.FamilyDefendInfo.newBuilder(); + defend.setBuildId(buildId); + defend.setUid(uid); + defend.setStarCount(guildSetting.getStarNum()[memberType-1]); + defend.setCurForce(HeroLogic.getInstance().calTeamTotalForce(user, 501, false)); + GuildLogic.sendIndicationToMember(guildInfo, MessageTypeProto.MessageType.FAMILY_QUICK_SET_DEFEND_INDICATION, defend.build()); + MessageUtil.sendMessage(session, 1, messageType.getNumber(), null, true); + } + + + private static Family.FamilyFightInfo familyFightDetailInfo(int guildId) throws Exception { + GuildInfo guildInfo = GuilidManager.guildInfoMap.get(guildId); + Map defendInfo = guildInfo.getDefendInfo(); + Family.FamilyFightInfo.Builder fightInfo = Family.FamilyFightInfo.newBuilder(); + fightInfo.setGid(guildId); + for (int i = 0; i < 3; i++) { + Family.FamilyBuildBuffInfo.Builder buffInfo = Family.FamilyBuildBuffInfo.newBuilder(); + buffInfo.setBuildId(i + 1); + buffInfo.setBuffId(i + 1); + fightInfo.addBuildBuff(buffInfo); + } + for (Map.Entry entry : defendInfo.entrySet()) { + Family.FamilyFightPlayerInfo.Builder playerInfo = Family.FamilyFightPlayerInfo.newBuilder(); + playerInfo.setBuildId(entry.getValue()); + playerInfo.setStarCount(5); + PlayerManager playerManager = UserManager.getUser(entry.getKey()).getPlayerInfoManager(); + Family.FamilyUserInfo.Builder userInfo = Family.FamilyUserInfo.newBuilder() + .setRoleUid(entry.getKey()) + .setUserName(playerManager.getNickName()) + .setUserLevel(playerManager.getLevel()) + .setPosition(2) + .setSoulForce(HeroLogic.getInstance().calTeamTotalForce(UserManager.getUser(entry.getKey()), 501, false)) + .setHead(playerManager.getHead()) + .setFrame(playerManager.getHeadFrame()) + .setContribute(0); + playerInfo.setUserInfo(userInfo.build()); + fightInfo.addUser(playerInfo); + } + return fightInfo.build(); + } + + /** + * 公会战查看双方对战信息 + * + * @param session + * @param messageType + * @throws Exception + */ + public static void viewFightInfo(ISession session, MessageTypeProto.MessageType messageType) throws Exception { + User user = UserManager.getUser(session.getUid()); + int guildId = user.getPlayerInfoManager().getGuildId(); + int enemyId = getEnemyFamily(guildId); + Family.FamilyFightInfoResponse.Builder builder = Family.FamilyFightInfoResponse.newBuilder(); + builder.addInfo(familyFightDetailInfo(guildId)); + builder.addInfo(familyFightDetailInfo(enemyId)); + MessageUtil.sendMessage(session, 1, messageType.getNumber(), builder.build(), true); + + } + + /** + * 公会战计入缓存 + * + * @throws Exception + */ + public static void familyFightMatching() throws Exception { + Set guildIds = GuilidManager.guildInfoMap.keySet(); + if (guildIds.size() < 1) { + return; + } + RedisUtil redisUtil = RedisUtil.getInstence(); + String key = RedisKey.getKey(RedisKey.FAMILY_FIGHT_RANK, "", false); + Set rank = redisUtil.getZset(key, 0, redisUtil.getZsetSize(key)); + for (Integer gid : guildIds) { + //匹配处理 + GuildInfo guildInfo = GuilidManager.guildInfoMap.get(gid); + if (guildInfo.getDefendInfo() != null && guildInfo.getDefendInfo().size() > 0) { + String matchingKey = RedisKey.getKey(RedisKey.FAMILY_FIGHT_MATCHING_RANK, "", false); + int random = MathUtils.randomInt(30); + if (!rank.contains(gid.toString())) { + redisUtil.zsetAddOne(key, gid.toString(), 100); + redisUtil.zsetAddOne(matchingKey, gid.toString(), 100 + random); + } else { + Double zSetScore = redisUtil.getZSetScore(RedisKey.FAMILY_FIGHT_RANK, "", gid.toString()); + redisUtil.zsetAddOne(matchingKey, gid.toString(), zSetScore + random); + } + } + Map defendInfo = guildInfo.getDefendInfo(); + if (defendInfo == null || defendInfo.size() < 1) { + continue; + } + + //血量记录处理,星级记录处理 + SGuildSetting guildSetting = SGuildSetting.sGuildSetting; + for (Map.Entry entry : defendInfo.entrySet()) { + User user = UserManager.getUser(entry.getKey()); + int memberType = GuildLogic.getMemberType(entry.getKey(), guildInfo.getMembers()); + HeroManager heroManager = user.getHeroManager(); + TeamPosManager teamPosManager = user.getTeamPosManager(); + List teamPosHeroInfos = teamPosManager.getTeamPosForHero().get(501); + Iterator it = teamPosHeroInfos.iterator(); + FamilyFightInfo fightInfo = new FamilyFightInfo(); + Map heroAllAttribute = new HashMap<>(); + while (it.hasNext()) { + TeamPosHeroInfo heroInfo = it.next(); + Hero hero = heroManager.getHero(heroInfo.getHeroId()); + Map heroAttributeMap = HeroLogic.getInstance().calHeroNotBufferAttribute(user, hero, false, 501); + heroAllAttribute.put(heroInfo.getHeroId(), new FamilyHeroInfo(hero.getTemplateId(), hero.getLevel(), heroAttributeMap)); + } + fightInfo.setHeroAttribute(heroAllAttribute); + fightInfo.setStarCount(guildSetting.getStarNum()[memberType-1]); + redisUtil.putMapEntry(RedisKey.FAMILY_FIGHT, String.valueOf(guildInfo.getId()), String.valueOf(entry.getKey()), fightInfo); + } + } + for (Integer gid : guildIds) { + GuildInfo guildInfo = GuilidManager.guildInfoMap.get(gid); + int enemyFamily = getEnemyFamily(guildInfo.getId()); + if (enemyFamily == -1) { + continue; + } + GuildInfo enemyInfo = GuilidManager.guildInfoMap.get(enemyFamily); + Family.EnemyFamily familyInfo = Family.EnemyFamily.newBuilder().setId(enemyInfo.getId()).setLevel(enemyInfo.getLevel()).setName(enemyInfo.getName()).setPictureId(1).build(); + GuildLogic.sendIndicationToMember(guildInfo, MessageTypeProto.MessageType.FAMILY_FIGHT_MATCHING_SUCCESS_INDICATION, familyInfo); + } + + } + + /** + * 获取当前用户公会的敌对公会 + * + * @param myFamilyId + * @return + */ + private static int getEnemyFamily(int myFamilyId) { + RedisUtil redisUtil = RedisUtil.getInstence(); + Long matchingRank = redisUtil.getZSetreverseRank(RedisKey.FAMILY_FIGHT_MATCHING_RANK, "", String.valueOf(myFamilyId)); + int enmeyFamilyId; + long rank; + if (matchingRank % 2 == 1) { + rank = matchingRank; + } else { + rank = matchingRank - 2; + } + Set> zsetreverseRangeWithScores = RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.FAMILY_FIGHT_MATCHING_RANK, "", rank, rank); + if (zsetreverseRangeWithScores.size() != 1) { + return -1; + } else { + String value = zsetreverseRangeWithScores.iterator().next().getValue(); + enmeyFamilyId = Integer.parseInt(value); + } + return enmeyFamilyId; + + } + + + /** + * 战斗之后数据更新 + * + * @param userAttack + * @param userDefend + */ + public static void familyFightResult(ISession session, int defendUid, MessageTypeProto.MessageType messageType) throws Exception { + User userAttack = UserManager.getUser(session.getUid()); + User userDefend = UserManager.getUser(defendUid); + int defendGuildId = userDefend.getPlayerInfoManager().getGuildId(); + RedisUtil redisUtil = RedisUtil.getInstence(); + FamilyFightInfo defendInfo = redisUtil.getMapEntry(RedisKey.FAMILY_FIGHT, String.valueOf(defendGuildId), String.valueOf(userDefend.getId()), FamilyFightInfo.class); + Map heroAttribute = defendInfo.getHeroAttribute(); + int seed = (int) (System.currentTimeMillis() / 1000); + List heroDefendFightInfos = new ArrayList<>(); + for (Map.Entry entry : heroAttribute.entrySet()) { + Hero hero = userDefend.getHeroManager().getHero(entry.getKey()); + if (hero == null) { + continue; + } + StringBuilder skillSb = new StringBuilder(); + StringBuilder propertySb = new StringBuilder(); + String heroSkill = HeroLogic.getInstance().getHeroSkills(userDefend, hero, skillSb).toString(); + String property = HeroLogic.getInstance().getHeroPropertyBuilder(propertySb, hero, entry.getValue().getAttribute()).toString(); + CommonProto.FightUnitInfo heroFightInfo = CommonProto.FightUnitInfo + .newBuilder() + .setUnitId(Integer.toString(hero.getTemplateId())) + .setUnitSkillIds(heroSkill.substring(0, heroSkill.length() - 1)) + .setProperty(property.substring(0, property.length() - 1)) + .build(); + heroDefendFightInfos.add(heroFightInfo); + } + CommonProto.FightTeamInfo fightDefendTeamInfo = CommonProto.FightTeamInfo. + newBuilder() + .addAllFightUnitList(heroDefendFightInfos) + .setTeamSkillList(HeroLogic.getInstance().getPokenmonSkills(userDefend, 1)) + .build(); + CommonProto.FightTeamInfo fightAttackTeamInfo = BehaviorUtil.getFightTeamInfo(userAttack, 502, true); + LuaValue getFightData = FightDataUtil.getFinalPlayerFightData(fightAttackTeamInfo, fightDefendTeamInfo); + LuaValue getOptionData = FightDataUtil.getOptionData(""); + + int[] fightResult = CheckFight.getInstance().checkFight(seed, 1000, getFightData, getOptionData); + for (int i = 0; i < fightResult.length; i++) { + System.out.println(fightResult[i]); + } + int index = 2; +// 战斗之后数据处理 + for (Map.Entry entry : heroAttribute.entrySet()) { + FamilyHeroInfo value = entry.getValue(); + Map attribute = value.getAttribute(); + if(fightResult[0]==0) { + attribute.put(HeroAttributeEnum.CurHP.getPropertyId(), fightResult[index]); + }else{ + attribute.put(HeroAttributeEnum.CurHP.getPropertyId(), 0); + } + value.setAttribute(attribute); + index++; + } + + + defendInfo.setHeroAttribute(heroAttribute); + if (fightResult[0] == 0) { + defendInfo.setStarCount(defendInfo.getStarCount() - 1); + } + redisUtil.putMapEntry(RedisKey.FAMILY_FIGHT, String.valueOf(defendGuildId), String.valueOf(userDefend.getId()), defendInfo); + //获得星数处理 + int attackGuildId = userAttack.getPlayerInfoManager().getGuildId(); + String attackRankKey = RedisKey.getKey(RedisKey.FAMILY_FIGHT_STAR_RANK, String.valueOf(attackGuildId), false); + Double starCount = redisUtil.getZSetScore(RedisKey.FAMILY_FIGHT_STAR_RANK, String.valueOf(attackGuildId), String.valueOf(userAttack.getId())); + redisUtil.zsetAddOne(attackRankKey,String.valueOf(userAttack.getId()),starCount+1); + Family.FamilyFightAttackResponse response = Family.FamilyFightAttackResponse.newBuilder().setResult(fightResult[0]).setStarCount(1).build(); + MessageUtil.sendMessage(session, 1, messageType.getNumber(), response, true); + } + + /** + * 获取公会战阶段信息 + * + * @param session + * @param messageType + */ + public static void getFamilyFightRoundInfo(ISession session, MessageTypeProto.MessageType messageType) throws Exception { + int startFightTime; + int roundStartTime = 0; + int roundEndTime = 0; + int hour = TimeUtils.getHourOfDay(); + //活动开启时间 + if (hour < FamilyRound.FAMILY_FIGHT_END) { + startFightTime = (int) (TimeUtils.getAppointTime(FamilyRound.FAMILY_FIGHT_START) / 1000); + } else { + startFightTime = (int) ((TimeUtils.getAppointTime(FamilyRound.FAMILY_FIGHT_START) + TimeUtils.DAY) / 1000); + } + //阶段以及时间段 + if (hour >= FamilyRound.FAMILY_FIGHT_START && hour < FamilyRound.FAMILY_FIGHT_DEFEND_END) { + roundStartTime = (int) (TimeUtils.getAppointTime(FamilyRound.FAMILY_FIGHT_START) / 1000); + roundEndTime = (int) (TimeUtils.getAppointTime(FamilyRound.FAMILY_FIGHT_DEFEND_END) / 1000); + } else if (hour >= FamilyRound.FAMILY_FIGHT_DEFEND_END && hour < FamilyRound.FAMILY_FIGHT_MATCHING_END) { + roundStartTime = (int) (TimeUtils.getAppointTime(FamilyRound.FAMILY_FIGHT_DEFEND_END) / 1000); + roundEndTime = (int) (TimeUtils.getAppointTime(FamilyRound.FAMILY_FIGHT_MATCHING_END) / 1000); + } else if (hour >= FamilyRound.FAMILY_FIGHT_MATCHING_END && hour < FamilyRound.FAMILY_FIGHT_ATTACK_END) { + roundStartTime = (int) (TimeUtils.getAppointTime(FamilyRound.FAMILY_FIGHT_MATCHING_END) / 1000); + roundEndTime = (int) (TimeUtils.getAppointTime(FamilyRound.FAMILY_FIGHT_ATTACK_END) / 1000); + } else if (hour >= FamilyRound.FAMILY_FIGHT_ATTACK_END && hour < FamilyRound.FAMILY_FIGHT_END) { + roundStartTime = (int) (TimeUtils.getAppointTime(FamilyRound.FAMILY_FIGHT_ATTACK_END) / 1000); + roundEndTime = (int) (TimeUtils.getAppointTime(FamilyRound.FAMILY_FIGHT_END) / 1000); + } + int enemyFamily = getEnemyFamily(UserManager.getUser(session.getUid()).getPlayerInfoManager().getGuildId()); + + Family.FamilyFightRoundResponse.Builder response = Family.FamilyFightRoundResponse.newBuilder() + .setType(status) + .setStartTime(startFightTime) + .setRoundStartTime(roundStartTime) + .setRoundEndTime(roundEndTime) + .setJoinType(1); + if (enemyFamily != -1) { + GuildInfo guildInfo = GuilidManager.guildInfoMap.get(enemyFamily); + Family.EnemyFamily familyInfo = Family.EnemyFamily.newBuilder().setId(guildInfo.getId()).setLevel(guildInfo.getLevel()).setName(guildInfo.getName()).setPictureId(1).build(); + response.setEnemy(familyInfo); + } + + MessageUtil.sendMessage(session, 1, messageType.getNumber(), response.build(), true); + } + + /** + * 公会战状态更改 + * + * @throws Exception + */ + public static void familyFightStatus() throws Exception { + if (status == 2 && startMatching) { + familyFightMatching(); + startMatching = false; + } + int hour = TimeUtils.getHourOfDay(); + if (status == 0 && hour == FamilyRound.FAMILY_FIGHT_START) { + LOGGER.info("阶段变为布防"); + status = 1; + } else if (status == 1 && hour == FamilyRound.FAMILY_FIGHT_DEFEND_END) { + status = 2; + LOGGER.info("阶段变为匹配"); + startMatching = true; + } else if (status == 2 && hour == FamilyRound.FAMILY_FIGHT_MATCHING_END) { + status = 3; + LOGGER.info("阶段变为进攻"); + + } else if (status == 3 && hour == FamilyRound.FAMILY_FIGHT_ATTACK_END) { + status = 4; + LOGGER.info("阶段变为结算"); + + } else if (status == 4 && hour == FamilyRound.FAMILY_FIGHT_END) { + + status = 0; + LOGGER.info("阶段变为等待"); + } else if (hour > FamilyRound.FAMILY_FIGHT_END || hour < FamilyRound.FAMILY_FIGHT_START) { + status = 0; + removeMatchingInfo(); + } + } + + /** + *公会战结束删除匹配信息 + */ + private static void removeMatchingInfo(){ + RedisUtil redisUtil = RedisUtil.getInstence(); + String key = RedisKey.getKey(RedisKey.FAMILY_FIGHT_MATCHING_RANK,"",false); + redisUtil.removeZSetRangeByRank(key,0,redisUtil.getZsetSize(key)); + } + /** + * 公会战结算 + */ + public void accountFamilyFightResult() { + + } + + /** + * 查询该公会个人战绩 + * @param session + * @param messageType + * @throws Exception + */ + public static void personalFightResult(ISession session, MessageTypeProto.MessageType messageType) throws Exception { + int guildId = UserManager.getUser(session.getUid()).getPlayerInfoManager().getGuildId(); + Set> zsetreverseRangeWithScores = RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.FAMILY_FIGHT_STAR_RANK, String.valueOf(guildId), 0, 20); + Iterator> it = zsetreverseRangeWithScores.iterator(); + int rank = 1; + Family.PersonalFightResultResponse.Builder response = Family.PersonalFightResultResponse.newBuilder(); + while (it.hasNext()){ + ZSetOperations.TypedTuple personal = it.next(); + int uid = Integer.parseInt(personal.getValue()); + PlayerManager playerInfoManager = UserManager.getUser(uid).getPlayerInfoManager(); + Family.PersonalFightResult.Builder fightResult = Family.PersonalFightResult.newBuilder() + .setRank(rank) + .setAttackCount(2) + .setUid(uid) + .setHead(1) + .setHeadFrame(playerInfoManager.getHeadFrame()) + .setPosition(1) + .setName(playerInfoManager.getNickName()) + .setStarCount(personal.getScore().intValue()); + response.addResult(fightResult.build()); + rank++; + } + MessageUtil.sendMessage(session,1,messageType.getNumber(),response.build(),true); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildLogic.java index 3300485b2..50a726801 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/GuildLogic.java @@ -10,6 +10,7 @@ import com.ljsd.jieling.db.redis.RedisKey; import com.ljsd.jieling.db.redis.RedisUtil; import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.globals.Global; +import com.ljsd.jieling.handler.family.FamilyRound; import com.ljsd.jieling.handler.map.MapManager; import com.ljsd.jieling.handler.map.behavior.BehaviorUtil; import com.ljsd.jieling.logic.OnlineUserManager; @@ -66,7 +67,6 @@ public class GuildLogic { for(Set members : guildInfo.getMembers().values()){ for(int uidOfMember : members){ User userMember = UserManager.getUser(uidOfMember); - userMember.getGuildMyInfo().move(System.currentTimeMillis()); builder.addFamilyWalkIndicaiton(CBean2Proto.getFamilyWalkIndicaiton(userMember)); } } @@ -104,8 +104,6 @@ public class GuildLogic { .setFamilyWalkIndicaiton(CBean2Proto.getFamilyWalkIndicaiton(user)) .build(); MessageUtil.sendMessage(session,1,msgId,build,true); - familyFightMatching(); - } public static String checkForCreateGuild( User user,String familyName,String announce) throws Exception { @@ -232,7 +230,6 @@ public class GuildLogic { addGuildLog(guildInfo.getId(),GuildDef.Log.JOIN,user.getPlayerInfoManager().getNickName()); Family.FamilyJoinIndicaion build = Family.FamilyJoinIndicaion.newBuilder().setFamilyBaseInfo(CBean2Proto.getFamilyBaseInfo(guildInfo)).setFamilyUserInfo(CBean2Proto.getFamilyUserInfo(user, GlobalsDef.MEMBER)).build(); Family.FamilyJoinResponse response = Family.FamilyJoinResponse.newBuilder().setFamilyJoinIndicaion(build).build(); - MessageUtil.sendMessage(session,1,msgId,response,true); } @@ -402,8 +399,6 @@ public class GuildLogic { targetUser.getPlayerInfoManager().setGuildId(guildInfo.getId()); GuilidManager.removeMineApplyGuildInfos(guildInfo.getId(),applyId); GuilidManager.removeOneApplyGuildInfos(guildInfo.getId(),applyId); - Family.FamilyWalkIndicaiton familyWalkIndicaiton = CBean2Proto.getFamilyWalkIndicaiton(targetUser); - sendIndicationToMember(guildInfo, MessageTypeProto.MessageType.FAMILY_WALK_INDICATION,familyWalkIndicaiton); }catch (Exception e){ LOGGER.error("the exception={}",e); }finally { @@ -707,21 +702,16 @@ public class GuildLogic { return; } GuildMyInfo guildMyInfo = user.getGuildMyInfo(); - - - user.getGuildMyInfo().move(System.currentTimeMillis()); - LOGGER.info("old ={},path={}",guildMyInfo.getCurPos(),path); + LOGGER.info("cur ={},path={}",guildMyInfo.getCurPos(),path); boolean continuous = CellUtil.isContinuous(guildMyInfo.getCurPos(),path); if(!continuous){ MessageUtil.sendErrorResponse(session,0,msgId,"路线有误"); return; } user.getGuildMyInfo().move(path); - LOGGER.info("cur ={},path={}",guildMyInfo.getCurPos(),path); Family.FamilyWalkIndicaiton familyWalkIndicaiton = CBean2Proto.getFamilyWalkIndicaiton(user); GuildInfo guildInfo = GuilidManager.guildInfoMap.get(guildId); sendIndicationToMember(guildInfo, MessageTypeProto.MessageType.FAMILY_WALK_INDICATION,familyWalkIndicaiton); - MessageUtil.sendMessage(session,1,msgId,null,true); } public static void updateMyPos(User user) { @@ -778,90 +768,13 @@ public class GuildLogic { } } } - - /** - * 查看工会布防信息 - * @param session - * @param messageType - * @throws Exception - */ - public static void viewDefendInfo(ISession session, MessageTypeProto.MessageType messageType) throws Exception { - User user = UserManager.getUser(session.getUid()); - int gid = user.getPlayerInfoManager().getGuildId(); - GuildInfo guildInfo =GuilidManager.guildInfoMap.get(gid); - Map defendInfo = guildInfo.getDefendInfo(); - Family.FamilyDefendViewResponse.Builder response = Family.FamilyDefendViewResponse.newBuilder(); - for(Map.Entry entry:defendInfo.entrySet()){ - Family.FamilyDefendInfo.Builder defend = Family.FamilyDefendInfo.newBuilder(); - defend.setStarCount(5); - defend.setUid(entry.getKey()); - defend.setBuildId(entry.getValue()); - defend.setCurForce(HeroLogic.getInstance().calTeamTotalForce(UserManager.getUser(entry.getKey()),501,false)); - response.addInfo(defend); - } - MessageUtil.sendMessage(session,1,messageType.getNumber(),response.build(),true); - - } - - /** - * 查看公会具体布防信息 - * @param session - * @param uid - * @param messageType - * @throws Exception - */ - public static void viewDefendDetailInfo(ISession session,int uid,MessageTypeProto.MessageType messageType) throws Exception { - User user = UserManager.getUser(uid); - TeamPosManager teamPosManager = user.getTeamPosManager(); - CommonProto.Team.Builder team = CommonProto.Team.newBuilder(); - for (TeamPosHeroInfo heroInfo:teamPosManager.getTeamPosForHero().get(501)) { - int templateId = user.getHeroManager().getHero(heroInfo.getHeroId()).getTemplateId(); - team.addHeroTid(templateId); - } - CommonProto.TeamOneTeamInfo.Builder oneInfo = CommonProto.TeamOneTeamInfo.newBuilder() - .setTeam(team); - oneInfo.setTotalForce(HeroLogic.getInstance().calTeamTotalForce(user,501,false)); - if(teamPosManager.getTeamPosForPoken().get(1)!=null&&teamPosManager.getTeamPosForPoken().get(1).size()>0){ - for(TeamPosForPokenInfo posForPokenInfo:teamPosManager.getTeamPosForPoken().get(1)){ - oneInfo.addPokemonInfos(posForPokenInfo.getPokenId()); - } - } - Family.FamilyDefendDetailViewResponse.Builder response = Family.FamilyDefendDetailViewResponse.newBuilder(); - response.setTeamInfo(oneInfo); - MessageUtil.sendMessage(session,1,messageType.getNumber(),response.build(),true); - } - /** - * 一键布防、调整布防 - * @param session - * @param messageType - */ - public static void quickSetDefend(ISession session,int buildId,int uid, MessageTypeProto.MessageType messageType) throws Exception { - User user = UserManager.getUser(uid); - TeamPosManager teamPosManager = user.getTeamPosManager(); - if(teamPosManager.getTeamPosForHero().get(501)==null||teamPosManager.getTeamPosForHero().get(501).size()<1){ - teamPosManager.updateTeamPosByTeamId(501,teamPosManager.getTeamPosForHero().get(1)); - } - if(buildId==0){ - buildId = 1; - } - GuildInfo guildInfo = GuilidManager.guildInfoMap.get(user.getPlayerInfoManager().getGuildId()); - guildInfo.updateDefendInfo(uid,buildId); - Family.FamilyDefendInfo.Builder defend = Family.FamilyDefendInfo.newBuilder(); - defend.setBuildId(buildId); - defend.setUid(uid); - defend.setStarCount(5); - defend.setCurForce(HeroLogic.getInstance().calTeamTotalForce(user,501,false)); - sendIndicationToMember(guildInfo,MessageTypeProto.MessageType.FAMILY_QUICK_SET_DEFEND_INDICATION,defend.build()); - MessageUtil.sendMessage(session,1,messageType.getNumber(),null,true); - } - /** * 给公会所有在线成员发送indication * @param guildInfo * @param messageType * @param generatedMessage */ - private static void sendIndicationToMember(GuildInfo guildInfo, MessageTypeProto.MessageType messageType, GeneratedMessage generatedMessage){ + public static void sendIndicationToMember(GuildInfo guildInfo, MessageTypeProto.MessageType messageType, GeneratedMessage generatedMessage){ Map> members = guildInfo.getMembers(); for(Set items : members.values()){ for(Integer sendUid : items){ @@ -872,159 +785,4 @@ public class GuildLogic { } } } - private static Family.FamilyFightInfo familyFightDetailInfo(int guildId) throws Exception { - GuildInfo guildInfo = GuilidManager.guildInfoMap.get(guildId); - Map defendInfo = guildInfo.getDefendInfo(); - Family.FamilyFightInfo.Builder fightInfo = Family.FamilyFightInfo.newBuilder(); - fightInfo.setGid(guildId); - for(int i = 0 ; i <3 ;i ++){ - Family.FamilyBuildBuffInfo.Builder buffInfo = Family.FamilyBuildBuffInfo.newBuilder(); - buffInfo.setBuildId(i+1); - buffInfo.setBuffId(i+1); - fightInfo.addBuildBuff(buffInfo); - } - for(Map.Entry entry:defendInfo.entrySet()){ - Family.FamilyFightPlayerInfo.Builder playerInfo = Family.FamilyFightPlayerInfo.newBuilder(); - playerInfo.setBuildId(entry.getValue()); - playerInfo.setStarCount(5); - PlayerManager playerManager = UserManager.getUser(entry.getKey()).getPlayerInfoManager(); - Family.FamilyUserInfo.Builder userInfo =Family.FamilyUserInfo.newBuilder() - .setRoleUid(entry.getKey()) - .setUserName(playerManager.getNickName()) - .setUserLevel(playerManager.getLevel()) - .setPosition(2) - .setSoulForce(HeroLogic.getInstance().calTeamTotalForce(UserManager.getUser(entry.getKey()),501,false)) - .setHead(playerManager.getHead()) - .setFrame(playerManager.getHeadFrame()) - .setContribute(0); - playerInfo.setUserInfo(userInfo.build()); - fightInfo.addUser(playerInfo); - } - return fightInfo.build(); - } - /** - * 公会战查看双方对战信息 - * @param session - * @param messageType - * @throws Exception - */ - public static void viewFightInfo(ISession session, MessageTypeProto.MessageType messageType) throws Exception { - User user = UserManager.getUser(session.getUid()); - int guildId = user.getPlayerInfoManager().getGuildId(); - int enemyId = 13; - if(guildId==13){ - enemyId = 14; - } - Family.FamilyFightInfoResponse.Builder builder = Family.FamilyFightInfoResponse.newBuilder(); - builder.addInfo(familyFightDetailInfo(guildId)); - builder.addInfo(familyFightDetailInfo(enemyId)); - MessageUtil.sendMessage(session,1,messageType.getNumber(),builder.build(),true); - - } - /** - * 公会战计入缓存 - * @throws Exception - */ - public static void familyFightMatching() throws Exception { - Set guildIds= GuilidManager.guildInfoMap.keySet(); - if(guildIds.size()<1){ - return; - } - RedisUtil redisUtil = RedisUtil.getInstence(); - Set rank = redisUtil.getZset(RedisKey.FAMILY_FIGHT_RANK, 0, redisUtil.getZsetSize(RedisKey.FAMILY_FIGHT_RANK)); - for(Integer gid:guildIds){ - GuildInfo guildInfo = GuilidManager.guildInfoMap.get(gid); - if(guildInfo.getDefendInfo()!=null&&guildInfo.getDefendInfo().size()>0) { - if (!rank.contains(gid.toString())) { - String key = RedisKey.getKey(RedisKey.FAMILY_FIGHT_MATCHING_RANK, gid.toString(), false); - redisUtil.zsetAddOne(key, gid.toString(), 100); - } else { - Double zSetScore = redisUtil.getZSetScore(RedisKey.FAMILY_FIGHT_RANK, "", gid.toString()); - redisUtil.zsetAddOne(RedisKey.FAMILY_FIGHT_MATCHING_RANK, gid.toString(), zSetScore); - } - } - Map defendInfo = guildInfo.getDefendInfo(); - if(defendInfo==null||defendInfo.size()<1){ - continue; - } - for(Map.Entry entry:defendInfo.entrySet()){ - User user = UserManager.getUser(entry.getKey()); - HeroManager heroManager = user.getHeroManager(); - TeamPosManager teamPosManager = user.getTeamPosManager(); - List teamPosHeroInfos = teamPosManager.getTeamPosForHero().get(501); - Iterator it = teamPosHeroInfos.iterator(); - FamilyFightInfo fightInfo = new FamilyFightInfo(); - Map heroAllAttribute = new HashMap<>(); - while (it.hasNext()){ - TeamPosHeroInfo heroInfo = it.next(); - Hero hero = heroManager.getHero(heroInfo.getHeroId()); - Map heroAttributeMap = HeroLogic.getInstance().calHeroNotBufferAttribute(user, hero, false,501); - heroAllAttribute.put(heroInfo.getHeroId(),new FamilyHeroInfo(hero.getTemplateId(),hero.getLevel(),heroAttributeMap)); - } - fightInfo.setHeroAttribute(heroAllAttribute); - redisUtil.putMapEntry(RedisKey.FAMILY_FIGHT,String.valueOf(guildInfo.getId()),String.valueOf(entry.getKey()),fightInfo); - } - } -// redisUtil.getZset(key,0, redisUtil.getZsetSize(RedisKey.FAMILY_FIGHT_RANK)); - - - } - - - /** - * 战斗之后数据更新 - * @param userAttack - * @param userDefend - */ - public void familyFightResult(User userAttack,User userDefend){ - int defendGuildId =userDefend.getPlayerInfoManager().getGuildId(); - FamilyFightInfo defendInfo = RedisUtil.getInstence().getMapEntry(RedisKey.FAMILY_FIGHT, String.valueOf(defendGuildId), String.valueOf(userDefend.getId()), FamilyFightInfo.class); - Map heroAttribute = defendInfo.getHeroAttribute(); - int seed = (int)(System.currentTimeMillis()/1000); - List heroDefendFightInfos = new ArrayList<>(); - for (Map.Entry entry : heroAttribute.entrySet()) { - Hero hero = userDefend.getHeroManager().getHero(entry.getKey()); - if (hero == null) { - continue; - } - StringBuilder skillSb = new StringBuilder(); - StringBuilder propertySb = new StringBuilder(); - String heroSkill = HeroLogic.getInstance().getHeroSkills(userDefend,hero,skillSb).toString(); - String property = HeroLogic.getInstance().getHeroPropertyBuilder(propertySb,hero,entry.getValue().getAttribute()).toString(); - CommonProto.FightUnitInfo heroFightInfo = CommonProto.FightUnitInfo - .newBuilder() - .setUnitId(Integer.toString(hero.getTemplateId())) - .setUnitSkillIds(heroSkill.substring(0,heroSkill.length()-1)) - .setProperty(property.substring(0, property.length()-1)) - .build(); - heroDefendFightInfos.add(heroFightInfo); - } - CommonProto.FightTeamInfo fightDefendTeamInfo = CommonProto.FightTeamInfo. - newBuilder() - .addAllFightUnitList(heroDefendFightInfos) - .setTeamSkillList(HeroLogic.getInstance().getPokenmonSkills(userDefend,1)) - .build(); - CommonProto.FightTeamInfo fightAttackTeamInfo = BehaviorUtil.getFightTeamInfo(userAttack, 502, true); - LuaValue getFightData = FightDataUtil.getFinalPlayerFightData(fightAttackTeamInfo, fightDefendTeamInfo); - LuaValue getOptionData = FightDataUtil.getOptionData(""); - - int[] fightResult = CheckFight.getInstance().checkFight(seed,1000,getFightData,getOptionData); - int index = 2; -// 战斗之后数据处理 - for (Map.Entry entry : heroAttribute.entrySet()) { - FamilyHeroInfo value = entry.getValue(); - Map attribute = value.getAttribute(); - attribute.put(HeroAttributeEnum.CurHP.getPropertyId(),fightResult[index]); - value.setAttribute(attribute); - index++; - } - defendInfo.setHeroAttribute(heroAttribute); - if(fightResult[0]==0){ - defendInfo.setStarCount(defendInfo.getStarCount()-1); - } - RedisUtil.getInstence().putMapEntry(RedisKey.FAMILY_FIGHT,String.valueOf(defendGuildId),String.valueOf(userDefend.getId()),defendInfo); - } - public void accountFamilyFightResult(){ - - } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/thread/task/MinuteTask.java b/serverlogic/src/main/java/com/ljsd/jieling/thread/task/MinuteTask.java index 2fd289346..91e83e23c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/thread/task/MinuteTask.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/thread/task/MinuteTask.java @@ -14,6 +14,7 @@ import com.ljsd.jieling.logic.OnlineUserManager; import com.ljsd.jieling.logic.STableManager; import com.ljsd.jieling.logic.activity.ActivityLogic; import com.ljsd.jieling.logic.arena.ArenaLogic; +import com.ljsd.jieling.logic.family.GuildFightLogic; import com.ljsd.jieling.logic.fight.CheckFight; import com.ljsd.jieling.logic.fight.CombatLogic; import com.ljsd.jieling.logic.store.StoreLogic; @@ -49,6 +50,7 @@ public class MinuteTask extends Thread { fiveMinuteOnlineSend(); CheckFight.getInstance().luaHotFix(); MongoUtil.getInstence().lastUpdate(); + GuildFightLogic.familyFightStatus(); LOGGER.info("MinuteTask end..."); } catch (Exception e) { LOGGER.error("e",e);