diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/missingRoom/MissingRoomRefreshHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/missingRoom/MissingRoomRefreshHandler.java index 6e9361a12..a830e4751 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/missingRoom/MissingRoomRefreshHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/missingRoom/MissingRoomRefreshHandler.java @@ -34,7 +34,7 @@ public class MissingRoomRefreshHandler extends BaseHandler { @Override public void process(ISession iSession, PacketNetData netData) throws Exception { User user = UserManager.getUser(iSession.getUid()); - user.getUserMissionManager().onGameEvent(user, GameEvent.ONE_MISSION_TYPE_CONSUME, MissionType.REFRESH_MISSING_ROOM,1); + user.getUserMissionManager().onGameEvent(user, GameEvent.MISSING_ROOM_REFRESH, MissionType.REFRESH_MISSING_ROOM,1); List userMissionInfos = new ArrayList<>(); MissionLoigc.getMissingRoomMission(user,userMissionInfos); PlayerInfoProto.MissingRoomRefreshResponse response = PlayerInfoProto.MissingRoomRefreshResponse.newBuilder().addAllInfos(userMissionInfos).build(); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/mission/TakeMissionRewardHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/mission/TakeMissionRewardHandler.java index 228260d8b..b6299c061 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/mission/TakeMissionRewardHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/mission/TakeMissionRewardHandler.java @@ -15,13 +15,6 @@ public class TakeMissionRewardHandler extends BaseHandler> missionTypeEnumListMap, Object... parm) throws Exception { - ISession session = OnlineUserManager.getSessionByUid(user.getId()); - switch (event) { - case VIP_LEVLUP: { - int vipLevle = (int) parm[0]; - SVipLevelConfig sVipLevelConfig = SVipLevelConfig.getsVipLevelConfigMap().get(vipLevle); - int[] openRules = sVipLevelConfig.getOpenRules(); - for (int missionId : openRules) { - vipMissionIdsType.openMission(user, missionId, missionTypeEnumListMap.get(GameMisionType.VIPMISSION)); - } - updateString("vipMissionIdsType", vipMissionIdsType); - break; - } - case DONGHAIXUNXIAN_INIT: - // 东海寻仙活动初始化 - resetDonghaiXunxianTaskInfo((int)parm[0]); - break; - case HOME_TASK_INIT: - homeMissionType.openMission(user,0,null); - updateString("homeMissionType", homeMissionType); - break; - case DAILY_REFRESH: - Set missionIds; - if(TimeUtils.isSameMonth2(GameApplication.serverConfig.getCacheOpenTime(),TimeUtils.now())){ - int days = TimeUtils.getDayOfMonth(GameApplication.serverConfig.getCacheOpenTime());//当月第几天 - missionIds = STableManager.getConfig(SDailyTasksConfig.class).values().stream().filter(n->days >=n. - getViewDateUp()&& days <=n.getViewDataDown()).map(SDailyTasksConfig::getId).collect(Collectors.toSet()); - }else{ - missionIds = STableManager.getConfig(SDailyTasksConfig.class).values().stream().filter(n->n.getViewDateUp() == 1). - map(SDailyTasksConfig::getId).collect(Collectors.toSet()); - } - int type = (int) parm[0]; - if (type == 0) { - dailyMissionIdsType.getDoingMissionIds().clear(); - dailyMissionIdsType.getFinishMissionIds().clear(); - dailyMissionIdsType.getRewardedMissionIds().clear(); - dailyCumulationData = new CumulationData(); - dailyMissionIdsType.getDoingMissionIds().addAll(missionIds); - updateString("dailyCumulationData", dailyCumulationData); - } - updateString("dailyMissionIdsType", dailyMissionIdsType); - break; - case TREASH_REFRESH: - //当前轮次青龙秘宝的活动ID - int activityId = (int) parm[0]; - - int[] refreshIds = resetTreasureTaskInfo(1, activityId, missionTypeEnumListMap, treasureCumulationData); - treasureCumulationData = new CumulationData(); - int dayRefreshTime = (int) (TimeUtils.getLastOrUnderHour(TimeUtils.now(), 0, 0, false) / 1000); - CommonProto.RefreshTask.Builder task = treasureIndicationBuild(1, refreshIds).setRefreshTime(dayRefreshTime); - PlayerInfoProto.TreasureRefreshIndication indication1 = PlayerInfoProto.TreasureRefreshIndication.newBuilder().addTasks(task.build()).build(); - MessageUtil.sendIndicationMessage(session, 1, MessageTypeProto.MessageType.TREASURE_REFRESH_INDICATION_VALUE, indication1, true); - break; - case TREASH_WEEK_REFRESH: - //当前轮次青龙秘宝的活动ID - int aId = (int) parm[0]; - int[] weekRefreshIds = resetTreasureTaskInfo(2, aId, missionTypeEnumListMap, treasureWeekCumulationData); - if (weekRefreshIds != null) { - treasureWeekCumulationData = new CumulationData(); - int weekRefreshTime = (int) (TimeUtils.getNextWeekendStartTime(1, 0) / 1000); - user.getPlayerInfoManager().clearVipCount(VipPrivilegeType.DRAGON_TREASURE_SUPPLY); - CommonProto.RefreshTask.Builder task2 = treasureIndicationBuild(2, weekRefreshIds).setRefreshTime(weekRefreshTime); - PlayerInfoProto.TreasureRefreshIndication indication2 = PlayerInfoProto.TreasureRefreshIndication.newBuilder().addTasks(task2.build()).build(); - MessageUtil.sendIndicationMessage(session, 1, MessageTypeProto.MessageType.TREASURE_REFRESH_INDICATION_VALUE, indication2, true); - } - break; - case TREASH_MONTH_REFRESH: - //当前轮次青龙秘宝的活动ID - int aid = (int) parm[0]; - user.getPlayerInfoManager().setTreasureLevel(0); - Item item = user.getItemManager().getItem(Global.TREASURE_SCORE); - if (item != null) { - if (item.getItemNum() != 0) { - Map treasureScore = new HashMap<>(); - treasureScore.put(Global.TREASURE_SCORE, (int) item.getItemNum()); - try { - ItemUtil.itemCost(user, treasureScore, BIReason.TREASURE_RESET_CONSUME, 1); - } catch (Exception e) { - e.printStackTrace(); - } - } - } - treasureMonthCumulationData = new CumulationData(); - int[] monthRefreshIds1 = resetTreasureTaskInfo(3, aid, missionTypeEnumListMap, treasureMonthCumulationData); - - CommonProto.RefreshTask.Builder task5 = treasureIndicationBuild(3, monthRefreshIds1); - PlayerInfoProto.TreasureRefreshIndication indication3 = PlayerInfoProto.TreasureRefreshIndication.newBuilder().addTasks(task5.build()).build(); - MessageUtil.sendIndicationMessage(session, 1, MessageTypeProto.MessageType.TREASURE_REFRESH_INDICATION_VALUE, indication3, true); - break; - case JADE_DYNASTY_REFRESH: - //当前轮次破阵诛仙的活动ID - int jadeAId = (int) parm[0]; - resetJadeDynastyTaskInfo(1, jadeAId, missionTypeEnumListMap, jadeDynastyCumulationData); - jadeDynastyCumulationData = new CumulationData(); - break; - case JADE_DYNASTY_WEEK_REFRESH: - //当前轮次破阵诛仙的活动ID - int jadeAid = (int) parm[0]; - int[] weekMIds = resetJadeDynastyTaskInfo(2, jadeAid, missionTypeEnumListMap, jadeDynastyWeekCumulationData); - if (weekMIds != null) { - jadeDynastyWeekCumulationData = new CumulationData(); - } - break; - case SERVENHAPPY_REFRESH: - List sTreasureTaskConfigs = null; - sTreasureTaskConfigs = STableManager.getFigureConfig(TaskStaticConfig.class).getsTreasureTaskConfigListByActivityMap().get(parm[0]); - sevenHappyMissionType.getDoingMissionIds().clear(); - sevenHappyMissionType.getFinishMissionIds().clear(); - sevenHappyMissionType.getRewardedMissionIds().clear(); - List servenMissionmStateChangeInfos = missionTypeEnumListMap.get(GameMisionType.SEVENMISSION); - for (STreasureTaskConfig sTreasureTaskConfig : sTreasureTaskConfigs) { - sevenHappyMissionType.getDoingMissionIds().add(sTreasureTaskConfig.getId()); - } - sevenHappyCumulationData = new CumulationData(); - sevenHappyMissionType.checkAndUpdateMision(user, sTreasureTaskConfigs, servenMissionmStateChangeInfos, sevenHappyCumulationData); - updateString("sevenHappyMissionType", sevenHappyMissionType); - updateString("sevenHappyCumulationData", sevenHappyCumulationData); - break; - case BEGINNER: - for (Integer id : SBeginnerTask.sBeginnerTaskCongigMap.keySet()) { - beginerTaskIdsType.addDoingMission(id); - } - beginCumulationData = new CumulationData(); - updateString("beginerTaskIdsType", beginerTaskIdsType); - updateString("beginCumulationData", beginCumulationData); - break; - - case BLOODY_REFRESH: - Set bloodyMissionIds = STableManager.getConfig(SBloodyBattleTask.class).keySet(); - bloodyMissionIdsType.getDoingMissionIds().clear(); - bloodyMissionIdsType.getFinishMissionIds().clear(); - bloodyMissionIdsType.getRewardedMissionIds().clear(); - bloodyMissionIdsType.getDoingMissionIds().addAll(bloodyMissionIds); - updateString("bloodyMissionIdsType", bloodyMissionIdsType); - break; - case ACHIEVE_REFRESH: - Set ds = STableManager.getConfig(SAchievementConfig.class).keySet(); - achievementMissionTypMap.getDoingMissionIds().clear(); - achievementMissionTypMap.getFinishMissionIds().clear(); - achievementMissionTypMap.getRewardedMissionIds().clear(); - achievementMissionTypMap.getDoingMissionIds().addAll(ds); - achievementMap = new CumulationData(); - updateString("achievementMissionTypMap", achievementMissionTypMap); - updateString("achievementMap", achievementMap); - break; - case COW_FLY_SKY_REFRESH: - int activityCowId = (int) parm[0]; - // 牛气冲天 - Set arro = SArroGantFly.getActivityMap().getOrDefault(activityCowId, new HashMap<>()).keySet(); - cowFlySkyMissionType.getDoingMissionIds().clear(); - cowFlySkyMissionType.getFinishMissionIds().clear(); - cowFlySkyMissionType.getRewardedMissionIds().clear(); - cowFlySkyMissionType.getDoingMissionIds().addAll(arro); - updateString("cowFlySkyMissionType", cowFlySkyMissionType); - break; - case MISTY_TRIP_REFRESH: - //任务开始 - Set journeyWithWind = STableManager.getConfig(SJourneyWithWind.class).keySet(); - if( mistyTripMissionType.getDoingMissionIds().size()==0 && mistyTripMissionType.getFinishMissionIds().size() == 0){ - mistyTripMissionType.getDoingMissionIds().clear(); - mistyTripMissionType.getFinishMissionIds().clear(); - mistyTripMissionType.getRewardedMissionIds().clear(); - mistyTripMissionType.getDoingMissionIds().addAll(journeyWithWind); - this.mistyTripCumulationData= new CumulationData(); - updateString("mistyTripMissionType", mistyTripMissionType); - updateString("mistyTripCumulationData", this.mistyTripCumulationData); - } - break; - case MISSING_ROOM_REFRESH: - //天宫寻宝 - Map mustAppear = new HashMap<>(); - List mustMissions = new ArrayList<>(); - List lockMissions = new ArrayList<>(); - if ((int) parm[0] == 1) { - //删除已经领取奖励的 - missingRoomMissionType.getFinishMissionIds().removeIf(value -> missingRoomMissionType.getAllMissingTime().get(value) == -1); - missingRoomMissionType.getAllMissingTime().values().removeIf(value -> value == -1); - // 任务全部锁定 - Set lockMissionIds = missingRoomMissionType.getLockMissionIds(); - if (lockMissionIds.size() >= 6) { - throw new ErrorCodeException(ErrorCode.LOCK_FILL); - } - // 读表 - SMazeTreasureSetting sMazeTreasureSetting = SMazeTreasureSetting.sMazeTreasureSetting; - boolean result = ItemUtil.itemCost(user, new int[][]{sMazeTreasureSetting.getTakeOrder()}, BIReason.MISSING_ROOM_REFRESH_CONSUME, 1); - if (!result) { - result = ItemUtil.itemCost(user, new int[][]{sMazeTreasureSetting.getRefreshItem()}, BIReason.MISSING_ROOM_REFRESH_CONSUME, 1); - if (!result) { - int coinRefreshCount = user.getPlayerInfoManager().getVipPrivilageValue(sMazeTreasureSetting.getRefreshVIP()); - int[][] cost = sMazeTreasureSetting.getCost(); - int count = (int) MathUtils.calABX(coinRefreshCount, cost[1]); - result = ItemUtil.itemCost(user, new int[][]{new int[]{cost[0][0], count}}, BIReason.MISSING_ROOM_REFRESH_CONSUME, 1); - if (!result) { - throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH); - } - user.getPlayerInfoManager().updateVipPrivilage(sMazeTreasureSetting.getRefreshVIP(), 1); - } - //高级特权 - missingRoomMissionType.privilegeRefresh(user, sMazeTreasureSetting.getHighDailyPrivilege(), mustAppear); - //豪华特权 - missingRoomMissionType.privilegeRefresh(user, sMazeTreasureSetting.getLuxuryDailyPrivilege(), mustAppear); - //非免费抽取次数必出 - missingRoomMissionType.notFreeRefreshMust(user, sMazeTreasureSetting.getRefreshHighTypeNum(), mustAppear); - // 刷新次数+1 - missingRoomMissionType.setRefreshTotalCount(missingRoomMissionType.getRefreshTotalCount() + 1); - } - - Set doingMissionIds = missingRoomMissionType.getDoingMissionIds(); - doingMissionIds.forEach((doing) -> { - if (lockMissionIds.contains(doing)) { - lockMissions.add(doing); - } - }); - - missingRoomMissionType.getDoingMissionIds().clear(); - } else { - for (int firstTask : SMazeTreasureSetting.sMazeTreasureSetting.getFirstRefresh()) { - mustMissions.add(firstTask); - } - } - - // 更新最大长度限制6条 - if (lockMissions.size() + mustAppear.size() > 6) { - // 锁定的不能动,获取特权任务数量 - int num = 6 - lockMissions.size(); - // 特权的key - Set keys = mustAppear.keySet(); - // 正序的set - Set sortSet = new TreeSet(Comparator.naturalOrder()); - // 赋值 - sortSet.addAll(keys); - // 遍历,如果数量满足,停止,不满足则删除等级小的任务 - for (Integer ints : sortSet) { - if (mustAppear.size() == num) { - break; - } - mustAppear.remove(ints); - } - } - - if (!mustAppear.isEmpty()) { - for (Map.Entry entry : mustAppear.entrySet()) { - List sMazeTreasures = SMazeTreasure.mazeMapByTaskType.get(entry.getKey()); - List mustList = new ArrayList<>(); - for (SMazeTreasure maze : sMazeTreasures) { - if (mustMissions.contains(maze.getId())) { - continue; - } - int[] refreshWeight = new int[2]; - refreshWeight[0] = maze.getId(); - refreshWeight[1] = 1; - mustList.add(refreshWeight); - } - int[][] mustArray = mustList.toArray(new int[mustList.size()][]); - int[] missions = MathUtils.randomFromWeightWithTaking(mustArray, entry.getValue()); - Arrays.stream(missions).forEach(mustMissions::add); - } - } - int[][] qualityRate = SMazeTreasureSetting.sMazeTreasureSetting.getQualityRate(); - - //根据品质来随机 - int[] qualityArray = MathUtils.randomForWeight(qualityRate, 6 - (mustMissions.size() + lockMissions.size())); - Map qualityNum = new HashMap<>(); - for (int quality : qualityArray) { - qualityNum.put(quality, qualityNum.getOrDefault(quality, 0) + 1); - } - for (Map.Entry entry : qualityNum.entrySet()) { - List sMazeTreasures = SMazeTreasure.mazeMapByTaskType.get(entry.getKey()); - int[][] treasures = new int[sMazeTreasures.size()][]; - for (int i = 0; i < sMazeTreasures.size(); i++) { - - treasures[i] = new int[2]; - treasures[i][0] = sMazeTreasures.get(i).getId(); - treasures[i][1] = 1; - } - int[] ids = MathUtils.randomFromWeightWithTaking(treasures, entry.getValue()); - for (int id : ids) { - missingRoomMissionType.addDoingMission(missingRoomMissionType.getMissionIndex() * 10000 + id); - } - } - // 必须任务 - for (int mission : mustMissions) { - missingRoomMissionType.addDoingMission(missingRoomMissionType.getMissionIndex() * 10000 + mission); - } - // 上锁任务 - for (int mission : lockMissions) { - missingRoomMissionType.addDoingMission(mission); - } - updateString("missingRoomMissionType", missingRoomMissionType); - break; - default: { - break; - } - } - - } /** * 奖励处理任务 @@ -490,7 +175,7 @@ public class UserMissionManager extends MongoBase { } /** - * 记录任务进度 + * TODO: 2023/7/20 记录任务进度 这个方法需要修改 * @param user * @param missionType * @param missionTypeEnumListMap @@ -652,166 +337,17 @@ public class UserMissionManager extends MongoBase { } - private int[] resetTreasureTaskInfo(int type, int activityId, Map> missionTypeEnumListMap,CumulationData treasureCumulationData){ - //周刷新检测 - if (type == 2) { - if(activityId!=801){ - if(treasureMissionIdsType.getWeekRefresh()!=0&&TimeUtils.now()endTime){ - return null; - } - do{ - startTime += TimeUtils.WEEK; - }while(startTime taskTypeMap = STreasureSunlongTaskConfig.taskTypeMap.get(type); - List newTasks = new ArrayList<>(); - for (Integer treasure : taskTypeMap) { - STreasureSunlongTaskConfig config = STreasureSunlongTaskConfig.treasureTaskConfig.get(treasure); - //需要判断这个任务是不是当前轮次的 - if (config.getActivityId() == activityId) { - newTasks.add(treasure); - } - if (treasureMissionIdsType.getDoingMissionIds().contains(treasure)) { - treasureMissionIdsType.getDoingMissionIds().remove(treasure); - } - if (treasureMissionIdsType.getFinishMissionIds().contains(treasure)) { - treasureMissionIdsType.getFinishMissionIds().remove(treasure); - } - if (treasureMissionIdsType.getRewardedMissionIds().get(treasure)) { - treasureMissionIdsType.getRewardedMissionIds().clear(treasure); - } - } - /* - 戒灵秘宝之前的任务刷新逻辑是,不关联活动ID - 每次刷新任务从表里配的里边随机出SpecialConfig中配置的活动数量 - 现在更改为,不随机,关联活动ID 2020.08.20 - */ - /*int[][] randomTask = new int[taskTypeMap.size()][]; - for(int i = 0 ; i missionStateChangeInfos = missionTypeEnumListMap.get(GameMisionType.TREASUREMISSION); - int[] tasks = new int[newTasks.size()]; - for(Integer task:newTasks){ - missionStateChangeInfos.add(new MissionStateChangeInfo(task, MissionState.DOING,0)); - treasureMissionIdsType.getDoingMissionIds().add(task); - } - treasureCumulationData = new CumulationData(); - updateString("treasureMissionIdsType",treasureMissionIdsType); - if(type==1){ - updateString("treasureCumulationData",treasureCumulationData); - }else if(type==2){ - updateString("treasureWeekCumulationData",treasureCumulationData); - }else if(type==3){ - updateString("treasureMonthCumulationData",treasureCumulationData); - - } - return tasks; - } - - private int[] resetJadeDynastyTaskInfo(int type, int activityId, Map> missionTypeEnumListMap,CumulationData jadeDynastyCumulationData){ - //周刷新检测 - if (type == 2) { - if (jadeDynastyMissionType.getWeekRefresh() != 0 && TimeUtils.now() taskTypeMap = SThemeActivityTaskConfig.taskTypeMap.get(type); - List newTasks = new ArrayList<>(); - for (Integer treasure : taskTypeMap) { - SThemeActivityTaskConfig config = SThemeActivityTaskConfig.idTaskConfig.get(treasure); - //需要判断这个任务是不是当前轮次的 - if (config.getActivityId() == activityId) { - newTasks.add(treasure); - } - jadeDynastyMissionType.getDoingMissionIds().remove(treasure); - jadeDynastyMissionType.getFinishMissionIds().remove(treasure); - if (jadeDynastyMissionType.getRewardedMissionIds().get(treasure)) { - jadeDynastyMissionType.getRewardedMissionIds().clear(treasure); - } - } - List missionStateChangeInfos = missionTypeEnumListMap.get(GameMisionType.JADE_DYNASTY_MISSION); - int[] tasks = new int[newTasks.size()]; - for (int i = 0; i < newTasks.size(); i++) { - missionStateChangeInfos.add(new MissionStateChangeInfo(newTasks.get(i), MissionState.DOING,0)); - jadeDynastyMissionType.getDoingMissionIds().add(newTasks.get(i)); - tasks[i] = newTasks.get(i); - } - jadeDynastyCumulationData = new CumulationData(); - updateString("jadeDynastyMissionType",jadeDynastyMissionType); - if(type==1){ - updateString("jadeDynastyCumulationData",jadeDynastyCumulationData); - } - if(type==2){ - updateString("jadeDynastyWeekCumulationData",jadeDynastyCumulationData); - } - return tasks; - } - - /** - * 东海寻仙活动初始化 - * @param activityId - */ - private void resetDonghaiXunxianTaskInfo(int activityId){ - donghaiXunxianMission.getDoingMissionIds().clear(); - donghaiXunxianMission.getFinishMissionIds().clear(); - donghaiXunxianMission.getRewardedMissionIds().clear(); - - List taskConfigs = SThemeActivityTaskConfig.themeTaskByActivity.get(activityId); - if (taskConfigs == null || taskConfigs.isEmpty()){ - LOGGER.error("东海寻仙任务初始化,ThemeActivityTaskConfig查询活动信息为空:{}",activityId); - return; - } - for (SThemeActivityTaskConfig config : taskConfigs) { - donghaiXunxianMission.getDoingMissionIds().add(config.getId()); - } - donghaiXunxianData = new CumulationData(); - updateString("donghaiXunxianData",donghaiXunxianData); - updateString("donghaiXunxianMission",donghaiXunxianMission); - } - - private CommonProto.RefreshTask.Builder treasureIndicationBuild(int type,int[] refreshIds){ - CommonProto.RefreshTask.Builder task = CommonProto.RefreshTask.newBuilder().setType(type); - for(int i = 0;i> missionTypeEnumListMap){ + UserMissionManager missionManager = user.getUserMissionManager(); + TreasureMissionType treasureMissionIdsType = missionManager.getTreasureMissionIdsType(); + //周刷新检测 + if (type == 2) { + if(activityId!=801){ + if(treasureMissionIdsType.getWeekRefresh()!=0 && TimeUtils.now()endTime){ + return null; + } + do{ + startTime += TimeUtils.WEEK; + }while(startTime taskTypeMap = STreasureSunlongTaskConfig.taskTypeMap.get(type); + List newTasks = new ArrayList<>(); + for (Integer treasure : taskTypeMap) { + STreasureSunlongTaskConfig config = STreasureSunlongTaskConfig.treasureTaskConfig.get(treasure); + //需要判断这个任务是不是当前轮次的 + if (config.getActivityId() == activityId) { + newTasks.add(treasure); + } + treasureMissionIdsType.getDoingMissionIds().remove(treasure); + treasureMissionIdsType.getFinishMissionIds().remove(treasure); + if (treasureMissionIdsType.getRewardedMissionIds().get(treasure)) { + treasureMissionIdsType.getRewardedMissionIds().clear(treasure); + } + } + List missionStateChangeInfos = missionTypeEnumListMap.get(GameMisionType.TREASUREMISSION); + int[] tasks = new int[newTasks.size()]; + for(Integer task:newTasks){ + missionStateChangeInfos.add(new MissionStateChangeInfo(task, MissionState.DOING,0)); + treasureMissionIdsType.getDoingMissionIds().add(task); + } + missionManager.setTreasureMissionIdsType(treasureMissionIdsType); + CumulationData treasureCumulationData = new CumulationData(); + if(type==1){ + missionManager.setTreasureCumulationData(treasureCumulationData); + } + if(type==2){ + missionManager.setTreasureWeekCumulationData(treasureCumulationData); + } + if(type==3){ + missionManager.setTreasureMonthCumulationData(treasureCumulationData); + } + return tasks; + } + + public CommonProto.RefreshTask.Builder treasureIndicationBuild(int type, int[] refreshIds){ + CommonProto.RefreshTask.Builder task = CommonProto.RefreshTask.newBuilder().setType(type); + for (int refreshId : refreshIds) { + CommonProto.UserMissionInfo tempTask = CommonProto.UserMissionInfo.newBuilder().setMissionId(refreshId).build(); + task.addTasks(tempTask).build(); + } + return task; + } + + public int[] resetJadeDynastyTaskInfo(User user, int type, int activityId, Map> missionTypeEnumListMap){ + UserMissionManager missionManager = user.getUserMissionManager(); + JadeDynastyMissionType jadeDynastyMissionType = missionManager.getJadeDynastyMissionType(); + //周刷新检测 + if (type == 2) { + if (jadeDynastyMissionType.getWeekRefresh() != 0 && TimeUtils.now() taskTypeMap = SThemeActivityTaskConfig.taskTypeMap.get(type); + List newTasks = new ArrayList<>(); + for (Integer treasure : taskTypeMap) { + SThemeActivityTaskConfig config = SThemeActivityTaskConfig.idTaskConfig.get(treasure); + //需要判断这个任务是不是当前轮次的 + if (config.getActivityId() == activityId) { + newTasks.add(treasure); + } + jadeDynastyMissionType.getDoingMissionIds().remove(treasure); + jadeDynastyMissionType.getFinishMissionIds().remove(treasure); + if (jadeDynastyMissionType.getRewardedMissionIds().get(treasure)) { + jadeDynastyMissionType.getRewardedMissionIds().clear(treasure); + } + } + List missionStateChangeInfos = missionTypeEnumListMap.get(GameMisionType.JADE_DYNASTY_MISSION); + int[] tasks = new int[newTasks.size()]; + for (int i = 0; i < newTasks.size(); i++) { + missionStateChangeInfos.add(new MissionStateChangeInfo(newTasks.get(i), MissionState.DOING,0)); + jadeDynastyMissionType.getDoingMissionIds().add(newTasks.get(i)); + tasks[i] = newTasks.get(i); + } + CumulationData jadeDynastyCumulationData = new CumulationData(); + missionManager.setJadeDynastyMissionType(jadeDynastyMissionType); + if(type==1){ + missionManager.setJadeDynastyCumulationData(jadeDynastyCumulationData); + } + if(type==2){ + missionManager.setJadeDynastyWeekCumulationData(jadeDynastyCumulationData); + } + return tasks; + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/AchieveRefreshEventProcess.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/AchieveRefreshEventProcess.java new file mode 100644 index 000000000..1f0f3c8f0 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/AchieveRefreshEventProcess.java @@ -0,0 +1,23 @@ +package com.ljsd.jieling.logic.mission.event; + +import com.ljsd.jieling.logic.dao.CumulationData; +import com.ljsd.jieling.logic.dao.UserMissionManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.mission.GameEvent; +import com.ljsd.jieling.logic.mission.GameMisionType; +import com.ljsd.jieling.logic.mission.main.AchieveMissionIdsType; +import com.ljsd.jieling.logic.mission.main.MissionStateChangeInfo; + +import java.util.List; +import java.util.Map; + +public class AchieveRefreshEventProcess implements BaseGameEventProcessor { + @Override + public void onGameEvent(User user, Map> missonTypeListMap, GameEvent event, Object... parm) throws Exception { + UserMissionManager missionManager = user.getUserMissionManager(); + AchieveMissionIdsType achievementMissionTypMap = missionManager.getAchievementMissionTypMap(); + achievementMissionTypMap.openMission(user,0, null); + missionManager.setAchievementMissionTypMap(achievementMissionTypMap); + missionManager.setAchievementMap(new CumulationData()); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/BeginnerRefreshEventProcess.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/BeginnerRefreshEventProcess.java new file mode 100644 index 000000000..987fd0a52 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/BeginnerRefreshEventProcess.java @@ -0,0 +1,26 @@ +package com.ljsd.jieling.logic.mission.event; + +import com.ljsd.jieling.logic.dao.CumulationData; +import com.ljsd.jieling.logic.dao.UserMissionManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.mission.GameEvent; +import com.ljsd.jieling.logic.mission.GameMisionType; +import com.ljsd.jieling.logic.mission.main.BeginerTaskIdsType; +import com.ljsd.jieling.logic.mission.main.MissionStateChangeInfo; +import config.SBeginnerTask; + +import java.util.List; +import java.util.Map; + +public class BeginnerRefreshEventProcess implements BaseGameEventProcessor { + @Override + public void onGameEvent(User user, Map> misionTypeListMap, GameEvent event, Object... parm) throws Exception { + UserMissionManager missionManager = user.getUserMissionManager(); + BeginerTaskIdsType beginerTaskIdsType = missionManager.getBeginerTaskIdsType(); + for (Integer id : SBeginnerTask.sBeginnerTaskCongigMap.keySet()) { + beginerTaskIdsType.addDoingMission(id); + } + missionManager.setBeginerTaskIdsType(beginerTaskIdsType); + missionManager.setBeginCumulationData(new CumulationData()); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/BloodyRefreshEventProcess.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/BloodyRefreshEventProcess.java new file mode 100644 index 000000000..e8f64e78b --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/BloodyRefreshEventProcess.java @@ -0,0 +1,28 @@ +package com.ljsd.jieling.logic.mission.event; + +import com.ljsd.jieling.logic.dao.UserMissionManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.mission.GameEvent; +import com.ljsd.jieling.logic.mission.GameMisionType; +import com.ljsd.jieling.logic.mission.main.BloodyMissionIdsType; +import com.ljsd.jieling.logic.mission.main.MissionStateChangeInfo; +import config.SBloodyBattleTask; +import manager.STableManager; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +public class BloodyRefreshEventProcess implements BaseGameEventProcessor { + @Override + public void onGameEvent(User user, Map> misionTypeListMap, GameEvent event, Object... parm) throws Exception { + UserMissionManager missionManager = user.getUserMissionManager(); + BloodyMissionIdsType bloodyMissionIdsType = missionManager.getBloodyMissionIdsType(); + Set bloodyMissionIds = STableManager.getConfig(SBloodyBattleTask.class).keySet(); + bloodyMissionIdsType.getDoingMissionIds().clear(); + bloodyMissionIdsType.getFinishMissionIds().clear(); + bloodyMissionIdsType.getRewardedMissionIds().clear(); + bloodyMissionIdsType.getDoingMissionIds().addAll(bloodyMissionIds); + missionManager.setBloodyMissionIdsType(bloodyMissionIdsType); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/CowFlySkyRefreshEventProcess.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/CowFlySkyRefreshEventProcess.java new file mode 100644 index 000000000..d34d2fbc6 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/CowFlySkyRefreshEventProcess.java @@ -0,0 +1,30 @@ +package com.ljsd.jieling.logic.mission.event; + +import com.ljsd.jieling.logic.dao.UserMissionManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.mission.GameEvent; +import com.ljsd.jieling.logic.mission.GameMisionType; +import com.ljsd.jieling.logic.mission.main.CowFlySkyMissionType; +import com.ljsd.jieling.logic.mission.main.MissionStateChangeInfo; +import config.SArroGantFly; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +public class CowFlySkyRefreshEventProcess implements BaseGameEventProcessor { + @Override + public void onGameEvent(User user, Map> misionTypeListMap, GameEvent event, Object... parm) throws Exception { + UserMissionManager missionManager = user.getUserMissionManager(); + CowFlySkyMissionType cowFlySkyMissionType = missionManager.getCowFlySkyMissionType(); + int activityCowId = (int) parm[0]; + // 牛气冲天 + Set arro = SArroGantFly.getActivityMap().getOrDefault(activityCowId, new HashMap<>()).keySet(); + cowFlySkyMissionType.getDoingMissionIds().clear(); + cowFlySkyMissionType.getFinishMissionIds().clear(); + cowFlySkyMissionType.getRewardedMissionIds().clear(); + cowFlySkyMissionType.getDoingMissionIds().addAll(arro); + missionManager.setCowFlySkyMissionType(cowFlySkyMissionType); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/DailyRefreshEventProcess.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/DailyRefreshEventProcess.java index 2950bc535..74678919b 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/DailyRefreshEventProcess.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/DailyRefreshEventProcess.java @@ -1,24 +1,52 @@ package com.ljsd.jieling.logic.mission.event; +import com.ljsd.GameApplication; +import com.ljsd.jieling.logic.dao.CumulationData; +import com.ljsd.jieling.logic.dao.UserMissionManager; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.mission.GameEvent; import com.ljsd.jieling.logic.mission.GameMisionType; -import com.ljsd.jieling.logic.mission.MissionType; +import com.ljsd.jieling.logic.mission.main.DailyMissionIdsType; import com.ljsd.jieling.logic.mission.main.MissionStateChangeInfo; +import config.SDailyTasksConfig; +import manager.STableManager; +import util.TimeUtils; import java.util.List; import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; public class DailyRefreshEventProcess implements BaseGameEventProcessor { @Override public void onGameEvent(User user, Map> misionTypeListMap, GameEvent event, Object... parm) throws Exception { - user.getUserMissionManager().openMission(user,event,misionTypeListMap, parm); - List typeList = MissionEventDistributor.eventEnumListMap.get(event); - if(event != GameEvent.MISSING_ROOM_REFRESH || typeList == null){ - return; + // 初始化任务 + UserMissionManager missionManager = user.getUserMissionManager(); + DailyMissionIdsType dailyMissionIdsType = missionManager.getDailyMissionIdsType(); + Set missionIds; + if(TimeUtils.isSameMonth2(GameApplication.serverConfig.getCacheOpenTime(),TimeUtils.now())){ + //当月第几天 + int days = TimeUtils.getDayOfMonth(GameApplication.serverConfig.getCacheOpenTime()); + missionIds = STableManager.getConfig(SDailyTasksConfig.class).values() + .stream() + .filter(n->days >=n.getViewDateUp()&& days <=n.getViewDataDown()) + .map(SDailyTasksConfig::getId).collect(Collectors.toSet()); + }else{ + missionIds = STableManager.getConfig(SDailyTasksConfig.class).values() + .stream() + .filter(n->n.getViewDateUp() == 1) + .map(SDailyTasksConfig::getId).collect(Collectors.toSet()); } - for (MissionType type : typeList) { - user.getUserMissionManager().calCumulationDataResult(user,type,misionTypeListMap,parm); + int type = (int) parm[0]; + if (type == 0) { + // 数据重置 + missionManager.setDailyCumulationData(new CumulationData()); + // 活动重置 + dailyMissionIdsType.getDoingMissionIds().clear(); + dailyMissionIdsType.getFinishMissionIds().clear(); + dailyMissionIdsType.getRewardedMissionIds().clear(); + dailyMissionIdsType.getDoingMissionIds().addAll(missionIds); } + missionManager.setDailyMissionIdsType(dailyMissionIdsType); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/DonghaiRefreshEventProcess.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/DonghaiRefreshEventProcess.java new file mode 100644 index 000000000..19eff6d32 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/DonghaiRefreshEventProcess.java @@ -0,0 +1,39 @@ +package com.ljsd.jieling.logic.mission.event; + +import com.ljsd.jieling.logic.dao.CumulationData; +import com.ljsd.jieling.logic.dao.UserMissionManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.mission.GameEvent; +import com.ljsd.jieling.logic.mission.GameMisionType; +import com.ljsd.jieling.logic.mission.main.DonghaiXunxianMissionType; +import com.ljsd.jieling.logic.mission.main.MissionStateChangeInfo; +import config.SThemeActivityTaskConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; +import java.util.Map; + +public class DonghaiRefreshEventProcess implements BaseGameEventProcessor { + private static final Logger LOGGER = LoggerFactory.getLogger(DonghaiRefreshEventProcess.class); + @Override + public void onGameEvent(User user, Map> misionTypeListMap, GameEvent event, Object... parm) throws Exception { + UserMissionManager missionManager = user.getUserMissionManager(); + DonghaiXunxianMissionType donghaiXunxianMission = missionManager.getDonghaiXunxianMission(); + int activityId = (int) parm[0]; + donghaiXunxianMission.getDoingMissionIds().clear(); + donghaiXunxianMission.getFinishMissionIds().clear(); + donghaiXunxianMission.getRewardedMissionIds().clear(); + + List taskConfigs = SThemeActivityTaskConfig.themeTaskByActivity.get(activityId); + if (taskConfigs == null || taskConfigs.isEmpty()){ + LOGGER.error("东海寻仙任务初始化,ThemeActivityTaskConfig查询活动信息为空:{}",activityId); + return; + } + for (SThemeActivityTaskConfig config : taskConfigs) { + donghaiXunxianMission.getDoingMissionIds().add(config.getId()); + } + missionManager.setDonghaiXunxianMission(donghaiXunxianMission); + missionManager.setDonghaiXunxianData(new CumulationData()); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/HomeRefreshEventProcess.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/HomeRefreshEventProcess.java new file mode 100644 index 000000000..e7bd7265d --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/HomeRefreshEventProcess.java @@ -0,0 +1,21 @@ +package com.ljsd.jieling.logic.mission.event; + +import com.ljsd.jieling.logic.dao.UserMissionManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.mission.GameEvent; +import com.ljsd.jieling.logic.mission.GameMisionType; +import com.ljsd.jieling.logic.mission.main.HomeMissionType; +import com.ljsd.jieling.logic.mission.main.MissionStateChangeInfo; + +import java.util.List; +import java.util.Map; + +public class HomeRefreshEventProcess implements BaseGameEventProcessor { + @Override + public void onGameEvent(User user, Map> misionTypeListMap, GameEvent event, Object... parm) throws Exception { + UserMissionManager missionManager = user.getUserMissionManager(); + HomeMissionType homeMissionType = missionManager.getHomeMissionType(); + homeMissionType.openMission(user,0,null); + missionManager.setHomeMissionType(homeMissionType); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/DefaultRefreshEventProcess.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/JadeDynastyRefreshEventProcess.java similarity index 52% rename from serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/DefaultRefreshEventProcess.java rename to serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/JadeDynastyRefreshEventProcess.java index a26a91a9b..50bb11ae8 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/DefaultRefreshEventProcess.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/JadeDynastyRefreshEventProcess.java @@ -1,16 +1,21 @@ package com.ljsd.jieling.logic.mission.event; +import com.ljsd.jieling.logic.dao.UserMissionManager; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.mission.GameEvent; import com.ljsd.jieling.logic.mission.GameMisionType; +import com.ljsd.jieling.logic.mission.MissionLogic; import com.ljsd.jieling.logic.mission.main.MissionStateChangeInfo; import java.util.List; import java.util.Map; -public class DefaultRefreshEventProcess implements BaseGameEventProcessor { +public class JadeDynastyRefreshEventProcess implements BaseGameEventProcessor { @Override public void onGameEvent(User user, Map> misionTypeListMap, GameEvent event, Object... parm) throws Exception { - user.getUserMissionManager().openMission(user,event,misionTypeListMap,parm); + UserMissionManager missionManager = user.getUserMissionManager(); + //当前轮次破阵诛仙的活动ID + int jadeAid = (int) parm[0]; + MissionLogic.getInstance().resetJadeDynastyTaskInfo(user,1, jadeAid, misionTypeListMap); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/JadeDynastyWeekRefreshEventProcess.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/JadeDynastyWeekRefreshEventProcess.java new file mode 100644 index 000000000..0098a0500 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/JadeDynastyWeekRefreshEventProcess.java @@ -0,0 +1,21 @@ +package com.ljsd.jieling.logic.mission.event; + +import com.ljsd.jieling.logic.dao.UserMissionManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.mission.GameEvent; +import com.ljsd.jieling.logic.mission.GameMisionType; +import com.ljsd.jieling.logic.mission.MissionLogic; +import com.ljsd.jieling.logic.mission.main.MissionStateChangeInfo; + +import java.util.List; +import java.util.Map; + +public class JadeDynastyWeekRefreshEventProcess implements BaseGameEventProcessor { + @Override + public void onGameEvent(User user, Map> misionTypeListMap, GameEvent event, Object... parm) throws Exception { + UserMissionManager missionManager = user.getUserMissionManager(); + //当前轮次破阵诛仙的活动ID + int jadeAid = (int) parm[0]; + MissionLogic.getInstance().resetJadeDynastyTaskInfo(user,2, jadeAid, misionTypeListMap); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/MissingRefreshEventProcess.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/MissingRefreshEventProcess.java new file mode 100644 index 000000000..b9d219e62 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/MissingRefreshEventProcess.java @@ -0,0 +1,149 @@ +package com.ljsd.jieling.logic.mission.event; + +import com.ljsd.jieling.exception.ErrorCode; +import com.ljsd.jieling.exception.ErrorCodeException; +import com.ljsd.jieling.globals.BIReason; +import com.ljsd.jieling.logic.dao.UserMissionManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.mission.GameEvent; +import com.ljsd.jieling.logic.mission.GameMisionType; +import com.ljsd.jieling.logic.mission.MissionType; +import com.ljsd.jieling.logic.mission.main.MissingRoomMissionType; +import com.ljsd.jieling.logic.mission.main.MissionStateChangeInfo; +import com.ljsd.jieling.util.ItemUtil; +import config.SMazeTreasure; +import config.SMazeTreasureSetting; +import util.MathUtils; + +import java.util.*; + +public class MissingRefreshEventProcess implements BaseGameEventProcessor { + @Override + public void onGameEvent(User user, Map> misionTypeListMap, GameEvent event, Object... parm) throws Exception { + // 初始化任务 + UserMissionManager missionManager = user.getUserMissionManager(); + MissingRoomMissionType missingRoomMissionType = missionManager.getMissingRoomMissionType(); + //天宫寻宝 + Map mustAppear = new HashMap<>(); + List mustMissions = new ArrayList<>(); + List lockMissions = new ArrayList<>(); + if ((int) parm[0] == 1) { + //删除已经领取奖励的 + missingRoomMissionType.getFinishMissionIds().removeIf(value -> missingRoomMissionType.getAllMissingTime().get(value) == -1); + missingRoomMissionType.getAllMissingTime().values().removeIf(value -> value == -1); + // 任务全部锁定 + Set lockMissionIds = missingRoomMissionType.getLockMissionIds(); + if (lockMissionIds.size() >= 6) { + throw new ErrorCodeException(ErrorCode.LOCK_FILL); + } + // 读表 + SMazeTreasureSetting sMazeTreasureSetting = SMazeTreasureSetting.sMazeTreasureSetting; + boolean result = ItemUtil.itemCost(user, new int[][]{sMazeTreasureSetting.getTakeOrder()}, BIReason.MISSING_ROOM_REFRESH_CONSUME, 1); + if (!result) { + result = ItemUtil.itemCost(user, new int[][]{sMazeTreasureSetting.getRefreshItem()}, BIReason.MISSING_ROOM_REFRESH_CONSUME, 1); + if (!result) { + int coinRefreshCount = user.getPlayerInfoManager().getVipPrivilageValue(sMazeTreasureSetting.getRefreshVIP()); + int[][] cost = sMazeTreasureSetting.getCost(); + int count = (int) MathUtils.calABX(coinRefreshCount, cost[1]); + result = ItemUtil.itemCost(user, new int[][]{new int[]{cost[0][0], count}}, BIReason.MISSING_ROOM_REFRESH_CONSUME, 1); + if (!result) { + throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH); + } + user.getPlayerInfoManager().updateVipPrivilage(sMazeTreasureSetting.getRefreshVIP(), 1); + } + //高级特权 + missingRoomMissionType.privilegeRefresh(user, sMazeTreasureSetting.getHighDailyPrivilege(), mustAppear); + //豪华特权 + missingRoomMissionType.privilegeRefresh(user, sMazeTreasureSetting.getLuxuryDailyPrivilege(), mustAppear); + //非免费抽取次数必出 + missingRoomMissionType.notFreeRefreshMust(user, sMazeTreasureSetting.getRefreshHighTypeNum(), mustAppear); + // 刷新次数+1 + missingRoomMissionType.setRefreshTotalCount(missingRoomMissionType.getRefreshTotalCount() + 1); + } + + Set doingMissionIds = missingRoomMissionType.getDoingMissionIds(); + doingMissionIds.forEach((doing) -> { + if (lockMissionIds.contains(doing)) { + lockMissions.add(doing); + } + }); + + missingRoomMissionType.getDoingMissionIds().clear(); + } else { + for (int firstTask : SMazeTreasureSetting.sMazeTreasureSetting.getFirstRefresh()) { + mustMissions.add(firstTask); + } + } + + // 更新最大长度限制6条 + if (lockMissions.size() + mustAppear.size() > 6) { + // 锁定的不能动,获取特权任务数量 + int num = 6 - lockMissions.size(); + // 特权的key + Set keys = mustAppear.keySet(); + // 正序的set + Set sortSet = new TreeSet(Comparator.naturalOrder()); + // 赋值 + sortSet.addAll(keys); + // 遍历,如果数量满足,停止,不满足则删除等级小的任务 + for (Integer ints : sortSet) { + if (mustAppear.size() == num) { + break; + } + mustAppear.remove(ints); + } + } + + if (!mustAppear.isEmpty()) { + for (Map.Entry entry : mustAppear.entrySet()) { + List sMazeTreasures = SMazeTreasure.mazeMapByTaskType.get(entry.getKey()); + List mustList = new ArrayList<>(); + for (SMazeTreasure maze : sMazeTreasures) { + if (mustMissions.contains(maze.getId())) { + continue; + } + int[] refreshWeight = new int[2]; + refreshWeight[0] = maze.getId(); + refreshWeight[1] = 1; + mustList.add(refreshWeight); + } + int[][] mustArray = mustList.toArray(new int[mustList.size()][]); + int[] missions = MathUtils.randomFromWeightWithTaking(mustArray, entry.getValue()); + Arrays.stream(missions).forEach(mustMissions::add); + } + } + int[][] qualityRate = SMazeTreasureSetting.sMazeTreasureSetting.getQualityRate(); + + //根据品质来随机 + int[] qualityArray = MathUtils.randomForWeight(qualityRate, 6 - (mustMissions.size() + lockMissions.size())); + Map qualityNum = new HashMap<>(); + for (int quality : qualityArray) { + qualityNum.put(quality, qualityNum.getOrDefault(quality, 0) + 1); + } + for (Map.Entry entry : qualityNum.entrySet()) { + List sMazeTreasures = SMazeTreasure.mazeMapByTaskType.get(entry.getKey()); + int[][] treasures = new int[sMazeTreasures.size()][]; + for (int i = 0; i < sMazeTreasures.size(); i++) { + + treasures[i] = new int[2]; + treasures[i][0] = sMazeTreasures.get(i).getId(); + treasures[i][1] = 1; + } + int[] ids = MathUtils.randomFromWeightWithTaking(treasures, entry.getValue()); + for (int id : ids) { + missingRoomMissionType.addDoingMission(missingRoomMissionType.getMissionIndex() * 10000 + id); + } + } + // 必须任务 + for (int mission : mustMissions) { + missingRoomMissionType.addDoingMission(missingRoomMissionType.getMissionIndex() * 10000 + mission); + } + // 上锁任务 + for (int mission : lockMissions) { + missingRoomMissionType.addDoingMission(mission); + } + missionManager.setMissingRoomMissionType(missingRoomMissionType); + // 计算数值 + user.getUserMissionManager().calCumulationDataResult(user, (MissionType) parm[0],misionTypeListMap,parm); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/MissionEventDistributor.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/MissionEventDistributor.java index 10f07c2bb..f91ae23cd 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/MissionEventDistributor.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/MissionEventDistributor.java @@ -41,37 +41,53 @@ public class MissionEventDistributor { */ List typeList = new ArrayList<>(); /*************************************整合模板********************************************/ - // 任务初始化 - eventProcessor.put(GameEvent.HOME_TASK_INIT,new DefaultRefreshEventProcess()); + // 初始化/刷新 任务 + eventProcessor.put(GameEvent.HOME_TASK_INIT,new HomeRefreshEventProcess());// 家园任务,任务模板 + eventProcessor.put(GameEvent.DAILY_REFRESH,new DailyRefreshEventProcess());//每日任务 + eventProcessor.put(GameEvent.DONGHAIXUNXIAN_INIT, new DonghaiRefreshEventProcess()); //东海寻仙刷新 + eventProcessor.put(GameEvent.BLOODY_REFRESH,new BloodyRefreshEventProcess());//血战任务刷新 + eventProcessor.put(GameEvent.ACHIEVE_REFRESH,new AchieveRefreshEventProcess()); + eventProcessor.put(GameEvent.TREASH_REFRESH,new TreashRefreshEventProcess()); + eventProcessor.put(GameEvent.TREASH_WEEK_REFRESH,new TreashWeekRefreshEventProcess()); + eventProcessor.put(GameEvent.TREASH_MONTH_REFRESH,new TreashMonthRefreshEventProcess()); + eventProcessor.put(GameEvent.SERVENHAPPY_REFRESH,new SevenHappyRefreshEventProcess()); + eventProcessor.put(GameEvent.BEGINNER,new BeginnerRefreshEventProcess()); + eventProcessor.put(GameEvent.JADE_DYNASTY_REFRESH,new JadeDynastyRefreshEventProcess()); + eventProcessor.put(GameEvent.JADE_DYNASTY_WEEK_REFRESH,new JadeDynastyWeekRefreshEventProcess()); + eventProcessor.put(GameEvent.COW_FLY_SKY_REFRESH,new CowFlySkyRefreshEventProcess()); +// eventProcessor.put(GameEvent.ENDLESS_MISSION_REFRESH,new DefaultRefreshEventProcess()); + eventProcessor.put(GameEvent.MISTY_TRIP_REFRESH,new MistyTripRefreshEventProcess());//缥缈之旅刷新开始 + eventProcessor.put(GameEvent.MISSING_ROOM_REFRESH,new MissingRefreshEventProcess());// 迷宫寻宝任务刷新 + eventProcessor.put(GameEvent.VIP_LEVLUP,new VipRefreshEventProcess());//vip刷新 + + + // 领取奖励 + eventProcessor.put(GameEvent.HOME_TASK_REWARD,new RewardEventProcessor()); + eventProcessor.put(GameEvent.DONGHAIXUNXIAN_REWARD, new RewardEventProcessor()); + eventProcessor.put(GameEvent.VIP_MISSION_REWARD,new RewardEventProcessor()); + eventProcessor.put(GameEvent.DAILY_MISSION_REWARD,new RewardEventProcessor()); + eventProcessor.put(GameEvent.TREASURE_MISSION_REWARD,new RewardEventProcessor()); + eventProcessor.put(GameEvent.SEVENHAPPY_MISSION_REWARD,new RewardEventProcessor()); + eventProcessor.put(GameEvent.BEGINNER_MISSION_REWARD,new RewardEventProcessor()); + eventProcessor.put(GameEvent.BLOODY_MISSION_REWARD,new RewardEventProcessor()); + eventProcessor.put(GameEvent.MISSING_ROOM_MISSION_REWARD,new RewardEventProcessor()); + eventProcessor.put(GameEvent.ACHIEVE_REWARD,new RewardEventProcessor()); + eventProcessor.put(GameEvent.JADE_DYNASTY_MISSION_REWARD,new RewardEventProcessor()); + eventProcessor.put(GameEvent.COW_FLY_SKY_REWEARD,new RewardEventProcessor()); + eventProcessor.put(GameEvent.ENDLESS_MISSION_REWARD,new RewardEventProcessor()); + eventProcessor.put(GameEvent.EXPLORE_REWARD,new RewardEventProcessor()); + + // 任务进度修改 typeList.add(MissionType.HOME_ARCHITECTURE_ONE_LV); typeList.add(MissionType.HOME_ARCHITECTURE_TOTAL_LV); eventEnumListMap.put(GameEvent.HOME_TASK_UPDATE,typeList); eventProcessor.put(GameEvent.HOME_TASK_UPDATE,new CumulationDataEventProcessor()); - // 任务奖励 - eventProcessor.put(GameEvent.HOME_TASK_REWARD,new RewardEventProcessor()); - // 东海寻仙 - eventProcessor.put(GameEvent.DONGHAIXUNXIAN_INIT, new DefaultRefreshEventProcess()); - eventProcessor.put(GameEvent.DONGHAIXUNXIAN_REWARD, new RewardEventProcessor()); - eventProcessor.put(GameEvent.DONGHAIXUNXIAN_UPDATE, new OneMissionTypeUpdateProcessor()); - - eventProcessor.put(GameEvent.MISSING_ROOM_REFRESH,new CumulationDataEventProcessor()); - // 刷新任务 - eventProcessor.put(GameEvent.DAILY_REFRESH,new DefaultRefreshEventProcess()); - eventProcessor.put(GameEvent.BLOODY_REFRESH,new DefaultRefreshEventProcess()); - eventProcessor.put(GameEvent.ACHIEVE_REFRESH,new DefaultRefreshEventProcess()); - eventProcessor.put(GameEvent.TREASH_REFRESH,new DefaultRefreshEventProcess()); - eventProcessor.put(GameEvent.TREASH_WEEK_REFRESH,new DefaultRefreshEventProcess()); - eventProcessor.put(GameEvent.TREASH_MONTH_REFRESH,new DefaultRefreshEventProcess()); - eventProcessor.put(GameEvent.SERVENHAPPY_REFRESH,new DefaultRefreshEventProcess()); - eventProcessor.put(GameEvent.BEGINNER,new DefaultRefreshEventProcess()); - eventProcessor.put(GameEvent.JADE_DYNASTY_REFRESH,new DefaultRefreshEventProcess()); - eventProcessor.put(GameEvent.JADE_DYNASTY_WEEK_REFRESH,new DefaultRefreshEventProcess()); - eventProcessor.put(GameEvent.COW_FLY_SKY_REFRESH,new DefaultRefreshEventProcess()); - eventProcessor.put(GameEvent.ENDLESS_MISSION_REFRESH,new DefaultRefreshEventProcess()); - eventProcessor.put(GameEvent.MISTY_TRIP_REFRESH,new DefaultRefreshEventProcess());//缥缈之旅刷新开始 + // 用户升级 + eventProcessor.put(GameEvent.USER_LEVELUP,new UserLevelEventProcessor()); + // 抽卡任务 typeList = new ArrayList<>(); typeList.add(MissionType.RECRUITMENT_RANDOM_HEROES); typeList.add(MissionType.FABAO_DRAW_NUM); @@ -81,12 +97,6 @@ public class MissionEventDistributor { eventEnumListMap.put(GameEvent.RANDOM_HERO,typeList); eventProcessor.put(GameEvent.RANDOM_HERO,new CumulationDataEventProcessor()); - typeList = new ArrayList<>(); - typeList.add(MissionType.VIP_LEVEL); - typeList.add(MissionType.VIP_LEVEL); - eventEnumListMap.put(GameEvent.VIP_LEVLUP,typeList); - eventProcessor.put(GameEvent.VIP_LEVLUP,new CumulationDataEventProcessor()); - typeList = new ArrayList<>(); typeList.add(MissionType.COLLECT_QUALITY_HERO); typeList.add(MissionType.COLLECT_DIFFERENT_HEROS); @@ -173,20 +183,6 @@ public class MissionEventDistributor { eventEnumListMap.put(GameEvent.EXPLORE,typeList); eventProcessor.put(GameEvent.EXPLORE,new CumulationDataEventProcessor()); - // 领取奖励 - eventProcessor.put(GameEvent.VIP_MISSION_REWARD,new RewardEventProcessor()); - eventProcessor.put(GameEvent.DAILY_MISSION_REWARD,new RewardEventProcessor()); - eventProcessor.put(GameEvent.TREASURE_MISSION_REWARD,new RewardEventProcessor()); - eventProcessor.put(GameEvent.SEVENHAPPY_MISSION_REWARD,new RewardEventProcessor()); - eventProcessor.put(GameEvent.BEGINNER_MISSION_REWARD,new RewardEventProcessor()); - eventProcessor.put(GameEvent.BLOODY_MISSION_REWARD,new RewardEventProcessor()); - eventProcessor.put(GameEvent.MISSING_ROOM_MISSION_REWARD,new RewardEventProcessor()); - eventProcessor.put(GameEvent.ACHIEVE_REWARD,new RewardEventProcessor()); - eventProcessor.put(GameEvent.JADE_DYNASTY_MISSION_REWARD,new RewardEventProcessor()); - eventProcessor.put(GameEvent.COW_FLY_SKY_REWEARD,new RewardEventProcessor()); - eventProcessor.put(GameEvent.ENDLESS_MISSION_REWARD,new RewardEventProcessor()); - eventProcessor.put(GameEvent.EXPLORE_REWARD,new RewardEventProcessor()); - typeList = new ArrayList<>(); typeList.add(MissionType.HERO_BREAK_TIMES); typeList.add(MissionType.HERO_UP_STAR_TIMES); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/MistyTripRefreshEventProcess.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/MistyTripRefreshEventProcess.java new file mode 100644 index 000000000..47b947567 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/MistyTripRefreshEventProcess.java @@ -0,0 +1,34 @@ +package com.ljsd.jieling.logic.mission.event; + +import com.ljsd.jieling.logic.dao.CumulationData; +import com.ljsd.jieling.logic.dao.UserMissionManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.mission.GameEvent; +import com.ljsd.jieling.logic.mission.GameMisionType; +import com.ljsd.jieling.logic.mission.main.MissionStateChangeInfo; +import com.ljsd.jieling.logic.mission.main.MistyTripMissionType; +import config.SJourneyWithWind; +import manager.STableManager; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +public class MistyTripRefreshEventProcess implements BaseGameEventProcessor { + @Override + public void onGameEvent(User user, Map> misionTypeListMap, GameEvent event, Object... parm) throws Exception { + UserMissionManager missionManager = user.getUserMissionManager(); + MistyTripMissionType mistyTripMissionType = missionManager.getMistyTripMissionType(); + //任务开始 + if(mistyTripMissionType.getDoingMissionIds().size() != 0 || mistyTripMissionType.getFinishMissionIds().size() != 0){ + return; + } + Set journeyWithWind = STableManager.getConfig(SJourneyWithWind.class).keySet(); + mistyTripMissionType.getDoingMissionIds().clear(); + mistyTripMissionType.getFinishMissionIds().clear(); + mistyTripMissionType.getRewardedMissionIds().clear(); + mistyTripMissionType.getDoingMissionIds().addAll(journeyWithWind); + missionManager.setMistyTripMissionType(mistyTripMissionType); + missionManager.setMistyTripCumulationData(new CumulationData()); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/SevenHappyRefreshEventProcess.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/SevenHappyRefreshEventProcess.java new file mode 100644 index 000000000..af2cfa465 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/SevenHappyRefreshEventProcess.java @@ -0,0 +1,37 @@ +package com.ljsd.jieling.logic.mission.event; + +import com.ljsd.jieling.config.clazzStaticCfg.TaskStaticConfig; +import com.ljsd.jieling.logic.dao.CumulationData; +import com.ljsd.jieling.logic.dao.UserMissionManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.mission.GameEvent; +import com.ljsd.jieling.logic.mission.GameMisionType; +import com.ljsd.jieling.logic.mission.main.MissionStateChangeInfo; +import com.ljsd.jieling.logic.mission.main.ServenMissionIdsType; +import config.STreasureTaskConfig; +import manager.STableManager; + +import java.util.List; +import java.util.Map; + +public class SevenHappyRefreshEventProcess implements BaseGameEventProcessor { + @Override + public void onGameEvent(User user, Map> misionTypeListMap, GameEvent event, Object... parm) throws Exception { + UserMissionManager missionManager = user.getUserMissionManager(); + ServenMissionIdsType sevenHappyMissionType = missionManager.getSevenHappyMissionType(); + List sTreasureTaskConfigs; + int id = (int) parm[0]; + sTreasureTaskConfigs = STableManager.getFigureConfig(TaskStaticConfig.class).getsTreasureTaskConfigListByActivityMap().get(id); + sevenHappyMissionType.getDoingMissionIds().clear(); + sevenHappyMissionType.getFinishMissionIds().clear(); + sevenHappyMissionType.getRewardedMissionIds().clear(); + List servenMissionmStateChangeInfos = misionTypeListMap.get(GameMisionType.SEVENMISSION); + for (STreasureTaskConfig sTreasureTaskConfig : sTreasureTaskConfigs) { + sevenHappyMissionType.getDoingMissionIds().add(sTreasureTaskConfig.getId()); + } + CumulationData sevenHappyCumulationData = new CumulationData(); + sevenHappyMissionType.checkAndUpdateMision(user, sTreasureTaskConfigs, servenMissionmStateChangeInfos, sevenHappyCumulationData); + missionManager.setSevenHappyMissionType(sevenHappyMissionType); + missionManager.setSevenHappyCumulationData(sevenHappyCumulationData); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/TreashMonthRefreshEventProcess.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/TreashMonthRefreshEventProcess.java new file mode 100644 index 000000000..1725959e1 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/TreashMonthRefreshEventProcess.java @@ -0,0 +1,47 @@ +package com.ljsd.jieling.logic.mission.event; + +import com.ljsd.jieling.globals.BIReason; +import com.ljsd.jieling.globals.Global; +import com.ljsd.jieling.logic.OnlineUserManager; +import com.ljsd.jieling.logic.dao.Item; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.mission.GameEvent; +import com.ljsd.jieling.logic.mission.GameMisionType; +import com.ljsd.jieling.logic.mission.MissionLogic; +import com.ljsd.jieling.logic.mission.main.MissionStateChangeInfo; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.util.ItemUtil; +import com.ljsd.jieling.util.MessageUtil; +import rpc.protocols.CommonProto; +import rpc.protocols.MessageTypeProto; +import rpc.protocols.PlayerInfoProto; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class TreashMonthRefreshEventProcess implements BaseGameEventProcessor { + @Override + public void onGameEvent(User user, Map> misionTypeListMap, GameEvent event, Object... parm) throws Exception { + //当前轮次青龙秘宝的活动ID + int aid = (int) parm[0]; + user.getPlayerInfoManager().setTreasureLevel(0); + Item item = user.getItemManager().getItem(Global.TREASURE_SCORE); + if (item != null) { + if (item.getItemNum() != 0) { + Map treasureScore = new HashMap<>(); + treasureScore.put(Global.TREASURE_SCORE, (int) item.getItemNum()); + try { + ItemUtil.itemCost(user, treasureScore, BIReason.TREASURE_RESET_CONSUME, 1); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + int[] monthRefreshIds1 = MissionLogic.getInstance().resetTreasureTaskInfo(user,3, aid, misionTypeListMap); + CommonProto.RefreshTask.Builder task5 = MissionLogic.getInstance().treasureIndicationBuild(3, monthRefreshIds1); + PlayerInfoProto.TreasureRefreshIndication indication3 = PlayerInfoProto.TreasureRefreshIndication.newBuilder().addTasks(task5.build()).build(); + ISession session = OnlineUserManager.getSessionByUid(user.getId()); + MessageUtil.sendIndicationMessage(session, 1, MessageTypeProto.MessageType.TREASURE_REFRESH_INDICATION_VALUE, indication3, true); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/TreashRefreshEventProcess.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/TreashRefreshEventProcess.java new file mode 100644 index 000000000..9dbeb1391 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/TreashRefreshEventProcess.java @@ -0,0 +1,31 @@ +package com.ljsd.jieling.logic.mission.event; + +import com.ljsd.jieling.logic.OnlineUserManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.mission.GameEvent; +import com.ljsd.jieling.logic.mission.GameMisionType; +import com.ljsd.jieling.logic.mission.MissionLogic; +import com.ljsd.jieling.logic.mission.main.MissionStateChangeInfo; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.util.MessageUtil; +import rpc.protocols.CommonProto; +import rpc.protocols.MessageTypeProto; +import rpc.protocols.PlayerInfoProto; +import util.TimeUtils; + +import java.util.List; +import java.util.Map; + +public class TreashRefreshEventProcess implements BaseGameEventProcessor { + @Override + public void onGameEvent(User user, Map> misionTypeListMap, GameEvent event, Object... parm) throws Exception { + //当前轮次青龙秘宝的活动ID + int activityId = (int) parm[0]; + int[] refreshIds = MissionLogic.getInstance().resetTreasureTaskInfo(user,1, activityId, misionTypeListMap); + int dayRefreshTime = (int) (TimeUtils.getLastOrUnderHour(TimeUtils.now(), 0, 0, false) / 1000); + CommonProto.RefreshTask.Builder task = MissionLogic.getInstance().treasureIndicationBuild(1, refreshIds).setRefreshTime(dayRefreshTime); + PlayerInfoProto.TreasureRefreshIndication indication1 = PlayerInfoProto.TreasureRefreshIndication.newBuilder().addTasks(task.build()).build(); + ISession session = OnlineUserManager.getSessionByUid(user.getId()); + MessageUtil.sendIndicationMessage(session, 1, MessageTypeProto.MessageType.TREASURE_REFRESH_INDICATION_VALUE, indication1, true); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/TreashWeekRefreshEventProcess.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/TreashWeekRefreshEventProcess.java new file mode 100644 index 000000000..ee0ccd34f --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/TreashWeekRefreshEventProcess.java @@ -0,0 +1,36 @@ +package com.ljsd.jieling.logic.mission.event; + +import com.ljsd.jieling.core.VipPrivilegeType; +import com.ljsd.jieling.logic.OnlineUserManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.mission.GameEvent; +import com.ljsd.jieling.logic.mission.GameMisionType; +import com.ljsd.jieling.logic.mission.MissionLogic; +import com.ljsd.jieling.logic.mission.main.MissionStateChangeInfo; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.util.MessageUtil; +import rpc.protocols.CommonProto; +import rpc.protocols.MessageTypeProto; +import rpc.protocols.PlayerInfoProto; +import util.TimeUtils; + +import java.util.List; +import java.util.Map; + +public class TreashWeekRefreshEventProcess implements BaseGameEventProcessor { + @Override + public void onGameEvent(User user, Map> misionTypeListMap, GameEvent event, Object... parm) throws Exception { + //当前轮次青龙秘宝的活动ID + int aId = (int) parm[0]; + int[] weekRefreshIds = MissionLogic.getInstance().resetTreasureTaskInfo(user,2, aId, misionTypeListMap); + if (weekRefreshIds == null){ + return; + } + int weekRefreshTime = (int) (TimeUtils.getNextWeekendStartTime(1, 0) / 1000); + user.getPlayerInfoManager().clearVipCount(VipPrivilegeType.DRAGON_TREASURE_SUPPLY); + CommonProto.RefreshTask.Builder task2 = MissionLogic.getInstance().treasureIndicationBuild(2, weekRefreshIds).setRefreshTime(weekRefreshTime); + PlayerInfoProto.TreasureRefreshIndication indication2 = PlayerInfoProto.TreasureRefreshIndication.newBuilder().addTasks(task2.build()).build(); + ISession session = OnlineUserManager.getSessionByUid(user.getId()); + MessageUtil.sendIndicationMessage(session, 1, MessageTypeProto.MessageType.TREASURE_REFRESH_INDICATION_VALUE, indication2, true); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/UserLevelEventProcessor.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/UserLevelEventProcessor.java index 583505856..025db5219 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/UserLevelEventProcessor.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/UserLevelEventProcessor.java @@ -24,7 +24,6 @@ public class UserLevelEventProcessor implements BaseGameEventProcessor{ user.getUserMissionManager().calCumulationDataResult(user,type,misionTypeListMap,parm); } int upLevel = (int)parm[1]; - ISession session = OnlineUserManager.getSessionByUid(user.getId()); BuyGoodsNewLogic.openPush(session,user, PushRechargeType.user_level.getType(),upLevel); BuyGoodsNewLogic.sendGiftGooodsIndication(user.getId()); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/VipRefreshEventProcess.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/VipRefreshEventProcess.java new file mode 100644 index 000000000..695ba1d66 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/VipRefreshEventProcess.java @@ -0,0 +1,32 @@ +package com.ljsd.jieling.logic.mission.event; + +import com.ljsd.jieling.logic.dao.UserMissionManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.mission.GameEvent; +import com.ljsd.jieling.logic.mission.GameMisionType; +import com.ljsd.jieling.logic.mission.MissionType; +import com.ljsd.jieling.logic.mission.main.MissionStateChangeInfo; +import com.ljsd.jieling.logic.mission.main.VipMissionIdsType; +import config.SVipLevelConfig; + +import java.util.List; +import java.util.Map; + +public class VipRefreshEventProcess implements BaseGameEventProcessor { + @Override + public void onGameEvent(User user, Map> misionTypeListMap, GameEvent event, Object... parm) throws Exception { + UserMissionManager missionManager = user.getUserMissionManager(); + VipMissionIdsType vipMissionIdsType = missionManager.getVipMissionIdsType(); + // 初始化任务 + int vipLevel = (int) parm[1]; + SVipLevelConfig sVipLevelConfig = SVipLevelConfig.getsVipLevelConfigMap().get(vipLevel); + int[] openRules = sVipLevelConfig.getOpenRules(); + for (int missionId : openRules) { + vipMissionIdsType.openMission(user, missionId, misionTypeListMap.get(GameMisionType.VIPMISSION)); + } + missionManager.setVipMissionIdsType(vipMissionIdsType); + + //记录任务进度 + missionManager.calCumulationDataResult(user, (MissionType) parm[0],misionTypeListMap,parm); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/AbstractMissionType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/AbstractMissionType.java index 067fb80e4..e60e2cf31 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/AbstractMissionType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/AbstractMissionType.java @@ -2,12 +2,13 @@ package com.ljsd.jieling.logic.mission.main; import com.google.common.collect.Sets; import com.ljsd.jieling.logic.dao.CumulationData; -import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.mission.MissionState; -import com.ljsd.jieling.network.session.ISession; -import java.util.*; +import java.util.BitSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; public abstract class AbstractMissionType { //开启的任务,在可控范围内,使用map存储,利于查找 @@ -38,7 +39,6 @@ public abstract class AbstractMissionType { public abstract void calCumulationDataResult(User user,CumulationData.Result result,List missionStateChangeInfos, CumulationData cumulationData) throws Exception; - void getAllRewards(List itemAttrs){} /** * 获取全部奖励 * @param missionType @@ -99,10 +99,6 @@ public abstract class AbstractMissionType { return lockMissionIds; } - public void setLockMissionIds(Set lockMissionIds) { - this.lockMissionIds = lockMissionIds; - } - public void addLockMissionId(int missionId) { lockMissionIds.add(missionId); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/AchieveMissionIdsType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/AchieveMissionIdsType.java index 8a795eda6..9f206d7a9 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/AchieveMissionIdsType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/AchieveMissionIdsType.java @@ -17,6 +17,11 @@ import java.util.Set; public class AchieveMissionIdsType extends AbstractMissionType{ @Override public void openMission(User user, int missionId, List missionTypeEnumList) { + this.getDoingMissionIds().clear(); + this.getFinishMissionIds().clear(); + this.getRewardedMissionIds().clear(); + Set ds = STableManager.getConfig(SAchievementConfig.class).keySet(); + this.getDoingMissionIds().addAll(ds); } @Override diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/DailyMissionIdsType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/DailyMissionIdsType.java index 4707e3fba..ee30022aa 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/DailyMissionIdsType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/DailyMissionIdsType.java @@ -9,10 +9,8 @@ import com.ljsd.jieling.logic.mission.MissionState; import com.ljsd.jieling.logic.mission.data.AbstractDataManager; import com.ljsd.jieling.logic.mission.data.BaseDataManager; import com.ljsd.jieling.logic.mission.data.DataManagerDistributor; -import com.ljsd.jieling.util.ItemUtil; import config.SDailyTasksConfig; -import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Set; @@ -32,7 +30,7 @@ public class DailyMissionIdsType extends AbstractMissionType{ return sDailyTasksConfigById.getReward(); } - public void rewardMission( User user, int missionId, List missionTypeEnumListMap){ + public void rewardMission(User user, int missionId, List missionTypeEnumListMap){ if (!getFinishMissionIds().contains(missionId)) { return ; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/ServenMissionIdsType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/ServenMissionIdsType.java index 7d3371fc8..4919b5667 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/ServenMissionIdsType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/ServenMissionIdsType.java @@ -14,7 +14,6 @@ import com.ljsd.jieling.logic.mission.event.MissionEventDistributor; import config.STreasureTaskConfig; import manager.STableManager; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; @@ -43,7 +42,7 @@ public class ServenMissionIdsType extends AbstractMissionType{ checkAndUpdateMision(user,sTaskConfigs,missionStateChangeInfos,cumulationData); } - public void checkAndUpdateMision(User user,List sTaskConfigs, List missionStateChangeInfos, CumulationData cumulationData) throws Exception { + public void checkAndUpdateMision(User user, List sTaskConfigs, List missionStateChangeInfos, CumulationData cumulationData) throws Exception { Set doingMissionIds = getDoingMissionIds(); for (STreasureTaskConfig sTaskConfig : sTaskConfigs) { int missionId = sTaskConfig.getId(); @@ -67,7 +66,6 @@ public class ServenMissionIdsType extends AbstractMissionType{ isFinish = doingProgress >= sTaskConfig.getTaskValue()[1][0]; } - if((doingProgress!=0 && finishParm<0 && ( doingProgress)>=finishParm)){ doingMissionIds.remove(sTaskConfig.getId()); getFinishMissionIds().add(sTaskConfig.getId()); @@ -75,17 +73,18 @@ public class ServenMissionIdsType extends AbstractMissionType{ missionStateChangeInfos.add(missionStateChangeInfo); continue; } + if(finishParm<0){ continue; } if (!isFinish) { - MissionStateChangeInfo doingInfo = new MissionStateChangeInfo(missionId, - MissionState.DOING, doingProgress); + MissionStateChangeInfo doingInfo = new MissionStateChangeInfo(missionId, MissionState.DOING, doingProgress); boolean flag = false; for (MissionStateChangeInfo missionStateChangeInfo : missionStateChangeInfos) { if (missionStateChangeInfo.getMissionId() == missionId) { flag = true; + break; } } if (!flag) { @@ -94,15 +93,8 @@ public class ServenMissionIdsType extends AbstractMissionType{ continue; } - MissionStateChangeInfo finishInfo = new MissionStateChangeInfo(missionId, - MissionState.FINISH, finishParm); - Iterator iterator = missionStateChangeInfos.iterator(); - while (iterator.hasNext()) { - MissionStateChangeInfo next = iterator.next(); - if (next.getMissionId() == missionId) { - iterator.remove(); - } - } + MissionStateChangeInfo finishInfo = new MissionStateChangeInfo(missionId, MissionState.FINISH, finishParm); + missionStateChangeInfos.removeIf(next -> next.getMissionId() == missionId); missionStateChangeInfos.add(finishInfo); doingMissionIds.remove(missionId); getFinishMissionIds().add(missionId); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/VipMissionIdsType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/VipMissionIdsType.java index 5cc6fe736..37118e322 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/VipMissionIdsType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/VipMissionIdsType.java @@ -11,15 +11,15 @@ import com.ljsd.jieling.logic.mission.data.BaseDataManager; import com.ljsd.jieling.logic.mission.data.DataManagerDistributor; import config.STaskConfig; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; public class VipMissionIdsType extends AbstractMissionType{ - private Map vipRewardMap = Maps.newHashMap();//vip等级奖励领取情况 + private final Map vipRewardMap = Maps.newHashMap();//vip等级奖励领取情况 public VipMissionIdsType(){ + } @Override @@ -31,17 +31,9 @@ public class VipMissionIdsType extends AbstractMissionType{ boolean isFinish = MissionLoigc.getDoingProgress(user,user.getUserMissionManager().getCumulationData(),sTaskConfig.getTaskType(),sTaskConfig.getTaskValue()[0])>=sTaskConfig.getTaskValue()[1][0]; if(!isFinish){ addDoingMission(missionId); - /* MissionStateChangeInfo doingInfo = new MissionStateChangeInfo(missionId, - MissionState.DOING, null); - missionTypeEnumList.add(doingInfo);*/ }else{ addFinishMissionId(missionId); - /* MissionStateChangeInfo finishInfo = new MissionStateChangeInfo(missionId, - MissionState.FINISH, null); - missionTypeEnumList.add(finishInfo);*/ } - - } @Override @@ -79,6 +71,7 @@ public class VipMissionIdsType extends AbstractMissionType{ for (MissionStateChangeInfo missionStateChangeInfo : missionStateChangeInfos) { if (missionStateChangeInfo.getMissionId() == missionId) { flag = true; + break; } } if (!flag) { @@ -86,20 +79,12 @@ public class VipMissionIdsType extends AbstractMissionType{ } continue; } - MissionStateChangeInfo finishInfo = new MissionStateChangeInfo(missionId, - MissionState.FINISH, null); - Iterator iterator = missionStateChangeInfos.iterator(); - while (iterator.hasNext()){ - MissionStateChangeInfo next = iterator.next(); - if(next.getMissionId() == missionId){ - iterator.remove(); - } - } + MissionStateChangeInfo finishInfo = new MissionStateChangeInfo(missionId, MissionState.FINISH, null); + missionStateChangeInfos.removeIf(next -> next.getMissionId() == missionId); missionStateChangeInfos.add(finishInfo); doingMissionIds.remove(missionId); getFinishMissionIds().add(missionId); } - } public Map getVipRewardMap() { 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 fb6021e46..ee9ac742e 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 @@ -309,7 +309,7 @@ public class PlayerLogic { vipLevelStateResponse.addVipState(keyVal); }); - user.getUserMissionManager().onGameEvent(user,GameEvent.VIP_LEVLUP,playerInfoManager.getVipLevel()); + user.getUserMissionManager().onGameEvent(user,GameEvent.VIP_LEVLUP,MissionType.VIP_LEVEL,playerInfoManager.getVipLevel()); CombatLogic.getInstance().getNewAdventureReward(user, true,TimeUtils.nowInt()); List missionList = new ArrayList<>(); MissionLoigc.getVipMission(user,missionList); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java index e283e0bd7..1a5fe8a66 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java @@ -818,10 +818,10 @@ public class ItemUtil { if (sItem.getItemType() == GlobalItemType.TRANSFORMATION_CARD){ long count = itemNum; while (count >= Integer.MAX_VALUE){ - user.getUserMissionManager().onGameEvent(user, GameEvent.DONGHAIXUNXIAN_UPDATE,MissionType.GET_TRANSFIGURATION_CARD_NUM,sItem.getQuantity(),Integer.MAX_VALUE); + user.getUserMissionManager().onGameEvent(user, GameEvent.ONE_MISSION_TYPE_CONSUME,MissionType.GET_TRANSFIGURATION_CARD_NUM,sItem.getQuantity(),Integer.MAX_VALUE); count-=Integer.MAX_VALUE; } - user.getUserMissionManager().onGameEvent(user, GameEvent.DONGHAIXUNXIAN_UPDATE,MissionType.GET_TRANSFIGURATION_CARD_NUM,sItem.getQuantity(),(int)count); + user.getUserMissionManager().onGameEvent(user, GameEvent.ONE_MISSION_TYPE_CONSUME,MissionType.GET_TRANSFIGURATION_CARD_NUM,sItem.getQuantity(),(int)count); } int eventType = ParamEventBean.UserItemEvent; @@ -986,7 +986,7 @@ public class ItemUtil { if (playerInfoManager.getLevel() > oldLevel) { // ReportUtil.onReportEvent(user, ReportEventEnum.LEVEL_UP.getType(),oldLevel,playerInfoManager.getLevel()-oldLevel,playerInfoManager.getLevel()); - user.getUserMissionManager().onGameEvent(user, GameEvent.ONE_MISSION_TYPE_CONSUME,MissionType.USER_LEVEL,oldLevel+1,playerInfoManager.getLevel()); + user.getUserMissionManager().onGameEvent(user, GameEvent.USER_LEVELUP,MissionType.USER_LEVEL,oldLevel+1,playerInfoManager.getLevel()); } // 家园建筑解锁 @@ -2072,7 +2072,7 @@ public class ItemUtil { } } // 触发任务,东海寻仙 - user.getUserMissionManager().onGameEvent(user,GameEvent.DONGHAIXUNXIAN_UPDATE,MissionType.HAVE_ID_STAR_LV_POKEMON_NUM); + user.getUserMissionManager().onGameEvent(user,GameEvent.ONE_MISSION_TYPE_CONSUME,MissionType.HAVE_ID_STAR_LV_POKEMON_NUM); } /**