From bca44c2d711dc539cb5f3bba579b2a203ab77167 Mon Sep 17 00:00:00 2001 From: duhui Date: Fri, 29 Jan 2021 18:25:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A9=E6=88=98=E7=B3=BB=E7=BB=9F=EF=BC=8C?= =?UTF-8?q?=E5=88=9D=E7=89=88=E6=9C=AA=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ljsd/jieling/db/redis/RedisKey.java | 10 +- .../jieling/handler/GetPlayerInfoHandler.java | 2 + .../fourChallenge/FourChallengeLogic.java | 10 +- .../ljsd/jieling/logic/arena/ArenaLogic.java | 4 +- .../ljsd/jieling/logic/dao/PlayerManager.java | 23 +++ .../logic/help/GetHelpHeroListHandler.java | 39 +++++ .../jieling/logic/help/HelpFightListVo.java | 38 +++++ .../com/ljsd/jieling/logic/help/HelpHero.java | 70 ++++++++ .../jieling/logic/help/HelpHeroLogic.java | 154 ++++++++++++++++++ .../ljsd/jieling/logic/help/HelpTypeEnum.java | 40 +++++ .../com/ljsd/jieling/util/CBean2Proto.java | 57 +++++++ 11 files changed, 437 insertions(+), 10 deletions(-) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/logic/help/GetHelpHeroListHandler.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/logic/help/HelpFightListVo.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/logic/help/HelpHero.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/logic/help/HelpHeroLogic.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/logic/help/HelpTypeEnum.java 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 a7b687592..4635d53b4 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 @@ -305,9 +305,13 @@ public class RedisKey { public final static String WORLD_ARE_JOIN = "WORLD_ARE_JOIN";//跨服参与人员 public final static String WARLD_DIS_ARENA_RANK = "WARLD_DIS_ARENA_RANK";//跨服榜单 - public final static String FOUR_CHALLENGE_FIRST = "FOUR_CHALLENGE_FIRST";//四灵试炼首次通关 - public final static String FOUR_CHALLENGE_MINI_FORCE = "FOUR_CHALLENGE_MINI_FORCE";//四灵试炼最低战力 - public final static String FOUR_CHALLENGE_TIER_RANK = "FOUR_CHALLENGE_TIER_RANK";//四灵试炼层数排行榜 + //四灵试炼,0:首次通关,1:最低战力 + public final static String FOUR_CHALLENGE = "FOUR_CHALLENGE"; + //四灵试炼层数排行榜 + public final static String FOUR_CHALLENGE_TIER_RANK = "FOUR_CHALLENGE_TIER_RANK"; + + // 助战 + public final static String HELP_FIGHT = "HELP_FIGHT"; public static Set familyKey = new HashSet<>(); 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 7b55803dc..c9e853596 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java @@ -223,6 +223,8 @@ public class GetPlayerInfoHandler extends BaseHandler{ .setWorldLeve(GlobleSystemLogic.getGloableWorldLeveCache()) .addAllDemonsTrialRewardInfo(user.getMapManager().getDemonsTrialRewardInfo()) .addAllHeadFrameBag(CBean2Proto.getHeadFrameList(user)) + .addAllHelpFightList(CBean2Proto.gethelpFightList(user)) + .addAllIsUseHelpHero(CBean2Proto.getisUseHelpHero(user)) .build(); ReportUtil.onReportEvent(user, ReportEventEnum.APP_LOGIN.getType()); try { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/fourChallenge/FourChallengeLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/fourChallenge/FourChallengeLogic.java index d1e94a97f..9a4c8ff1c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/fourChallenge/FourChallengeLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/fourChallenge/FourChallengeLogic.java @@ -204,22 +204,22 @@ public class FourChallengeLogic { // 首次通关记录 - Map first = RedisUtil.getInstence().getMapValues(RedisKey.FOUR_CHALLENGE_FIRST, "", String.class, ArenaRecord.class); + Map first = RedisUtil.getInstence().getMapValues(RedisKey.FOUR_CHALLENGE, "0", String.class, ArenaRecord.class); if (first.get(floorIds) == null){ // 记录redis - RedisUtil.getInstence().putMapEntry(RedisKey.FOUR_CHALLENGE_FIRST, "", floorIds, arenaRecord); + RedisUtil.getInstence().putMapEntry(RedisKey.FOUR_CHALLENGE, "0", floorIds, arenaRecord); } // 最低战力记录 - Map force = RedisUtil.getInstence().getMapValues(RedisKey.FOUR_CHALLENGE_MINI_FORCE, "", String.class, ArenaRecord.class); + Map force = RedisUtil.getInstence().getMapValues(RedisKey.FOUR_CHALLENGE, "1", String.class, ArenaRecord.class); if (force.get(floorIds) == null){ // 记录redis - RedisUtil.getInstence().putMapEntry(RedisKey.FOUR_CHALLENGE_MINI_FORCE, "", floorIds, arenaRecord); + RedisUtil.getInstence().putMapEntry(RedisKey.FOUR_CHALLENGE, "1", floorIds, arenaRecord); }else { int attackForce = force.get(floorIds).getAttackForce(); if (myforce < attackForce){ // 记录redis - RedisUtil.getInstence().putMapEntry(RedisKey.FOUR_CHALLENGE_MINI_FORCE, "", floorIds, arenaRecord); + RedisUtil.getInstence().putMapEntry(RedisKey.FOUR_CHALLENGE, "1", floorIds, arenaRecord); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java index fc55e5c4f..94cbcc343 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java @@ -515,10 +515,10 @@ public class ArenaLogic { String[] split = fightId.split("#"); if ("0".equals(split[1])){ // 首通 - arenaRecord = RedisUtil.getInstence().getMapEntry(RedisKey.FOUR_CHALLENGE_FIRST, "", split[0], ArenaRecord.class); + arenaRecord = RedisUtil.getInstence().getMapEntry(RedisKey.FOUR_CHALLENGE, "0", split[0], ArenaRecord.class); }else if ("1".equals(split[1])){ // 最低战力 - arenaRecord = RedisUtil.getInstence().getMapEntry(RedisKey.FOUR_CHALLENGE_MINI_FORCE, "", split[0], ArenaRecord.class); + arenaRecord = RedisUtil.getInstence().getMapEntry(RedisKey.FOUR_CHALLENGE, "1", split[0], ArenaRecord.class); } } if(arenaRecord == null){ 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 2fac2de1d..0fa133ec4 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 @@ -137,6 +137,12 @@ public class PlayerManager extends MongoBase { private int treeLevel; + // 使用的助战英雄列表 + private Set helpfights = new HashSet<>(); + // 是否使用过助战英雄 + // 0:未选中,1:已选未使用,2:已使用 + private int[] isUseHelpHero = new int[4]; + private Map situationPass = new HashMap<>(); // 四灵试炼层数 @@ -946,5 +952,22 @@ public class PlayerManager extends MongoBase { updateString("treeLevel",treeLevel); } + public Set getHelpfights() { + return helpfights; + } + + public void addHelpfights(Integer heroId) { + helpfights.add(heroId); + updateString("helpfights",helpfights); + } + + public int[] getIsUseHelpHero() { + return isUseHelpHero; + } + + public void updateIsUseHelpHero(int index,int value) { + isUseHelpHero[index] = value; + updateString("isUseHelpHero",isUseHelpHero); + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/help/GetHelpHeroListHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/help/GetHelpHeroListHandler.java new file mode 100644 index 000000000..0fe62f114 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/help/GetHelpHeroListHandler.java @@ -0,0 +1,39 @@ +package com.ljsd.jieling.logic.help; + +import com.google.protobuf.GeneratedMessage; +import com.ljsd.jieling.exception.ErrorCode; +import com.ljsd.jieling.exception.ErrorCodeException; +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.root.User; +import org.springframework.stereotype.Component; +import rpc.protocols.CommonProto; +import rpc.protocols.MessageTypeProto; +import rpc.protocols.PlayerInfoProto; + +import java.util.List; + +@Component +public class GetHelpHeroListHandler extends BaseHandler { + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.HelpFightListRequest; + } + + @Override + public GeneratedMessage processWithProto(int uid, PlayerInfoProto.HelpFightListRequest proto) throws Exception { + + // 用户信息 + User user = UserManager.getUser(uid); + if (user == null) { + throw new ErrorCodeException(ErrorCode.UNKNOWN); + } + + // 根据类型获取枚举对象 + HelpTypeEnum type = HelpTypeEnum.getType(proto.getType()); + + List helpFighList = HelpHeroLogic.getInstance().getHelpFighList(user, type); + + return PlayerInfoProto.HelpFightListResponse.newBuilder().addAllHelpHeros(helpFighList).build(); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/help/HelpFightListVo.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/help/HelpFightListVo.java new file mode 100644 index 000000000..b2d577a64 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/help/HelpFightListVo.java @@ -0,0 +1,38 @@ +package com.ljsd.jieling.logic.help; + +import rpc.protocols.CommonProto; + +import java.util.Objects; + +/** + * @author hj + * 包装类 + */ +public class HelpFightListVo { + private CommonProto.HelpFightList helpFightList; + + public CommonProto.HelpFightList getHelpFightList() { + return helpFightList; + } + + public void setHelpFightList(CommonProto.HelpFightList helpFightList) { + this.helpFightList = helpFightList; + } + + public HelpFightListVo(CommonProto.HelpFightList helpFightList) { + this.helpFightList = helpFightList; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + HelpFightListVo that = (HelpFightListVo) o; + return Objects.equals(helpFightList, that.helpFightList); + } + + @Override + public int hashCode() { + return Objects.hash(helpFightList); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/help/HelpHero.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/help/HelpHero.java new file mode 100644 index 000000000..ec29c244a --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/help/HelpHero.java @@ -0,0 +1,70 @@ +package com.ljsd.jieling.logic.help; + +import com.ljsd.jieling.logic.dao.Hero; + +/** + * @author hj + * 援助英雄类 + */ +public class HelpHero { + /** + * 援助用户id + */ + private int uid; + /** + * 援助类型:好友,公会 + */ + private int helpType; + /** + * 创建时间 + */ + private long creatTime; + /** + * 功能类型 + */ + private HelpTypeEnum functionType; + /** + * 英雄信息 + */ + private Hero hero; + + public int getUid() { + return uid; + } + + public void setUid(int uid) { + this.uid = uid; + } + + public int getHelpType() { + return helpType; + } + + public void setHelpType(int helpType) { + this.helpType = helpType; + } + + public long getCreatTime() { + return creatTime; + } + + public void setCreatTime(long creatTime) { + this.creatTime = creatTime; + } + + public HelpTypeEnum getFunctionType() { + return functionType; + } + + public void setFunctionType(HelpTypeEnum functionType) { + this.functionType = functionType; + } + + public Hero getHero() { + return hero; + } + + public void setHero(Hero hero) { + this.hero = hero; + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/help/HelpHeroLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/help/HelpHeroLogic.java new file mode 100644 index 000000000..ddbfe57e4 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/help/HelpHeroLogic.java @@ -0,0 +1,154 @@ +package com.ljsd.jieling.logic.help; + +import com.ljsd.jieling.db.redis.RedisKey; +import com.ljsd.jieling.db.redis.RedisUtil; +import com.ljsd.jieling.exception.ErrorCode; +import com.ljsd.jieling.exception.ErrorCodeException; +import com.ljsd.jieling.logic.activity.fourChallenge.FourChallengeLogic; +import com.ljsd.jieling.logic.dao.GuilidManager; +import com.ljsd.jieling.logic.dao.Hero; +import com.ljsd.jieling.logic.dao.root.GuildInfo; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.util.CBean2Proto; +import config.SCHero; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import rpc.protocols.CommonProto; + +import java.util.*; + +import static com.ljsd.jieling.logic.help.HelpTypeEnum.Me; + +/** + * @author hj + * 助战 + */ +public class HelpHeroLogic { + + private static final Logger LOGGER = LoggerFactory.getLogger(HelpHeroLogic.class); + + private HelpHeroLogic() { + } + + public static class Instance { + public final static HelpHeroLogic instance = new HelpHeroLogic(); + } + + public static HelpHeroLogic getInstance() { + return HelpHeroLogic.Instance.instance; + } + + /** + * 根据类型获取助战列表 + * @param user + * @param typeEnum + * @return + */ + public List getHelpFighList(User user,HelpTypeEnum typeEnum) throws Exception{ + + List result = new ArrayList<>(); + + Set lists = new HashSet<>(); + + // 如果类型是自己,则获取 + int subKey = typeEnum.getPropertyId() == Me.getPropertyId()?user.getId():typeEnum.getPropertyId(); + + // redis获取对应类型的列表 map + Map helpHeroMap = RedisUtil.getInstence().getMapValues(RedisKey.HELP_FIGHT, String.valueOf(subKey), String.class, HelpHero.class); + if (helpHeroMap == null || helpHeroMap.isEmpty()){ + return result; + } + + switch (typeEnum){ + case Me: + // 我的助战 + for (Map.Entry data:helpHeroMap.entrySet()){ + lists.add(CBean2Proto.getHelpFight(data.getValue())); + } + break; + case FourChallenge_People: + case FourChallenge_Buddha: + case FourChallenge_Monster: + case FourChallenge_Morality: + // 获取四灵类型状态 + int status = FourChallengeLogic.getInstance().status[typeEnum.getPropertyId()-1]; + if (status == 0){ + throw new ErrorCodeException(ErrorCode.SYS_ERROR_CODE,"该功能当前未开启"); + } + + // 好友列表 + List friends = user.getFriendManager().getFriends(); + // 公会列表 + GuildInfo guildInfo = GuilidManager.guildInfoMap.get(user.getPlayerInfoManager().getGuildId()); + Map> members = guildInfo.getMembers(); + + for (Map.Entry data:helpHeroMap.entrySet()){ + // 好友助战,好友助战必须先于公会助战,这样当同时是好友和公会成员时会显示好友(策划文档要求) + if (friends.contains(Integer.parseInt(data.getKey()))){ + // 此处进行助战类型赋值 + data.getValue().setHelpType(0); + lists.add(CBean2Proto.getHelpFight(data.getValue())); + } + // 公会助战 + for (Set mem:members.values()){ + if (mem.contains(Integer.parseInt(data.getKey()))){ + // 不能获得自己的助战 + if (Integer.parseInt(data.getKey()) == user.getId()){ + continue; + } + // 此处进行助战类型赋值 + data.getValue().setHelpType(1); + lists.add(CBean2Proto.getHelpFight(data.getValue())); + } + } + } + break; + default: + return result; + } + + // 包装类转换 + for (HelpFightListVo vo:lists){ + result.add(vo.getHelpFightList()); + } + return result; + } + + /** + * 添加助战英雄 + * @param user + * @param heroId + * @throws Exception + */ + public void addHelpFighList(User user,String heroId) throws Exception{ + Hero hero = user.getHeroManager().getHero(heroId); + if (hero == null){ + throw new ErrorCodeException(ErrorCode.SYS_ERROR_CODE,"神将不存在"); + } + // 自己的助战列表 + Map meMap = RedisUtil.getInstence().getMapValues(RedisKey.HELP_FIGHT, String.valueOf(user.getId()), String.class, HelpHero.class); + + // 英雄类型 + int propertyName = SCHero.getsCHero().get(hero.getTemplateId()).getPropertyName(); + + for (Map.Entry data:meMap.entrySet()){ + if (propertyName == data.getValue().getFunctionType().getPropertyId()){ + throw new ErrorCodeException(ErrorCode.SYS_ERROR_CODE,"已选择其他神将!"); + } + } + // 自己的助战列表添加 + meMap.put(String.valueOf(user.getId()),CBean2Proto.getHelpHero2(user,hero)); + RedisUtil.getInstence().putMapEntry(RedisKey.HELP_FIGHT, String.valueOf(user.getId()), String.valueOf(user.getId()), meMap); + + // 类型助战列表添加 + Map fourChallengeMap = RedisUtil.getInstence().getMapValues(RedisKey.HELP_FIGHT, String.valueOf(propertyName), String.class, HelpHero.class); + // 自己的助战列表没有改类型英雄,那么对应类型的助战列表也应该没有对应英雄,所以这里不再循环验证 + fourChallengeMap.put(String.valueOf(user.getId()),CBean2Proto.getHelpHero2(user,hero)); + RedisUtil.getInstence().putMapEntry(RedisKey.HELP_FIGHT, String.valueOf(propertyName), String.valueOf(user.getId()), fourChallengeMap); + } + + public void useHelpHero(User user,String heroId) throws Exception{ + + } + +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/help/HelpTypeEnum.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/help/HelpTypeEnum.java new file mode 100644 index 000000000..4f730595f --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/help/HelpTypeEnum.java @@ -0,0 +1,40 @@ +package com.ljsd.jieling.logic.help; + +/** + * @author hj + * 助战类型 + */ +public enum HelpTypeEnum { + // 我的助战 + Me(0), + // 四灵试炼:人 + FourChallenge_People(1), + // 四灵试炼:佛 + FourChallenge_Buddha(2), + // 四灵试炼:妖 + FourChallenge_Monster(3), + // 四灵试炼:道 + FourChallenge_Morality(4), + + Error(99999999), + ; + + private int propertyId; + + HelpTypeEnum(int propertyId) { + this.propertyId = propertyId; + } + + public int getPropertyId() { + return propertyId; + } + + public static HelpTypeEnum getType(int type){ + for (HelpTypeEnum typeEnum:values()){ + if (typeEnum.propertyId == type){ + return typeEnum; + } + } + return Error; + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java b/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java index e0513cd14..b0f3712da 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/CBean2Proto.java @@ -13,6 +13,9 @@ 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.CombatLogic; +import com.ljsd.jieling.logic.help.HelpFightListVo; +import com.ljsd.jieling.logic.help.HelpHero; +import com.ljsd.jieling.logic.help.HelpTypeEnum; import com.ljsd.jieling.logic.hero.HeroLogic; import config.*; import manager.STableManager; @@ -109,6 +112,60 @@ public class CBean2Proto { return headFrameLists; } + /** + * 助战,redis类型转hero对象 + * @param helpHero + * @return + * @throws Exception + */ + public static HelpFightListVo getHelpFight(HelpHero helpHero) throws Exception { + User user = UserManager.getUser(helpHero.getUid()); + // 获取英雄信息 + CommonProto.HelpFightList helpFightList = CommonProto.HelpFightList.newBuilder() + .setUid(helpHero.getUid()) + .setUserName(user.getPlayerInfoManager().getNickName()) + .setGuildName(helpHero.getFunctionType().getPropertyId()) + .setTrailType(helpHero.getHelpType()) + .setHero(getHero(helpHero.getHero())) + .build(); + + return new HelpFightListVo(helpFightList); + } + + /** + * 助战,hero对象转redis类型 + * @param user + * @param hero + * @return + */ + public static HelpHero getHelpHero2(User user,Hero hero){ + + // 获取神将类型 + SCHero scHero = SCHero.getsCHero().get(hero.getTemplateId()); + HelpTypeEnum type = HelpTypeEnum.getType(scHero.getPropertyName()); + + // 结果返回,援助类型不在这里写 + HelpHero helpHero = new HelpHero(); + helpHero.setUid(user.getId()); + helpHero.setFunctionType(type); + helpHero.setCreatTime(TimeUtils.now()); + + return helpHero; + } + + public static List gethelpFightList(User user){ + Set helpfights = user.getPlayerInfoManager().getHelpfights(); + + + return null; + } + + public static List getisUseHelpHero(User user){ + + + return null; + } + public static CommonProto.Hero getHero(Hero hero){ List soulPoss = new ArrayList<>(); Map soulEquipMap = hero.getSoulEquipByPositionMap();