diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/STreasureSunlongConfig.java b/serverlogic/src/main/java/com/ljsd/jieling/config/STreasureSunlongConfig.java new file mode 100644 index 000000000..902a1d4ab --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/STreasureSunlongConfig.java @@ -0,0 +1,61 @@ +package com.ljsd.jieling.config; + +import com.ljsd.jieling.logic.STableManager; +import com.ljsd.jieling.logic.Table; + +import java.util.Map; + +@Table(name ="TreasureSunlongConfig") +public class STreasureSunlongConfig implements BaseConfig { + + private int id; + + private int activityId; + + private int type; + + private int level; + + private int integral; + + private int[][] reward; + + private int[][] treasureReward; + + + @Override + public void init() throws Exception { + + } + + + public int getId() { + return id; + } + + public int getActivityId() { + return activityId; + } + + public int getType() { + return type; + } + + public int getLevel() { + return level; + } + + public int getIntegral() { + return integral; + } + + public int[][] getReward() { + return reward; + } + + public int[][] getTreasureReward() { + return treasureReward; + } + + +} \ No newline at end of file diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/STreasureSunlongTaskConfig.java b/serverlogic/src/main/java/com/ljsd/jieling/config/STreasureSunlongTaskConfig.java new file mode 100644 index 000000000..bf33f8e7a --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/config/STreasureSunlongTaskConfig.java @@ -0,0 +1,74 @@ +package com.ljsd.jieling.config; + +import com.ljsd.jieling.logic.STableManager; +import com.ljsd.jieling.logic.Table; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Table(name ="TreasureSunlongTaskConfig") +public class STreasureSunlongTaskConfig implements BaseConfig { + + private int id; + + private int activityId; + + private int type; + + private int taskType; + + private int[][] taskValue; + + private int[][] integral; + + private int weight; + + public static Map treasureTaskConfig; + + public static Map> taskTypeMap; + @Override + public void init() throws Exception { + treasureTaskConfig = STableManager.getConfig(STreasureSunlongTaskConfig.class); + taskTypeMap = new HashMap<>(); + for(Map.Entry entry:treasureTaskConfig.entrySet()){ + entry.getValue(); + if(!taskTypeMap.containsKey(entry.getValue().getType())){ + taskTypeMap.put(entry.getValue().getType(),new ArrayList<>()); + } + taskTypeMap.get(entry.getValue()).add(entry.getKey()); + } + } + + + public int getId() { + return id; + } + + public int getActivityId() { + return activityId; + } + + public int getType() { + return type; + } + + public int getTaskType() { + return taskType; + } + + public int[][] getTaskValue() { + return taskValue; + } + + public int[][] getIntegral() { + return integral; + } + + public int getWeight() { + return weight; + } + + +} \ No newline at end of file diff --git a/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java b/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java index aa8969b5a..186a1245c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java @@ -83,6 +83,7 @@ public interface BIReason { int RANDOM_SOULEQUIP = 51;//占星 int DIRECT_BUY = 52; // 直购 + int TREASURE_SCORE = 53;//孙龙宝藏获得积分 //道具消耗原因 1000开头 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 e4dca8731..83a4e1d6a 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 @@ -6,7 +6,9 @@ import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.mission.*; import com.ljsd.jieling.logic.mission.event.MissionEventDistributor; import com.ljsd.jieling.logic.mission.main.*; +import com.ljsd.jieling.util.MathUtils; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; @@ -26,6 +28,8 @@ public class UserMissionManager extends MongoBase { private CumulationData beginCumulationData = new CumulationData(); private CumulationData treasureCumulationData = new CumulationData(); + private CumulationData treasureWeekCumulationData = new CumulationData(); + private CumulationData treasureMonthCumulationData = new CumulationData(); private CumulationData sevenHappyCumulationData = new CumulationData(); public void openMission(User user,GameEvent event,Map> missionTypeEnumListMap, Object... parm){ @@ -54,24 +58,17 @@ public class UserMissionManager extends MongoBase { updateString("dailyMissionIdsType",dailyMissionIdsType); break; case TREASH_REFRESH: - List sTreasureTaskConfigs = STreasureTaskConfig.sTreasureTaskConfigListByActivityMap.get((int) parm[0]); - treasureMissionIdsType.getDoingMissionIds().clear(); - treasureMissionIdsType.getFinishMissionIds().clear(); - treasureMissionIdsType.getRewardedMissionIds().clear(); - treasureMissionIdsType.getTakeTimes().clear(); - List missionStateChangeInfos = missionTypeEnumListMap.get(GameMisionType.TREASUREMISSION); - for(STreasureTaskConfig sTreasureTaskConfig : sTreasureTaskConfigs){ - treasureMissionIdsType.getDoingMissionIds().add(sTreasureTaskConfig.getId()); - missionStateChangeInfos.add(new MissionStateChangeInfo(sTreasureTaskConfig.getId(), MissionState.DOING,0)); - } - user.getPlayerInfoManager().setTreasureScore(0); - treasureCumulationData.reset(); - updateString("treasureMissionIdsType",treasureMissionIdsType); - updateString("treasureCumulationData",treasureCumulationData); + resetTreasureTaskInfo(1,missionTypeEnumListMap,treasureCumulationData); + break; + case TREASH_WEEK_REFRESH: + resetTreasureTaskInfo(2,missionTypeEnumListMap,treasureWeekCumulationData); + break; + case TREASH_MONTH_REFRESH: + resetTreasureTaskInfo(3,missionTypeEnumListMap,treasureMonthCumulationData); break; - case SERVENHAPPY_REFRESH: - sTreasureTaskConfigs = STreasureTaskConfig.sTreasureTaskConfigListByActivityMap.get((int) parm[0]); + List sTreasureTaskConfigs = null; + sTreasureTaskConfigs = STreasureTaskConfig.sTreasureTaskConfigListByActivityMap.get((int) parm[0]); sevenHappyMissionType.getDoingMissionIds().clear(); sevenHappyMissionType.getFinishMissionIds().clear(); sevenHappyMissionType.getRewardedMissionIds().clear(); @@ -219,6 +216,38 @@ public class UserMissionManager extends MongoBase { } } + + private void resetTreasureTaskInfo(int type,Map> missionTypeEnumListMap,CumulationData treasureCumulationData){ + List taskTypeMap = STreasureSunlongTaskConfig.taskTypeMap.get(type); + for(Integer treasure:taskTypeMap){ + 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); + } + } + int[][] randomTask = new int[taskTypeMap.size()][]; + for(int i = 0 ; i missionStateChangeInfos = missionTypeEnumListMap.get(GameMisionType.TREASUREMISSION); + for(Integer task:tasks){ + treasureMissionIdsType.getDoingMissionIds().add(task); + missionStateChangeInfos.add(new MissionStateChangeInfo(task, MissionState.DOING,0)); + } + treasureCumulationData.reset(); + updateString("treasureMissionIdsType",treasureMissionIdsType); + updateString("treasureCumulationData",treasureCumulationData); + + } public void setVipMissionIdsType(VipMissionIdsType vipMissionIdsType) { updateString("vipMissionIdsType",vipMissionIdsType); this.vipMissionIdsType = vipMissionIdsType; @@ -274,4 +303,12 @@ public class UserMissionManager extends MongoBase { public BloodyMissionIdsType getBloodyMissionIdsType() { return bloodyMissionIdsType; } + + public CumulationData getTreasureWeekCumulationData() { + return treasureWeekCumulationData; + } + + public CumulationData getTreasureMonthCumulationData() { + return treasureMonthCumulationData; + } } 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 c2f2c3cbb..fa9b9fd70 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 @@ -5,6 +5,8 @@ public enum GameEvent { DAILY_REFRESH,//日常任务刷新 BLOODY_REFRESH,//血战任务刷新 TREASH_REFRESH,//孙龙的宝藏 + TREASH_WEEK_REFRESH,//孙龙的宝藏周任务 + TREASH_MONTH_REFRESH,//孙龙的宝藏月任务 SERVENHAPPY_REFRESH,//七日狂欢 BEGINNER,//新手 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 290a5387d..8ac95ecdc 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 @@ -143,54 +143,41 @@ public class MissionLoigc { } TreasureMissionType treasureMissionIdsType = user.getUserMissionManager().getTreasureMissionIdsType(); CumulationData treasureCumulationData = user.getUserMissionManager().getTreasureCumulationData(); + CumulationData treasureWeekCumulationData = user.getUserMissionManager().getTreasureWeekCumulationData(); + CumulationData treasureMonthCumulationData = user.getUserMissionManager().getTreasureMonthCumulationData(); + int treasuremissionType = GameMisionType.TREASUREMISSION.getType(); if(activityType == ActivityType.SERVERHAPPY){ getServenMision(user,treasureActivityId,missionList); return; } - BitSet rewardedMissionIds = treasureMissionIdsType.getRewardedMissionIds(); - Map takeTimesMap = treasureMissionIdsType.getTakeTimes(); - List sTreasureTaskConfigs = STreasureTaskConfig.sTreasureTaskConfigListByActivityMap.get(treasureActivityId); - for(STreasureTaskConfig sTreasureTaskConfig:sTreasureTaskConfigs){ - int state = 2; - int missionId = sTreasureTaskConfig.getId(); - int sendProgress =0; - Integer takeTimes = null; - if(!rewardedMissionIds.get(missionId)){ - takeTimes = takeTimesMap.get(missionId); - if(takeTimes == null){ - takeTimes=0; - } - int finishParm = sTreasureTaskConfig.getTaskValue()[1][0]; - int doingProgress = getDoingProgress(user,treasureCumulationData,sTreasureTaskConfig.getTaskType(),sTreasureTaskConfig.getTaskValue()[0]); - if(doingProgress!=0 && finishParm<0 && doingProgress>finishParm){ - sendProgress =1; - }else{ - sendProgress = (doingProgress - takeTimes * finishParm) / finishParm; - } - int times = sTreasureTaskConfig.getTimes(); - if( (sendProgress + takeTimes)>times){ - sendProgress =times-takeTimes; - } - if(sendProgress>0){ - state=1; - }else{ - state=0; - } - if(sTreasureTaskConfig.getTaskType() == MissionType.SENVER_HAPPY.getMissionTypeValue()){ - sendProgress = doingProgress; - } - - }else{ - takeTimes = takeTimesMap.get(missionId); + for(Integer id:treasureMissionIdsType.getDoingMissionIds()){ + STreasureSunlongTaskConfig config = STreasureSunlongTaskConfig.treasureTaskConfig.get(id); + int progress = config.getTaskValue()[1][0]; + switch (config.getType()){ + case 1: + progress = getDoingProgress(user,treasureCumulationData,id,config.getTaskValue()[0]); + break; + case 2: + progress = getDoingProgress(user,treasureWeekCumulationData,id,config.getTaskValue()[0]); + break; + case 3: + progress = getDoingProgress(user,treasureMonthCumulationData,id,config.getTaskValue()[0]); + break; + default: + break; } - - if(takeTimes == null){ - takeTimes=0; + missionList.add(CommonProto.UserMissionInfo.newBuilder().setMissionId(id).setState(0).setType(treasuremissionType).setProgress(progress).setTakeTimes(0).build()); + } + for(Integer id:treasureMissionIdsType.getFinishMissionIds()){ + STreasureSunlongTaskConfig config = STreasureSunlongTaskConfig.treasureTaskConfig.get(id); + int progress = config.getTaskValue()[1][0]; + missionList.add(CommonProto.UserMissionInfo.newBuilder().setMissionId(id).setState(1).setType(treasuremissionType).setProgress(progress).setTakeTimes(0).build()); + } + for(Map.Entry taskId:STreasureSunlongTaskConfig.treasureTaskConfig.entrySet()){ + if(treasureMissionIdsType.getRewardedMissionIds().get(taskId.getKey())){ + missionList.add(CommonProto.UserMissionInfo.newBuilder().setMissionId(taskId.getKey()).setState(2).setType(treasuremissionType).setProgress(taskId.getValue().getTaskValue()[1][0]).setTakeTimes(0).build()); } - - - missionList.add(CommonProto.UserMissionInfo.newBuilder().setMissionId(missionId).setState(state).setType(treasuremissionType).setProgress(sendProgress).setTakeTimes(takeTimes).build()); } } @@ -364,8 +351,9 @@ public class MissionLoigc { if(missionStateChangeInfos!=null && !missionStateChangeInfos.isEmpty()){ int takeTimes = missionStateChangeInfos.get(0).getProgress(); missionStateChangeInfos.get(0).setProgress(0); - int score = STreasureTaskConfig.sTreasureTaskConfigMap.get(missionId).getPoints() * takeTimes; - user.getPlayerInfoManager().addTreasureScore(score); +// int score = STreasureSunlongTaskConfig.treasureTaskConfig.get(missionId). * takeTimes; +// user.getPlayerInfoManager().addTreasureScore(score); + ItemUtil.drop(user,STreasureSunlongTaskConfig.treasureTaskConfig.get(missionId).getIntegral(),BIReason.TREASURE_SCORE); KtEventUtils.onKtEvent(user, ParamEventBean.UserTaskEvent,type,missionId); Repot37EventUtil.onKtEvent(user, Repot37EventUtil.Report37EventType.TASK_FINISH_EVEMT,missionId,""); PlayerInfoProto.TakeMissionRewardResponse build = PlayerInfoProto.TakeMissionRewardResponse.newBuilder().setTreasureScore(user.getPlayerInfoManager().getTreasureScore()).build(); 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 2a8a97668..d9031c787 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 @@ -50,7 +50,7 @@ public abstract class AbstractMissionType { } public Set getDoingMissionIds() { - return doingMissionIds; + return doingMissionIds; } public void addFinishMissionId(int missionId) {