Merge branch 'develop_treasure'

back_recharge
lilei 2020-08-19 09:47:27 +08:00
commit 50f33a02c0
23 changed files with 420 additions and 68 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

@ -13,6 +13,8 @@ import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.hero.HeroLogic;
import com.ljsd.jieling.logic.item.ItemLogic;
import com.ljsd.jieling.logic.mission.GameEvent;
import com.ljsd.jieling.logic.mission.MissionType;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.CommonProto;
import com.ljsd.jieling.protocols.HeroInfoProto;
@ -90,6 +92,9 @@ public class ComplexEquipHandler extends BaseHandler<HeroInfoProto.ComplexEquipR
dropItems[0][1] = proto.getNum();
CommonProto.Drop.Builder drop = ItemUtil.drop(user, dropItems, BIReason.COMPLEX_EQUIP);
user.getUserMissionManager().onGameEvent(user, GameEvent.WORKSHOP_CREATE_EQUIP, proto.getNum());
HeroInfoProto.ComplexEquipResponse.Builder response = HeroInfoProto.ComplexEquipResponse.newBuilder();
response.setDrop(drop);
MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.EQUIP_COMPLEX_RESPONSE_VALUE, response.build(), true);
@ -179,13 +184,16 @@ public class ComplexEquipHandler extends BaseHandler<HeroInfoProto.ComplexEquipR
}
int[][] createArray = new int[countMap.size()][];
int index = 0 ;
int totalCreate = 0;
for(Map.Entry<Integer, Integer> createEntry:countMap.entrySet()){
createArray[index] = new int[]{createEntry.getKey(),createEntry.getValue()};
index++;
totalCreate += createEntry.getValue();
}
ItemUtil.itemCost(user, consumeMap, BIReason.COMPLEX_EQUIP_CONSUME, 0);
CommonProto.Drop.Builder drop = ItemUtil.drop(user,createArray,BIReason.COMPLEX_EQUIP);
user.getUserMissionManager().onGameEvent(user, GameEvent.WORKSHOP_CREATE_EQUIP, totalCreate);
HeroInfoProto.ComplexEquipResponse.Builder response = HeroInfoProto.ComplexEquipResponse.newBuilder();
response.setDrop(drop);
ReportUtil.onReportEvent(user, ReportEventEnum.EQUIP_SYNTHESIS.getType(),new ArrayList<>(countMap.keySet()),"",new ArrayList<>(consumeMap.keySet()),consumeMap.values());

View File

@ -3254,6 +3254,9 @@ public class MapLogic {
idList.add(id);
}
BehaviorUtil.destoryCurPoint(user);
user.getUserMissionManager().onGameEvent(user, GameEvent.PLAY_MINI_GAME, 0);
MapInfoProto.MapGameResponse response = MapInfoProto.MapGameResponse.newBuilder().setType(mapGameInfo.getType()).addAllParam(idList).build();
MessageUtil.sendMessage(session,1,messageType.getNumber(),response,true);
}

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;
@ -1258,6 +1260,10 @@ public class ActivityLogic implements IEventHandler{
}else{
throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH);
}
PlayerInfoProto.TreasureLevelUpIndication indication = PlayerInfoProto.TreasureLevelUpIndication.newBuilder().setLevel(user.getPlayerInfoManager().getTreasureLevel()).build();
MessageUtil.sendIndicationMessage(session,1,MessageTypeProto.MessageType.TREASURE_LEVELUP_INDICATION_VALUE,indication,true);
MessageUtil.sendMessage(session,1,messageType.getNumber(),null,true);
}

View File

