back_recharge
lvxinran 2020-08-21 18:46:55 +08:00
commit 388a28507b
20 changed files with 535 additions and 30 deletions

View File

@ -1,5 +1,9 @@
package com.ljsd.jieling.core;
import com.google.common.collect.Sets;
import java.util.Set;
public interface GlobalsDef {
String DEFAULT_NAME = "无名妖灵师";
int MAP_MISSION_RETURN = -9999;
@ -103,5 +107,7 @@ public interface GlobalsDef {
//特殊商店id
int DAILY_GOODS_FAST_ID = 1004;//每日礼包一键购买的礼包ID
int[] DAILY_RECHARGE_IDS = new int[]{1001, 1002, 1003};//所有每日礼包,用来在一键购买每日礼包之后,把所有每日礼包设置为购买过的状态
}

View File

@ -0,0 +1,29 @@
package com.ljsd.jieling.handler.activity;
import com.ljsd.jieling.handler.BaseHandler;
import com.ljsd.jieling.logic.activity.ActivityLogic;
import com.ljsd.jieling.netty.cocdex.PacketNetData;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.MessageTypeProto;
import org.springframework.stereotype.Component;
import static com.ljsd.jieling.protocols.MessageTypeProto.MessageType.JADE_DYNASTY_REFRESH_TIME_RESPONSE;
/**
* @author lilei
* @create 2020-08-20 16:08
* @description
*/
@Component
public class JadeDynastyTimeHandler extends BaseHandler {
@Override
public MessageTypeProto.MessageType getMessageCode() {
return MessageTypeProto.MessageType.JADE_DYNASTY_REFRESH_TIME_REQUEST;
}
@Override
public void process(ISession iSession, PacketNetData netData) throws Exception {
ActivityLogic.getInstance().getJadeDynastyNextRefreshTime(iSession, JADE_DYNASTY_REFRESH_TIME_RESPONSE);
}
}

View File

@ -1323,4 +1323,11 @@ public class ActivityLogic implements IEventHandler{
MessageUtil.sendMessage(session,1,messageType.getNumber(),response,true);
}
public void getJadeDynastyNextRefreshTime(ISession session,MessageTypeProto.MessageType messageType) throws Exception {
int dayRefreshTime=(int) (TimeUtils.getLastOrUnderHour(TimeUtils.now(), 5,0, false)/1000);
int weekRefreshTime = (int)(TimeUtils.getNextWeekendStartTime(1,5)/1000);
PlayerInfoProto.JadeDynastyRefreshTimeResponse response = PlayerInfoProto.JadeDynastyRefreshTimeResponse.newBuilder().setDayTime(dayRefreshTime).setWeekTime(weekRefreshTime).build();
MessageUtil.sendMessage(session,1,messageType.getNumber(),response,true);
}
}

View File

@ -67,5 +67,9 @@ public interface ActivityType {
int NEW_EIGHT_LOGIN = 56;//新的八日登录
int SIGN_BOX= 57;//累计签到宝箱
int JADE_DYNASTY_RECHARGE_SUM = 58;//破阵诛仙累充
int JADE_DYNASTY_MISSION = 20000;//破阵诛仙任务
int JADE_DYNASTY_SHOP = 20001;//破阵诛仙限时商市
int JADE_DYNASTY_RARE_SHOP = 20002;//破阵诛仙珍奇宝阁
}

View File

