青龙秘宝,新增部分任务类型

back_recharge
lilei 2020-08-17 15:01:28 +08:00
parent e81eeb4cf6
commit f73829b5d4
16 changed files with 285 additions and 26 deletions

View File

@ -45,4 +45,6 @@ public interface VipPrivilegeType {
int SIGN_AGAIN = 1005; //每日签到充值后再领一次
int ADVENTURE_ADD_TIME = 2002;//挂机时常增加
int DRAGON_TREASURE_SUPPLY = 1007;//青龙宝藏每周补给
}

View File

@ -33,8 +33,9 @@ public class ServerZeroHandler extends BaseHandler {
GlobalDataManaager.flushGoodsTimes(user);
PlayerLogic.getInstance().sendDayilyMail(user,-1);
user.getUserMissionManager().onGameEvent(user, GameEvent.LOGIN_GAME,0);
//发送每日孙龙邮件
if(user.getPlayerInfoManager().getHadBuyTreasure()!=0){
//发送每日孙龙邮件l
// 这段暂时注掉,青龙秘宝没有这个需求,防止活动开启后发送错误的邮件
/*if(user.getPlayerInfoManager().getHadBuyTreasure()!=0){
Map<Integer, ActivityMission> activityMissionMap = user.getActivityManager().getActivityMissionMap();
for(Map.Entry<Integer, ActivityMission> entry:activityMissionMap.entrySet()){
if(SGlobalActivity.getsGlobalActivityMap().get(entry.getKey()).getType()== ActivityType.TREASURE){
@ -42,7 +43,7 @@ public class ServerZeroHandler extends BaseHandler {
break;
}
}
}
}*/
}
}

View File

