diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/hardStage/StartHardStageRequestHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/hardStage/StartHardStageRequestHandler.java index 3c34cefff..07f7ab320 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/hardStage/StartHardStageRequestHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/hardStage/StartHardStageRequestHandler.java @@ -184,6 +184,7 @@ public class StartHardStageRequestHandler extends BaseHandler toActivityFunction; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/MistyTripActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/MistyTripActivity.java new file mode 100644 index 000000000..92f83e4b1 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/MistyTripActivity.java @@ -0,0 +1,119 @@ +package com.ljsd.jieling.logic.activity; + +import com.ljsd.jieling.globals.BIReason; +import com.ljsd.jieling.jbean.ActivityMission; +import com.ljsd.jieling.jbean.ActivityProgressInfo; +import com.ljsd.jieling.logic.OnlineUserManager; +import com.ljsd.jieling.logic.activity.AbstractActivity; +import com.ljsd.jieling.logic.activity.event.GoldEvent; +import com.ljsd.jieling.logic.activity.event.IEvent; +import com.ljsd.jieling.logic.activity.event.MistyTripEvent; +import com.ljsd.jieling.logic.activity.event.Poster; +import com.ljsd.jieling.logic.dao.MainLevelManager; +import com.ljsd.jieling.logic.dao.UserManager; +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.main.BeginerTaskIdsType; +import com.ljsd.jieling.logic.mission.main.MistyTripMissionType; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.util.ItemUtil; +import com.ljsd.jieling.util.MessageUtil; +import config.SActivityRewardConfig; +import config.SGlobalActivity; +import config.SJourneyWithWind; +import rpc.protocols.CommonProto; +import rpc.protocols.PlayerInfoProto; +import util.TimeUtils; + +import java.util.Collections; +import java.util.List; +import java.util.Map; + +public class MistyTripActivity extends AbstractActivity { + + public MistyTripActivity(int id) { + super(id); + Poster.getPoster().listenEvent(this, MistyTripEvent.class); + } + + @Override + public void onEvent(IEvent event) throws Exception { + if (!(event instanceof MistyTripEvent)) + return; + //update(UserManager.getUser(((MistyTripEvent) event).getUserId()),((MistyTripEvent) event).getNum()); + updataRefeshByMissionId(UserManager.getUser(((MistyTripEvent) event).getUserId()), ((MistyTripEvent) event).getRewardId(), ((MistyTripEvent) event).getNum()); + } + + + + public void updataRefeshByMissionId (User user, int rewardId,int num){ + if(user == null){ + return; + } + ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(id); + if( null == activityMission){ + return; + } + //相同类型的更新 + Map activityProgressInfoMap = activityMission.getActivityMissionMap(); + if(!activityProgressInfoMap.containsKey(rewardId)){ + return; + } + activityProgressInfoMap.get(rewardId).setProgrss( activityProgressInfoMap.get(rewardId).getProgrss() + num); + + //更新进度 + ISession sessionByUid = OnlineUserManager.getSessionByUid(user.getId()); + sendActivityProgress(sessionByUid, activityMission, null); + + + } + @Override + public void initActivity(User user) throws Exception { + //初始化所有事件 主线关卡 心魔试炼 山河社稷 大闹天宫 最高战力 + user.getUserMissionManager().onGameEvent(user, GameEvent.MISTY_TRIP_REFRESH); + } + + @Override + public boolean takeReward(ISession session, int missionId) throws Exception { + User user = UserManager.getUser(session.getUid()); + long userCreateTime = user.getPlayerInfoManager().getCreateTime(); + int days = TimeUtils.getSoFarWentDays(userCreateTime, TimeUtils.now())+1; + + SActivityRewardConfig config = SActivityRewardConfig.getsActivityRewardConfigByMissionId(missionId); + if(config == null){ + return false; + } + if(days >= config.getValues()[0][1]){ + return super.takeReward(session,missionId); + } + /* if (missionId != -1) { + return super.takeReward(session, missionId); + } + User user = UserManager.getUser(session.getUid()); + SActivityRewardConfig cfg = SActivityRewardConfig.getsActivityRewardConfigByMissionId(id); + int day = cfg.getValues()[0][1]; + List listId = SJourneyWithWind.getsTaskConfigByDay(day); + + UserMissionManager userMissionManager = user.getUserMissionManager(); + MistyTripMissionType mistyTripMissionType = userMissionManager.getMistyTripMissionType(); + for(int id:listId){ + if(!mistyTripMissionType.getFinishMissionIds().contains(id)){ + return false; + } + } + for(int id:listId){ + mistyTripMissionType.getRewardedMissionIds().set(id); + } + mistyTripMissionType.getFinishMissionIds().removeAll(listId); + //up miss + int[][] reward = cfg.getReward(); + 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); + return true;*/ + return false; + } + +} + diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/MistyTripEvent.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/MistyTripEvent.java new file mode 100644 index 000000000..0688f6ebc --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/MistyTripEvent.java @@ -0,0 +1,41 @@ +package com.ljsd.jieling.logic.activity.event; + +/** + * 飘渺之旅 + */ +public class MistyTripEvent implements IEvent { + + private int userId; + private int rewardId; + private int num; + + public MistyTripEvent(int userId, int missionId, int num) { + this.userId = userId; + this.rewardId = missionId; + this.num = num; + } + + public int getUserId() { + return userId; + } + + public void setUserId(int userId) { + this.userId = userId; + } + + public int getRewardId() { + return rewardId; + } + + public void setRewardId(int rewardId) { + this.rewardId = rewardId; + } + + public int getNum() { + return num; + } + + public void setNum(int num) { + this.num = num; + } +} 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 ed9b9e1c3..ceff8f6b2 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 @@ -60,6 +60,8 @@ public class UserMissionManager extends MongoBase { private CowFlySkyMissionType cowFlySkyMissionType = new CowFlySkyMissionType(); private EndlessMissionType endlessMissionType = new EndlessMissionType(); + //缥缈之旅 + private MistyTripMissionType mistyTripMissionType = new MistyTripMissionType(); //数据累加项 private CumulationData cumulationData = new CumulationData(); @@ -74,6 +76,7 @@ public class UserMissionManager extends MongoBase { private CumulationData jadeDynastyCumulationData = new CumulationData();//破阵诛仙日数据 private CumulationData jadeDynastyWeekCumulationData = new CumulationData();//破阵诛仙周数据 private CumulationData endlessTask = new CumulationData();//无尽副本任务数据 + private CumulationData mistyTripCumulationData = new CumulationData();//缥缈之旅数据 /** * 触发任务上身 @@ -233,6 +236,19 @@ public class UserMissionManager extends MongoBase { updateString("endlessMissionType", endlessMissionType); updateString("endlessTask", this.endlessTask); + 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: //天宫寻宝 @@ -566,6 +582,23 @@ public class UserMissionManager extends MongoBase { } + //缥缈之旅 + if(!mistyTripMissionType.getDoingMissionIds().isEmpty() ){ + + Map endlessConfig = STableManager.getConfig(SEndlessTask.class); + if(endlessConfig!=null&&endlessConfig.size()!=0){ + CumulationData.Result result= mistyTripCumulationData.updateData(missionType, parm); + if(result!=null){ + mistyTripMissionType.calCumulationDataResult(user,result,missionTypeEnumListMap.get(GameMisionType.MISTY_TRIP_MISSION),mistyTripCumulationData); + updateString("mistyTripMissionType",mistyTripMissionType); + updateString("mistyTripCumulationData",mistyTripCumulationData); + } + } + + } + + + // 公用任务类型,累计次数形式 CumulationData.Result result = cumulationData.updateData(missionType, parm); if(result!=null){ @@ -808,4 +841,12 @@ public class UserMissionManager extends MongoBase { public CumulationData getEndlessTask() { return endlessTask; } + + public MistyTripMissionType getMistyTripMissionType() { + return mistyTripMissionType; + } + + public CumulationData getMistyTripCumulationData() { + return mistyTripCumulationData; + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/expedition/ExpeditionLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/expedition/ExpeditionLogic.java index 604f8f97e..7c548cc8a 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/expedition/ExpeditionLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/expedition/ExpeditionLogic.java @@ -216,6 +216,7 @@ public class ExpeditionLogic { //updata lay user.getExpeditionManager().setLay(newlay); user.getUserMissionManager().onGameEvent(user, GameEvent.EXPEDITION_TIMES); + user.getUserMissionManager().onGameEvent(user, GameEvent.MISTY_TRIP); return nodeInfos; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/GameEvent.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/GameEvent.java index 9981a3650..ff48b2a0b 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/GameEvent.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/GameEvent.java @@ -125,4 +125,6 @@ public enum GameEvent { HARSTAGE_NODE,//山河社稷图通关章节 GUILD_BOSS_ROOM,//公会boos副本 + MISTY_TRIP_REFRESH,//缥缈之旅刷新 + MISTY_TRIP,//缥缈之旅 } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/GameMisionType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/GameMisionType.java index d65829a03..91edf20d4 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/GameMisionType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/GameMisionType.java @@ -12,7 +12,8 @@ public enum GameMisionType { ACHIEVEMISSION(9), JADE_DYNASTY_MISSION(10),//破阵诛仙任务 COWFLYSKYMISSION(11),//牛气冲天 - ENDLESS_MISSION(12) + ENDLESS_MISSION(12), + MISTY_TRIP_MISSION(13),//缥缈之旅 ; private int type; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLoigc.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLoigc.java index 4652f9437..5434952a2 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLoigc.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionLoigc.java @@ -57,6 +57,7 @@ public class MissionLoigc { getJadeDynastyMission(user, missionList); getCowFlySkyMission(user,missionList); getEndlessMission(user,missionList); + getMistyTripMission(user,missionList); PlayerInfoProto.GetMissionResponse build = PlayerInfoProto.GetMissionResponse.newBuilder().addAllUserMissionInfo(missionList).build(); MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.GET_MISSION_RESPONSE_VALUE,build,true); } @@ -406,6 +407,31 @@ public class MissionLoigc { }); } + public static void getMistyTripMission(User user,List missionList){ + UserMissionManager userMissionManager = user.getUserMissionManager(); + MistyTripMissionType dailyMissionIdsType = userMissionManager.getMistyTripMissionType(); + CumulationData dailyCumulationData = userMissionManager.getMistyTripCumulationData(); + Set doingMissionIds = dailyMissionIdsType.getDoingMissionIds(); + Set finishMissionIds = dailyMissionIdsType.getFinishMissionIds(); + //Map config = SDailyTasksConfig.config; + + Map config = STableManager.getConfig(SJourneyWithWind.class); + //sJourneyWithWind + int dailymissionType = GameMisionType.MISTY_TRIP_MISSION.getType(); + for(SJourneyWithWind journeyWithWind:config.values()){ + int state = 2; + int missionId = journeyWithWind.getId(); + int progrss = journeyWithWind.getTaskValue()[1][0]; + if(doingMissionIds.contains(missionId)){ + state = 0; + progrss = getDoingProgress(user,dailyCumulationData,journeyWithWind.getTaskType(),journeyWithWind.getTaskValue()[0]); + }else if(finishMissionIds.contains(missionId)){ + state = 1; + } + missionList.add(CommonProto.UserMissionInfo.newBuilder().setMissionId(missionId).setState(state).setType(dailymissionType).setProgress(progrss).build()); + } + } + /** * 获取天宫寻宝任务列表 * @param user diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/HardStageStarsDataManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/HardStageStarsDataManager.java index 4494c2ec9..ec2f7bbcb 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/HardStageStarsDataManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/HardStageStarsDataManager.java @@ -9,8 +9,10 @@ import com.ljsd.jieling.logic.mission.MissionType; public class HardStageStarsDataManager implements BaseDataManager { @Override public CumulationData.Result updateData(CumulationData data, MissionType missionType, Object... parm) { - int nums = (int)parm[0]; - data.setHardstage_stars(nums); + if(parm.length !=0){ + int nums = (int)parm[0]; + data.setHardstage_stars(nums); + } return new CumulationData.Result(missionType); } } 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 9c664cc28..3d584d565 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 @@ -43,6 +43,7 @@ public class MissionEventDistributor { eventProcessor.put(GameEvent.JADE_DYNASTY_WEEK_REFRESH,new JadeDynastyRefreshEventProcess()); eventProcessor.put(GameEvent.COW_FLY_SKY_REFRESH,new CowFlySkyEventProcess()); eventProcessor.put(GameEvent.ENDLESS_MISSION_REFRESH,new EndlessMissionRefreshProcess()); + eventProcessor.put(GameEvent.MISTY_TRIP_REFRESH,new MistyTripMissionRefreshProcess());//缥缈之旅刷新开始 List typeList = new ArrayList<>(); typeList.add(MissionType.REFRESH_MISSING_ROOM); @@ -185,6 +186,16 @@ public class MissionEventDistributor { eventEnumListMap.put(GameEvent.ADVENTURE_TAKEREWARD,typeList); eventProcessor.put(GameEvent.ADVENTURE_TAKEREWARD,new CumulationDataEventProcessor()); + //缥缈之旅 + typeList = new ArrayList<>(); + typeList.add(MissionType.LEVEL_STORY_PASS);//通关奖励 + typeList.add(MissionType.HARSTAGE_STARS);//山河社稷累积星数 + typeList.add(MissionType.MONSTER_ATTACK_LEVEL);//心魔试炼通关层数 + typeList.add(MissionType.USER_FORCE);//战力 + typeList.add(MissionType.FINISH_EXPEDITION_HERO_TIMES);//大闹天宫完成次数 + eventEnumListMap.put(GameEvent.MISTY_TRIP,typeList); + eventProcessor.put(GameEvent.MISTY_TRIP,new MistyTripEventProcessor()); + // 领取奖励 eventProcessor.put(GameEvent.VIP_MISSION_REWARD,new RewardEventProcessor()); eventProcessor.put(GameEvent.DAILY_MISSION_REWARD,new RewardEventProcessor()); @@ -519,6 +530,7 @@ public class MissionEventDistributor { missionTypeEnumListMap.put(GameMisionType.JADE_DYNASTY_MISSION, new ArrayList<>()); missionTypeEnumListMap.put(GameMisionType.COWFLYSKYMISSION, new ArrayList<>()); missionTypeEnumListMap.put(GameMisionType.ENDLESS_MISSION, new ArrayList<>()); + missionTypeEnumListMap.put(GameMisionType.MISTY_TRIP_MISSION, new ArrayList<>()); } else { @@ -534,7 +546,7 @@ public class MissionEventDistributor { missionTypeEnumListMap.get(GameMisionType.JADE_DYNASTY_MISSION).clear(); missionTypeEnumListMap.get(GameMisionType.COWFLYSKYMISSION).clear(); missionTypeEnumListMap.get(GameMisionType.ENDLESS_MISSION).clear(); - + missionTypeEnumListMap.get(GameMisionType.MISTY_TRIP_MISSION).clear(); } threadMissionChangeList.set(missionTypeEnumListMap); @@ -573,7 +585,7 @@ public class MissionEventDistributor { if(gameMisionType == GameMisionType.COPYMISSION || gameMisionType == GameMisionType.TREASUREMISSION || gameMisionType == GameMisionType.SEVENMISSION || gameMisionType == GameMisionType.BLOODYMISSION || gameMisionType == GameMisionType.ACHIEVEMISSION || gameMisionType == GameMisionType.JADE_DYNASTY_MISSION - || gameMisionType == GameMisionType.COWFLYSKYMISSION||gameMisionType==GameMisionType.ENDLESS_MISSION){ + || gameMisionType == GameMisionType.COWFLYSKYMISSION||gameMisionType==GameMisionType.ENDLESS_MISSION||gameMisionType==GameMisionType.MISTY_TRIP_MISSION){ progress = missionStateChangeInfo.getProgress(); } if(missionState == MissionState.DOING){ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/MistyTripEventProcessor.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/MistyTripEventProcessor.java new file mode 100644 index 000000000..a80a7f265 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/MistyTripEventProcessor.java @@ -0,0 +1,31 @@ +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.MissionType; +import com.ljsd.jieling.logic.mission.main.MissionStateChangeInfo; + +import java.util.List; +import java.util.Map; + +public class MistyTripEventProcessor implements BaseGameEventProcessor{ + @Override + public void onGameEvent(User user, Map> misionTypeListMap, GameEvent event, Object... parm) throws Exception { + List typeList = MissionEventDistributor.eventEnumListMap.get(event); + if(parm.length >0){ + user.getUserMissionManager().calCumulationDataResult(user, MissionType.LEVEL_STORY_PASS ,misionTypeListMap,parm); + }else{ + for (MissionType type : typeList) { + //大闹天宫 不计数 + if(type == MissionType.FINISH_EXPEDITION_HERO_TIMES){ + continue; + } + if(type!= MissionType.LEVEL_STORY_PASS ){ + user.getUserMissionManager().calCumulationDataResult(user,type,misionTypeListMap,parm); + } + } + } + + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/MistyTripMissionRefreshProcess.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/MistyTripMissionRefreshProcess.java new file mode 100644 index 000000000..8db406cea --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/MistyTripMissionRefreshProcess.java @@ -0,0 +1,17 @@ +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 MistyTripMissionRefreshProcess 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/main/MistyTripMissionType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/MistyTripMissionType.java new file mode 100644 index 000000000..f8d1593f9 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/main/MistyTripMissionType.java @@ -0,0 +1,98 @@ +package com.ljsd.jieling.logic.mission.main; + +import com.ljsd.jieling.logic.activity.event.MistyTripEvent; +import com.ljsd.jieling.logic.activity.event.Poster; +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 com.ljsd.jieling.logic.mission.data.AbstractDataManager; +import com.ljsd.jieling.logic.mission.data.BaseDataManager; +import com.ljsd.jieling.logic.mission.data.DataManagerDistributor; +import config.SJourneyWithWind; + +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +public class MistyTripMissionType extends AbstractMissionType{ + + @Override + public void openMission(User user, int missionId, List missionTypeEnumList) { + + } + + @Override + public int[][] reward(int missionId) { + return new int[0][]; + } + + @Override + public void calCumulationDataResult(User user, CumulationData.Result result, List missionStateChangeInfos, CumulationData cumulationData) throws Exception { + List sTaskConfigs = SJourneyWithWind.getsTaskConfigByTypeMap(result.subType.getMissionTypeValue()); + if (sTaskConfigs == null) { + return; + } + + Set doingMissionIds = getDoingMissionIds(); + for (SJourneyWithWind sTaskConfig : sTaskConfigs) { + int missionId = sTaskConfig.getId(); + if (!doingMissionIds.contains(missionId)) { + continue; + } + + boolean isFinish; + BaseDataManager missTypeData = DataManagerDistributor.getMissTypeData(result.subType); + if(missTypeData instanceof AbstractDataManager){ + isFinish=((AbstractDataManager) missTypeData).isFinish(user,cumulationData, sTaskConfig.getTaskValue()); + }else { + //完成 + isFinish = MissionLoigc.getDoingProgress(user, cumulationData, sTaskConfig.getTaskType(), sTaskConfig.getTaskValue()[0]) >= sTaskConfig.getTaskValue()[1][0]; + } + + if (!isFinish) { + MissionStateChangeInfo doingInfo = new MissionStateChangeInfo(missionId, + MissionState.DOING, null); + boolean flag = false; + if(missionStateChangeInfos!=null){ + for (MissionStateChangeInfo missionStateChangeInfo : missionStateChangeInfos) { + if (missionStateChangeInfo.getMissionId() == missionId) { + flag = true; + } + } + if (!flag) { + missionStateChangeInfos.add(doingInfo); + } + } + 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(); + } + } + + if(doingMissionIds.contains(missionId) && !getFinishMissionIds().contains(missionId)){ + //更新活动完成进度 + // 事件分发 + int rewardId = SJourneyWithWind.config.get(missionId).getRewardId(); + if(rewardId != 0){ + Poster.getPoster().dispatchEvent(new MistyTripEvent(user.getId(),rewardId,1)); + } + + } + missionStateChangeInfos.add(finishInfo); + doingMissionIds.remove(missionId); + getFinishMissionIds().add(missionId); + } + } + + @Override + public void rewardMission(int missionId, List missionTypeEnumListMap) { + super.rewardMission(missionId, missionTypeEnumListMap); + } +} 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 6b2229587..85dfb2de1 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 @@ -323,6 +323,7 @@ public class PlayerLogic { Poster.getPoster().dispatchEvent(new UserMainTeamForceEvent(iSession.getUid())); Poster.getPoster().dispatchEvent(new UserForceChangeEvent(uid,teamForce)); user.getUserMissionManager().onGameEvent(user,GameEvent.USER_FORCE_CHANGE); + user.getUserMissionManager().onGameEvent(user,GameEvent.MISTY_TRIP); ActivityLogic.getInstance().updateActivityMissionProgress(user, ActivityType.FORCERANK,teamForce); ActivityLogic.getInstance().updateActivityMissionProgress(user, ActivityType.FORCESTANDARD,teamForce); } diff --git a/tablemanager/src/main/java/config/SJourneyWithWind.java b/tablemanager/src/main/java/config/SJourneyWithWind.java new file mode 100644 index 000000000..6c8115722 --- /dev/null +++ b/tablemanager/src/main/java/config/SJourneyWithWind.java @@ -0,0 +1,90 @@ +package config; + +import manager.STableManager; +import manager.Table; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Table(name ="JourneyWithWind") +public class SJourneyWithWind implements BaseConfig { + + private int id; + + private int activityId; + + private int taskType; + + private int[][] taskValue; + + private int dayNum; + + private int rewardId; + + public static Map config; + public static Map> sTaskConfigByTypeMap;//<任务类型,data> + public static Map> sTaskConfigByDay;//<天数,data> + + @Override + public void init() throws Exception { + Map configTmp = STableManager.getConfig( SJourneyWithWind.class); + Map> configListTmp = new HashMap<>(); + + Map> configListbyDay = new HashMap<>(); + for(SJourneyWithWind sJourneyWithWind : configTmp.values()){ + int taskType = sJourneyWithWind.getTaskType(); + int day = sJourneyWithWind.getDayNum(); + if(!configListTmp.containsKey(taskType)){ + configListTmp.put(taskType,new ArrayList<>()); + } + configListTmp.get(taskType).add(sJourneyWithWind); + + if(!configListbyDay.containsKey(day)){ + configListbyDay.put(day,new ArrayList<>()); + } + configListbyDay.get(day).add(sJourneyWithWind.getId()); + } + config = configTmp; + sTaskConfigByTypeMap = configListTmp; + sTaskConfigByDay = configListbyDay; + } + + public static SJourneyWithWind getSDailyTasksConfigById(int missionId) { + return config.get(missionId); + } + + public static List getsTaskConfigByTypeMap(int missionType) { + return sTaskConfigByTypeMap.get(missionType); + } + + public static List getsTaskConfigByDay(int day) { + return sTaskConfigByDay.get(day); + } + + + public int getId() { + return id; + } + + public int getActivityId() { + return activityId; + } + + public int getTaskType() { + return taskType; + } + + public int[][] getTaskValue() { + return taskValue; + } + + public int getDayNum() { + return dayNum; + } + + public int getRewardId() { + return rewardId; + } +} \ No newline at end of file