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 c6f799838..a9d3711ca 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 @@ -129,6 +129,7 @@ public class RedisKey { public static final String AREDEF_TEAM_FORCE_RANK = "AREDEF_TEAM_FORCE_RANK"; public static final String EXPERT_RANK = "EXPERT_RANK"; + public static final String FORCE_CURR_RANK = "FORCE_CURR_RANK"; public static final String MAIN_LEVEL_RANK = "MAIN_LEVEL_RANK"; public static final String RANDOM_CARD_RANK="RANDOM_CARD_RANK"; public static final String RANDOM_CARD_PERFECT_RANK = "RANDOM_CARD_PERFECT_RANK"; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java index 30f4c546d..e63098b34 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java @@ -3055,6 +3055,7 @@ public class MapLogic { PlayerManager playerInfoManager = user.getPlayerInfoManager(); //次数校验 SDailyChallengeConfig sDailyChallengeConfig = STableManager.getConfig(SDailyChallengeConfig.class).get(id); + SDailyChallengeConfig lastChange = STableManager.getConfig(SDailyChallengeConfig.class).get(id - 1); if(sDailyChallengeConfig==null){ throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); } @@ -3063,28 +3064,31 @@ public class MapLogic { throw new ErrorCodeException(ErrorCode.REFRESH_WHEL_TIME_NOT); } boolean consumeCount = false; + Set dailyPass = playerInfoManager.getDailyPass(); if(type==1){ - if(playerInfoManager.getDailyPass().contains(id)){ + if(dailyPass.contains(id)){ throw new ErrorCodeException(ErrorCode.DAILY_ALREADY_PASS); } - int[][] openRules = sDailyChallengeConfig.getOpenRules(); - for(int[] rule:openRules){ - boolean open = true; - switch (rule[0]){ - case 1: - open = playerInfoManager.getLevel()>=rule[1]; - break; - case 2: - open = SMainLevelConfig.biggerThanFight(user.getMainLevelManager().getFightId(),rule[1]); - break; - case 3: - open = playerInfoManager.getMaxForce()>=rule[1]; - break; - } - if(!open){ - throw new ErrorCodeException(ErrorCode.DAILY_NO_OPEN); + //判断上一关是否已过 + if(lastChange!=null&&lastChange.getType()==sDailyChallengeConfig.getType()){ + if(!dailyPass.contains(id - 1)){ + throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); } } + int[] openRules = sDailyChallengeConfig.getOpenRules(); + boolean open = true; + switch (openRules[0]){ + case 1: + open = playerInfoManager.getLevel()>=openRules[1]; + break; + case 2: + open = SMainLevelConfig.biggerThanFight(user.getMainLevelManager().getFightId(),openRules[1]); + break; + } + if(!open){ + throw new ErrorCodeException(ErrorCode.DAILY_NO_OPEN); + } + PVEFightEvent pveFightEvent = new PVEFightEvent(user.getId(), GlobalsDef.FORMATION_NORMAL, 1000, "", GameFightType.DailyChallenge, sDailyChallengeConfig.getMonsterId(), 3); @@ -3105,7 +3109,7 @@ public class MapLogic { } } if(type==2){ - if(!playerInfoManager.getDailyPass().contains(id)){ + if(!dailyPass.contains(id)){ throw new ErrorCodeException(ErrorCode.DAILY_ALREADY_PASS); } CommonProto.Drop.Builder drop = ItemUtil.drop(user, sDailyChallengeConfig.getReward(), 1, 0, 1); @@ -3244,6 +3248,7 @@ public class MapLogic { for(int id:ids){ idList.add(id); } + BehaviorUtil.destoryCurPoint(user); MapInfoProto.MapGameResponse response = MapInfoProto.MapGameResponse.newBuilder().setType(mapGameInfo.getType()).addAllParam(idList).build(); MessageUtil.sendMessage(session,1,messageType.getNumber(),response,true); } @@ -3270,9 +3275,6 @@ public class MapLogic { if(response==null){ throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); } -// if(response.getGameStatus()==0){ -// BehaviorUtil.destoryCurPoint(user); -// } MessageUtil.sendMessage(session,1,messageType.getNumber(),response,true); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/miniGame/BombGame.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/miniGame/BombGame.java index 7c0b8b491..200d5d2cd 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/miniGame/BombGame.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/miniGame/BombGame.java @@ -67,10 +67,7 @@ public class BombGame implements MapGame { throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); } int[] idInfo = mapGameInfo.getId(); - if(operationInfo.isEmpty()){ - //第一次把奖励随机一下 - idInfo = shuffle(idInfo); - } + int resultId = idInfo[(int)params[0]-1]; int gameStatus = 0; @@ -83,7 +80,7 @@ public class BombGame implements MapGame { } if(resultId!=-1){ //记录抽取次数 - operationInfo.add((int)params[0]); + operationInfo.add((int)params[0]-1); gameStatus = 3-operationInfo.size(); STrialGameConfig config = STrialGameConfig.trialGameConfigMap.get(resultId); drop = ItemUtil.drop(user, new int[][]{{config.getRewardID(), config.getMin()}}, BIReason.MAP_EVENET_REWARD); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/AbstractActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/AbstractActivity.java index c75bb46ab..a4ba5e1e0 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/AbstractActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/AbstractActivity.java @@ -130,7 +130,10 @@ public abstract class AbstractActivity implements IActivity, IEventHandler { //checkAndUpdate state ActivityManager activityManager = user.getActivityManager(); ActivityMission activityMission = activityManager.getActivityMissionMap().get(id); - if (activityMission == null || activityMission.getActivityState() != ActivityType.OPEN_STATE || activityMission.getOpenType() == 0) { + if (activityMission == null){ + throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); + } + if (activityMission.getActivityState() != ActivityType.OPEN_STATE || activityMission.getOpenType() == 0) { throw new ErrorCodeException(ErrorCode.ACTIVITY_NOT_OPEN); } ActivityProgressInfo activityProgressInfo = activityMission.getActivityMissionMap().get(missionId); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/LimitRandomCardActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/LimitRandomCardActivity.java index b7d679692..2ef2d4051 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/LimitRandomCardActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/LimitRandomCardActivity.java @@ -136,10 +136,10 @@ public class LimitRandomCardActivity extends AbstractActivity { @Override void updateProgressWithUser(User user, ActivityMission activityMission, int count) { //150分赠一次 - int[] onceArrayValue = SSpecialConfig.getOnceArrayValue(SSpecialConfig.TIME_LIMIT_RECRUITMENT_FREEINTEGRAL); - if((activityMission.getV()+count)/onceArrayValue[0]-activityMission.getV()/onceArrayValue[0]>0){ - user.getPlayerInfoManager().updateVipPrivilage(onceArrayValue[1],-1); - } +// int[] onceArrayValue = SSpecialConfig.getOnceArrayValue(SSpecialConfig.TIME_LIMIT_RECRUITMENT_FREEINTEGRAL); +// if((activityMission.getV()+count)/onceArrayValue[0]-activityMission.getV()/onceArrayValue[0]>0){ +// user.getPlayerInfoManager().updateVipPrivilage(onceArrayValue[1],-1); +// } activityMission.setV(activityMission.getV()+count); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/UserMainTeamForceEvent.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/UserMainTeamForceEvent.java new file mode 100644 index 000000000..690282229 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/UserMainTeamForceEvent.java @@ -0,0 +1,22 @@ +package com.ljsd.jieling.logic.activity.event; + +/** + * @author lvxinran + * @date 2020/6/22 + * @discribe 主线战力修改事件 + */ +public class UserMainTeamForceEvent implements IEvent{ + private int uid; + + public UserMainTeamForceEvent(int uid) { + this.uid = uid; + } + + public int getUid() { + return uid; + } + + public void setUid(int uid) { + this.uid = uid; + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/DeathPathLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/DeathPathLogic.java index e28d107fe..35e3a0c27 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/DeathPathLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/DeathPathLogic.java @@ -225,14 +225,14 @@ public class DeathPathLogic { default: break; } - System.out.println("状态修改-------"); + LOGGER.info("十绝阵状态修改-------"); //阶段信息改变发送推送 for(Map.Entry sessionEntry:OnlineUserManager.sessionMap.entrySet()) { Family.DeathPathStatusChangeIndication indication = Family.DeathPathStatusChangeIndication.newBuilder().setStatus(status).build(); MessageUtil.sendIndicationMessage(sessionEntry.getValue(),1, MessageTypeProto.MessageType.DEATH_PATH_STATUS_CHANGE_INDICATION.getNumber(),indication,true); } } - System.out.println("status="+status); + LOGGER.info("十绝阵status={}-------",status); } /** 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 d0b9084fa..7d120cb39 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 @@ -256,7 +256,7 @@ public class HeroLogic{ } user.getUserMissionManager().onGameEvent(user,GameEvent.RANDOM_HERO,sLotterySetting.getLotteryType(),perCount); heroManager.updateRandCount(type,perCount); - Poster.getPoster().dispatchEvent(new RandomCardEvent(uid,sLotterySetting.getLotteryType(),SSpecialConfig.getIntegerValue(SSpecialConfig.TIME_LIMIT_RECRUITMENT_INTEGRAL)*sLotterySetting.getPerCount(),resultRandom)); + Poster.getPoster().dispatchEvent(new RandomCardEvent(uid,sLotterySetting.getLotteryType(),sLotterySetting.getPerCount(),resultRandom)); CommonProto.Drop.Builder drop = ItemUtil.dropPer(user, resultRandom,BIReason.HERO_RANDOM); builder.setDrop(drop); MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.HERO_RAND_RESPONSE_VALUE, builder.build(), true); @@ -593,7 +593,9 @@ public class HeroLogic{ RedisUtil.getInstence().zsetAddOne(key, String.valueOf(user.getId()), teamForce); } - + if(teamId==GlobalsDef.FORMATION_NORMAL){ + Poster.getPoster().dispatchEvent(new UserMainTeamForceEvent(iSession.getUid())); + } user.getUserMissionManager().onGameEvent(user,GameEvent.HERO_IN_TEAM,heroIds.size()); MessageUtil.sendMessage(iSession,1,MessageTypeProto.MessageType.TEAM_POS_SAVE_RESPONSE_VALUE,null,true); } @@ -1692,9 +1694,9 @@ public class HeroLogic{ float score = sPropertyConfig.getScore(); result += propertyValue*score; -// LOGGER.info("the propertyId={} the value is ={},propertyValue={},score={},result ={},the value={}",propertyId,propertyValue*score,propertyValue,score,result,propertyValue*score); + LOGGER.info("the propertyId={} the value is ={},propertyValue={},score={},result ={},the value={}",propertyId,propertyValue*score,propertyValue,score,result,propertyValue*score); } -// System.out.println(result); + System.out.println(result); return (int)result; } @@ -2117,7 +2119,7 @@ public class HeroLogic{ //妖灵师是否在阵容中 - public Set isInTeam(User user,String heroId){ + public boolean isInTeam(User user,String heroId,int teamId){ Map> teamPosForHero = user.getTeamPosManager().getTeamPosForHero(); Set collect = teamPosForHero.entrySet().stream().filter(integerListEntry -> { @@ -2128,7 +2130,8 @@ public class HeroLogic{ } return false; }).map(Map.Entry::getKey).collect(Collectors.toSet()); - return collect; + + return collect.contains(teamId); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java index c0ccd3adf..3e0d084ee 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/player/PlayerLogic.java @@ -54,7 +54,7 @@ import java.util.*; import java.util.stream.Collectors; public class PlayerLogic { - private static final Logger LOGGER = LoggerFactory.getLogger(MailLogic.class); + private static final Logger LOGGER = LoggerFactory.getLogger(PlayerLogic.class); private PlayerLogic(){ Poster.getPoster().listenEvent(new UserForceUpEventHandler(), UserForceChangeEvent.class); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/RankEnum.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/RankEnum.java index 6a61c51c9..9914fd3a2 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/RankEnum.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/RankEnum.java @@ -29,7 +29,9 @@ public enum RankEnum { DEATH_PATH_TOTAL_PERSON_RANK(17,RedisKey.DEATH_PATH_TOTAL_PERSON_RANK,DeathPathTotalPersonRank::new),//param1:玩家总伤害 param2:无 param3:无 DEATH_PATH_TOTAL_GUILD_RANK(18,RedisKey.DEATH_PATH_TOTAL_GUILD_RANK,DeathPathTotalGuildRank::new),//param1:工会总伤害 param2:无 param3:无 GUILD_FORCE_RANK(20,RedisKey.GUILD_FORCE_RANK,GuildForceRank::new),//param1:公会总战力 param2:无 param3:无 - EXPERT_RANK(21,RedisKey.EXPERT_RANK,GoldRank::new);//param1:活动进度 param2:无 param3:无 + EXPERT_RANK(21,RedisKey.EXPERT_RANK,GoldRank::new),//param1:活动进度 param2:无 param3:无 + FORCE_CURR_RANK(22,RedisKey.FORCE_CURR_RANK,ForceCurrRank::new);//param1:人物战力 param2:无 param3:无 + private int type; private String redisKey; @@ -41,6 +43,9 @@ public enum RankEnum { rankMap = new HashMap<>(); abstractRankMap = new HashMap<>(); Arrays.stream(RankEnum.values()).forEach((rankEnum)->rankMap.put(rankEnum.getType(),rankEnum)); + for (RankEnum item:RankEnum.values()) { + abstractRankMap.put(item.getType(),item.getRankFunction().apply(item.getType(),item.getRedisKey())); + } } RankEnum(int type,String redisKey, BiFunction rankFunction){ this.type = type; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/AbstractRank.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/AbstractRank.java index c5f47f355..ecc36fd4d 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/AbstractRank.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/AbstractRank.java @@ -6,9 +6,12 @@ import com.ljsd.jieling.db.redis.RedisUtil; import com.ljsd.jieling.logic.dao.GuilidManager; import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.player.PlayerLogic; import com.ljsd.jieling.logic.rank.IRank; import com.ljsd.jieling.protocols.CommonProto; import com.ljsd.jieling.protocols.PlayerInfoProto; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.data.redis.core.ZSetOperations; import java.util.List; @@ -23,6 +26,7 @@ import java.util.function.BiConsumer; * */ public abstract class AbstractRank implements IRank { + protected static final Logger LOGGER = LoggerFactory.getLogger(AbstractRank.class); protected String redisKey; protected int type; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/ForceCurrRank.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/ForceCurrRank.java new file mode 100644 index 000000000..959e5b3ca --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/ForceCurrRank.java @@ -0,0 +1,82 @@ +package com.ljsd.jieling.logic.rank.rankImpl; + +import com.ljsd.jieling.logic.activity.IEventHandler; +import com.ljsd.jieling.logic.activity.event.IEvent; +import com.ljsd.jieling.logic.activity.event.Poster; +import com.ljsd.jieling.logic.activity.event.UserMainTeamForceEvent; +import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.hero.HeroLogic; +import com.ljsd.jieling.logic.rank.RankContext; +import com.ljsd.jieling.logic.rank.RankEnum; + +import java.util.*; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +/** + * @author lvxinran + * @date 2020/6/22 + * @discribe + */ +public class ForceCurrRank extends AbstractRank implements IEventHandler{ + + public ForceCurrRank(int type, String redisKey) { + super(type, redisKey); + executor = new ScheduledThreadPoolExecutor(8); + executor.scheduleAtFixedRate(this::run,2,1, TimeUnit.SECONDS); + Poster.getPoster().listenEvent(this, UserMainTeamForceEvent.class); + } + + + private static Queue infoQueue = new ArrayDeque<>(); + + private ScheduledThreadPoolExecutor executor; + + @Override + public int[] getDataByScore(Double score) { + return new int[]{score.intValue()}; + } + + @Override + public double getScore(double... data) { + return data[0]; + } + + + @Override + public void onEvent(IEvent event) throws Exception { + RankContext.getRankEnum(RankEnum.FORCE_CURR_RANK.getType()); + if(event instanceof UserMainTeamForceEvent){ + infoQueue.offer((UserMainTeamForceEvent)event); + } + } + + private void run(){ + Queue infoQueue = ForceCurrRank.infoQueue; + if(infoQueue.isEmpty()){ + return; + } + int size = infoQueue.size(); + List eventList = new ArrayList<>(size); + + if(size<100){ + for(int i = 0 ; i < size;i++){ + eventList.add(infoQueue.poll()); + } + } + Set changeId = new HashSet<>(); + System.out.println(("有"+changeId.size()+"个用户主线战力更改")); + eventList.forEach(n->changeId.add(n.getUid())); + changeId.forEach(i-> { + try { + User user = UserManager.getUser(i); + int force = HeroLogic.getInstance().calTeamTotalForce(user, 1, false); + addRank(i,"",force); + } catch (Exception e) { + e.printStackTrace(); + } + }); + } +} + diff --git a/tablemanager/src/main/java/config/SDailyChallengeConfig.java b/tablemanager/src/main/java/config/SDailyChallengeConfig.java index d22df1936..319759ff2 100644 --- a/tablemanager/src/main/java/config/SDailyChallengeConfig.java +++ b/tablemanager/src/main/java/config/SDailyChallengeConfig.java @@ -12,7 +12,7 @@ public class SDailyChallengeConfig implements BaseConfig { private int type; - private int[][] openRules; + private int[] openRules; private int[] reward; @@ -35,7 +35,7 @@ public class SDailyChallengeConfig implements BaseConfig { return type; } - public int[][] getOpenRules() { + public int[] getOpenRules() { return openRules; }