@ -1246,9 +1246,11 @@ public class ActivityLogic implements IEventHandler{
}
int num = 0;
int[][] cost= SSpecialConfig.getTwiceArrayValue(SSpecialConfig.SUNLONG_COST);
for(int i = level;i>treasureLevel;i--){
//这段代码并没有实现每一级相同的购买价格???
/*for(int i = level;i>treasureLevel;i--){
num+=MathUtils.calABX(i,cost[1]);
}
}*/
num = (int)MathUtils.calABX(level - treasureLevel, cost[1]);
int[][] costItems = new int[1][];
int[] costTemp = {cost[0][0],num};
costItems[0]=costTemp;

View File

@ -1,12 +1,15 @@
package com.ljsd.jieling.logic.activity;
import com.ljsd.jieling.core.VipPrivilegeType;
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.PlayerManager;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.VipInfo;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.mission.GameEvent;
import com.ljsd.jieling.logic.store.GiftGoodsType;
@ -16,10 +19,9 @@ import com.ljsd.jieling.protocols.MessageTypeProto;
import com.ljsd.jieling.protocols.PlayerInfoProto;
import com.ljsd.jieling.util.ItemUtil;
import com.ljsd.jieling.util.MessageUtil;
import config.SGlobalActivity;
import config.SRechargeCommodityConfig;
import config.STreasureSunlongConfig;
import config.*;
import javax.lang.model.type.PrimitiveType;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@ -33,16 +35,19 @@ public class TreasureActivity extends AbstractActivity {
@Override
public void onResume(User user) throws Exception {
LOGGER.info("戒灵秘宝日常刷新...");
LOGGER.info("青龙秘宝日常刷新...");
user.getUserMissionManager().onGameEvent(user, GameEvent.TREASH_WEEK_REFRESH, id);
user.getUserMissionManager().onGameEvent(user, GameEvent.TREASH_REFRESH, id);
//TODO 周任务刷新需关联刷新每周补给特权状态,活动开启时同样需要清除之前的特权状态
//戒灵秘宝改为青龙秘宝,只有周任务和月任务 2020.8.14
//user.getUserMissionManager().onGameEvent(user, GameEvent.TREASH_REFRESH, id);
}
@Override
public void initActivity(User user) throws Exception {
LOGGER.info("戒灵秘宝初始化...");
LOGGER.info("[青龙秘宝初始化] [uid:{}]",user.getId());
if(user.getPlayerInfoManager().getHadBuyTreasure() == 1){
LOGGER.info("戒灵秘宝初始化...reset buy");
LOGGER.info("[青龙秘宝初始化] [重置秘宝解锁状态] [uid:{}]",user.getId());
user.getPlayerInfoManager().setHadBuyTreasure(0);
int id=0;
for(SRechargeCommodityConfig sRechargeCommodityConfig : SRechargeCommodityConfig.rechargeCommodityConfigMap.values()){
@ -56,7 +61,8 @@ public class TreasureActivity extends AbstractActivity {
SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(id);
user.getUserMissionManager().onGameEvent(user, GameEvent.TREASH_MONTH_REFRESH, sGlobalActivity.getId());
user.getUserMissionManager().onGameEvent(user, GameEvent.TREASH_WEEK_REFRESH, sGlobalActivity.getId());
user.getUserMissionManager().onGameEvent(user, GameEvent.TREASH_REFRESH, sGlobalActivity.getId());
//戒灵秘宝改为青龙秘宝,只有周任务和月任务 2020.8.14
//user.getUserMissionManager().onGameEvent(user, GameEvent.TREASH_REFRESH, sGlobalActivity.getId());
ActivityMission activityMission = new ActivityMission();
List<Integer> levels = new ArrayList<>(STreasureSunlongConfig.levelTreasureConfigMap.get(id).keySet());
if(levels.contains(0)){
@ -79,20 +85,45 @@ public class TreasureActivity extends AbstractActivity {
return true;
}
/**
*
* @param session
* @param user
* @param activityId
* @param missionId -2:-1
* @throws Exception
*/
private void takeTreasureReward(ISession session, User user, int activityId, int missionId) throws Exception {
int rewardResponseValue = MessageTypeProto.MessageType.TAKE_ACTIVITY_REWARD_RESPONSE_VALUE;
ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(activityId);
int changeState = getChangerState(user);
List<int[][]> dropList = new ArrayList<>(2);
// Set<Integer> missionIds = new HashSet<>();
if(missionId==-1){
getAllTreasureRewards(user,activityMission,changeState,dropList);
}else{
if (missionId == -2) {
if (user.getPlayerInfoManager().getHadBuyTreasure() == 0) {
throw new ErrorCodeException(ErrorCode.newDefineCode("请先解锁秘宝"));
}
boolean received = false;
VipInfo vipInfo = user.getPlayerInfoManager().getVipInfo().get(VipPrivilegeType.DRAGON_TREASURE_SUPPLY);
if (vipInfo != null) {
if (vipInfo.getCount() > 0) {
received = true;
}
}
if (received) {
throw new ErrorCodeException(ErrorCode.newDefineCode("本周补给已领取"));
}
user.getPlayerInfoManager().updateVipPrivilage(VipPrivilegeType.DRAGON_TREASURE_SUPPLY,1);
int[][] rewards = SSpecialConfig.getTwiceArrayValue(SSpecialConfig.SUNLONG_REWARD);
dropList.add(rewards);
} else if (missionId == -1) {
getAllTreasureRewards(user, activityMission, changeState, dropList);
} else {
int state = activityMission.getActivityMissionMap().get(missionId).getState();
if(state==changeState||state==ActivityType.FINISH_TAKED){
if (state == changeState || state == ActivityType.FINISH_TAKED) {
throw new ErrorCodeException(ErrorCode.newDefineCode("该奖励已领取过"));
}
dropByState(dropList,state,changeState,missionId);
dropByState(dropList, state, changeState, missionId);
ActivityProgressInfo progressInfo = new ActivityProgressInfo();
progressInfo.setState(changeState);
progressInfo.setProgrss(0);

View File

@ -53,6 +53,7 @@ public class CumulationData {
private int arenaScore;
private int consumeGem ;
private Map<Integer,Integer> storyFightInfo =new HashMap<>(3);
@ -150,6 +151,14 @@ public class CumulationData {
public int car_play_time;//
public int car_play_loot_time;//
//指定品质魂印获取数量
private Map<Integer, Integer> qualitySoulMarkMap = new HashMap<>();
//竞技场连胜,正的代表上一场赢了,负的代表上一场输了
private int arenaConsecutiveWin;
//巅峰联赛名次
private int championshipRank;
public Result updateData(MissionType missionType, Object...parm) throws Exception {
return DataManagerDistributor.updateData(this, missionType,parm);
@ -294,4 +303,55 @@ public class CumulationData {
public Map<Integer, Integer> getStoryFightInfo() {
return storyFightInfo;
}
public Map<Integer, Integer> getQualitySoulMarkMap() {
if (qualitySoulMarkMap == null) {
qualitySoulMarkMap = new HashMap<>();
}
return qualitySoulMarkMap;
}
public void setQualitySoulMarkMap(Map<Integer, Integer> qualitySoulMarkMap) {
this.qualitySoulMarkMap = qualitySoulMarkMap;
}
/**
*
* @param quality
* @param num
*/
public void addQualitySoulMarkNum(int quality, int num){
if (qualitySoulMarkMap == null) {
qualitySoulMarkMap = new HashMap<>();
}
qualitySoulMarkMap.merge(quality, num, (oldV, newV) -> oldV + newV);
}
/**
*
* @param quality
* @return
*/
public int getQualitySoulMarkNum(int quality){
if (qualitySoulMarkMap == null) {
qualitySoulMarkMap = new HashMap<>();
}
return qualitySoulMarkMap.getOrDefault(quality,0);
}
public int getArenaConsecutiveWin() {
return arenaConsecutiveWin;
}
public void setArenaConsecutiveWin(int arenaConsecutiveWin) {
this.arenaConsecutiveWin = arenaConsecutiveWin;
}
public int getChampionshipRank() {
return championshipRank;
}
public void setChampionshipRank(int championshipRank) {
this.championshipRank = championshipRank;
}
}

View File

@ -2,6 +2,7 @@ package com.ljsd.jieling.logic.dao;
import com.ljsd.common.mogodb.MongoBase;
import com.ljsd.jieling.config.clazzStaticCfg.TaskStaticConfig;
import com.ljsd.jieling.core.VipPrivilegeType;
import com.ljsd.jieling.exception.ErrorCode;
import com.ljsd.jieling.exception.ErrorCodeException;
import com.ljsd.jieling.globals.BIReason;
@ -103,9 +104,10 @@ public class UserMissionManager extends MongoBase {
break;
case TREASH_WEEK_REFRESH:
int[] weekRefreshIds = resetTreasureTaskInfo(2,missionTypeEnumListMap,treasureWeekCumulationData);
if(weekRefreshIds!=null){
if(weekRefreshIds != null){
treasureWeekCumulationData = new CumulationData();
int weekRefreshTime = (int)(TimeUtils.getNextWeekendStartTime(1,5)/1000);
user.getPlayerInfoManager().clearVipCount(VipPrivilegeType.DRAGON_TREASURE_SUPPLY);
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);
@ -379,15 +381,15 @@ public class UserMissionManager extends MongoBase {
if(!treasureMissionIdsType.getDoingMissionIds().isEmpty() ){
List<STreasureSunlongTaskConfig> sTreasureTaskConfigs = STreasureSunlongTaskConfig.sTreasureTaskConfigListByTypeMapTmp.get(missionType.getMissionTypeValue());
if(sTreasureTaskConfigs!=null){
CumulationData.Result result = treasureCumulationData.updateData(missionType, parm);
//CumulationData.Result result = treasureCumulationData.updateData(missionType, parm);
CumulationData.Result weekResult = treasureWeekCumulationData.updateData(missionType, parm);
CumulationData.Result monthResult = treasureMonthCumulationData.updateData(missionType, parm);
if(result!=null){
/*if(result!=null){
result.setMissionTimeType(1);
treasureMissionIdsType.calCumulationDataResult(user,result,missionTypeEnumListMap.get(GameMisionType.TREASUREMISSION),treasureCumulationData);
updateString("treasureCumulationData",treasureCumulationData);
updateString("treasureMissionIdsType",treasureMissionIdsType);
}
}*/
if(weekResult!=null){
weekResult.setMissionTimeType(2);
treasureMissionIdsType.calCumulationDataResult(user,weekResult,missionTypeEnumListMap.get(GameMisionType.TREASUREMISSION),treasureWeekCumulationData);
@ -489,6 +491,7 @@ public class UserMissionManager extends MongoBase {
}
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++){

View File

@ -98,4 +98,7 @@ public enum GameEvent {
CAR_PLAY,//参与车迟斗法num次.//TODO
CAR_PLAY_LOOT,//于车迟斗法中抢夺其他玩家积分num次//TODO
GOT_SOUL_MARK,//获取魂印事件
CHAMPIONSHIP_RANK,//巅峰联赛排名
}

View File

@ -114,6 +114,17 @@ public enum MissionType {
CAR_PLAY_LOOT_TIME(106),//于车迟斗法中抢夺其他玩家积分num次
RANDOM_All_TIMES(107),//使用募英殿内即包含魂晶、友情、普通三种方式任意类型招募武将num次
ITEMUSE(108),//消耗代币道具类型为1特殊类itemid的数量达到num
GOT_ANY_ITEM(109),//暂时不实现占位任意途径获得quality品质无品质限定为0type类别无类别限制为-1的itemid道具无指定道具限定为0num个
CAR_PLAY_DAYS(110),//累计n天挑战车迟斗法
ARENA_CONSECUTIVE_WIN(111),//竞技场连胜
//森罗幻境中参与n次小游戏
CHAMPIONSHIP_RANK(113),//巅峰联赛中达到num名
//天宫寻宝中接取任意星级任务n次
GOT_SOUL_MARK(115),//获得指定品质魂印数量
//累计探索森罗幻境n层
//充值达到num金额
;
private int missionType;

View File

@ -0,0 +1,47 @@
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;
import config.SItem;
import manager.STableManager;
/**
* @author lilei
* @create 2020-08-14 20:35
* @description
*/
public class ArenaConsecutiveWinManager extends AbstractDataManager {
@Override
public CumulationData.Result updateData(CumulationData data, MissionType missionType, Object... parm) {
CumulationData.Result result = null;
int fightResult = (int)parm[0];
if (missionType == MissionType.ARENA_CONSECUTIVE_WIN) {
if (fightResult == 1) {
//大于等于0代表上一场胜利或之前没有挑战过
if (data.getArenaConsecutiveWin() >= 0) {
data.setArenaConsecutiveWin(data.getArenaConsecutiveWin() + 1);
}else{
//为负代表上一场输了
data.setArenaConsecutiveWin(1);
}
} else if (data.getArenaConsecutiveWin() > 0) {
data.setArenaConsecutiveWin(-data.getArenaConsecutiveWin());
}
result = new CumulationData.Result(missionType);
}
return result;
}
@Override
public boolean isFinish(User user, CumulationData data, int[][] cfgValue, Object... parm) {
if(data.getArenaConsecutiveWin() < 0) return false;
return data.getArenaConsecutiveWin() >= cfgValue[1][0];
}
@Override
public int getProcess(User user, CumulationData data, int[] missionSubType) {
return data.getArenaConsecutiveWin() > 0 ? data.getArenaConsecutiveWin() : 0;
}
}

View File

@ -0,0 +1,36 @@
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
* @description
* @create 2020-08-17 14:51
*/
public class ChampionshipRankManager extends AbstractDataManager {
@Override
public CumulationData.Result updateData(CumulationData data, MissionType missionType, Object... parm) {
CumulationData.Result result = null;
if (missionType == MissionType.CHAMPIONSHIP_RANK) {
int rank = (int)parm[0];
if (data.getChampionshipRank() == 0 || data.getChampionshipRank() > rank) {
data.setChampionshipRank(rank);
result = new CumulationData.Result(missionType);
}
}
return result;
}
@Override
public boolean isFinish(User user, CumulationData data, int[][] cfgValue, Object... parm) {
return super.isFinish(user, data, cfgValue, parm);
}
@Override
public int getProcess(User user, CumulationData data, int[] missionSubType) {
return super.getProcess(user, data, missionSubType);
}
}

View File

@ -1,7 +1,6 @@
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;
import java.util.HashMap;
@ -136,8 +135,10 @@ public class DataManagerDistributor {
judges.put(MissionType.RANDOM_All_TIMES,new RandomAllTypeTimes());
judges.put(MissionType.ITEMUSE,new ItemUseDataManager());
judges.put(MissionType.GOT_SOUL_MARK, new GotSoulMarkManager());
judges.put(MissionType.ARENA_CONSECUTIVE_WIN, new ArenaConsecutiveWinManager());
judges.put(MissionType.CHAMPIONSHIP_RANK, new ChampionshipRankManager());
}

View File

@ -0,0 +1,37 @@
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;
import config.SItem;
import manager.STableManager;
/**
* @author lilei
* @create 2020-08-14 20:35
* @description
*/
public class GotSoulMarkManager extends AbstractDataManager {
@Override
public CumulationData.Result updateData(CumulationData data, MissionType missionType, Object... parm) {
CumulationData.Result result = null;
int itemId = (int)parm[0];
int num = (int)parm[1];
if(missionType == MissionType.GOT_SOUL_MARK){
data.addQualitySoulMarkNum(STableManager.getConfig(SItem.class).get(itemId).getQuantity(),num);
result = new CumulationData.Result(missionType);
}
return result;
}
@Override
public boolean isFinish(User user, CumulationData data, int[][] cfgValue, Object... parm) {
return data.getQualitySoulMarkNum(cfgValue[0][0]) >= cfgValue[1][0];
}
@Override
public int getProcess(User user, CumulationData data, int[] missionSubType) {
return data.getQualitySoulMarkNum(missionSubType[0]);
}
}

View File

@ -89,6 +89,7 @@ public class MissionEventDistributor {
typeList.add(MissionType.ARENA_CHALLENEGE_NUMS);
typeList.add(MissionType.ARENA_SCORE);
typeList.add(MissionType.ARENA_FIGHTSUCCES_TIMES);
typeList.add(MissionType.ARENA_CONSECUTIVE_WIN);
eventEnumListMap.put(GameEvent.ARENA_CHALLENGE,typeList);
eventProcessor.put(GameEvent.ARENA_CHALLENGE,new CumulationDataEventProcessor());
@ -397,6 +398,16 @@ public class MissionEventDistributor {
eventEnumListMap.put(GameEvent.CAR_PLAY_LOOT,typeList);
eventProcessor.put(GameEvent.CAR_PLAY_LOOT,new CumulationDataEventProcessor());
typeList = new ArrayList<>();
typeList.add(MissionType.GOT_SOUL_MARK);
eventEnumListMap.put(GameEvent.GOT_SOUL_MARK, typeList);
eventProcessor.put(GameEvent.GOT_SOUL_MARK, new CumulationDataEventProcessor());
typeList = new ArrayList<>();
typeList.add(MissionType.CHAMPIONSHIP_RANK);
eventEnumListMap.put(GameEvent.CHAMPIONSHIP_RANK, typeList);
eventProcessor.put(GameEvent.CHAMPIONSHIP_RANK, new CumulationDataEventProcessor());
}
public static final ThreadLocal<Map<GameMisionType, List<MissionStateChangeInfo>>> threadMissionChangeList =

View File

@ -619,6 +619,8 @@ public class ItemUtil {
user.getUserMissionManager().onGameEvent(user,GameEvent.GET_EQUIP,sItem.getId(),itemNum);
ReportUtil.onReportEvent(user,ReportEventEnum.GET_EQUIP.getType(),sItem.getId(),itemNum,reason);
}
} else if (sItem.getItemType() == GlobalItemType.SOUL_MARK) {
user.getUserMissionManager().onGameEvent(user, GameEvent.GOT_SOUL_MARK, sItem.getId(), itemNum);
}
}
if (dropBuilder != null) {

View File

@ -50,7 +50,7 @@ public class SSpecialConfig implements BaseConfig {
public static final String SUNLONG_DAILYTASKS = "Sunlong_DailyTasks";//孙龙的宝藏每日、每周、每月任务个数
public static final String SUNLONG_COST = "Sunlong_Cost";//孙龙的宝藏购买等级
public static final String SUNLONG_INTEGRAL = "Sunlong_Integral";//孙龙的宝藏每日积分礼包
public static final String SUNLONG_REWARD = "Sunlong_Reward";//孙龙的宝藏礼包\
public static final String SUNLONG_REWARD = "Sunlong_Reward";//青龙秘宝每周补给
public static final String LAMP_TEXT_SPEED = "lamp_text_speed";//跑马灯速度
public static final String TIME_LIMIT_RECRUITMENT_INTEGRAL = "time_limit_recruitment_integral";//限时抽卡一次积分
public static final String TIME_LIMIT_RECRUITMENT_FREEINTEGRAL = "time_limit_recruitment_FreeIntegral";//东海寻仙每获得150分赠送一次免费招募

View File

@ -30,6 +30,13 @@ public class STreasureSunlongTaskConfig implements BaseConfig {
public static Map<Integer, List<Integer>> taskTypeMap;
public static Map<Integer,List<STreasureSunlongTaskConfig>> sTreasureTaskConfigListByTypeMapTmp;
/**
* ID
*
*/
private static int TASK_INTEGRAL;
@Override
public void init() throws Exception {
treasureTaskConfig = STableManager.getConfig(STreasureSunlongTaskConfig.class);
@ -39,6 +46,9 @@ public class STreasureSunlongTaskConfig implements BaseConfig {
STreasureSunlongTaskConfig entryValue = entry.getValue();
taskTypeMap.computeIfAbsent(entryValue.getType(),v->new ArrayList<>()).add(entry.getKey());
sTreasureTaskConfigListByTypeMapTmp.computeIfAbsent(entryValue.getTaskType(),v->new ArrayList<>()).add(entryValue);
if (TASK_INTEGRAL == 0) {
TASK_INTEGRAL = entryValue.integral[0][0];
}
}
}
@ -71,5 +81,7 @@ public class STreasureSunlongTaskConfig implements BaseConfig {
return weight;
}
public static int getTaskIntegral() {
return TASK_INTEGRAL;
}
}