From f73829b5d43af672c8c3599724fc1cbd7b3c622e Mon Sep 17 00:00:00 2001 From: lilei Date: Mon, 17 Aug 2020 15:01:28 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E9=9D=92=E9=BE=99=E7=A7=98=E5=AE=9D?= =?UTF-8?q?=EF=BC=8C=E6=96=B0=E5=A2=9E=E9=83=A8=E5=88=86=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ljsd/jieling/core/VipPrivilegeType.java | 2 + .../jieling/handler/ServerZeroHandler.java | 7 ++- .../jieling/logic/activity/ActivityLogic.java | 6 +- .../logic/activity/TreasureActivity.java | 57 ++++++++++++++---- .../jieling/logic/dao/CumulationData.java | 60 +++++++++++++++++++ .../jieling/logic/dao/UserMissionManager.java | 11 ++-- .../ljsd/jieling/logic/mission/GameEvent.java | 3 + .../jieling/logic/mission/MissionType.java | 11 ++++ .../data/ArenaConsecutiveWinManager.java | 47 +++++++++++++++ .../mission/data/ChampionshipRankManager.java | 36 +++++++++++ .../mission/data/DataManagerDistributor.java | 5 +- .../mission/data/GotSoulMarkManager.java | 37 ++++++++++++ .../event/MissionEventDistributor.java | 11 ++++ .../java/com/ljsd/jieling/util/ItemUtil.java | 2 + .../src/main/java/config/SSpecialConfig.java | 2 +- .../config/STreasureSunlongTaskConfig.java | 14 ++++- 16 files changed, 285 insertions(+), 26 deletions(-) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/ArenaConsecutiveWinManager.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/ChampionshipRankManager.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/GotSoulMarkManager.java diff --git a/serverlogic/src/main/java/com/ljsd/jieling/core/VipPrivilegeType.java b/serverlogic/src/main/java/com/ljsd/jieling/core/VipPrivilegeType.java index ca00124f1..df0924ee9 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/core/VipPrivilegeType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/core/VipPrivilegeType.java @@ -45,4 +45,6 @@ public interface VipPrivilegeType { int SIGN_AGAIN = 1005; //每日签到充值后再领一次 int ADVENTURE_ADD_TIME = 2002;//挂机时常增加 + int DRAGON_TREASURE_SUPPLY = 1007;//青龙宝藏每周补给 + } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/ServerZeroHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/ServerZeroHandler.java index 3dd8aa3a2..f11eae99a 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/ServerZeroHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/ServerZeroHandler.java @@ -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 activityMissionMap = user.getActivityManager().getActivityMissionMap(); for(Map.Entry entry:activityMissionMap.entrySet()){ if(SGlobalActivity.getsGlobalActivityMap().get(entry.getKey()).getType()== ActivityType.TREASURE){ @@ -42,7 +43,7 @@ public class ServerZeroHandler extends BaseHandler { break; } } - } + }*/ } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java index c17709763..bc70b8e73 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java @@ -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; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/TreasureActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/TreasureActivity.java index 13200a416..7329a0482 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/TreasureActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/TreasureActivity.java @@ -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 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 dropList = new ArrayList<>(2); // Set 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); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/CumulationData.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/CumulationData.java index 47868bbab..df2d4f4fc 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/CumulationData.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/CumulationData.java @@ -53,6 +53,7 @@ public class CumulationData { private int arenaScore; + private int consumeGem ; private Map storyFightInfo =new HashMap<>(3); @@ -150,6 +151,14 @@ public class CumulationData { public int car_play_time;// public int car_play_loot_time;// + //指定品质魂印获取数量 + private Map 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 getStoryFightInfo() { return storyFightInfo; } + + public Map getQualitySoulMarkMap() { + if (qualitySoulMarkMap == null) { + qualitySoulMarkMap = new HashMap<>(); + } + return qualitySoulMarkMap; + } + + public void setQualitySoulMarkMap(Map 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; + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java index 01f3e3a3e..7a1c4bca5 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java @@ -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 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= 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; + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/ChampionshipRankManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/ChampionshipRankManager.java new file mode 100644 index 000000000..c53530efa --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/ChampionshipRankManager.java @@ -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); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/DataManagerDistributor.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/DataManagerDistributor.java index 4892625ff..79b81849e 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/DataManagerDistributor.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/DataManagerDistributor.java @@ -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()); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/GotSoulMarkManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/GotSoulMarkManager.java new file mode 100644 index 000000000..976e530bc --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/GotSoulMarkManager.java @@ -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]); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/MissionEventDistributor.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/MissionEventDistributor.java index 8662e6afe..66f7ec4bd 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/MissionEventDistributor.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/MissionEventDistributor.java @@ -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>> threadMissionChangeList = diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java index 2c92e8842..b42869f45 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java @@ -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) { diff --git a/tablemanager/src/main/java/config/SSpecialConfig.java b/tablemanager/src/main/java/config/SSpecialConfig.java index 02d82dab3..c950ea8bc 100644 --- a/tablemanager/src/main/java/config/SSpecialConfig.java +++ b/tablemanager/src/main/java/config/SSpecialConfig.java @@ -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分赠送一次免费招募 diff --git a/tablemanager/src/main/java/config/STreasureSunlongTaskConfig.java b/tablemanager/src/main/java/config/STreasureSunlongTaskConfig.java index 95f39eda3..4839bea3f 100644 --- a/tablemanager/src/main/java/config/STreasureSunlongTaskConfig.java +++ b/tablemanager/src/main/java/config/STreasureSunlongTaskConfig.java @@ -30,6 +30,13 @@ public class STreasureSunlongTaskConfig implements BaseConfig { public static Map> taskTypeMap; public static Map> 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; + } } \ No newline at end of file From b797c85de681b245329ba69af948b3a1fa96799b Mon Sep 17 00:00:00 2001 From: lilei Date: Mon, 17 Aug 2020 19:53:26 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E9=9D=92=E9=BE=99=E7=A7=98=E5=AE=9D?= =?UTF-8?q?=EF=BC=8C=E6=96=B0=E5=A2=9E=E4=BB=BB=E5=8A=A1=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ljsd/jieling/handler/map/MapLogic.java | 3 ++ .../jieling/logic/activity/ActivityLogic.java | 4 +++ .../logic/activity/TreasureActivity.java | 21 +++++++++--- .../logic/championship/ChampionshipLogic.java | 2 ++ .../jieling/logic/dao/CumulationData.java | 11 ++++++ .../ljsd/jieling/logic/mission/GameEvent.java | 2 +- .../jieling/logic/mission/MissionType.java | 4 +-- .../mission/data/DataManagerDistributor.java | 2 +- .../data/PlayMiniGameTimesManager.java | 34 +++++++++++++++++++ .../event/MissionEventDistributor.java | 5 +++ 10 files changed, 79 insertions(+), 9 deletions(-) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/PlayMiniGameTimesManager.java diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java index d167866bd..dbe74db9c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java @@ -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); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java index bc70b8e73..56c224457 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityLogic.java @@ -1260,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); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/TreasureActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/TreasureActivity.java index 7329a0482..58f90f578 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/TreasureActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/TreasureActivity.java @@ -1,17 +1,18 @@ package com.ljsd.jieling.logic.activity; +import com.google.common.collect.Sets; 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.player.PlayerLogic; import com.ljsd.jieling.logic.store.GiftGoodsType; import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.protocols.CommonProto; @@ -21,10 +22,7 @@ import com.ljsd.jieling.util.ItemUtil; import com.ljsd.jieling.util.MessageUtil; import config.*; -import javax.lang.model.type.PrimitiveType; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import java.util.*; public class TreasureActivity extends AbstractActivity { @@ -116,6 +114,7 @@ public class TreasureActivity extends AbstractActivity { 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, changeState, dropList); } else { @@ -263,4 +262,16 @@ public class TreasureActivity extends AbstractActivity { public void getAllMissRewards(User user, ISession session, List itemAttrs){ getAllTreasureRewards(user, user.getActivityManager().getActivityMissionMap().get(id), getChangerState(user), itemAttrs); } + + /** + * 通知客户端每周补给特权变动 + * @param sesson + * @param user + */ + private void notifyClient(ISession sesson, User user) { + PlayerInfoProto.PrivilegeIndication.Builder indication = PlayerInfoProto.PrivilegeIndication.newBuilder(); + Set 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); + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/championship/ChampionshipLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/championship/ChampionshipLogic.java index 83a2d95bd..38becbc73 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/championship/ChampionshipLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/championship/ChampionshipLogic.java @@ -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()}); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/CumulationData.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/CumulationData.java index df2d4f4fc..599947f35 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/CumulationData.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/CumulationData.java @@ -160,6 +160,9 @@ public class CumulationData { //巅峰联赛名次 private int championshipRank; + //森罗幻境中参与小游戏次数 + private int playMiniGameTimes; + public Result updateData(MissionType missionType, Object...parm) throws Exception { return DataManagerDistributor.updateData(this, missionType,parm); } @@ -354,4 +357,12 @@ public class CumulationData { public void setChampionshipRank(int championshipRank) { this.championshipRank = championshipRank; } + + public int getPlayMiniGameTimes() { + return playMiniGameTimes; + } + + public void setPlayMiniGameTimes(int playMiniGameTimes) { + this.playMiniGameTimes = playMiniGameTimes; + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/GameEvent.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/GameEvent.java index 94a633d23..64fc98659 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/GameEvent.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/GameEvent.java @@ -99,6 +99,6 @@ public enum GameEvent { CAR_PLAY_LOOT,//于车迟斗法中抢夺其他玩家积分num次//TODO GOT_SOUL_MARK,//获取魂印事件 - CHAMPIONSHIP_RANK,//巅峰联赛排名 + PLAY_MINI_GAME,//参与森罗幻境小游戏 } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionType.java index 072079bb8..d17d6ce59 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionType.java @@ -119,11 +119,11 @@ public enum MissionType { CAR_PLAY_DAYS(110),//累计n天挑战车迟斗法 ARENA_CONSECUTIVE_WIN(111),//竞技场连胜 - //森罗幻境中参与n次小游戏 + PLAY_MINI_GAME_TIMES(112),//森罗幻境中参与n次小游戏 CHAMPIONSHIP_RANK(113),//巅峰联赛中达到num名 //天宫寻宝中接取任意星级任务n次 GOT_SOUL_MARK(115),//获得指定品质魂印数量 - //累计探索森罗幻境n层 + //累计探索森罗幻境num层 //充值达到num金额 ; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/DataManagerDistributor.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/DataManagerDistributor.java index 79b81849e..b715d4dc7 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/DataManagerDistributor.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/DataManagerDistributor.java @@ -139,7 +139,7 @@ public class DataManagerDistributor { judges.put(MissionType.ARENA_CONSECUTIVE_WIN, new ArenaConsecutiveWinManager()); judges.put(MissionType.CHAMPIONSHIP_RANK, new ChampionshipRankManager()); - + judges.put(MissionType.PLAY_MINI_GAME_TIMES, new PlayMiniGameTimesManager()); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/PlayMiniGameTimesManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/PlayMiniGameTimesManager.java new file mode 100644 index 000000000..2ea0c533e --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/PlayMiniGameTimesManager.java @@ -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(); + } + +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/MissionEventDistributor.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/MissionEventDistributor.java index 66f7ec4bd..06c63c154 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/MissionEventDistributor.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/event/MissionEventDistributor.java @@ -408,6 +408,11 @@ public class MissionEventDistributor { 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>> threadMissionChangeList = From c18ac44bcf78bb7d65b240dbdfcd950b95e76500 Mon Sep 17 00:00:00 2001 From: lilei Date: Tue, 18 Aug 2020 09:42:32 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E9=9D=92=E9=BE=99=E7=A7=98=E5=AE=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ljsd/jieling/logic/activity/TreasureActivity.java | 1 - .../com/ljsd/jieling/logic/dao/UserMissionManager.java | 2 -- .../java/com/ljsd/jieling/logic/mission/MissionType.java | 8 ++++---- .../logic/mission/data/ArenaConsecutiveWinManager.java | 9 +++++---- 4 files changed, 9 insertions(+), 11 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/TreasureActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/TreasureActivity.java index 58f90f578..f3a19fadf 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/TreasureActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/TreasureActivity.java @@ -35,7 +35,6 @@ public class TreasureActivity extends AbstractActivity { public void onResume(User user) throws Exception { LOGGER.info("青龙秘宝日常刷新..."); user.getUserMissionManager().onGameEvent(user, GameEvent.TREASH_WEEK_REFRESH, id); - //TODO 周任务刷新需关联刷新每周补给特权状态,活动开启时同样需要清除之前的特权状态 //戒灵秘宝改为青龙秘宝,只有周任务和月任务 2020.8.14 //user.getUserMissionManager().onGameEvent(user, GameEvent.TREASH_REFRESH, id); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java index 7a1c4bca5..3c8ce732e 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/UserMissionManager.java @@ -24,8 +24,6 @@ import manager.STableManager; import util.TimeUtils; import java.util.*; -import java.util.stream.Collectors; -import java.util.stream.Stream; /** diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionType.java index d17d6ce59..d667f4e11 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionType.java @@ -117,14 +117,14 @@ public enum MissionType { GOT_ANY_ITEM(109),//暂时不实现,占位,任意途径获得quality品质(无品质限定为0)type类别(无类别限制为-1)的itemid道具(无指定道具限定为0)num个 - CAR_PLAY_DAYS(110),//累计n天挑战车迟斗法 + CAR_PLAY_DAYS(110),//累计n天挑战车迟斗法 TODO 确认如果是累计则105已实现,如果是连续需要实现 ARENA_CONSECUTIVE_WIN(111),//竞技场连胜 PLAY_MINI_GAME_TIMES(112),//森罗幻境中参与n次小游戏 CHAMPIONSHIP_RANK(113),//巅峰联赛中达到num名 - //天宫寻宝中接取任意星级任务n次 + //114-天宫寻宝中接取任意星级任务n次 --类型76已实现 GOT_SOUL_MARK(115),//获得指定品质魂印数量 - //累计探索森罗幻境num层 - //充值达到num金额 + //117-累计探索森罗幻境num层 --类型32已实现 + //118-充值达到num金额 --类型74已实现 ; private int missionType; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/ArenaConsecutiveWinManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/ArenaConsecutiveWinManager.java index 4d2da893d..010c977fc 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/ArenaConsecutiveWinManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/ArenaConsecutiveWinManager.java @@ -19,15 +19,16 @@ public class ArenaConsecutiveWinManager extends AbstractDataManager { int fightResult = (int)parm[0]; if (missionType == MissionType.ARENA_CONSECUTIVE_WIN) { if (fightResult == 1) { - //大于等于0代表上一场胜利或之前没有挑战过 - if (data.getArenaConsecutiveWin() >= 0) { + /*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(-data.getArenaConsecutiveWin()); + data.setArenaConsecutiveWin(0); } result = new CumulationData.Result(missionType); } From f202f73b7380d1dc99a89ec0e1908f39600c3205 Mon Sep 17 00:00:00 2001 From: lilei Date: Tue, 18 Aug 2020 17:10:06 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E9=9D=92=E9=BE=99=E7=A7=98=E5=AE=9D?= =?UTF-8?q?=EF=BC=8C=E5=B7=A5=E5=9D=8A=E5=90=88=E6=88=90=E8=A3=85=E5=A4=87?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E6=94=B9=E4=B8=BA=E9=94=BB=E5=99=A8=E9=98=81?= =?UTF-8?q?=E5=90=88=E6=88=90=E8=A3=85=E5=A4=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handler/equip/ComplexEquipHandler.java | 8 ++++ .../logic/activity/TreasureActivity.java | 25 ++++++------ .../jieling/logic/mission/MissionType.java | 2 +- .../jieling/logic/store/BuyGoodsLogic.java | 38 ++++++++++--------- 4 files changed, 41 insertions(+), 32 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/equip/ComplexEquipHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/equip/ComplexEquipHandler.java index c46d0340d..f23b53363 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/equip/ComplexEquipHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/equip/ComplexEquipHandler.java @@ -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 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()); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/TreasureActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/TreasureActivity.java index f3a19fadf..681255c4e 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/TreasureActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/TreasureActivity.java @@ -1,6 +1,5 @@ package com.ljsd.jieling.logic.activity; -import com.google.common.collect.Sets; import com.ljsd.jieling.core.VipPrivilegeType; import com.ljsd.jieling.exception.ErrorCode; import com.ljsd.jieling.exception.ErrorCodeException; @@ -93,7 +92,7 @@ public class TreasureActivity extends AbstractActivity { 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 dropList = new ArrayList<>(2); // Set missionIds = new HashSet<>(); if (missionId == -2) { @@ -115,15 +114,15 @@ public class TreasureActivity extends AbstractActivity { dropList.add(rewards); notifyClient(session,user); } else if (missionId == -1) { - getAllTreasureRewards(user, activityMission, changeState, dropList); + getAllTreasureRewards(user, activityMission, destState, dropList); } else { int state = activityMission.getActivityMissionMap().get(missionId).getState(); - if (state == changeState || state == ActivityType.FINISH_TAKED) { - throw new ErrorCodeException(ErrorCode.newDefineCode("该奖励已领取过")); + if (state == destState || state == ActivityType.FINISH_TAKED) { + throw new ErrorCodeException(ErrorCode.newDefineCode("奖励不可重复领取")); } - dropByState(dropList, state, changeState, missionId); + 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); @@ -233,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(); @@ -242,24 +241,24 @@ public class TreasureActivity extends AbstractActivity { } return changeState; } - private void getAllTreasureRewards(User user, ActivityMission activityMission, int changeState, List dropList){ + private void getAllTreasureRewards(User user, ActivityMission activityMission, int destState, List dropList){ for(int i = 1 ; i<=user.getPlayerInfoManager().getTreasureLevel();i++){ Map 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 itemAttrs){ - getAllTreasureRewards(user, user.getActivityManager().getActivityMissionMap().get(id), getChangerState(user), itemAttrs); + getAllTreasureRewards(user, user.getActivityManager().getActivityMissionMap().get(id), getDestState(user), itemAttrs); } /** diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionType.java index d667f4e11..42be73718 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionType.java @@ -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), //每日挑战故事关卡次数 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsLogic.java index a465f9a2a..5b17ea23e 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsLogic.java @@ -421,33 +421,35 @@ 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)); + /** + * 之前这里是starReward为0就直接return了 + * 方法最后边的月卡和基金的每日邮件也不会发送 + * 备注下,如果发了月卡和基金的每日邮件反而是错的,还要改回来 + */ + 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); - } - } public static boolean isHadBought( Map buyGoodsTimes,int giftGoodsType){ From 2ef8972406ecd5cc8dc141cea2254a03ddcc5e2e Mon Sep 17 00:00:00 2001 From: lilei Date: Wed, 19 Aug 2020 09:47:02 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E9=9D=92=E9=BE=99=E7=A7=98=E5=AE=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../logic/activity/TreasureActivity.java | 2 +- .../jieling/logic/mission/MissionType.java | 2 +- .../logic/mission/data/BuyGoodsManager.java | 3 ++- .../jieling/logic/store/BuyGoodsLogic.java | 5 +++-- .../ljsd/jieling/logic/store/StoreType.java | 2 +- .../java/com/ljsd/jieling/util/ItemUtil.java | 20 ++++++++++++++++--- 6 files changed, 25 insertions(+), 9 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/TreasureActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/TreasureActivity.java index 681255c4e..c0cd50697 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/TreasureActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/TreasureActivity.java @@ -245,7 +245,7 @@ public class TreasureActivity extends AbstractActivity { for(int i = 1 ; i<=user.getPlayerInfoManager().getTreasureLevel();i++){ Map progressInfoMap = activityMission.getActivityMissionMap(); int state =progressInfoMap.get(i).getState(); - if(state==destState||state==ActivityType.FINISH_TAKED) { + if(state == destState || state == ActivityType.FINISH_TAKED) { continue; } dropByState(dropList,state,destState,i); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionType.java index 42be73718..880610489 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/MissionType.java @@ -117,7 +117,7 @@ public enum MissionType { GOT_ANY_ITEM(109),//暂时不实现,占位,任意途径获得quality品质(无品质限定为0)type类别(无类别限制为-1)的itemid道具(无指定道具限定为0)num个 - CAR_PLAY_DAYS(110),//累计n天挑战车迟斗法 TODO 确认如果是累计则105已实现,如果是连续需要实现 + //110-累计n天挑战车迟斗法 --类型105已实现 ARENA_CONSECUTIVE_WIN(111),//竞技场连胜 PLAY_MINI_GAME_TIMES(112),//森罗幻境中参与n次小游戏 CHAMPIONSHIP_RANK(113),//巅峰联赛中达到num名 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/BuyGoodsManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/BuyGoodsManager.java index d4734ad32..ef12ab037 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/BuyGoodsManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mission/data/BuyGoodsManager.java @@ -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){ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsLogic.java index 5b17ea23e..f1781c4de 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsLogic.java @@ -426,7 +426,7 @@ public class BuyGoodsLogic { * 方法最后边的月卡和基金的每日邮件也不会发送 * 备注下,如果发了月卡和基金的每日邮件反而是错的,还要改回来 */ - if(starReward != 0){ + if(starReward > 0){ StringBuilder rewardStr = new StringBuilder(); while (starReward>0){ SChallengeStarBox sChallengeStarBox = STableManager.getConfig(SChallengeStarBox.class).get(starReward); @@ -447,7 +447,8 @@ public class BuyGoodsLogic { } 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 ){ + } + if(goodsType == GiftGoodsType.SUN_LONG){ user.getPlayerInfoManager().setHadBuyTreasure(1); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreType.java index ef42a2550..105b63aed 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreType.java @@ -11,7 +11,7 @@ public enum StoreType { TRIAL_STORE(8), GIFT_STORE(9), - + GOLD_STORE(57),//点金功能商店 ; private int type; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java index b42869f45..06fdc09ec 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java @@ -704,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);