@ -1,6 +1,5 @@
package com.ljsd.jieling.logic.activity;
import com.ljsd.jieling.logic.activity.event.NewWelfareTypeEnum;
import config.SGlobalActivity;
import java.util.HashMap;
@ -50,7 +49,11 @@ public enum ActivityTypeEnum {
COPY_PASS(ActivityType.COPY_PASS,ChapterRewardActivity::new),
NEW_EIGHT_LOGIN(ActivityType.NEW_EIGHT_LOGIN,NewEightActivity::new),
BEAUTY_BAG(ActivityType.BEAUTY_BAG,LimitRandomCardActivity::new),
SIGN_BOX(ActivityType.SIGN_BOX,SignInSumActivity::new)
SIGN_BOX(ActivityType.SIGN_BOX,SignInSumActivity::new),
JADE_DYNASTY_RECHARGE_SUM(ActivityType.JADE_DYNASTY_RECHARGE_SUM, RechargeSumActivity::new),
JADE_DYNASTY_MISSION(ActivityType.JADE_DYNASTY_MISSION, JadeDynastyTaskActivity::new),
JADE_DYNASTY_SHOP(ActivityType.JADE_DYNASTY_SHOP, DefaultEmptyActivity::new),
JADE_DYNASTY_RARE_SHOP(ActivityType.JADE_DYNASTY_RARE_SHOP, DefaultEmptyActivity::new),
;
private int type;

View File

@ -0,0 +1,39 @@
package com.ljsd.jieling.logic.activity;
import com.ljsd.jieling.jbean.ActivityMission;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.mission.GameEvent;
import config.SGlobalActivity;
import java.util.Collections;
public class JadeDynastyTaskActivity extends AbstractActivity {
public JadeDynastyTaskActivity(int id) {
super(id);
}
@Override
public void onResume(User user) throws Exception {
LOGGER.info("[破阵诛仙任务活动刷新] [uid:{}] [activityId:{}]",user.getId(),id);
user.getUserMissionManager().onGameEvent(user, GameEvent.JADE_DYNASTY_REFRESH, id);
user.getUserMissionManager().onGameEvent(user, GameEvent.JADE_DYNASTY_WEEK_REFRESH, id);
}
@Override
public void initActivity(User user) throws Exception {
LOGGER.info("[破阵诛仙任务活动] [初始化玩家数据] [uid:{}] [activityId:{}]",user.getId(),this.id);
SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(id);
user.getUserMissionManager().onGameEvent(user, GameEvent.JADE_DYNASTY_REFRESH, sGlobalActivity.getId());
user.getUserMissionManager().onGameEvent(user, GameEvent.JADE_DYNASTY_WEEK_REFRESH, sGlobalActivity.getId());
//这个活动只有任务奖励
ActivityMission activityMission = new ActivityMission();
ActivityLogic.getInstance().initOtherMission(activityMission,Collections.emptyList());
user.getActivityManager().getActivityMissionMap().put(sGlobalActivity.getId(), activityMission);
}
}

View File

@ -33,8 +33,8 @@ class SecretExpectRankActivity extends ExpectRankActivity {
public void initActivity(User user) throws Exception {
SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(id);
List<Integer> listValue = new ArrayList<>();
listValue.add(36);//额外购买次数
listValue.add(37);//额外免费次数
listValue.add(153);//额外购买次数
listValue.add(154);//额外免费次数
Set<Integer> changedSet = new HashSet<>();
long endTime = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(), sGlobalActivity.getEndTimeLong(), sGlobalActivity.getTime(), 0, 2);
int time = (int)(endTime / 1000);

View File

@ -120,6 +120,8 @@ public class CumulationData {
public int rechargeTotal; //累計充值
public int rechargeTimes; //充值次数
public int refreshMrTimes; //刷新迷宫寻宝次数
public int especialEquipMaxLeve; //法宝最高等级达到5

View File

@ -53,6 +53,7 @@ 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 CumulationData cumulationData = new CumulationData();
@ -64,6 +65,8 @@ public class UserMissionManager extends MongoBase {
private CumulationData treasureMonthCumulationData = new CumulationData();
private CumulationData sevenHappyCumulationData = new CumulationData();
private CumulationData achievementMap = new CumulationData();
private CumulationData jadeDynastyCumulationData = new CumulationData();//破阵诛仙日数据
private CumulationData jadeDynastyWeekCumulationData = new CumulationData();//破阵诛仙周数据
//触发任务上身
public void openMission(User user,GameEvent event,Map<GameMisionType, List<MissionStateChangeInfo>> missionTypeEnumListMap, Object... parm) throws Exception {
@ -93,7 +96,8 @@ public class UserMissionManager extends MongoBase {
updateString("dailyMissionIdsType",dailyMissionIdsType);
break;
case TREASH_REFRESH:
int[] refreshIds =resetTreasureTaskInfo(1,missionTypeEnumListMap,treasureCumulationData);
int activityId = (int) parm[0];//当前轮次青龙秘宝的活动ID
int[] refreshIds = resetTreasureTaskInfo(1,activityId,missionTypeEnumListMap,treasureCumulationData);
treasureCumulationData = new CumulationData();
int dayRefreshTime=(int) (TimeUtils.getLastOrUnderHour(TimeUtils.now(), 5, 0,false)/1000);
CommonProto.RefreshTask.Builder task = treasureIndicationBuild(1, refreshIds).setRefreshTime(dayRefreshTime);
@ -101,7 +105,8 @@ public class UserMissionManager extends MongoBase {
MessageUtil.sendIndicationMessage(session,1, MessageTypeProto.MessageType.TREASURE_REFRESH_INDICATION_VALUE,indication1,true);
break;
case TREASH_WEEK_REFRESH:
int[] weekRefreshIds = resetTreasureTaskInfo(2,missionTypeEnumListMap,treasureWeekCumulationData);
int aId = (int) parm[0];//当前轮次青龙秘宝的活动ID
int[] weekRefreshIds = resetTreasureTaskInfo(2,aId,missionTypeEnumListMap,treasureWeekCumulationData);
if(weekRefreshIds != null){
treasureWeekCumulationData = new CumulationData();
int weekRefreshTime = (int)(TimeUtils.getNextWeekendStartTime(1,5)/1000);
@ -112,6 +117,7 @@ public class UserMissionManager extends MongoBase {
}
break;
case TREASH_MONTH_REFRESH:
int aid = (int) parm[0];//当前轮次青龙秘宝的活动ID
user.getPlayerInfoManager().setTreasureLevel(0);
Item item = user.getItemManager().getItem(Global.TREASURE_SCORE);
if(item!=null){
@ -126,7 +132,7 @@ public class UserMissionManager extends MongoBase {
}
}
treasureMonthCumulationData = new CumulationData();
int[] monthRefreshIds1 = resetTreasureTaskInfo(3,missionTypeEnumListMap,treasureMonthCumulationData);
int[] monthRefreshIds1 = resetTreasureTaskInfo(3,aid,missionTypeEnumListMap,treasureMonthCumulationData);
// CommonProto.RefreshTask.Builder task3 = treasureIndicationBuild(1, dailyRefreshIds1);
// CommonProto.RefreshTask.Builder task4 = treasureIndicationBuild(2, weekRefreshIds1);
@ -134,6 +140,26 @@ public class UserMissionManager extends MongoBase {
PlayerInfoProto.TreasureRefreshIndication indication3 = PlayerInfoProto.TreasureRefreshIndication.newBuilder().addTasks(task5.build()).build();
MessageUtil.sendIndicationMessage(session,1, MessageTypeProto.MessageType.TREASURE_REFRESH_INDICATION_VALUE,indication3,true);
break;
case JADE_DYNASTY_REFRESH:
int jadeAId = (int) parm[0];//当前轮次破阵诛仙的活动ID
int[] mIds = resetJadeDynastyTaskInfo(1,jadeAId,missionTypeEnumListMap,jadeDynastyCumulationData);
jadeDynastyCumulationData = new CumulationData();
int nextRefreshTime= (int) (TimeUtils.getLastOrUnderHour(TimeUtils.now(), 5, 0,false)/1000);
CommonProto.RefreshTask.Builder t = treasureIndicationBuild(1, mIds).setRefreshTime(nextRefreshTime);
PlayerInfoProto.JadeDynastyRefreshIndication indi = PlayerInfoProto.JadeDynastyRefreshIndication.newBuilder().addTasks(t.build()).build();
MessageUtil.sendIndicationMessage(session,1, MessageTypeProto.MessageType.JADE_DYNASTY_REFRESH_INDICATION_VALUE,indi,true);
break;
case JADE_DYNASTY_WEEK_REFRESH:
int jadeAid = (int) parm[0];//当前轮次破阵诛仙的活动ID
int[] weekMIds = resetJadeDynastyTaskInfo(2,jadeAid,missionTypeEnumListMap,jadeDynastyWeekCumulationData);
if(weekMIds != null){
jadeDynastyWeekCumulationData = new CumulationData();
int weekRefreshTime = (int)(TimeUtils.getNextWeekendStartTime(1,5)/1000);
CommonProto.RefreshTask.Builder task2= treasureIndicationBuild(2, weekMIds).setRefreshTime(weekRefreshTime);
PlayerInfoProto.JadeDynastyRefreshIndication indication2 = PlayerInfoProto.JadeDynastyRefreshIndication.newBuilder().addTasks(task2.build()).build();
MessageUtil.sendIndicationMessage(session,1, MessageTypeProto.MessageType.JADE_DYNASTY_REFRESH_INDICATION_VALUE,indication2,true);
}
break;
case SERVENHAPPY_REFRESH:
List<STreasureTaskConfig> sTreasureTaskConfigs = null;
sTreasureTaskConfigs = STableManager.getFigureConfig(TaskStaticConfig.class).getsTreasureTaskConfigListByActivityMap().get((int) parm[0]);
@ -296,6 +322,11 @@ public class UserMissionManager extends MongoBase {
updateString("treasureMissionIdsType",treasureMissionIdsType);
}
break;
case JADE_DYNASTY_MISSION_REWARD:{
jadeDynastyMissionType.rewardMission(user, (int) parm[0], missionTypeEnumListMap.get(GameMisionType.JADE_DYNASTY_MISSION), jadeDynastyCumulationData);
updateString("jadeDynastyMissionType",jadeDynastyMissionType);
}
break;
case ACHIEVE_REWARD:{
int missId = (int)parm[0];
achievementMissionTypMap.rewardMission(missId, missionTypeEnumListMap.get(GameMisionType.ACHIEVEMISSION));
@ -404,6 +435,26 @@ public class UserMissionManager extends MongoBase {
}
}
if(!jadeDynastyMissionType.getDoingMissionIds().isEmpty() ){
List<SThemeActivityTaskConfig> sThemeActivityTaskConfigs = SThemeActivityTaskConfig.sThemeTaskConfigListByTypeMapTmp.get(missionType.getMissionTypeValue());
if(sThemeActivityTaskConfigs!=null){
CumulationData.Result result = jadeDynastyCumulationData.updateData(missionType, parm);
CumulationData.Result weekResult = jadeDynastyWeekCumulationData.updateData(missionType, parm);
if(result!=null){
result.setMissionTimeType(1);
jadeDynastyMissionType.calCumulationDataResult(user,result,missionTypeEnumListMap.get(GameMisionType.JADE_DYNASTY_MISSION),jadeDynastyCumulationData);
updateString("jadeDynastyCumulationData",jadeDynastyCumulationData);
updateString("jadeDynastyMissionType",jadeDynastyMissionType);
}
if(weekResult!=null){
weekResult.setMissionTimeType(2);
jadeDynastyMissionType.calCumulationDataResult(user,weekResult,missionTypeEnumListMap.get(GameMisionType.JADE_DYNASTY_MISSION),jadeDynastyWeekCumulationData);
updateString("jadeDynastyWeekCumulationData",jadeDynastyWeekCumulationData);
updateString("jadeDynastyMissionType",jadeDynastyMissionType);
}
}
}
if(!sevenHappyMissionType.getDoingMissionIds().isEmpty() ){
List<STreasureTaskConfig> sTreasureTaskConfigs = STableManager.getFigureConfig(TaskStaticConfig.class).getsTreasureTaskConfigListByTypeMap().get(missionType.getMissionTypeValue());
@ -443,37 +494,49 @@ public class UserMissionManager extends MongoBase {
}
private int[] resetTreasureTaskInfo(int type,Map<GameMisionType, List<MissionStateChangeInfo>> missionTypeEnumListMap,CumulationData treasureCumulationData){
private int[] resetTreasureTaskInfo(int type, int activityId, Map<GameMisionType, List<MissionStateChangeInfo>> missionTypeEnumListMap,CumulationData treasureCumulationData){
//周刷新检测
if(type==2){
if(treasureMissionIdsType.getWeekRefresh()!=0&&!TimeUtils.isSpanTime(treasureMissionIdsType.getWeekRefresh(),TimeUtils.now(),1,5)){
return null;
}
treasureMissionIdsType.setWeekRefresh(TimeUtils.now());
if (type == 2) {
if (treasureMissionIdsType.getWeekRefresh() != 0 && !TimeUtils.isSpanTime(treasureMissionIdsType.getWeekRefresh(), TimeUtils.now(), 1, 5)) {
return null;
}
int[] typeMissionNum = SSpecialConfig.getOnceArrayValue(SSpecialConfig.SUNLONG_DAILYTASKS);
List<Integer> taskTypeMap = STreasureSunlongTaskConfig.taskTypeMap.get(type);
for(Integer treasure:taskTypeMap){
if(treasureMissionIdsType.getDoingMissionIds().contains(treasure)){
treasureMissionIdsType.getDoingMissionIds().remove(treasure);
treasureMissionIdsType.setWeekRefresh(TimeUtils.now());
}
//int[] typeMissionNum = SSpecialConfig.getOnceArrayValue(SSpecialConfig.SUNLONG_DAILYTASKS);
List<Integer> taskTypeMap = STreasureSunlongTaskConfig.taskTypeMap.get(type);
List<Integer> newTasks = new ArrayList<>();
for (Integer treasure : taskTypeMap) {
STreasureSunlongTaskConfig config = STreasureSunlongTaskConfig.treasureTaskConfig.get(treasure);
//需要判断这个任务是不是当前轮次的
if (config.getActivityId() == activityId) {
newTasks.add(treasure);
}
if(treasureMissionIdsType.getFinishMissionIds().contains(treasure)){
if (treasureMissionIdsType.getDoingMissionIds().contains(treasure)) {
treasureMissionIdsType.getDoingMissionIds().remove(treasure);
}
if (treasureMissionIdsType.getFinishMissionIds().contains(treasure)) {
treasureMissionIdsType.getFinishMissionIds().remove(treasure);
}
if(treasureMissionIdsType.getRewardedMissionIds().get(treasure)){
if (treasureMissionIdsType.getRewardedMissionIds().get(treasure)) {
treasureMissionIdsType.getRewardedMissionIds().clear(treasure);
}
}
int[][] randomTask = new int[taskTypeMap.size()][];
/*
ID
SpecialConfig
ID 2020.08.20
*/
/*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,Math.max(typeMissionNum[type-1],randomTask.length));// typeMissionNum[type-1]
int[] tasks= MathUtils.randomFromWeightWithTaking(randomTask,Math.max(typeMissionNum[type-1],randomTask.length));*/// typeMissionNum[type-1]
List<MissionStateChangeInfo> missionStateChangeInfos = missionTypeEnumListMap.get(GameMisionType.TREASUREMISSION);
for(Integer task:tasks){
int[] tasks = new int[newTasks.size()];
for(Integer task:newTasks){
missionStateChangeInfos.add(new MissionStateChangeInfo(task, MissionState.DOING,0));
treasureMissionIdsType.getDoingMissionIds().add(task);
}
@ -490,6 +553,45 @@ public class UserMissionManager extends MongoBase {
return tasks;
}
private int[] resetJadeDynastyTaskInfo(int type, int activityId, Map<GameMisionType, List<MissionStateChangeInfo>> missionTypeEnumListMap,CumulationData jadeDynastyCumulationData){
//周刷新检测
if (type == 2) {
if (jadeDynastyMissionType.getWeekRefresh() != 0 && !TimeUtils.isSpanTime(jadeDynastyMissionType.getWeekRefresh(), TimeUtils.now(), 1, 5)) {
return null;
}
jadeDynastyMissionType.setWeekRefresh(TimeUtils.now());
}
List<Integer> taskTypeMap = SThemeActivityTaskConfig.taskTypeMap.get(type);
List<Integer> newTasks = new ArrayList<>();
for (Integer treasure : taskTypeMap) {
SThemeActivityTaskConfig config = SThemeActivityTaskConfig.idTaskConfig.get(treasure);
//需要判断这个任务是不是当前轮次的
if (config.getActivityId() == activityId) {
newTasks.add(treasure);
}
jadeDynastyMissionType.getDoingMissionIds().remove(treasure);
jadeDynastyMissionType.getFinishMissionIds().remove(treasure);
if (jadeDynastyMissionType.getRewardedMissionIds().get(treasure)) {
jadeDynastyMissionType.getRewardedMissionIds().clear(treasure);
}
}
List<MissionStateChangeInfo> missionStateChangeInfos = missionTypeEnumListMap.get(GameMisionType.JADE_DYNASTY_MISSION);
int[] tasks = new int[newTasks.size()];
for (int i = 0; i < newTasks.size(); i++) {
missionStateChangeInfos.add(new MissionStateChangeInfo(newTasks.get(i), MissionState.DOING,0));
jadeDynastyMissionType.getDoingMissionIds().add(newTasks.get(i));
tasks[i] = newTasks.get(i);
}
jadeDynastyCumulationData = new CumulationData();
updateString("jadeDynastyMissionType",jadeDynastyMissionType);
if(type==1){
updateString("jadeDynastyCumulationData",jadeDynastyCumulationData);
}else if(type==2){
updateString("jadeDynastyWeekCumulationData",jadeDynastyCumulationData);
}
return tasks;
}
private CommonProto.RefreshTask.Builder treasureIndicationBuild(int type,int[] refreshIds){
CommonProto.RefreshTask.Builder task = CommonProto.RefreshTask.newBuilder().setType(type);
for(int i = 0;i<refreshIds.length;i++){
@ -533,6 +635,8 @@ public class UserMissionManager extends MongoBase {
return treasureCumulationData;
}
public ServenMissionIdsType getSevenHappyMissionType() {
return sevenHappyMissionType;
}
@ -573,4 +677,16 @@ public class UserMissionManager extends MongoBase {
public CumulationData getAchievementMap() {
return achievementMap;
}
public JadeDynastyMissionType getJadeDynastyMissionType() {
return jadeDynastyMissionType;
}
public CumulationData getJadeDynastyCumulationData() {
return jadeDynastyCumulationData;
}
public CumulationData getJadeDynastyWeekCumulationData() {
return jadeDynastyWeekCumulationData;
}
}

View File

@ -88,7 +88,7 @@ public enum GameEvent {
CARD_RANDWM,// 使用普通召唤num次 (十连抽num计10
GUILD_GIVE,//使用level级别0不限、1普通、2钻石小、3钻石大的公会捐献num次
TEN_CHALLENGE,//挑战十绝阵num次 //TODO
// SIX_RANDOM,//使用6灵阁召唤num次
// SIX_RANDOM,//使用6灵阁召唤num次
EXPEDITION_FINISH,//猎妖之路通过第floor层的首领节点每层最多一个num次
DESPOSE_HERO,//分解英雄
DEATH_PATH,//击杀过关十绝阵num次//TODO
@ -101,4 +101,8 @@ public enum GameEvent {
GOT_SOUL_MARK,//获取魂印事件
CHAMPIONSHIP_RANK,//巅峰联赛排名
PLAY_MINI_GAME,//参与森罗幻境小游戏
JADE_DYNASTY_REFRESH,//破阵诛仙任务日刷新
JADE_DYNASTY_WEEK_REFRESH,//破阵诛仙周刷新
JADE_DYNASTY_MISSION_REWARD,//破阵诛仙周刷新
}

View File

@ -10,6 +10,7 @@ public enum GameMisionType {
BLOODYMISSION(7),
MISSINGROOMMISSION(8),
ACHIEVEMISSION(9),
JADE_DYNASTY_MISSION(10),//破阵诛仙任务
;
private int type;

View File

@ -54,6 +54,7 @@ public class MissionLoigc {
getBloodyMisison(user,missionList);
getMissingRoomMission(user,missionList);
getAchieveMission(user,missionList);
getJadeDynastyMission(user, missionList);
PlayerInfoProto.GetMissionResponse build = PlayerInfoProto.GetMissionResponse.newBuilder().addAllUserMissionInfo(missionList).build();
MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.GET_MISSION_RESPONSE_VALUE,build,true);
}
@ -199,6 +200,39 @@ public class MissionLoigc {
}
}
private static void getJadeDynastyMission(User user, List<CommonProto.UserMissionInfo> missionList) {
JadeDynastyMissionType jadeDynastyMissionType = user.getUserMissionManager().getJadeDynastyMissionType();
CumulationData jadeDynastyCumulationData = user.getUserMissionManager().getJadeDynastyCumulationData();
CumulationData jadeDynastyWeekCumulationData = user.getUserMissionManager().getJadeDynastyWeekCumulationData();
int jadeMissionType = GameMisionType.JADE_DYNASTY_MISSION.getType();
for(Integer id:jadeDynastyMissionType.getDoingMissionIds()){
SThemeActivityTaskConfig config = SThemeActivityTaskConfig.idTaskConfig.get(id);
int progress = config.getTaskValue()[1][0];
switch (config.getType()){
case 1:
progress = getDoingProgress(user,jadeDynastyCumulationData,config.getTaskType(),config.getTaskValue()[0]);
break;
case 2:
progress = getDoingProgress(user,jadeDynastyWeekCumulationData,config.getTaskType(),config.getTaskValue()[0]);
break;
default:
break;
}
missionList.add(CommonProto.UserMissionInfo.newBuilder().setMissionId(id).setState(0).setType(jadeMissionType).setProgress(progress).setTakeTimes(0).build());
}
for(Integer id:jadeDynastyMissionType.getFinishMissionIds()){
STreasureSunlongTaskConfig config = STreasureSunlongTaskConfig.treasureTaskConfig.get(id);
int progress = config.getTaskValue()[1][0];
missionList.add(CommonProto.UserMissionInfo.newBuilder().setMissionId(id).setState(1).setType(jadeMissionType).setProgress(progress).setTakeTimes(0).build());
}
for(Map.Entry<Integer,STreasureSunlongTaskConfig> taskId:STreasureSunlongTaskConfig.treasureTaskConfig.entrySet()){
if(jadeDynastyMissionType.getRewardedMissionIds().get(taskId.getKey())){
missionList.add(CommonProto.UserMissionInfo.newBuilder().setMissionId(taskId.getKey()).setState(2).setType(jadeMissionType).setProgress(taskId.getValue().getTaskValue()[1][0]).setTakeTimes(0).build());
}
}
}
public static void getDailyMission(User user,List<CommonProto.UserMissionInfo> missionList){
UserMissionManager userMissionManager = user.getUserMissionManager();
@ -425,6 +459,19 @@ public class MissionLoigc {
}
}
if(type == GameMisionType.JADE_DYNASTY_MISSION.getType()){
Map<GameMisionType, List<MissionStateChangeInfo>> 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);
Repot37EventUtil.onKtEvent(user, Repot37EventUtil.Report37EventType.TASK_FINISH_EVEMT,missionId,"");
CommonProto.Drop.Builder drop = ItemUtil.drop(user, missionStateChangeInfos.get(0).getRewwardGroups(), 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);
return;
}
}
if(type == GameMisionType.SEVENMISSION.getType()){
Map<GameMisionType, List<MissionStateChangeInfo>> gameMisionTypeListMap = userMissionManager.onGameEvent(user, GameEvent.SEVENHAPPY_MISSION_REWARD, missionId);
missionStateChangeInfos = gameMisionTypeListMap.get(GameMisionType.SEVENMISSION);
@ -439,7 +486,6 @@ public class MissionLoigc {
missionStateChangeInfos = gameMisionTypeListMap.get(GameMisionType.ACHIEVEMISSION);
}
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);

View File

@ -99,6 +99,7 @@ public enum MissionType {
LUCKY_WHEELS_TIMES(83),//幸运探宝%次
FINISH_EXPEDITION_HERO_TIMES(84),//完成猎妖之路次数达到
SEVEN_GIFT_BUY(86),//购买7日狂欢福利礼包%s次七日狂欢积分
FINISIN_DAILY_CHALLENGE_TIMES(87),//完成%s类型0为不限类型的日常副本%s次
@ -117,14 +118,11 @@ public enum MissionType {
GOT_ANY_ITEM(109),//暂时不实现占位任意途径获得quality品质无品质限定为0type类别无类别限制为-1的itemid道具无指定道具限定为0num个
//110-累计n天挑战车迟斗法 --类型105已实现
ARENA_CONSECUTIVE_WIN(111),//竞技场连胜
PLAY_MINI_GAME_TIMES(112),//森罗幻境中参与n次小游戏
CHAMPIONSHIP_RANK(113),//巅峰联赛中达到num名
//114-天宫寻宝中接取任意星级任务n次 --类型76已实现
GOT_SOUL_MARK(115),//获得指定品质魂印数量
//117-累计探索森罗幻境num层 --类型32已实现
//118-充值达到num金额 --类型74已实现
RECHARGE_TIMES(117),//充值任意金额次数
;
private int missionType;

View File

@ -111,6 +111,7 @@ public class DataManagerDistributor {
judges.put(MissionType.FRIEND_APPLY,new FriendApplyManager());
judges.put(MissionType.REARGE_TOTAL,new RechargeTotalManger());
judges.put(MissionType.RECHARGE_TIMES,new RechargeTimesManager());
judges.put(MissionType.FINISH_MISSING_ROOM,new FinishMissionRoomManager());
judges.put(MissionType.REFRESH_MISSING_ROOM,new RefreshMissionRoomMamager());
judges.put(MissionType.SPECIAL_EQUIP_LEVEL_UP,new EspecialEquipLeveMamager());

View File

@ -0,0 +1,33 @@
package com.ljsd.jieling.logic.mission.data;
import com.ljsd.jieling.logic.dao.CumulationData;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.mission.MissionType;
/**
* @author lilei
* @create 2020-08-20 18:08
* @description
*/
public class RechargeTimesManager extends AbstractDataManager {
@Override
public CumulationData.Result updateData(CumulationData data, MissionType missionType, Object... parm) {
CumulationData.Result result = null;
if (missionType == MissionType.RECHARGE_TIMES) {
data.rechargeTimes++;
result = new CumulationData.Result(missionType);
}
return result;
}
@Override
public boolean isFinish(User user, CumulationData data, int[][] cfgValue, Object... parm) {
return data.rechargeTimes>=cfgValue[1][0];
}
@Override
public int getProcess(User user, CumulationData data, int[] missionSubType) {
return data.rechargeTimes;
}
}

View File

@ -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 JadeDynastyRefreshEventProcess implements BaseGameEventProcessor {
@Override
public void onGameEvent(User user, Map<GameMisionType, List<MissionStateChangeInfo>> misionTypeListMap, GameEvent event, Object... parm) throws Exception {
user.getUserMissionManager().openMission(user,event,misionTypeListMap,parm);
}
}

View File

@ -39,6 +39,8 @@ public class MissionEventDistributor {
eventProcessor.put(GameEvent.TREASH_MONTH_REFRESH,new TreasureRefreshEventProcess());
eventProcessor.put(GameEvent.SERVENHAPPY_REFRESH,new TreasureRefreshEventProcess());
eventProcessor.put(GameEvent.BEGINNER,new BeginneRefreshEventProcessor());
eventProcessor.put(GameEvent.JADE_DYNASTY_REFRESH,new JadeDynastyRefreshEventProcess());
eventProcessor.put(GameEvent.JADE_DYNASTY_WEEK_REFRESH,new JadeDynastyRefreshEventProcess());
List<MissionType> typeList = new ArrayList<>();
@ -189,6 +191,7 @@ public class MissionEventDistributor {
eventProcessor.put(GameEvent.BLOODY_MISSION_REWARD,new RewardEventProcessor());
eventProcessor.put(GameEvent.MISSING_ROOM_MISSION_REWARD,new RewardEventProcessor());
eventProcessor.put(GameEvent.ACHIEVE_REWARD,new RewardEventProcessor());
eventProcessor.put(GameEvent.JADE_DYNASTY_MISSION_REWARD,new RewardEventProcessor());
typeList = new ArrayList<>();
@ -312,6 +315,7 @@ public class MissionEventDistributor {
typeList = new ArrayList<>();
typeList.add(MissionType.REARGE_TOTAL);
typeList.add(MissionType.RECHARGE_TIMES);
eventEnumListMap.put(GameEvent.RECHARGE_TOTAL,typeList);
eventProcessor.put(GameEvent.RECHARGE_TOTAL,new CumulationDataEventProcessor());
@ -440,6 +444,7 @@ public class MissionEventDistributor {
missionTypeEnumListMap.put(GameMisionType.BLOODYMISSION, new ArrayList<>());
missionTypeEnumListMap.put(GameMisionType.MISSINGROOMMISSION, new ArrayList<>());
missionTypeEnumListMap.put(GameMisionType.ACHIEVEMISSION, new ArrayList<>());
missionTypeEnumListMap.put(GameMisionType.JADE_DYNASTY_MISSION, new ArrayList<>());
} else {
@ -452,6 +457,7 @@ public class MissionEventDistributor {
missionTypeEnumListMap.get(GameMisionType.BLOODYMISSION).clear();
missionTypeEnumListMap.get(GameMisionType.MISSINGROOMMISSION).clear();
missionTypeEnumListMap.get(GameMisionType.ACHIEVEMISSION).clear();
missionTypeEnumListMap.get(GameMisionType.JADE_DYNASTY_MISSION).clear();
}
@ -488,7 +494,7 @@ public class MissionEventDistributor {
if(gameMisionType==GameMisionType.MISSINGROOMMISSION){
continue;
}
if(gameMisionType == GameMisionType.COPYMISSION || gameMisionType == GameMisionType.TREASUREMISSION || gameMisionType == GameMisionType.SEVENMISSION || gameMisionType == GameMisionType.BLOODYMISSION|| gameMisionType == GameMisionType.ACHIEVEMISSION){
if(gameMisionType == GameMisionType.COPYMISSION || gameMisionType == GameMisionType.TREASUREMISSION || gameMisionType == GameMisionType.SEVENMISSION || gameMisionType == GameMisionType.BLOODYMISSION|| gameMisionType == GameMisionType.ACHIEVEMISSION || gameMisionType == GameMisionType.JADE_DYNASTY_MISSION){
progress = missionStateChangeInfo.getProgress();
}
if(missionState == MissionState.DOING){

View File

@ -0,0 +1,108 @@
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 com.ljsd.jieling.logic.mission.MissionType;
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.SThemeActivityTaskConfig;
import config.STreasureSunlongTaskConfig;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class JadeDynastyMissionType extends AbstractMissionType{
private long weekRefresh;
public long getWeekRefresh() {
return weekRefresh;
}
public void setWeekRefresh(long weekRefresh) {
this.weekRefresh = weekRefresh;
}
@Override
public void openMission(User user, int missionId, List<MissionStateChangeInfo> missionTypeEnumList) {
}
public void rewardMission(User user,int missionId, List<MissionStateChangeInfo> missionTypeEnumListMap, CumulationData cumulationData) throws Exception {
SThemeActivityTaskConfig taskConfig = SThemeActivityTaskConfig.idTaskConfig.get(missionId);
if(taskConfig == null){return;}
if (!getFinishMissionIds().contains(missionId)) {
return ;
}
MissionStateChangeInfo stateChangeInfo = new MissionStateChangeInfo(missionId, MissionState.REWARD,taskConfig.getIntegral());
missionTypeEnumListMap.add(stateChangeInfo);
getFinishMissionIds().remove(missionId);
getRewardedMissionIds().set(missionId);
}
@Override
public int[][] reward(int missionId) {
return new int[0][];
}
@Override
public void calCumulationDataResult(User user, CumulationData.Result result, List<MissionStateChangeInfo> missionStateChangeInfos, CumulationData cumulationData) {
Set<Integer> doingMissionIds = getDoingMissionIds();
List<SThemeActivityTaskConfig> sThemeActivityTaskConfigs = SThemeActivityTaskConfig.sThemeTaskConfigListByTypeMapTmp.get(result.subType.getMissionTypeValue());
if(sThemeActivityTaskConfigs == null){
return;
}
for(SThemeActivityTaskConfig sThemeActivityTaskConfig : sThemeActivityTaskConfigs){
int id = sThemeActivityTaskConfig.getId();
if(!doingMissionIds.contains(sThemeActivityTaskConfig.getId())){
continue;
}
if(sThemeActivityTaskConfig.getType()!=result.getMissionTimeType()){
continue;
}
//完成
int finishParm = sThemeActivityTaskConfig.getTaskValue()[1][0];
boolean isFinish;
int doingProgress;
BaseDataManager missTypeData = DataManagerDistributor.getMissTypeData(MissionType.findByMissionId(sThemeActivityTaskConfig.getTaskType()));
if(missTypeData instanceof AbstractDataManager &&((AbstractDataManager) missTypeData).isFinish(user,cumulationData, sThemeActivityTaskConfig.getTaskValue())){
doingProgress = ((AbstractDataManager) missTypeData).getProcess(user,cumulationData,sThemeActivityTaskConfig.getTaskValue()[0]);
isFinish=true;
}else {
doingProgress = MissionLoigc.getDoingProgress(user, cumulationData, sThemeActivityTaskConfig.getTaskType(), sThemeActivityTaskConfig.getTaskValue()[0]);
isFinish =doingProgress>=finishParm;
}
if( isFinish){
doingMissionIds.remove(id);
getFinishMissionIds().add(id);
MissionStateChangeInfo missionStateChangeInfo = new MissionStateChangeInfo(id, MissionState.FINISH,doingProgress,0);
missionStateChangeInfos.add(missionStateChangeInfo);
continue;
}
if(finishParm<0){
continue;
}
int sendProgress = doingProgress;
if(sendProgress>=finishParm){
MissionStateChangeInfo missionStateChangeInfo = new MissionStateChangeInfo(id, MissionState.FINISH,sendProgress,0);
missionStateChangeInfos.add(missionStateChangeInfo);
}else{
MissionStateChangeInfo missionStateChangeInfo = new MissionStateChangeInfo(id, MissionState.DOING,sendProgress,0);
missionStateChangeInfos.add(missionStateChangeInfo);
}
}
}
}

View File

@ -267,6 +267,7 @@ public class BuyGoodsLogic {
ActivityLogic.getInstance().updateActivityMissionProgress(user, ActivityType.LUCKYCAT,price);
ActivityLogic.getInstance().updateActivityMissionProgress(user, ActivityType.DAILY_RECHARGE,price);
ActivityLogic.getInstance().updateActivityMissionProgress(user, ActivityType.RECHARGE_NUM,price);
ActivityLogic.getInstance().updateActivityMissionProgress(user, ActivityType.JADE_DYNASTY_RECHARGE_SUM,price);
ActivityLogic.getInstance().updateActivityMissionProgress(user, ActivityType.RECHARGE_SUM_DAY, user.getPlayerInfoManager().getRechargedaily());
ActivityLogic.getInstance().updateActivityMissionProgress(user, ActivityType.FIND_FAIRY_FESTIVAL, price);
@ -293,6 +294,13 @@ public class BuyGoodsLogic {
rechargeInfo.updateBuyGoodsTimes(goodsId,buyCount);
if (goodsId == GlobalsDef.DAILY_GOODS_FAST_ID) {
//每日礼包一键购买之后,把所有单个的每日礼包的购买次数加一
for (int gId : GlobalsDef.DAILY_RECHARGE_IDS) {
rechargeInfo.updateBuyGoodsTimes(gId,1);
}
}
ISession session = OnlineUserManager.getSessionByUid(uid);
//特殊礼包次数
if(sRechargeCommodityConfig.getTime()==4&&(sRechargeCommodityConfig.getDiscountType().length==3||sRechargeCommodityConfig.getDiscountType().length==4)){
@ -451,6 +459,9 @@ public class BuyGoodsLogic {
if(goodsType == GiftGoodsType.SUN_LONG){
user.getPlayerInfoManager().setHadBuyTreasure(1);
}
if (sRechargeCommodityConfig.getId() == GlobalsDef.DAILY_GOODS_FAST_ID) {
}
}
public static boolean isHadBought( Map<Integer, Integer> buyGoodsTimes,int giftGoodsType){

View File

@ -0,0 +1,74 @@
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 ="ThemeActivityTaskConfig")
public class SThemeActivityTaskConfig 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, SThemeActivityTaskConfig> idTaskConfig;
public static Map<Integer, List<Integer>> taskTypeMap;
public static Map<Integer,List<SThemeActivityTaskConfig>> sThemeTaskConfigListByTypeMapTmp;
@Override
public void init() throws Exception {
idTaskConfig = STableManager.getConfig(SThemeActivityTaskConfig.class);
taskTypeMap = new HashMap<>();
sThemeTaskConfigListByTypeMapTmp = new HashMap<>();
for(Map.Entry<Integer, SThemeActivityTaskConfig> entry:idTaskConfig.entrySet()){
SThemeActivityTaskConfig entryValue = entry.getValue();
taskTypeMap.computeIfAbsent(entryValue.getType(),v->new ArrayList<>()).add(entry.getKey());
sThemeTaskConfigListByTypeMapTmp.computeIfAbsent(entryValue.getTaskType(),v->new ArrayList<>()).add(entryValue);
}
}
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;
}
}