From 55dc3c50af9e5af87bce6258b8d2c5e3d9fee6e7 Mon Sep 17 00:00:00 2001 From: duhui Date: Thu, 25 Mar 2021 14:07:35 +0800 Subject: [PATCH] =?UTF-8?q?=E7=89=9B=E6=B0=94=E5=86=B2=E5=A4=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../logic/activity/AbstractActivity.java | 2 +- .../jieling/logic/activity/ActivityType.java | 3 +- .../logic/activity/ActivityTypeEnum.java | 15 +- .../logic/activity/CowFlySkyActivity.java | 103 ++++++++ .../logic/activity/DefaultEmptyActivity.java | 7 - .../jieling/logic/dao/UserMissionManager.java | 242 ++++++++++-------- .../ljsd/jieling/logic/mission/GameEvent.java | 3 + .../jieling/logic/mission/GameMisionType.java | 1 + .../jieling/logic/mission/MissionLoigc.java | 83 ++++-- .../jieling/logic/mission/MissionType.java | 2 +- .../mission/data/DataManagerDistributor.java | 1 + .../logic/mission/data/GetHeroManager.java | 1 - .../mission/event/CowFlySkyEventProcess.java | 16 ++ .../event/MissionEventDistributor.java | 18 +- .../mission/main/CowFlySkyMissionType.java | 61 +++++ .../mission/main/MissingRoomMissionType.java | 6 +- .../src/main/java/config/SArroGantFly.java | 49 ++++ 17 files changed, 463 insertions(+), 150 deletions(-) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/logic/activity/CowFlySkyActivity.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/CowFlySkyEventProcess.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/CowFlySkyMissionType.java create mode 100644 tablemanager/src/main/java/config/SArroGantFly.java 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 84ec1a432..50a720a37 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 @@ -247,7 +247,7 @@ public abstract class AbstractActivity implements IActivity, IEventHandler { /** * 领奖后更新奖励进度 */ - private void checkAndSetProgress(ActivityMission activityMission, ActivityProgressInfo activityProgressInfo, int missionId) { + public void checkAndSetProgress(ActivityMission activityMission, ActivityProgressInfo activityProgressInfo, int missionId) { activityProgressInfo.setState(ActivityType.HAD_TAKED); activityMission.getActivityMissionMap().put(missionId, activityProgressInfo); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityType.java index 7a688afbc..43827bedf 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityType.java @@ -78,7 +78,8 @@ public interface ActivityType { int ITEMS_STORE= 6000;//百宝商会 int TRIAL_EXPERT = 70;//幻境达人 int SHEJI_ACTIVITY = 60;//社稷大典 - int GOOD_LUCK= 61;//扭转乾坤 + int GOOD_LUCK= 61;//扭转乾坤 + int COW_FLY_SKY = 62;//牛气冲天 int SUB_ACTIVITY = 8000;//易经宝库 int SKIN_RECHARGE_ACTIVITY = 71; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityTypeEnum.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityTypeEnum.java index a10ca1a31..ff68e42fa 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityTypeEnum.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityTypeEnum.java @@ -66,6 +66,7 @@ public enum ActivityTypeEnum { DEMON_TREASURE(ActivityType.DEMON_TREASURE,LimitRandomSpecialMonsterActivity::new), NEW_GENERAL_ATTACK(ActivityType.NEW_GENERAL_ATTACK,DefaultEmptyActivity::new), GOOD_LUCK(ActivityType.GOOD_LUCK,DefaultEmptyActivity::new), + COW_FLY_SKY(ActivityType.COW_FLY_SKY,CowFlySkyActivity::new), ; private int type; @@ -95,16 +96,16 @@ public enum ActivityTypeEnum { return abstractActivity; } - //相同类型不同活动id需要处理处理多次事件 + /** + * 相同类型不同活动id需要处理处理多次事件 + * @param id + * @return + */ public static AbstractActivity getActicityType(int id) { SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(id); -// for (ActivityTypeEnum activityType:ActivityTypeEnum.values()) { -// if(activityType.getType()==sGlobalActivity.getType()){ -// return activityType.toActivity(id); -// } -// } - if (activityEnumMap.containsKey(sGlobalActivity.getType())) + if (activityEnumMap.containsKey(sGlobalActivity.getType())){ return activityEnumMap.get(sGlobalActivity.getType()).toActivity(id); + } return null; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/CowFlySkyActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/CowFlySkyActivity.java new file mode 100644 index 000000000..a71a85566 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/CowFlySkyActivity.java @@ -0,0 +1,103 @@ +package com.ljsd.jieling.logic.activity; + +import com.ljsd.jieling.exception.ErrorCode; +import com.ljsd.jieling.exception.ErrorCodeException; +import com.ljsd.jieling.globals.BIReason; +import com.ljsd.jieling.jbean.ActivityMission; +import com.ljsd.jieling.jbean.ActivityProgressInfo; +import com.ljsd.jieling.logic.dao.Item; +import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.mission.GameEvent; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.util.ItemUtil; +import com.ljsd.jieling.util.MessageUtil; +import config.SActivityRewardConfig; +import config.SArroGantFly; +import config.SGlobalActivity; +import manager.STableManager; +import rpc.protocols.CommonProto; +import rpc.protocols.PlayerInfoProto; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +public class CowFlySkyActivity extends AbstractActivity { + + CowFlySkyActivity(int id) { + super(id); + } + + @Override + public void initActivity(User user) throws Exception { + ActivityMission mission = new ActivityMission(); + List rewardConfigs = SActivityRewardConfig.getsActivityRewardConfigByActivityId(id); + ArrayList integers = new ArrayList<>(rewardConfigs.size()); + rewardConfigs.forEach(v->integers.add(v.getId())); + ActivityLogic.getInstance().initOtherMission(mission, integers); + user.getActivityManager().getActivityMissionMap().put(id, mission); + + user.getUserMissionManager().onGameEvent(user, GameEvent.COW_FLY_SKY_REFRESH, id); + LOGGER.info("牛气冲天活动刷新..."); + } + + @Override + public boolean takeReward(ISession session, int missionId) throws Exception { + User user = UserManager.getUser(session.getUid()); + //checkAndUpdate cfg + SActivityRewardConfig config = SActivityRewardConfig.getsActivityRewardConfigByMissionId(missionId); + if (config == null || config.getActivityId() != id) { + throw new ErrorCodeException(ErrorCode.CFG_NULL,"功能不存在:"+missionId); + } + + // 验证数据库中 任务信息是否正确 + ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(id); + if (mission == null){ + throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE,"数据错误"); + } + if (mission.getActivityState() != ActivityType.OPEN_STATE || mission.getOpenType() == 0) { + throw new ErrorCodeException(ErrorCode.ACTIVITY_NOT_OPEN,"活动未开启"); + } + ActivityProgressInfo progressInfo = mission.getActivityMissionMap().get(missionId); + if (progressInfo == null || progressInfo.getState() == ActivityType.HAD_TAKED) { + throw new ErrorCodeException(ErrorCode.newDefineCode("活动奖励已经领取")); + } + + // 是否满足领取条件值 + if (!checkValue(user,config.getValues())) { + LOGGER.error("the uid={} the misionId={},the missionProgress={},the require is={} ", session.getUid(), config.getId(), progressInfo.getProgrss(), config.getValues()); + throw new ErrorCodeException(ErrorCode.newDefineCode("未达到领取条件")); + } + // 更改任务状态 + checkAndSetProgress(mission,progressInfo,missionId); + //up miss + int[][] reward = config.getReward(); + // reward + CommonProto.Drop.Builder drop = ItemUtil.drop(user, reward, BIReason.TAKE_ACTIVITY_REWARD); + PlayerInfoProto.TakeActivityRewardResponse build = PlayerInfoProto.TakeActivityRewardResponse.newBuilder().setDrop(drop).build(); + MessageUtil.sendMessage(session, 1, rewardResponseValue, build, true); + // 状态推送 + sendActivityProgress(session, mission, null); + // 打点上报 + reportTakeActivityReward(user,reward,missionId); + return true; + } + + private boolean checkValue(User user,int[][] value){ + Item item = user.getItemManager().getItem(value[0][0]); + return item.getItemNum() >= value[1][0]; + } + + @Override + public void onActivityEndOnMySelf(User user) throws Exception { + // 牛气冲天 活动结束会清空道具 + int removeItemId = SActivityRewardConfig.getsActivityRewardConfigByActivityId(id).get(0).getValues()[0][0]; + Item item = user.getItemManager().getItem(removeItemId); + if (item != null) { + int[][] cost = new int[1][]; + cost[0] = new int[]{item.getItemId(), (int) item.getItemNum()}; + ItemUtil.itemCost(user, cost, BIReason.EXCHANGE_ACTIVITY_CLOSE, id); + } + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/DefaultEmptyActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/DefaultEmptyActivity.java index fa121adb5..d32d69b00 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/DefaultEmptyActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/DefaultEmptyActivity.java @@ -47,13 +47,6 @@ public class DefaultEmptyActivity extends AbstractActivity{ sevenHappyMissionType.getFinishMissionIds().remove(sTreasureTaskConfig.getId()); sevenHappyMissionType.getRewardedMissionIds().set(sTreasureTaskConfig.getId()); user.getUserMissionManager().setSevenHappyMissionType(sevenHappyMissionType); - /* SSevenDaysScore sSevenDaysScore = SSevenDaysScore.SSevenDaysScoreByActivityIdAndScoreMap.get(id).get(senvenScores); - if(null!=sSevenDaysScore){ - String mailReward = ItemUtil.getMailReward(sSevenDaysScore.getReward()); - String title= SErrorCodeEerverConfig.getI18NMessage("opencarnival_activity_"+id+"_title"); - String content = SErrorCodeEerverConfig.getI18NMessage("opencarnival_activity_"+id+"_txt",new String[]{Integer.toString(senvenScores)}); - MailLogic.getInstance().sendMail(user.getId(),title,content,mailReward,(int)(System.currentTimeMillis()/1000), Global.MAIL_EFFECTIVE_TIME); - }*/ } }else if(sGlobalActivity.getType() == ActivityType.EXCHANGEANDDROP || sGlobalActivity.getType() == ActivityType.NEW_GENERAL_ATTACK){ // 限时兑换和新将来袭活动结束会清空道具 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java index 4a1f0a29e..12cac8d16 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java @@ -54,7 +54,10 @@ public class UserMissionManager extends MongoBase { private BloodyMissionIdsType bloodyMissionIdsType =new BloodyMissionIdsType(); private MissingRoomMissionType missingRoomMissionType = new MissingRoomMissionType(); private AchieveMissionIdsType achievementMissionTypMap = new AchieveMissionIdsType(); - private JadeDynastyMissionType jadeDynastyMissionType = new JadeDynastyMissionType();//破阵诛仙任务 + //破阵诛仙任务 + private JadeDynastyMissionType jadeDynastyMissionType = new JadeDynastyMissionType(); + // 牛气冲天活动任务 + private CowFlySkyMissionType cowFlySkyMissionType = new CowFlySkyMissionType(); //数据累加项 private CumulationData cumulationData = new CumulationData(); @@ -69,87 +72,97 @@ public class UserMissionManager extends MongoBase { private CumulationData jadeDynastyCumulationData = new CumulationData();//破阵诛仙日数据 private CumulationData jadeDynastyWeekCumulationData = new CumulationData();//破阵诛仙周数据 - //触发任务上身 - public void openMission(User user,GameEvent event,Map> missionTypeEnumListMap, Object... parm) throws Exception { - ISession session= OnlineUserManager.getSessionByUid(user.getId()); - switch (event){ - case VIP_LEVLUP:{ - int vipLevle= (int)parm[0]; + /** + * 触发任务上身 + * @param user + * @param event + * @param missionTypeEnumListMap + * @param parm + * @throws Exception + */ + public void openMission(User user, GameEvent event, Map> 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)); + for (int missionId : openRules) { + vipMissionIdsType.openMission(user, missionId, missionTypeEnumListMap.get(GameMisionType.VIPMISSION)); } - updateString("vipMissionIdsType",vipMissionIdsType); + updateString("vipMissionIdsType", vipMissionIdsType); break; } case DAILY_REFRESH: Set missionIds = SDailyTasksConfig.config.keySet(); - int type = (int)parm[0]; - if(type == 0){ + 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("dailyCumulationData", dailyCumulationData); } - updateString("dailyMissionIdsType",dailyMissionIdsType); + updateString("dailyMissionIdsType", dailyMissionIdsType); break; case TREASH_REFRESH: - int activityId = (int) parm[0];//当前轮次青龙秘宝的活动ID - int[] refreshIds = resetTreasureTaskInfo(1,activityId,missionTypeEnumListMap,treasureCumulationData); + //当前轮次青龙秘宝的活动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); + 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); + MessageUtil.sendIndicationMessage(session, 1, MessageTypeProto.MessageType.TREASURE_REFRESH_INDICATION_VALUE, indication1, true); break; case TREASH_WEEK_REFRESH: - int aId = (int) parm[0];//当前轮次青龙秘宝的活动ID - int[] weekRefreshIds = resetTreasureTaskInfo(2,aId,missionTypeEnumListMap,treasureWeekCumulationData); - if(weekRefreshIds != null){ + //当前轮次青龙秘宝的活动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); + int weekRefreshTime = (int) (TimeUtils.getNextWeekendStartTime(1, 0) / 1000); user.getPlayerInfoManager().clearVipCount(VipPrivilegeType.DRAGON_TREASURE_SUPPLY); - CommonProto.RefreshTask.Builder task2= treasureIndicationBuild(2, weekRefreshIds).setRefreshTime(weekRefreshTime); + 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); + MessageUtil.sendIndicationMessage(session, 1, MessageTypeProto.MessageType.TREASURE_REFRESH_INDICATION_VALUE, indication2, true); } break; case TREASH_MONTH_REFRESH: - int aid = (int) parm[0];//当前轮次青龙秘宝的活动ID + //当前轮次青龙秘宝的活动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()); + 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); + ItemUtil.itemCost(user, treasureScore, BIReason.TREASURE_RESET_CONSUME, 1); } catch (Exception e) { e.printStackTrace(); } } } treasureMonthCumulationData = new CumulationData(); - int[] monthRefreshIds1 = resetTreasureTaskInfo(3,aid,missionTypeEnumListMap,treasureMonthCumulationData); + int[] monthRefreshIds1 = resetTreasureTaskInfo(3, aid, missionTypeEnumListMap, treasureMonthCumulationData); -// CommonProto.RefreshTask.Builder task3 = treasureIndicationBuild(1, dailyRefreshIds1); -// CommonProto.RefreshTask.Builder task4 = treasureIndicationBuild(2, weekRefreshIds1); 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); + MessageUtil.sendIndicationMessage(session, 1, MessageTypeProto.MessageType.TREASURE_REFRESH_INDICATION_VALUE, indication3, true); break; case JADE_DYNASTY_REFRESH: - int jadeAId = (int) parm[0];//当前轮次破阵诛仙的活动ID - int[] mIds = resetJadeDynastyTaskInfo(1,jadeAId,missionTypeEnumListMap,jadeDynastyCumulationData); - jadeDynastyCumulationData = new CumulationData(); + //当前轮次破阵诛仙的活动ID + int jadeAId = (int) parm[0]; + resetJadeDynastyTaskInfo(1, jadeAId, missionTypeEnumListMap, jadeDynastyCumulationData); break; case JADE_DYNASTY_WEEK_REFRESH: - int jadeAid = (int) parm[0];//当前轮次破阵诛仙的活动ID - int[] weekMIds = resetJadeDynastyTaskInfo(2,jadeAid,missionTypeEnumListMap,jadeDynastyWeekCumulationData); - if(weekMIds != null){ + //当前轮次破阵诛仙的活动ID + int jadeAid = (int) parm[0]; + int[] weekMIds = resetJadeDynastyTaskInfo(2, jadeAid, missionTypeEnumListMap, jadeDynastyWeekCumulationData); + if (weekMIds != null) { jadeDynastyWeekCumulationData = new CumulationData(); } break; @@ -160,98 +173,107 @@ public class UserMissionManager extends MongoBase { sevenHappyMissionType.getFinishMissionIds().clear(); sevenHappyMissionType.getRewardedMissionIds().clear(); List servenMissionmStateChangeInfos = missionTypeEnumListMap.get(GameMisionType.SEVENMISSION); - for(STreasureTaskConfig sTreasureTaskConfig : sTreasureTaskConfigs){ + for (STreasureTaskConfig sTreasureTaskConfig : sTreasureTaskConfigs) { sevenHappyMissionType.getDoingMissionIds().add(sTreasureTaskConfig.getId()); } - sevenHappyCumulationData= new CumulationData(); - sevenHappyMissionType.checkAndUpdateMision(user,sTreasureTaskConfigs,servenMissionmStateChangeInfos,sevenHappyCumulationData); + sevenHappyCumulationData = new CumulationData(); + sevenHappyMissionType.checkAndUpdateMision(user, sTreasureTaskConfigs, servenMissionmStateChangeInfos, sevenHappyCumulationData); updateString("sevenHappyMissionType", sevenHappyMissionType); updateString("sevenHappyCumulationData", sevenHappyCumulationData); break; case BEGINNER: - for(Integer id : SBeginnerTask.sBeginnerTaskCongigMap.keySet()){ + for (Integer id : SBeginnerTask.sBeginnerTaskCongigMap.keySet()) { beginerTaskIdsType.addDoingMission(id); } - beginCumulationData= new CumulationData(); + beginCumulationData = new CumulationData(); updateString("beginerTaskIdsType", beginerTaskIdsType); updateString("beginCumulationData", beginCumulationData); break; case BLOODY_REFRESH: - Set bloodyMissionIds =STableManager.getConfig(SBloodyBattleTask.class).keySet(); + Set bloodyMissionIds = STableManager.getConfig(SBloodyBattleTask.class).keySet(); bloodyMissionIdsType.getDoingMissionIds().clear(); bloodyMissionIdsType.getFinishMissionIds().clear(); bloodyMissionIdsType.getRewardedMissionIds().clear(); bloodyMissionIdsType.getDoingMissionIds().addAll(bloodyMissionIds); - updateString("bloodyMissionIdsType",bloodyMissionIdsType); + updateString("bloodyMissionIdsType", bloodyMissionIdsType); break; case ACHIEVE_REFRESH: - Set ds =STableManager.getConfig(SAchievementConfig.class).keySet(); + 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); + achievementMap = new CumulationData(); + updateString("achievementMissionTypMap", achievementMissionTypMap); + updateString("achievementMap", achievementMap); break; - case MISSING_ROOM_REFRESH://天宫寻宝 - Map mustAppear = new HashMap<>(); + + case COW_FLY_SKY_REFRESH: + // 牛气冲天 + Set arro = STableManager.getConfig(SArroGantFly.class).keySet(); + cowFlySkyMissionType.getDoingMissionIds().clear(); + cowFlySkyMissionType.getFinishMissionIds().clear(); + cowFlySkyMissionType.getRewardedMissionIds().clear(); + cowFlySkyMissionType.getDoingMissionIds().addAll(arro); + updateString("cowFlySkyMissionType", cowFlySkyMissionType); + break; + case MISSING_ROOM_REFRESH: + //天宫寻宝 + Map mustAppear = new HashMap<>(); List mustMissions = new ArrayList<>(); List lockMissions = new ArrayList<>(); - if((int)parm[0]==1){ + if ((int) parm[0] == 1) { //删除已经领取奖励的 - missingRoomMissionType.getFinishMissionIds().removeIf(value->missingRoomMissionType.getAllMissingTime().get(value)==-1); - missingRoomMissionType.getAllMissingTime().values().removeIf(value->value==-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){ + 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){ + if (!result) { result = ItemUtil.itemCost(user, new int[][]{sMazeTreasureSetting.getRefreshItem()}, BIReason.MISSING_ROOM_REFRESH_CONSUME, 1); - if(!result){ + if (!result) { int coinRefreshCount = user.getPlayerInfoManager().getVipPrivilageValue(sMazeTreasureSetting.getRefreshVIP()); int[][] cost = sMazeTreasureSetting.getCost(); - int count = (int)MathUtils.calABX(coinRefreshCount, cost[1]); + 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){ + if (!result) { throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH); } - user.getPlayerInfoManager().updateVipPrivilage(sMazeTreasureSetting.getRefreshVIP(),1); + user.getPlayerInfoManager().updateVipPrivilage(sMazeTreasureSetting.getRefreshVIP(), 1); } //高级特权 - missingRoomMissionType.privilegeRefresh(user,sMazeTreasureSetting.getHighDailyPrivilege(),mustAppear); + missingRoomMissionType.privilegeRefresh(user, sMazeTreasureSetting.getHighDailyPrivilege(), mustAppear); //豪华特权 - missingRoomMissionType.privilegeRefresh(user,sMazeTreasureSetting.getLuxuryDailyPrivilege(),mustAppear); + missingRoomMissionType.privilegeRefresh(user, sMazeTreasureSetting.getLuxuryDailyPrivilege(), mustAppear); //非免费抽取次数必出 - missingRoomMissionType.notFreeRefreshMust(user,sMazeTreasureSetting.getRefreshHighTypeNum(),mustAppear); + missingRoomMissionType.notFreeRefreshMust(user, sMazeTreasureSetting.getRefreshHighTypeNum(), mustAppear); // 刷新次数+1 - missingRoomMissionType.setRefreshTotalCount(missingRoomMissionType.getRefreshTotalCount()+1); + missingRoomMissionType.setRefreshTotalCount(missingRoomMissionType.getRefreshTotalCount() + 1); } Set doingMissionIds = missingRoomMissionType.getDoingMissionIds(); - doingMissionIds.forEach((doing)->{ - if (lockMissionIds.contains(doing)){ + doingMissionIds.forEach((doing) -> { + if (lockMissionIds.contains(doing)) { lockMissions.add(doing); } }); missingRoomMissionType.getDoingMissionIds().clear(); - }else{ - for(int firstTask:SMazeTreasureSetting.sMazeTreasureSetting.getFirstRefresh()){ + } else { + for (int firstTask : SMazeTreasureSetting.sMazeTreasureSetting.getFirstRefresh()) { mustMissions.add(firstTask); } } // 更新最大长度限制6条 - if (lockMissions.size() + mustAppear.size() > 6){ + if (lockMissions.size() + mustAppear.size() > 6) { // 锁定的不能动,获取特权任务数量 int num = 6 - lockMissions.size(); // 特权的key @@ -261,20 +283,20 @@ public class UserMissionManager extends MongoBase { // 赋值 sortSet.addAll(keys); // 遍历,如果数量满足,停止,不满足则删除等级小的任务 - for (Integer ints:sortSet){ - if (mustAppear.size() == num){ + for (Integer ints : sortSet) { + if (mustAppear.size() == num) { break; } mustAppear.remove(ints); } } - if(!mustAppear.isEmpty()){ - for(Map.Entry entry:mustAppear.entrySet()){ + 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())){ + for (SMazeTreasure maze : sMazeTreasures) { + if (mustMissions.contains(maze.getId())) { continue; } int[] refreshWeight = new int[2]; @@ -283,52 +305,45 @@ public class UserMissionManager extends MongoBase { mustList.add(refreshWeight); } int[][] mustArray = mustList.toArray(new int[mustList.size()][]); - int[] missions = MathUtils.randomFromWeightWithTaking(mustArray, entry.getValue()); - Arrays.stream(missions).forEach(mission->mustMissions.add(mission)); + int[] missions = MathUtils.randomFromWeightWithTaking(mustArray, entry.getValue()); + Arrays.stream(missions).forEach(mission -> mustMissions.add(mission)); } } int[][] qualityRate = SMazeTreasureSetting.sMazeTreasureSetting.getQualityRate(); -// List missingRoomMission = new ArrayList<>(); -// for(Map.Entry entry:SMazeTreasure.sMazeTreasureMap.entrySet()){ -// int[] refreshWeight = new int[2]; -// refreshWeight[0] = entry.getKey(); -// refreshWeight[1] = entry.getValue().getTaskRefreshProbability(); -// missingRoomMission.add(refreshWeight); -// } + //根据品质来随机 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); + Map qualityNum = new HashMap<>(); + for (int quality : qualityArray) { + qualityNum.put(quality, qualityNum.getOrDefault(quality, 0) + 1); } - for(Map.Entry entry:qualityNum.entrySet()){ + for (Map.Entry entry : qualityNum.entrySet()) { List sMazeTreasures = SMazeTreasure.mazeMapByTaskType.get(entry.getKey()); int[][] treasures = new int[sMazeTreasures.size()][]; - for(int i = 0 ; i missionList){ + CowFlySkyMissionType missionType = user.getUserMissionManager().getCowFlySkyMissionType(); + + // 进行中 + Set doingMissionIds = missionType.getDoingMissionIds(); + // 可领取 + Set finishMissionIds = missionType.getFinishMissionIds(); + // 已领取 + BitSet rewardedMissionIds = missionType.getRewardedMissionIds(); + + Collection values = STableManager.getConfig(SArroGantFly.class).values(); + values.forEach(v->{ + int id = v.getId(); + CommonProto.UserMissionInfo.Builder info = CommonProto.UserMissionInfo.newBuilder(); + info.setMissionId(id); + info.setType(GameMisionType.COWFLYSKYMISSION.getType()); + if (doingMissionIds.contains(id)){ + info.setState(MissionState.DOING.getState()); + } + if (finishMissionIds.contains(id)){ + info.setState(MissionState.FINISH.getState()); + } + if (rewardedMissionIds.get(id)){ + info.setState(MissionState.REWARD.getState()); + } + missionList.add(info.build()); + }); + } + /** * 获取天宫寻宝任务列表 * @param user @@ -399,12 +434,22 @@ public class MissionLoigc { } - public static void takeMissionReward(ISession session,int type,int missionId) throws Exception { + + /** + * 领取任务奖励 + * @param session + * @param type + * @param missionId + * @throws Exception + */ + public static void takeMissionReward(ISession session,int type,int missionId) throws Exception { int uid = session.getUid(); User user = UserManager.getUser(uid); UserMissionManager userMissionManager = user.getUserMissionManager(); List missionStateChangeInfos = null; - if(type == GameMisionType.BLOODYMISSION.getType()){ //vip 任务 + + //BLOODY 任务 + if(type == GameMisionType.BLOODYMISSION.getType()){ Map> gameMisionTypeListMap = userMissionManager.onGameEvent(user, GameEvent.BLOODY_MISSION_REWARD, missionId); missionStateChangeInfos = gameMisionTypeListMap.get(GameMisionType.BLOODYMISSION); if(missionStateChangeInfos.isEmpty()){ @@ -414,16 +459,16 @@ public class MissionLoigc { CommonProto.Drop.Builder drop = ItemUtil.drop(user, new int[]{rewardGroup}, 1.0f, 0, BIReason.TAKE_MISSION_REWARD); PlayerInfoProto.TakeMissionRewardResponse build = PlayerInfoProto.TakeMissionRewardResponse.newBuilder().setDrop(drop).build(); MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.TAKE_MISSION_REWARD_RESPONSE_VALUE,build,true); -// KtEventUtils.onKtEvent(user, ParamEventBean.UserTaskEvent,type,missionId); -// Repot37EventUtil.onKtEvent(user, Repot37EventUtil.Report37EventType.TASK_FINISH_EVEMT,missionId,""); ReportUtil.onReportEvent(user, ReportEventEnum.MISSION_COMPLETE.getType(),missionId,GameMisionType.BLOODYMISSION.toString()); return; } - if(type == GameMisionType.VIPMISSION.getType()){ //vip 任务 + //vip 任务 + if(type == GameMisionType.VIPMISSION.getType()){ Map> gameMisionTypeListMap = userMissionManager.onGameEvent(user, GameEvent.VIP_MISSION_REWARD, missionId); missionStateChangeInfos = gameMisionTypeListMap.get(GameMisionType.VIPMISSION); } - if(type == GameMisionType.DAILYMISSION.getType()){ //日常 任务 + //日常 任务 + if(type == GameMisionType.DAILYMISSION.getType()){ Map> gameMisionTypeListMap = userMissionManager.onGameEvent(user, GameEvent.DAILY_MISSION_REWARD, missionId); missionStateChangeInfos = gameMisionTypeListMap.get(GameMisionType.DAILYMISSION); SDailyTasksConfig sDailyTasksConfig = SDailyTasksConfig.getSDailyTasksConfigById(missionId); @@ -431,12 +476,13 @@ public class MissionLoigc { user.getUserMissionManager().onGameEvent(user,GameEvent.TAKE_DAILY_BOX_REWARD); } } - - if(type == GameMisionType.BEGINNERMISSION.getType()){ //新手 任务 + //新手 任务 + if(type == GameMisionType.BEGINNERMISSION.getType()){ Map> gameMisionTypeListMap = userMissionManager.onGameEvent(user, GameEvent.BEGINNER_MISSION_REWARD, missionId); missionStateChangeInfos = gameMisionTypeListMap.get(GameMisionType.BEGINNERMISSION); } - if(type == GameMisionType.COPYMISSION.getType()){ //副本 任务 + //副本 任务 + if(type == GameMisionType.COPYMISSION.getType()){ Set takeCopyMisionRewards = user.getMapManager().getTakeCopyMisionRewards(); if(takeCopyMisionRewards.contains(missionId)){ throw new ErrorCodeException(ErrorCode.newDefineCode("had taked reward")); @@ -460,8 +506,8 @@ public class MissionLoigc { return; } + // 藏宝任务 if(type == GameMisionType.TREASUREMISSION.getType()){ - Map> gameMisionTypeListMap = userMissionManager.onGameEvent(user, GameEvent.TREASURE_MISSION_REWARD, missionId); missionStateChangeInfos = gameMisionTypeListMap.get(GameMisionType.TREASUREMISSION); if(missionStateChangeInfos!=null && !missionStateChangeInfos.isEmpty()){ @@ -476,8 +522,9 @@ public class MissionLoigc { } } + // 破阵诛仙任务 if(type == GameMisionType.JADE_DYNASTY_MISSION.getType()){ - Map> gameMisionTypeListMap = userMissionManager.onGameEvent(user, GameEvent.JADE_DYNASTY_MISSION_REWARD, missionId); + Map> gameMisionTypeListMap = userMissionManager.onGameEvent(user, GameEvent.JADE_DYNASTY_MISSION_REWARD, missionId); missionStateChangeInfos = gameMisionTypeListMap.get(GameMisionType.JADE_DYNASTY_MISSION); if(missionStateChangeInfos!=null && !missionStateChangeInfos.isEmpty()){ KtEventUtils.onKtEvent(user, ParamEventBean.UserTaskEvent,type,missionId); @@ -489,15 +536,25 @@ public class MissionLoigc { } } + // 牛气冲天 活动任务 + if (type == GameMisionType.COWFLYSKYMISSION.getType()){ + Map> gameMisionTypeListMap = userMissionManager.onGameEvent(user, GameEvent.COW_FLY_SKY_REWEARD, missionId); + missionStateChangeInfos = gameMisionTypeListMap.get(GameMisionType.COWFLYSKYMISSION); + } + + // 七日 任务 if(type == GameMisionType.SEVENMISSION.getType()){ Map> gameMisionTypeListMap = userMissionManager.onGameEvent(user, GameEvent.SEVENHAPPY_MISSION_REWARD, missionId); missionStateChangeInfos = gameMisionTypeListMap.get(GameMisionType.SEVENMISSION); } + + // 天宫寻宝 任务 if(type==GameMisionType.MISSINGROOMMISSION.getType()){ Map> gameMisionTypeListMap = userMissionManager.onGameEvent(user, GameEvent.MISSING_ROOM_MISSION_REWARD, missionId); missionStateChangeInfos = gameMisionTypeListMap.get(GameMisionType.MISSINGROOMMISSION); } + // 成就 任务 if(type==GameMisionType.ACHIEVEMISSION.getType()){ Map> gameMisionTypeListMap = userMissionManager.onGameEvent(user, GameEvent.ACHIEVE_REWARD, missionId); missionStateChangeInfos = gameMisionTypeListMap.get(GameMisionType.ACHIEVEMISSION); @@ -505,14 +562,10 @@ public class MissionLoigc { if(missionStateChangeInfos!=null && !missionStateChangeInfos.isEmpty()){ CommonProto.Drop.Builder drop = ItemUtil.drop(user, missionStateChangeInfos.get(0).getRewwardGroups(), BIReason.TAKE_MISSION_REWARD); - // user.getUserMissionManager().onGameEvent(user,GameEvent.DAILY_TASK_TYPE,missionId,user); ReportUtil.onReportEvent(user, ReportEventEnum.MISSION_COMPLETE.getType(),String.valueOf(missionId),type); PlayerInfoProto.TakeMissionRewardResponse build = PlayerInfoProto.TakeMissionRewardResponse.newBuilder().setDrop(drop).build(); MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.TAKE_MISSION_REWARD_RESPONSE_VALUE,build,true); -// KtEventUtils.onKtEvent(user, ParamEventBean.UserTaskEvent,type,missionId); -// Repot37EventUtil.onKtEvent(user, Repot37EventUtil.Report37EventType.TASK_FINISH_EVEMT,missionId,""); }else{ - //MessageUtil.sendErrorResponse(session,0, MessageTypeProto.MessageType.TAKE_MISSION_REWARD_RESPONSE_VALUE,"mission can not get reward"); throw new ErrorCodeException(ErrorCode.newDefineCode("mission can not get reward")); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionType.java index 9cbaf8a28..220a34548 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionType.java @@ -134,7 +134,7 @@ public enum MissionType { return missionType; } - private MissionType(int missionType) { + MissionType(int missionType) { this.missionType = missionType; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/DataManagerDistributor.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/DataManagerDistributor.java index a7a878ef8..d210db01f 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/DataManagerDistributor.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/DataManagerDistributor.java @@ -142,6 +142,7 @@ public class DataManagerDistributor { judges.put(MissionType.CHAMPIONSHIP_RANK, new ChampionshipRankManager()); judges.put(MissionType.PLAY_MINI_GAME_TIMES, new PlayMiniGameTimesManager()); + // 鸿蒙阵 judges.put(MissionType.HONGMENG_RESONANCE_LATTICE, new HongMengResonanceDataManager()); judges.put(MissionType.HONGMENG_TABLET_LEVEL, new HongMengLevelDataManager()); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/GetHeroManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/GetHeroManager.java index 24cc03ef1..88f8e0a28 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/GetHeroManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/GetHeroManager.java @@ -12,7 +12,6 @@ public class GetHeroManager implements BaseDataManager { int heroStar = (int)parm[1]; CumulationData.Result result = null; if(missionType == MissionType.COLLECT_QUALITY_HERO){ - SCHero scHero = SCHero.getsCHero().get(heroTid); data.updateHeroQualityCount(heroStar); result = new CumulationData.Result(missionType); }else if(missionType == MissionType.COLLECT_DIFFERENT_HEROS){ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/CowFlySkyEventProcess.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/CowFlySkyEventProcess.java new file mode 100644 index 000000000..cd6c5cb7b --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/CowFlySkyEventProcess.java @@ -0,0 +1,16 @@ +package com.ljsd.jieling.logic.mission.event; + +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 java.util.List; +import java.util.Map; + +public class CowFlySkyEventProcess implements BaseGameEventProcessor { + @Override + public void onGameEvent(User user, Map> misionTypeListMap, GameEvent event, Object... parm) throws Exception { + user.getUserMissionManager().openMission(user,event,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 c9acb6227..1c6016810 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 @@ -29,7 +29,7 @@ public class MissionEventDistributor { public static void init(){ - + // 刷新任务 eventProcessor.put(GameEvent.MISSING_ROOM_REFRESH,new CumulationDataEventProcessor()); eventProcessor.put(GameEvent.DAILY_REFRESH,new DailyRefreshEventProcess()); eventProcessor.put(GameEvent.BLOODY_REFRESH,new DailyRefreshEventProcess()); @@ -41,7 +41,7 @@ public class MissionEventDistributor { eventProcessor.put(GameEvent.BEGINNER,new BeginneRefreshEventProcessor()); eventProcessor.put(GameEvent.JADE_DYNASTY_REFRESH,new JadeDynastyRefreshEventProcess()); eventProcessor.put(GameEvent.JADE_DYNASTY_WEEK_REFRESH,new JadeDynastyRefreshEventProcess()); - + eventProcessor.put(GameEvent.COW_FLY_SKY_REFRESH,new CowFlySkyEventProcess()); List typeList = new ArrayList<>(); typeList.add(MissionType.REFRESH_MISSING_ROOM); @@ -182,7 +182,7 @@ public class MissionEventDistributor { eventEnumListMap.put(GameEvent.ADVENTURE_TAKEREWARD,typeList); eventProcessor.put(GameEvent.ADVENTURE_TAKEREWARD,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()); @@ -192,7 +192,7 @@ public class MissionEventDistributor { 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()); typeList = new ArrayList<>(); typeList.add(MissionType.RING_FIREA_DVANCED); @@ -417,6 +417,7 @@ public class MissionEventDistributor { eventEnumListMap.put(GameEvent.PLAY_MINI_GAME, typeList); eventProcessor.put(GameEvent.PLAY_MINI_GAME, new CumulationDataEventProcessor()); + // 鸿蒙碑 typeList = new ArrayList<>(); typeList.add(MissionType.HONGMENG_RESONANCE_LATTICE); eventEnumListMap.put(GameEvent.HONGMENG_RESONANCE_LATTICE, typeList); @@ -455,7 +456,7 @@ public class MissionEventDistributor { missionTypeEnumListMap.put(GameMisionType.MISSINGROOMMISSION, new ArrayList<>()); missionTypeEnumListMap.put(GameMisionType.ACHIEVEMISSION, new ArrayList<>()); missionTypeEnumListMap.put(GameMisionType.JADE_DYNASTY_MISSION, new ArrayList<>()); - + missionTypeEnumListMap.put(GameMisionType.COWFLYSKYMISSION, new ArrayList<>()); } else { missionTypeEnumListMap.get(GameMisionType.VIPMISSION).clear(); @@ -468,7 +469,7 @@ public class MissionEventDistributor { missionTypeEnumListMap.get(GameMisionType.MISSINGROOMMISSION).clear(); missionTypeEnumListMap.get(GameMisionType.ACHIEVEMISSION).clear(); missionTypeEnumListMap.get(GameMisionType.JADE_DYNASTY_MISSION).clear(); - + missionTypeEnumListMap.get(GameMisionType.COWFLYSKYMISSION).clear(); } threadMissionChangeList.set(missionTypeEnumListMap); @@ -504,7 +505,10 @@ public class MissionEventDistributor { if(gameMisionType==GameMisionType.MISSINGROOMMISSION){ continue; } - if(gameMisionType == GameMisionType.COPYMISSION || gameMisionType == GameMisionType.TREASUREMISSION || gameMisionType == GameMisionType.SEVENMISSION || gameMisionType == GameMisionType.BLOODYMISSION|| gameMisionType == GameMisionType.ACHIEVEMISSION || gameMisionType == GameMisionType.JADE_DYNASTY_MISSION){ + if(gameMisionType == GameMisionType.COPYMISSION || gameMisionType == GameMisionType.TREASUREMISSION + || gameMisionType == GameMisionType.SEVENMISSION || gameMisionType == GameMisionType.BLOODYMISSION + || gameMisionType == GameMisionType.ACHIEVEMISSION || gameMisionType == GameMisionType.JADE_DYNASTY_MISSION + || gameMisionType == GameMisionType.COWFLYSKYMISSION ){ progress = missionStateChangeInfo.getProgress(); } if(missionState == MissionState.DOING){ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/CowFlySkyMissionType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/CowFlySkyMissionType.java new file mode 100644 index 000000000..dace6d767 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/CowFlySkyMissionType.java @@ -0,0 +1,61 @@ +package com.ljsd.jieling.logic.mission.main; + +import com.ljsd.jieling.logic.dao.CumulationData; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.mission.MissionLoigc; +import com.ljsd.jieling.logic.mission.MissionState; +import config.SArroGantFly; +import manager.STableManager; + +import java.util.Collection; +import java.util.List; +import java.util.Set; + +public class CowFlySkyMissionType extends AbstractMissionType { + + @Override + public void openMission(User user, int missionId, List missionTypeEnumList) { + + } + + @Override + public int[][] reward(int missionId) { + SArroGantFly arroGantFly = STableManager.getConfig(SArroGantFly.class).get(missionId); + return arroGantFly.getReward(); + } + + @Override + public void calCumulationDataResult(User user, CumulationData.Result result, List missionStateChangeInfos, CumulationData cumulationData) throws Exception { + // 进行中得任务 + Set doingMissionIds = getDoingMissionIds(); + + Collection values = STableManager.getConfig(SArroGantFly.class).values(); + for (SArroGantFly fly : values) { + // 任务子id + int id = fly.getId(); + // 不在执行中 + if(!doingMissionIds.contains(id)){ + continue; + } + // 获取任务进度 + int num = MissionLoigc.getDoingProgress(user, cumulationData, fly.getValues(), fly.getValuesII()[0]); + // 是否完成 + boolean isFinish = num >= fly.getValuesII()[1][0]; + if (!isFinish) { + // 未完成 + MissionStateChangeInfo doingInfo = new MissionStateChangeInfo(id, MissionState.DOING, num); + missionStateChangeInfos.add(doingInfo); + continue; + } + // 清除旧信息(进行中) + missionStateChangeInfos.removeIf(v->v.getMissionId()==id); + // 添加新信息(可领取) + MissionStateChangeInfo finishInfo = new MissionStateChangeInfo(id,MissionState.FINISH, fly.getReward()); + missionStateChangeInfos.add(finishInfo); + // 任务列表更新 + doingMissionIds.remove(id); + getFinishMissionIds().add(id); + + } + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/MissingRoomMissionType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/MissingRoomMissionType.java index 4fad7c8d9..c9ed46d1c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/MissingRoomMissionType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/MissingRoomMissionType.java @@ -186,11 +186,9 @@ public class MissingRoomMissionType extends AbstractMissionType{ * @param mustAppear */ public void notFreeRefreshMust(User user, int[][] refreshHighTypeNum,Map mustAppear){ - int refreshTotalCount = user.getUserMissionManager().getMissingRoomMissionType().getRefreshTotalCount(); + int count = user.getUserMissionManager().getMissingRoomMissionType().getRefreshTotalCount(); for(int[] refresh:refreshHighTypeNum){ - if(refreshTotalCount==0||refreshTotalCount%refresh[0]!=0){ - continue; - }else{ + if(count!=0 && count%refresh[0]==0){ mustAppear.put(refresh[1],mustAppear.get(refresh[1])==null?1:(mustAppear.get(refresh[1])+1)); } } diff --git a/tablemanager/src/main/java/config/SArroGantFly.java b/tablemanager/src/main/java/config/SArroGantFly.java new file mode 100644 index 000000000..7c17e236a --- /dev/null +++ b/tablemanager/src/main/java/config/SArroGantFly.java @@ -0,0 +1,49 @@ +package config; + +import manager.STableManager; +import manager.Table; + +import java.util.Map; + +@Table(name ="ArroGantFly") +public class SArroGantFly implements BaseConfig { + + private int id; + + private int activityId; + + private int values; + + private int[][] valuesII; + + private int[][] reward; + + + @Override + public void init() throws Exception { + + } + + + public int getId() { + return id; + } + + public int getActivityId() { + return activityId; + } + + public int getValues() { + return values; + } + + public int[][] getValuesII() { + return valuesII; + } + + public int[][] getReward() { + return reward; + } + + +} \ No newline at end of file