孙龙宝藏重置

back_recharge
lvxinran 2019-09-26 09:54:17 +08:00
parent c2be0dc3f8
commit 1cd0fe5ce7
7 changed files with 223 additions and 60 deletions

View File

@ -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;
}
}

View File

@ -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<Integer,STreasureSunlongTaskConfig> treasureTaskConfig;
public static Map<Integer, List<Integer>> taskTypeMap;
@Override
public void init() throws Exception {
treasureTaskConfig = STableManager.getConfig(STreasureSunlongTaskConfig.class);
taskTypeMap = new HashMap<>();
for(Map.Entry<Integer,STreasureSunlongTaskConfig> 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;
}
}

View File

@ -83,6 +83,7 @@ public interface BIReason {
int RANDOM_SOULEQUIP = 51;//占星
int DIRECT_BUY = 52; // 直购
int TREASURE_SCORE = 53;//孙龙宝藏获得积分
//道具消耗原因 1000开头

View File

@ -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<GameMisionType, List<MissionStateChangeInfo>> missionTypeEnumListMap, Object... parm){
@ -54,23 +58,16 @@ public class UserMissionManager extends MongoBase {
updateString("dailyMissionIdsType",dailyMissionIdsType);
break;
case TREASH_REFRESH:
List<STreasureTaskConfig> sTreasureTaskConfigs = STreasureTaskConfig.sTreasureTaskConfigListByActivityMap.get((int) parm[0]);
treasureMissionIdsType.getDoingMissionIds().clear();
treasureMissionIdsType.getFinishMissionIds().clear();
treasureMissionIdsType.getRewardedMissionIds().clear();
treasureMissionIdsType.getTakeTimes().clear();
List<MissionStateChangeInfo> 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:
List<STreasureTaskConfig> sTreasureTaskConfigs = null;
sTreasureTaskConfigs = STreasureTaskConfig.sTreasureTaskConfigListByActivityMap.get((int) parm[0]);
sevenHappyMissionType.getDoingMissionIds().clear();
sevenHappyMissionType.getFinishMissionIds().clear();
@ -219,6 +216,38 @@ public class UserMissionManager extends MongoBase {
}
}
private void resetTreasureTaskInfo(int type,Map<GameMisionType, List<MissionStateChangeInfo>> missionTypeEnumListMap,CumulationData treasureCumulationData){
List<Integer> 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<randomTask.length;i++){
int [] temp=new int[2];
temp[0] = taskTypeMap.get(i);
temp[1] = STreasureSunlongTaskConfig.treasureTaskConfig.get(taskTypeMap.get(i)).getweight();
randomTask[i] = temp;
}
int[] tasks= MathUtils.randomFromWeightWithTaking(randomTask, 5);
List<MissionStateChangeInfo> 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;
}
}

View File

@ -5,6 +5,8 @@ public enum GameEvent {
DAILY_REFRESH,//日常任务刷新
BLOODY_REFRESH,//血战任务刷新
TREASH_REFRESH,//孙龙的宝藏
TREASH_WEEK_REFRESH,//孙龙的宝藏周任务
TREASH_MONTH_REFRESH,//孙龙的宝藏月任务
SERVENHAPPY_REFRESH,//七日狂欢
BEGINNER,//新手

View File

@ -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<Integer, Integer> takeTimesMap = treasureMissionIdsType.getTakeTimes();
List<STreasureTaskConfig> 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;
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;
}
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;
missionList.add(CommonProto.UserMissionInfo.newBuilder().setMissionId(id).setState(0).setType(treasuremissionType).setProgress(progress).setTakeTimes(0).build());
}
int times = sTreasureTaskConfig.getTimes();
if( (sendProgress + takeTimes)>times){
sendProgress =times-takeTimes;
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());
}
if(sendProgress>0){
state=1;
}else{
state=0;
for(Map.Entry<Integer,STreasureSunlongTaskConfig> 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());
}
if(sTreasureTaskConfig.getTaskType() == MissionType.SENVER_HAPPY.getMissionTypeValue()){
sendProgress = doingProgress;
}
}else{
takeTimes = takeTimesMap.get(missionId);
}
if(takeTimes == null){
takeTimes=0;
}
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();