@ -1,5 +1,6 @@
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;
@ -7,8 +8,10 @@ import com.ljsd.jieling.jbean.ActivityMission;
import com.ljsd.jieling.jbean.ActivityProgressInfo;
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.player.PlayerLogic;
import com.ljsd.jieling.logic.store.GiftGoodsType;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.CommonProto;
@ -16,13 +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 java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.*;
public class TreasureActivity extends AbstractActivity {
@ -33,16 +32,18 @@ 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);
//戒灵秘宝改为青龙秘宝,只有周任务和月任务 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 +57,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,22 +81,48 @@ 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);
int destState = getDestState(user);
List<int[][]> dropList = new ArrayList<>(2);
// Set<Integer> missionIds = new HashSet<>();
if(missionId==-1){
getAllTreasureRewards(user,activityMission,changeState,dropList);
}else{
int state = activityMission.getActivityMissionMap().get(missionId).getState();
if(state==changeState||state==ActivityType.FINISH_TAKED){
throw new ErrorCodeException(ErrorCode.newDefineCode("该奖励已领取过"));
if (missionId == -2) {
if (user.getPlayerInfoManager().getHadBuyTreasure() == 0) {
throw new ErrorCodeException(ErrorCode.newDefineCode("请先解锁秘宝"));
}
dropByState(dropList,state,changeState,missionId);
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);
notifyClient(session,user);
} else if (missionId == -1) {
getAllTreasureRewards(user, activityMission, destState, dropList);
} else {
int state = activityMission.getActivityMissionMap().get(missionId).getState();
if (state == destState || state == ActivityType.FINISH_TAKED) {
throw new ErrorCodeException(ErrorCode.newDefineCode("奖励不可重复领取"));
}
dropByState(dropList, state, destState, missionId);
ActivityProgressInfo progressInfo = new ActivityProgressInfo();
progressInfo.setState(changeState);
progressInfo.setState(destState);
progressInfo.setProgrss(0);
activityMission.getActivityMissionMap().put(missionId, progressInfo);
// missionIds.add(missionId);
@ -204,7 +232,7 @@ public class TreasureActivity extends AbstractActivity {
}
private int getChangerState(User user){
private int getDestState(User user){
PlayerManager playerInfoManager = user.getPlayerInfoManager();
int changeState = ActivityType.HAD_TAKED;
int hadBuyTreasure = playerInfoManager.getHadBuyTreasure();
@ -213,23 +241,35 @@ public class TreasureActivity extends AbstractActivity {
}
return changeState;
}
private void getAllTreasureRewards(User user, ActivityMission activityMission, int changeState, List<int[][]> dropList){
private void getAllTreasureRewards(User user, ActivityMission activityMission, int destState, List<int[][]> dropList){
for(int i = 1 ; i<=user.getPlayerInfoManager().getTreasureLevel();i++){
Map<Integer, ActivityProgressInfo> progressInfoMap = activityMission.getActivityMissionMap();
int state =progressInfoMap.get(i).getState();
if(state==changeState||state==ActivityType.FINISH_TAKED) {
if(state == destState || state == ActivityType.FINISH_TAKED) {
continue;
}
dropByState(dropList,state,changeState,i);
dropByState(dropList,state,destState,i);
ActivityProgressInfo progressInfo = new ActivityProgressInfo();
progressInfo.setProgrss(0);
progressInfo.setState(changeState);
progressInfo.setState(destState);
activityMission.getActivityMissionMap().put(i, progressInfo);
}
}
@Override
public void getAllMissRewards(User user, ISession session, List<int[][]> itemAttrs){
getAllTreasureRewards(user, user.getActivityManager().getActivityMissionMap().get(id), getChangerState(user), itemAttrs);
getAllTreasureRewards(user, user.getActivityManager().getActivityMissionMap().get(id), getDestState(user), itemAttrs);
}
/**
*
* @param sesson
* @param user
*/
private void notifyClient(ISession sesson, User user) {
PlayerInfoProto.PrivilegeIndication.Builder indication = PlayerInfoProto.PrivilegeIndication.newBuilder();
Set<CommonProto.Privilege> privilege = PlayerLogic.getInstance().getPrivilege(user, Collections.singletonList(VipPrivilegeType.DRAGON_TREASURE_SUPPLY));
indication.addAllInfos(privilege);
MessageUtil.sendIndicationMessage(sesson, 1, MessageTypeProto.MessageType.PRIVILLEGE_ADD_INDICATION_VALUE, indication.build(), true);
}
}

View File

@ -21,6 +21,7 @@ import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.fight.*;
import com.ljsd.jieling.logic.hero.HeroLogic;
import com.ljsd.jieling.logic.mail.MailLogic;
import com.ljsd.jieling.logic.mission.GameEvent;
import com.ljsd.jieling.logic.player.PlayerLogic;
import com.ljsd.jieling.network.server.ProtocolsManager;
import com.ljsd.jieling.network.session.ISession;
@ -382,6 +383,7 @@ public class ChampionshipLogic {
if (user.getArenaManager().getTopMaxRank() == 0 || user.getArenaManager().getTopMaxRank() > rank) {
user.getArenaManager().setTopMaxRank(rank);
}
user.getUserMissionManager().onGameEvent(user, GameEvent.CHAMPIONSHIP_RANK, rank);
rank++;
String title = SErrorCodeEerverConfig.getI18NMessage("champion_reward_title");
String content = SErrorCodeEerverConfig.getI18NMessage("champion_reward_txt", new Object[]{sChampionshipReward.getTitleDesc()});

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,17 @@ 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;
//森罗幻境中参与小游戏次数
private int playMiniGameTimes;
public Result updateData(MissionType missionType, Object...parm) throws Exception {
return DataManagerDistributor.updateData(this, missionType,parm);
@ -294,4 +306,63 @@ 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;
}
public int getPlayMiniGameTimes() {
return playMiniGameTimes;
}
public void setPlayMiniGameTimes(int playMiniGameTimes) {
this.playMiniGameTimes = playMiniGameTimes;
}
}

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;
@ -23,8 +24,6 @@ import manager.STableManager;
import util.TimeUtils;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
@ -103,9 +102,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 +379,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 +489,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,//巅峰联赛排名
PLAY_MINI_GAME,//参与森罗幻境小游戏
}

View File

@ -34,7 +34,7 @@ public enum MissionType {
BUY_GOLD_TIMES(20), //买金币次数
BUY_STAMINA_TIMES(21), //购买体力次数
WORKSHOP_CREATE_EQUIP_NUMS(22), //工坊合成装备件数
WORKSHOP_CREATE_EQUIP_NUMS(22), //锻器阁合成装备件数
GENERAL_STORY_TIMES(23), //每日挑战普通副本次数
HERO_STORY_TIMES(24), //每日挑战精英副本次数
LEVEL_STORY_TIMES(25), //每日挑战故事关卡次数
@ -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个
//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已实现
;
private int missionType;

View File

@ -0,0 +1,48 @@
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) {
/*if (data.getArenaConsecutiveWin() >= 0) {
data.setArenaConsecutiveWin(data.getArenaConsecutiveWin() + 1);
}else{
//为负代表上一场输了
data.setArenaConsecutiveWin(1);
}*/
data.setArenaConsecutiveWin(data.getArenaConsecutiveWin() + 1);
} else if (data.getArenaConsecutiveWin() > 0) {
//data.setArenaConsecutiveWin(-data.getArenaConsecutiveWin());
data.setArenaConsecutiveWin(0);
}
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

@ -11,7 +11,8 @@ public class BuyGoodsManager implements BaseDataManager {
int itemId = (int)parm[0];
int itemNum = (int)parm[1];
int storeType = (int)parm[2];
if(storeType == StoreType.FUNCTION_STORE.getType() && missionType == MissionType.BUY_GOLD_TIMES && itemId == Global.GOLD){
if((storeType == StoreType.FUNCTION_STORE.getType() || storeType == StoreType.GOLD_STORE.getType())
&& missionType == MissionType.BUY_GOLD_TIMES && itemId == Global.GOLD){
data.buyGoldTimes = data.buyGoldTimes + itemNum;
return new CumulationData.Result(missionType);
}else if(storeType == StoreType.FUNCTION_STORE.getType() && missionType == MissionType.BUY_STAMINA_TIMES && itemId == Global.STAMINA){

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,9 +135,11 @@ 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());
judges.put(MissionType.PLAY_MINI_GAME_TIMES, new PlayMiniGameTimesManager());
}

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

@ -0,0 +1,34 @@
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 15:17
*/
public class PlayMiniGameTimesManager extends AbstractDataManager {
@Override
public CumulationData.Result updateData(CumulationData data, MissionType missionType, Object... parm) {
CumulationData.Result result = null;
if (missionType == MissionType.PLAY_MINI_GAME_TIMES) {
data.setPlayMiniGameTimes(data.getPlayMiniGameTimes() + 1);
result = new CumulationData.Result(missionType);
}
return result;
}
@Override
public boolean isFinish(User user, CumulationData data, int[][] cfgValue, Object... parm) {
return data.getPlayMiniGameTimes() >= cfgValue[1][0];
}
@Override
public int getProcess(User user, CumulationData data, int[] missionSubType) {
return data.getPlayMiniGameTimes();
}
}

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,21 @@ 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());
typeList = new ArrayList<>();
typeList.add(MissionType.PLAY_MINI_GAME_TIMES);
eventEnumListMap.put(GameEvent.PLAY_MINI_GAME, typeList);
eventProcessor.put(GameEvent.PLAY_MINI_GAME, new CumulationDataEventProcessor());
}
public static final ThreadLocal<Map<GameMisionType, List<MissionStateChangeInfo>>> threadMissionChangeList =

View File

@ -426,33 +426,36 @@ public class BuyGoodsLogic {
if(user.getPlayerInfoManager().getMonthCard().containsKey(Global.LMONTHCARDID) ){
PlayerLogic.getInstance().sendDayilyMail(user,goodsType);
int starReward = user.getMapManager().getStarReward();
if(starReward == 0){
return;
}
StringBuilder rewardStr = new StringBuilder();
while (starReward>0){
SChallengeStarBox sChallengeStarBox = STableManager.getConfig(SChallengeStarBox.class).get(starReward);
int[][] extraReward = sChallengeStarBox.getExtraReward();
starReward--;
if(starReward>0){
rewardStr.append(StringUtil.parseArrayToString(extraReward)).append("|");
}else{
rewardStr.append(StringUtil.parseArrayToString(extraReward));
/**
* starReward0return
*
*
*/
if(starReward > 0){
StringBuilder rewardStr = new StringBuilder();
while (starReward>0){
SChallengeStarBox sChallengeStarBox = STableManager.getConfig(SChallengeStarBox.class).get(starReward);
int[][] extraReward = sChallengeStarBox.getExtraReward();
starReward--;
if(starReward>0){
rewardStr.append(StringUtil.parseArrayToString(extraReward)).append("|");
}else{
rewardStr.append(StringUtil.parseArrayToString(extraReward));
}
}
String title = SErrorCodeEerverConfig.getI18NMessage("recharge_6_stars_title");
String content = SErrorCodeEerverConfig.getI18NMessage("recharge_6_stars_txt");
MailLogic.getInstance().sendMail(user.getId(),title,content,rewardStr.toString(),nowTime, Global.MAIL_EFFECTIVE_TIME);
}
String title = SErrorCodeEerverConfig.getI18NMessage("recharge_6_stars_title");
String content = SErrorCodeEerverConfig.getI18NMessage("recharge_6_stars_txt");
MailLogic.getInstance().sendMail(user.getId(),title,content,rewardStr.toString(),nowTime, Global.MAIL_EFFECTIVE_TIME);
}
if(user.getPlayerInfoManager().getMonthCard().containsKey(Global.MONTHCARDID) || goodsType == GiftGoodsType.WEEKCARD || goodsType == GiftGoodsType.FOUND_ONE || goodsType == GiftGoodsType.FOUND_TWO){
PlayerLogic.getInstance().sendDayilyMail(user,goodsType);
}else if(goodsType == GiftGoodsType.SUN_LONG ){
user.getPlayerInfoManager().setHadBuyTreasure(1);
}
if(goodsType == GiftGoodsType.SUN_LONG){
user.getPlayerInfoManager().setHadBuyTreasure(1);
}
}
public static boolean isHadBought( Map<Integer, Integer> buyGoodsTimes,int giftGoodsType){

View File

@ -11,7 +11,7 @@ public enum StoreType {
TRIAL_STORE(8),
GIFT_STORE(9),
GOLD_STORE(57),//点金功能商店
;
private int type;

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) {
@ -702,9 +704,23 @@ public class ItemUtil {
return;
}
STreasureSunlongConfig levelConfig = STreasureSunlongConfig.levelTreasureConfigMap.get(activity.getId()).get(user.getPlayerInfoManager().getTreasureLevel());
while(levelConfig!=null&&levelConfig.getIntegral().length>0&&ItemUtil.itemCost(user,levelConfig.getIntegral(), BIReason.TREASURE_LEVEL_UP_CONSUME,1)){
user.getPlayerInfoManager().addTreasureLevel();
levelConfig = STreasureSunlongConfig.levelTreasureConfigMap.get(activity.getId()).get(user.getPlayerInfoManager().getTreasureLevel());
if (levelConfig != null) {
//需要先确定下每级真实需要的经验,与客户端实现方式同步,认为表里填的升到下一级所需经验是前边各级经验总和
int[][] integral = levelConfig.getIntegral();
STreasureSunlongConfig lastLevelConfig = STreasureSunlongConfig.levelTreasureConfigMap.get(activity.getId()).get(levelConfig.getLevel() - 1);
int[][] costItems = integral;
if (lastLevelConfig != null) {
costItems = new int[][]{{integral[0][0], integral[0][1] - lastLevelConfig.getIntegral()[0][1]}};
}
while(levelConfig != null && integral.length > 0 &&ItemUtil.itemCost(user, costItems, BIReason.TREASURE_LEVEL_UP_CONSUME,1)){
user.getPlayerInfoManager().addTreasureLevel();
lastLevelConfig = levelConfig;
levelConfig = STreasureSunlongConfig.levelTreasureConfigMap.get(activity.getId()).get(user.getPlayerInfoManager().getTreasureLevel());
if (levelConfig != null && levelConfig.getIntegral().length > 0) {
integral = levelConfig.getIntegral();
costItems = new int[][]{{integral[0][0],integral[0][1] - lastLevelConfig.getIntegral()[0][1]}};
}
}
}
PlayerInfoProto.TreasureLevelUpIndication indication = PlayerInfoProto.TreasureLevelUpIndication.newBuilder().setLevel(user.getPlayerInfoManager().getTreasureLevel()).build();
MessageUtil.sendIndicationMessage(OnlineUserManager.getSessionByUid(user.getId()),1,MessageTypeProto.MessageType.TREASURE_LEVELUP_INDICATION_VALUE,indication,true);

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