diff --git a/serverlogic/src/main/java/com/ljsd/jieling/core/GlobalsDef.java b/serverlogic/src/main/java/com/ljsd/jieling/core/GlobalsDef.java index 570245909..772f4bce2 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/core/GlobalsDef.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/core/GlobalsDef.java @@ -21,6 +21,8 @@ public interface GlobalsDef { int addReason = 0; int subReason = 1; + int LUOFUZHENG_MONEY = 1207; // 罗浮争锋道具 + int BATTLING = -1; int BREAK_TYPE = 1; //1突破 @@ -73,6 +75,8 @@ public interface GlobalsDef { int EXPLORE_MAP_DIGGLE_TYPE =4; int EXPLORE_MAP_ACTION_POWER_RORMULA_TYPE =5; + int WUJINGMIBAO_STAR = 5; // 无尽秘宝 英雄需要的星级 + int MUST_BE = -1; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/db/mongo/AreaManager.java b/serverlogic/src/main/java/com/ljsd/jieling/db/mongo/AreaManager.java index 2860087c9..b2072f98f 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/db/mongo/AreaManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/db/mongo/AreaManager.java @@ -85,8 +85,8 @@ public class AreaManager { serverIds.add(masterServerId); serverIds.addAll(serverAreaInfo.getSlaveAreaIds()); } + serverArenaInfoManagerCache = serverArenaInfoManager; } - serverArenaInfoManagerCache = serverArenaInfoManager; } } catch (Exception e) { LOGGER.error("the exception {}", e); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/exception/ErrorCode.java b/serverlogic/src/main/java/com/ljsd/jieling/exception/ErrorCode.java index 54daeded3..d7669248f 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/exception/ErrorCode.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/exception/ErrorCode.java @@ -181,6 +181,8 @@ public enum ErrorCode implements IErrorCode { SHOP_XIA_JIA(150,"商品已下架"), SHOP_COLSE(151,"商店已关闭"), SHOP_NO_ITEM(152,"商品不存在"), + HERO_RETURN_ONLY_LEVEL_ONE(153,"只有1级的神将才可回退,请先进行归元!"), + HERO_RETURN_CAN_NOT(154,"此神将不可回退"), GUILD_NOT_AUTHORITY(300,"账号因错误发言导致相关功能封禁中,操作失败"), diff --git a/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java b/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java index 3a4450646..ec494d51d 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java @@ -176,6 +176,8 @@ public interface BIReason { int ENDLESS_TREASURE_REWARD = 100;//无尽秘宝获得 int ENDLESS_RESET = 101;//无尽重置获得 + int HERO_RETURN = 102;// 神将回退 + int ITEM_RETURN = 103;// 罗浮晶石转化逐胜徽章 int ADVENTURE_UPLEVEL_CONSUME = 1000;//秘境升级 int SECRETBOX_CONSUME = 1001;//秘盒抽卡 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/globals/GlobalItemType.java b/serverlogic/src/main/java/com/ljsd/jieling/globals/GlobalItemType.java index 3806ffcc8..6b5acfbff 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/globals/GlobalItemType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/globals/GlobalItemType.java @@ -38,6 +38,7 @@ public interface GlobalItemType { int MOUNT_FRAGMENTS_ITEM = 28;//坐骑碎片 int TRANSFORMATION_CARD = 29;//化身卡 int TRUMP_CHIP=30;//法宝碎片(法宝聚灵使用) + int HOOK_PROP=32;//挂机奖励资源道具 //物品使用类型 int NO_USE = 0 ; //不使用 int RANDOM_USE = 1; // 随机使用 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/HeroReturnHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/HeroReturnHandler.java index 6e22c350e..ff1dcfa24 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/HeroReturnHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/HeroReturnHandler.java @@ -21,11 +21,15 @@ public class HeroReturnHandler extends BaseHandler { @@ -55,8 +68,64 @@ public class UseAndPriceItemHandler extends BaseHandlercostMap=new HashMap<>(); + costMap.put(itemId,useNum); + int[][]rewardArr=sItem.getUseGain(); + + boolean isCost= ItemUtil.itemCost(user, costMap, BIReason.USER_ITEM, 0); + if (!isCost){ + LOGGER.error("资源包道具消耗失败"); + throw new ErrorCodeException(ErrorCode.HANDLE_FAILED); + } + long[][]dropArr=useItemGetHookReward(user,rewardArr,useNum); + ItemUtil.drop(user,dropArr,BIReason.USER_ITEM); + CommonProto.Drop.Builder drop = ItemUtil.drop(user, dropArr, BIReason.USER_ITEM); + ItemLogic.sendUseAndPriceItemMessage(iSession, MessageTypeProto.MessageType.USER_AND_PRICE_ITEM_RESPONSE_VALUE, drop); + } + else{ throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); } } + + /** + * 使用道具获取挂机奖励里面的指定时长奖励 + * @param user + * @param itemDropTime + * @return + * @throws ErrorCodeException + */ + public long[][] useItemGetHookReward(User user, int[][] itemDropTime,long useNum)throws ErrorCodeException{ + long[][]dropArr=new long[itemDropTime.length][2]; + int index=0; + for (int i = 0; i < itemDropTime.length; i++) { + int itemId=itemDropTime[i][0]; + int dropRatio=itemDropTime[i][1]; + ItemMap itemObj=new ItemMap(); + int fightId = user.getMainLevelManager().getFightId(); + SMainLevelConfig targetMainLevelConfig = SMainLevelConfig.config.get(fightId); + + int[] randomRewardMin = targetMainLevelConfig.getRandomRewardMin(); + int[] randomReward = targetMainLevelConfig.getRandomReward(); + + ItemUtil.combineRewardByMainLine(user,false, true, randomRewardMin, dropRatio,itemObj,BIReason.ADVENTURE_BASE_REWARD); + ItemUtil.combineRewardByMainLine(user,true, false,randomReward, dropRatio,itemObj,BIReason.ADVENTURE_RANDOM_REWARDD); + if (itemObj.getItemMap().containsKey(itemId)){ + dropArr[index][0]=itemId; + dropArr[index][1]=itemObj.getItemMap().get(itemId)*useNum; + index++; + } + } + return dropArr; + + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/JourneyMap.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/JourneyMap.java index 47a2113c6..a1eee8a26 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/JourneyMap.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/JourneyMap.java @@ -147,6 +147,7 @@ public class JourneyMap { .setFirst(v.isFirstPass()?1:0) .build(); response.addInfos(info); + response.setFinishNum(user.getMapManager().getJourneyFinishNum()); }); MessageUtil.sendMessage(session,1,messageType.getNumber(),response.build(),true); } @@ -468,6 +469,8 @@ public class JourneyMap { // 逍遥游最终奖励埋点 if (pathType == 7){ ReportUtil.onReportEvent(user, ReportEventEnum.COMPLETE_TRAVEL.getType(), pathType, mapId); + int finishNum=user.getMapManager().getJourneyFinishNum()+1; + user.getMapManager().setJourneyFinishNum(finishNum); } } 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 18abb6334..82a22d74b 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 @@ -2133,6 +2133,7 @@ public class MapLogic { * 3:鸿蒙阵等级(6-15后) * 4:指定星级(运算星级)装备数量(初始可用) * 5:英雄总好感度等级(5-10后) + * 6:逍遥游通关次数(5-10后) * 7:达到指定英雄等级及数量 * * @param user @@ -2170,9 +2171,18 @@ public class MapLogic { case 4: { int num = 0; Map equipConfig = STableManager.getConfig(SEquipConfig.class); - for (Map.Entry entry : user.getItemManager().getEquipBookMap().entrySet()) { - if (equipConfig.get(entry.getKey()).getStar() >= ints[1]) { - num++; + for (Map.Entry equipEntry : user.getItemManager().getItemMap().entrySet()) { + if (SItem.getsItemMap().get(equipEntry.getKey()).getItemType() == 3) { + if (equipConfig.get(equipEntry.getKey()).getStar() >= ints[1]) { + num+=equipEntry.getValue().getItemNum(); + } + } + } + for (Map.Entry stringHeroEntry : user.getHeroManager().getHeroMap().entrySet()) { + for (Map.Entry entry : stringHeroEntry.getValue().getEquipByPositionMap().entrySet()) { + if (equipConfig.get(entry.getValue()).getStar() >= ints[1]) { + num++; + } } } if (num < ints[2]) { @@ -2186,11 +2196,20 @@ public class MapLogic { } break; } + case 6:{ + if (user.getMapManager().getJourneyFinishNum() < ints[1]) { + return false; + } + break; + } case 7: { int num = 0; for (Map.Entry stringHeroEntry : user.getHeroManager().getHeroMap().entrySet()) { if (stringHeroEntry.getValue().getOriginalLevel()>= ints[1]) { num++; + if (num >= ints[2]) { + break; + } } } if (num < ints[2]) { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapManager.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapManager.java index 19cc239ea..499a3bf6f 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapManager.java @@ -122,6 +122,8 @@ public class MapManager extends MongoBase { private Map journeyInfo = new HashMap<>(); + private int journeyFinishNum;//逍遥游通关次数 + private int currentJourneyId; private EndlessTreasureReward endlessTreasureReward = new EndlessTreasureReward(); @@ -878,6 +880,15 @@ public class MapManager extends MongoBase { updateString("journeyInfo",journeyInfo); } + public int getJourneyFinishNum() { + return journeyFinishNum; + } + + public void setJourneyFinishNum(int journeyFinishNum) { + this.journeyFinishNum = journeyFinishNum; + updateString("journeyFinishNum",journeyFinishNum); + } + public int getCurrentJourneyId() { return currentJourneyId; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/store/BuyStoreItemHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/store/BuyStoreItemHandler.java index 31d8aa27a..8de55c986 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/store/BuyStoreItemHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/store/BuyStoreItemHandler.java @@ -1,6 +1,10 @@ package com.ljsd.jieling.handler.store; import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.activity.event.NewWelfareEvent; +import com.ljsd.jieling.logic.activity.event.NewWelfareTypeEnum; +import com.ljsd.jieling.logic.activity.event.Poster; +import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.logic.store.StoreLogic; import com.ljsd.jieling.netty.cocdex.PacketNetData; import com.ljsd.jieling.network.session.ISession; @@ -23,6 +27,9 @@ public class BuyStoreItemHandler extends BaseHandler { PlayerInfoProto.BuyStoreItemRequest buyStoreItemRequest = PlayerInfoProto.BuyStoreItemRequest.parseFrom(netData.parseClientProtoNetData()); CommonProto.Drop drop = StoreLogic.buyStoreItem(iSession.getUid(), buyStoreItemRequest.getStoreId(), buyStoreItemRequest.getItemId(), buyStoreItemRequest.getItemNum()); + if (buyStoreItemRequest.getItemId()==1106){ + Poster.getPoster().dispatchEvent(new NewWelfareEvent(UserManager.getUser(iSession.getUid()), NewWelfareTypeEnum.BUY_1106.getType(),0)); + } int msgId = MessageTypeProto.MessageType.BUY_STORE_ITEM_RESPONSE_VALUE; PlayerInfoProto.BuyStoreItemResponse builder = PlayerInfoProto.BuyStoreItemResponse.newBuilder().setDrop(drop).build(); MessageUtil.sendMessage(iSession, 1,msgId, builder, true); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/ktbeans/ReportEventEnum.java b/serverlogic/src/main/java/com/ljsd/jieling/ktbeans/ReportEventEnum.java index 5bb611625..3988b5e25 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/ktbeans/ReportEventEnum.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/ktbeans/ReportEventEnum.java @@ -115,6 +115,8 @@ public enum ReportEventEnum { //七界试炼 SEVENWORLDS_TRIAL(77 ,"sevenworlds_Trial",CommonEventHandler.getInstance(),new String[]{"sevenworlds_Trial_type","sevenworlds_Trial_id","combat_results","reward_nums_list"}), + HERO_RETURN(78,"hero_return", CommonEventHandler.getInstance(),new String[]{"hero_id","hero_level","hero_quality","reward_list","reward_nums_list"}), + VIP_LEVEL_UP(100,"", new VipLevelUpEventHandler(),new String[]{""}); private int type; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java index 9e9ec5c68..57eaa33df 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java @@ -114,6 +114,9 @@ public class GlobalDataManaager implements IManager { int id = sGlobalSystemConfig.getId(); long systemOpenLong = sGlobalSystemConfig.getSystemOpenLong(); long systemEndLong = sGlobalSystemConfig.getSystemEndLong(); + if (now < systemOpenLong || now > systemEndLong) { + continue; + } if(openTimeOfFuntionCache.containsKey(id)){ //强制关闭 if(nowsystemEndLong)){ @@ -154,8 +157,8 @@ public class GlobalDataManaager implements IManager { long mod = passTims % (diffTime + seasonInterval); // 每个周期的时间+间隔时间 if(mod < diffTime ){//新的周期开启 一轮周期的时间 //开服几天后开启 + int[]limitDay = sGlobalSystemConfig.getIfOpen(); if(getServerOpenTimeCompareSpecialTimeResult()){ - int[]limitDay = sGlobalSystemConfig.getIfOpen(); if(limitDay.length > 0){ if( limitDay[0] == 2 ){ long day = TimeUtils.getGapDaysByTwoTime(GameApplication.serverConfig.getOpenTime(),TimeUtils.getTimeStamp2(TimeUtils.now()))+1; @@ -165,9 +168,18 @@ public class GlobalDataManaager implements IManager { } } } - openList.add(id); + //计算开启时间、关闭时间 long turns = passTims / ((diffTime + seasonInterval)); + if (limitDay.length > 0) { + // 达到指定轮数,不再开启该功能 + if (limitDay[0] == 3) { + if (turns > limitDay[1]) { + continue; + } + } + } + openList.add(id); long addTim = turns * (diffTime + seasonInterval); long timeOpenOfThis =seasonOpenLong+addTim; long timeCloseOfThis =seasonEndLong+addTim; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/AbstractActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/AbstractActivity.java index 3f85b181b..dcce7b23b 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/AbstractActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/AbstractActivity.java @@ -378,11 +378,26 @@ public abstract class AbstractActivity implements IActivity, IEventHandler { public List getAllMissInfo(User user,ActivityMission activityMission, Set filter) { Map activityProgressInfoMap = activityMission.getActivityMissionMap(); List missionInfos = new ArrayList<>(activityProgressInfoMap.size()); + long now = TimeUtils.now(); for (Map.Entry missionProgress : activityProgressInfoMap.entrySet()) { if (filter != null && !filter.contains(missionProgress.getKey())) { continue; } Integer missionId = missionProgress.getKey(); + SActivityRewardConfig sActivityRewardConfig = SActivityRewardConfig.getsActivityRewardConfigByMissionId(missionId); + if (missionId != 0 && sActivityRewardConfig == null) { + // missionId==0 灵兽宝阁特殊使用 + continue; + } + if(id == ActivityType.RechargeTotal){ + // 2021-12-22 09:00:00 之后开的服,首充不显示累充满100元任务 + if (now > 1640134800000L) { + int value = sActivityRewardConfig.getValues()[0][0]; + if (value == 100) { + continue; + } + } + } ActivityProgressInfo activityProgressInfo = missionProgress.getValue(); missionInfos.add(CommonProto.ActivityInfo.MissionInfo.newBuilder().setMissionId(missionId).setProgress(activityProgressInfo.getProgrss()).setState(activityProgressInfo.getState()).build()); } @@ -395,18 +410,20 @@ public abstract class AbstractActivity implements IActivity, IEventHandler { * @param filterMissId miss过滤 */ public void sendActivityProgress(ISession session, ActivityMission activityMission, Set filterMissId) { + if (session == null) { + return; + } PlayerInfoProto.ActivityUpateProgressIndication.Builder builder = PlayerInfoProto.ActivityUpateProgressIndication.newBuilder(); - if (session != null) { - User user = UserManager.getUserInMem(session.getUid()); - if (user != null && activityMission != null){ - List missInfo = getAllMissInfo(user, activityMission, filterMissId); - CommonProto.ActivityInfo.Builder builder1 = CommonProto.ActivityInfo.newBuilder() - .setValue(activityMission.getV()) - .addAllMission(missInfo) - .setActivityId(id); - builder.setActivityInfo(builder1); - MessageUtil.sendIndicationMessage(session, 1, MessageTypeProto.MessageType.ACTIVITY_UPDATE_PROGRESS_INDICATION_VALUE, builder.build(), true); - } + + User user = UserManager.getUserInMem(session.getUid()); + if (user != null && activityMission != null) { + List missInfo = getAllMissInfo(user, activityMission, filterMissId); + CommonProto.ActivityInfo.Builder builder1 = CommonProto.ActivityInfo.newBuilder() + .setValue(activityMission.getV()) + .addAllMission(missInfo) + .setActivityId(id); + builder.setActivityInfo(builder1); + MessageUtil.sendIndicationMessage(session, 1, MessageTypeProto.MessageType.ACTIVITY_UPDATE_PROGRESS_INDICATION_VALUE, builder.build(), 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 fa8bf7a4d..aace5081d 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 @@ -100,6 +100,10 @@ public class ActivityLogic implements IEventHandler{ //更新累计充值天数 ActivityLogic.getInstance().resumeActivity(user, ActivityType.RECHARGE_SUM_DAY); + //更新新积天豪礼天数 + ActivityLogic.getInstance().resumeActivity(user, ActivityType.NEW_RECHARGE_SUM_DAY_6); + ActivityLogic.getInstance().resumeActivity(user, ActivityType.NEW_RECHARGE_SUM_DAY_30); + ActivityLogic.getInstance().resumeActivity(user, ActivityType.LUCKY_GET); ActivityLogic.getInstance().resumeActivity(user,ActivityType.JADE_DYNASTY_MISSION); @@ -113,7 +117,8 @@ public class ActivityLogic implements IEventHandler{ ActivityLogic.getInstance().resumeActivity(user, ActivityType.LUCK_WHEEL); ActivityLogic.getInstance().resumeActivity(user, ActivityType.LUCK_WHEEL_ADVANCE); ActivityLogic.getInstance().resumeActivity(user,ActivityType.TREASURE); - + //每日特惠礼包开启的活動刷新 + ActivityLogic.getInstance().resumeActivity(user,ActivityType.DAILY_PREFERENTIAL_GIFT); Set upFiveActivityTypes = new HashSet<>(); upFiveActivityTypes.add(ActivityType.SevenLogin); upFiveActivityTypes.add(ActivityType.RECHARGE_SUM_DAY); @@ -172,6 +177,9 @@ public class ActivityLogic implements IEventHandler{ if (time == ActivityType.OPEN_TYPE_ROLE) { continue; } + if(sGlobalActivity.getType() == ActivityType.DAILY_PREFERENTIAL_GIFT){ + continue; + } if(time == ActivityType.OPEN_TYPE_MONTHS){ //now = 当前是开服第几个月 } @@ -294,6 +302,9 @@ public class ActivityLogic implements IEventHandler{ * @param activityId */ public void initMissionInfo(ActivityMission activityMission,int activityId){ + if(activityId == ActivityType.DAILY_PREFERENTIAL_GIFT){ + return; + } List sActivityRewardConfigs = SActivityRewardConfig.getsActivityRewardConfigByActivityId(activityId); if(sActivityRewardConfigs == null){return;} for(SActivityRewardConfig sActivityRewardConfig : sActivityRewardConfigs){ @@ -369,6 +380,10 @@ public class ActivityLogic implements IEventHandler{ //初始化活动 绝对时间和相对开服时间 for (Integer openActivityId : openActivityIds) { SGlobalActivity sGlobalActivity = sGlobalActivityMap.get(openActivityId); + if (sGlobalActivity == null) { + LOGGER.info("checkActivityOfUser uid={} remove activity={}", user.getId(), openActivityId); + continue; + } int[] ifOpen = sGlobalActivity.getIfOpen(); //创角 if(ifOpen!=null && ifOpen.length>0 && ifOpen[0]==1){ @@ -402,6 +417,15 @@ public class ActivityLogic implements IEventHandler{ } } } + // 登录检测已开启的活动,商店是否开启 + int[] shopId = sGlobalActivity.getShopId(); + if (shopId != null && shopId.length > 0 && shopId[0] != 0) { + boolean b = user.getStoreManager().getStoreInfoMap().containsKey(shopId[0]); + if (!b) { + LOGGER.info("checkActivityOfUser uid={} activityId={} reopen shopId={}", user.getId(), openActivityId, shopId[0]); + Poster.getPoster().dispatchEvent(new ActivityStateChangeEvent(user.getId(),openActivityId,1)); + } + } continue; } initAllActivityMission(activityManager.getActivityMissionMap(),openActivityId); @@ -422,7 +446,20 @@ public class ActivityLogic implements IEventHandler{ } Map activityMissionMap = activityManager.getActivityMissionMap(); for (SGlobalActivity sGlobalActivity : sGlobalActivityMap.values()) { + if(sGlobalActivity.getType() == ActivityType.DAILY_PREFERENTIAL_GIFT){ + continue; + } int activityId = sGlobalActivity.getId(); + ////天尊降世活动特殊处理 + if (activityMissionMap.containsKey(42)){ + if (activityId==4201){ + continue; + } + }else{ + if (activityId==42){ + continue; + } + } if (openActivityIds.contains(activityId)) { int[] ifOpen = sGlobalActivity.getIfOpen(); if (ifOpen == null || ifOpen.length <= 0){ @@ -556,6 +593,7 @@ public class ActivityLogic implements IEventHandler{ if(activityId == 7201){ continue; } + int activityStatus = activityMission.getActivityState(); if(activityStatus == -1){ continue; @@ -564,6 +602,13 @@ public class ActivityLogic implements IEventHandler{ if(sGlobalActivity == null){ continue; } + ///旧版积天豪礼数据兼容 + if (sGlobalActivity.getType()==ActivityType.RECHARGE_SUM_DAY){ + if (activityMissionMap.get(activityId).getV()<=0||activityMissionMap.get(activityId).getV()>=15) { + continue; + } + } + if(activityStatus == ActivityType.CLOSE_STATE){ long prepareTime = ToolsUtil.getEndTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),0, sGlobalActivity.getGapTime()); activityInfoList.add(CommonProto.ActivityInfo.newBuilder().setActivityId(activityId).setEndTime((int)(prepareTime/1000)).build()); @@ -589,12 +634,18 @@ public class ActivityLogic implements IEventHandler{ if (sGlobalActivity.getIsSaving()==0 && activityStatus != ActivityType.OPEN_STATE) { continue; } - int startTime = (int) (ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),createTime, 1) / 1000); - int endTime; - if(sGlobalActivity.getGapTime()!=0){ - endTime = (int) (ToolsUtil.getEndTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),createTime, sGlobalActivity.getGapTime()) / 1000); + int startTime = 0; + int endTime = 0; + if(sGlobalActivity.getType() == ActivityType.DAILY_PREFERENTIAL_GIFT){ + startTime=(int)(activityState.getValue().getCreatTime()/1000); + endTime = startTime+604800; }else{ - endTime = (int) (ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),createTime, 2) / 1000); + startTime = (int) (ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),createTime, 1) / 1000); + if(sGlobalActivity.getGapTime()!=0){ + endTime = (int) (ToolsUtil.getEndTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),createTime, sGlobalActivity.getGapTime()) / 1000); + }else{ + endTime = (int) (ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),createTime, 2) / 1000); + } } AbstractActivity abstractActivity = ActivityTypeEnum.getActicityType(sGlobalActivity.getId()); if(abstractActivity==null){ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityType.java index f01421b17..21ff70b43 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityType.java @@ -104,9 +104,13 @@ public interface ActivityType { int TRANSFORMATION_DRAW_CARD = 86;//方寸寻宝 int CONTINUOUS_GIFT_NEW = 87;//新连续礼包 int ARENA_RANK_EXPERIMENT = 88;//竞技试炼 + int DAILY_PREFERENTIAL_GIFT = 89;//每日特惠礼包开启的活动 + int NEW_RECHARGE_SUM_DAY_6 = 90;//新积天豪礼6元充值活动 + int NEW_RECHARGE_SUM_DAY_30 = 92;//新积天豪礼30元充值活动 int SPECIAL_MONSTER_RANDOM_ACTIVITY = 100;//灵兽宝阁活动 int SPECIAL_MONSTER_GIFT_ACTIVITY = 101;//灵兽礼包 + int NEW_PLAYER_SHOP = 91; // 新人商城 int NEW_GENERAL_ATTACK = 200;//新将来袭 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityTypeEnum.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityTypeEnum.java index 66f9023ab..25da612f0 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityTypeEnum.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ActivityTypeEnum.java @@ -94,7 +94,11 @@ public enum ActivityTypeEnum { TRANSFORMATION_DRAW_CARD(ActivityType.TRANSFORMATION_DRAW_CARD,DefaultEmptyActivity::new),//方寸寻宝 CONTINUOUS_GIFT_NEW(ActivityType.CONTINUOUS_GIFT_NEW,ContinuousGiftActivity::new),//新连续礼包 ARENA_RANK_EXPERIMENT(ActivityType.ARENA_RANK_EXPERIMENT,ArenaRankActivity::new),//竞技试炼 + NEW_RECHARGE_SUM_DAY_6(ActivityType.NEW_RECHARGE_SUM_DAY_6,NewRechargeSumDayActivity::new),//新积天豪礼 + NEW_RECHARGE_SUM_DAY_30(ActivityType.NEW_RECHARGE_SUM_DAY_30,NewRechargeSumDayActivity::new),//新积天豪礼 + DAILY_PREFERENTIAL_GIFT(ActivityType.DAILY_PREFERENTIAL_GIFT,DailyPreferentialGiftActivity::new), SUMMON_TREASURE(ActivityType.SUMMON_TREASURE,SummonTreasureActivity::new),//招募秘宝 + NEW_PLAYER_SHOP(ActivityType.NEW_PLAYER_SHOP, NewPlayerShopActivity::new) ; private int type; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ChoiceDrawCardActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ChoiceDrawCardActivity.java index 7e0fc7527..ab617eb95 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ChoiceDrawCardActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/ChoiceDrawCardActivity.java @@ -138,7 +138,7 @@ public class ChoiceDrawCardActivity extends AbstractActivity { mission.getActivityMissionMap().put(id, activityProgressInfo); } mission.setOpenType(1); - mission.setV(0); +// mission.setV(0); mission.setActivityState(ActivityType.OPEN_STATE); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/DailyPreferentialGiftActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/DailyPreferentialGiftActivity.java new file mode 100644 index 000000000..513b47b19 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/DailyPreferentialGiftActivity.java @@ -0,0 +1,188 @@ +package com.ljsd.jieling.logic.activity; + +import com.ljsd.jieling.exception.ErrorCode; +import com.ljsd.jieling.exception.ErrorCodeException; +import com.ljsd.jieling.globals.BIReason; +import com.ljsd.jieling.globals.Global; +import com.ljsd.jieling.jbean.ActivityManager; +import com.ljsd.jieling.jbean.ActivityMission; +import com.ljsd.jieling.jbean.ActivityProgressInfo; +import com.ljsd.jieling.logic.OnlineUserManager; +import com.ljsd.jieling.logic.activity.event.IEvent; +import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.mail.MailLogic; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.util.ItemUtil; +import com.ljsd.jieling.util.MessageUtil; +import config.SActivityRewardConfig; +import config.SErrorCodeEerverConfig; +import rpc.protocols.CommonProto; +import rpc.protocols.MessageTypeProto; +import rpc.protocols.PlayerInfoProto; +import util.StringUtil; +import util.TimeUtils; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 每日特惠礼包开启的活动 + */ + +public class DailyPreferentialGiftActivity extends AbstractActivity{ + + public DailyPreferentialGiftActivity(int id) { + super(id); + } + + @Override + public void initActivity(User user) throws Exception{ + ActivityMission mission = new ActivityMission(); + // 初始化阶段奖励 + List sActivityRewardConfigs = SActivityRewardConfig.getsActivityRewardConfigByActivityId(id); + ActivityLogic.getInstance().initOtherMission(mission, sActivityRewardConfigs.stream().mapToInt(n->n.getId()).boxed().collect(Collectors.toList())); + mission.setV(0); + mission.setCreatTime(TimeUtils.getAppointTime(0)); + user.getActivityManager().getActivityMissionMap().put(id, mission); + ActivityLogic.getInstance().sendActivityInfo(user, id); + } + + @Override + public void onEvent(IEvent event) throws Exception{ + + + + } + /** + *购买后7天内 每天可以领取奖励 领取状态每日重置 + */ + @Override + public void onResume(User user) throws Exception { + ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(id); + if(mission == null){ + return; + } + //开启礼包的第几天 + int day = (int)TimeUtils.getGapDaysByTwoTime(TimeUtils.getTimeStamp2(mission.getCreatTime()),TimeUtils.getTimeStamp2(TimeUtils.now()))+1; + List rewardConfig = SActivityRewardConfig.getsActivityRewardConfigByActivityId(id); + if(rewardConfig == null){ + return; + } + Map rewardMap = new HashMap(); + for(SActivityRewardConfig config:rewardConfig){ + for(int[]reward:config.getReward()){ + if(rewardMap.containsKey(reward[0])){ + rewardMap.put(reward[0],rewardMap.get(reward[0])+reward[1]); + }else{ + rewardMap.put(reward[0],reward[1]); + } + } + } + String title = SErrorCodeEerverConfig.getI18NMessage("sevendaycard_mail_title"); + String content = SErrorCodeEerverConfig.getI18NMessage("sevendaycard_mail_txt"); + if(day >7){ + //第八天登錄 發送所有獎勵 + //下线当天的活动处理 + sendSpecailMail(user,title,content,mission); + for(int i = mission.getV()+1;i <= 7;i++){ + MailLogic.getInstance().sendMail(user.getId(), title, content, StringUtil.parseArrayToString(rewardMap.entrySet().stream().map(n->new int[]{n.getKey(),n.getValue()}) + .toArray(int[][]::new)), TimeUtils.nowInt(), Global.MAIL_EFFECTIVE_TIME); + } + //刪除數據 + user.getActivityManager().getActivityMissionMap().remove(id); + ISession session = OnlineUserManager.sessionMap.get(user.getId()); + if(session!=null){ + PlayerInfoProto.SpecailActivityUpateIndication.Builder indication = PlayerInfoProto.SpecailActivityUpateIndication.newBuilder(); + indication.addCloseActivityId(ActivityType.DAILY_PREFERENTIAL_GIFT); + MessageUtil.sendIndicationMessage(session, 1, MessageTypeProto.MessageType.SPECIAL_ACTIVITY_UPDATE_INDICATION_VALUE, indication.build(), true); + } + return; + }else{ + //下线当天的活动处理 + sendSpecailMail(user,title,content,mission); + for(int i = mission.getV()+1;inew int[]{n.getKey(),n.getValue()}) + .toArray(int[][]::new)), TimeUtils.nowInt(), Global.MAIL_EFFECTIVE_TIME); + } + List sActivityRewardConfigs = SActivityRewardConfig.getsActivityRewardConfigByActivityId(id); + if(sActivityRewardConfigs == null){return;} + for(SActivityRewardConfig sActivityRewardConfig : sActivityRewardConfigs){ + ActivityProgressInfo activityProgressInfo = new ActivityProgressInfo(); + activityProgressInfo.setState(0); + mission.getActivityMissionMap().put(sActivityRewardConfig.getId(), activityProgressInfo); + } + ActivityLogic.getInstance().initMissionInfo(mission,id); + if(day > mission.getV()){ + mission.setV(day-1); + } + sendActivityProgress(user, mission, null); + } + } + + //当天为领取特殊处理 + public static void sendSpecailMail( User user,String title,String content, ActivityMission mission ){ + Map progressMap = mission.getActivityMissionMap(); + Map rewardMap1 = new HashMap(); + int num=0; + for (Map.Entry progress:progressMap.entrySet()){ + if(progress.getValue().getState() == ActivityType.WILL_TAKE){ + SActivityRewardConfig sActivityRewardConfig = SActivityRewardConfig.getsActivityRewardConfigByMissionId(progress.getKey()); + if(sActivityRewardConfig == null){ + continue; + } + num++; + for(int[]reward:sActivityRewardConfig.getReward()){ + if(rewardMap1.containsKey(reward[0])){ + rewardMap1.put(reward[0],rewardMap1.get(reward[0])+reward[1]); + }else{ + rewardMap1.put(reward[0],reward[1]); + } + } + } + } + if(rewardMap1.size()>0){ + if(progressMap.size()==num){ + mission.setV(mission.getV()+1); + } + MailLogic.getInstance().sendMail(user.getId(), title, content, StringUtil.parseArrayToString(rewardMap1.entrySet().stream().map(n->new int[]{n.getKey(),n.getValue()}) + .toArray(int[][]::new)), TimeUtils.nowInt(), Global.MAIL_EFFECTIVE_TIME); + } + + } + + @Override + public boolean takeReward(ISession session, int missionId) throws Exception{ + User user = UserManager.getUser(session.getUid()); + SActivityRewardConfig sActivityRewardConfig = SActivityRewardConfig.getsActivityRewardConfigByMissionId(missionId); + if (sActivityRewardConfig == null || sActivityRewardConfig.getActivityId() != id) { + throw new ErrorCodeException(ErrorCode.CFG_NULL); + } + ActivityManager activityManager = user.getActivityManager(); + ActivityMission activityMission = activityManager.getActivityMissionMap().get(id); + if (activityMission == null){ + throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); + } + ActivityProgressInfo activityProgressInfo = activityMission.getActivityMissionMap().get(missionId); + if (activityProgressInfo == null || activityProgressInfo.getState() == ActivityType.HAD_TAKED) { + throw new ErrorCodeException(ErrorCode.newDefineCode("活动奖励已经领取")); + } + int day = (int)TimeUtils.getGapDaysByTwoTime(TimeUtils.getTimeStamp2(activityMission.getCreatTime()),TimeUtils.getTimeStamp2(TimeUtils.now())); + if(day<7){ + int[][] reward = sActivityRewardConfig.getReward(); + activityMission.setV(day+1); + checkAndSetProgress(activityMission, activityProgressInfo, missionId); + sendActivityProgress(session, activityMission, null); + CommonProto.Drop.Builder drop = ItemUtil.drop(user, reward, BIReason.TAKE_ACTIVITY_REWARD); + reportTakeActivityReward(user,reward,missionId); + PlayerInfoProto.TakeActivityRewardResponse build = PlayerInfoProto.TakeActivityRewardResponse.newBuilder().setDrop(drop).build(); + MessageUtil.sendMessage(session, 1, rewardResponseValue, build, true); + return true; + } + return false; + } +} + + + diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/DailyRechargeActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/DailyRechargeActivity.java index 4c28f03b5..f79c9a1d4 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/DailyRechargeActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/DailyRechargeActivity.java @@ -31,15 +31,16 @@ class DailyRechargeActivity extends AbstractActivity { // ISession sessionByUid = OnlineUserManager.getSessionByUid(user.getId()); // takeAllReward(sessionByUid); // } - ISession sessionByUid = OnlineUserManager.getSessionByUid(user.getId()); - takeAllReward(sessionByUid); - super.onResume(user); + +// ISession sessionByUid = OnlineUserManager.getSessionByUid(user.getId()); +// takeAllReward(sessionByUid); +// super.onResume(user); } @Override void updateProgress(ActivityMission activityMission, int count) { - activityMission.setV(count + activityMission.getV()); +// activityMission.setV(count + activityMission.getV()); } @Override diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/NewPlayerShopActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/NewPlayerShopActivity.java new file mode 100644 index 000000000..7cb531e28 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/NewPlayerShopActivity.java @@ -0,0 +1,29 @@ +package com.ljsd.jieling.logic.activity; + +import com.ljsd.jieling.logic.activity.event.GoldRefreshEvent; +import com.ljsd.jieling.logic.activity.event.IEvent; +import com.ljsd.jieling.logic.activity.event.Poster; +import com.ljsd.jieling.logic.dao.root.User; + +class NewPlayerShopActivity extends AbstractActivity { + + public NewPlayerShopActivity(int id) { + super(id); +// Poster.getPoster().listenEvent(this, UserOnlineEvent.class); + Poster.getPoster().listenEvent(this, GoldRefreshEvent.class); + } + + @Override + public void initActivity(User user) throws Exception { + +// notifyClient(user, ids); + } + + @Override + public void onEvent(IEvent event) throws Exception { + + } + + + +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/NewRechargeSumDayActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/NewRechargeSumDayActivity.java new file mode 100644 index 000000000..3cdbd6909 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/NewRechargeSumDayActivity.java @@ -0,0 +1,84 @@ +package com.ljsd.jieling.logic.activity; + +import com.ljsd.jieling.config.clazzStaticCfg.ActivityStaticConfig; +import com.ljsd.jieling.jbean.ActivityManager; +import com.ljsd.jieling.jbean.ActivityMission; +import com.ljsd.jieling.jbean.ActivityProgressInfo; +import com.ljsd.jieling.logic.OnlineUserManager; +import com.ljsd.jieling.logic.activity.event.BuyGoodsDirectEvent; +import com.ljsd.jieling.logic.activity.event.IEvent; +import com.ljsd.jieling.logic.activity.event.NewWelfareEvent; +import com.ljsd.jieling.logic.activity.event.Poster; +import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.store.GiftGoodsType; +import com.ljsd.jieling.logic.store.newRechargeInfo.RechargeType; +import com.ljsd.jieling.network.session.ISession; +import config.SActivityRewardConfig; +import config.SRechargeCommodityNewConfig; +import manager.STableManager; + +import java.util.Map; + +class NewRechargeSumDayActivity extends AbstractActivity { + + public NewRechargeSumDayActivity(int id) { + super(id); + Poster.getPoster().listenEvent(this, BuyGoodsDirectEvent.class); + } + + @Override + public void onEvent(IEvent event) throws Exception { + super.onEvent(event); + if (!(event instanceof BuyGoodsDirectEvent)) { + return; + } + BuyGoodsDirectEvent buyGoodsDirectEvent = (BuyGoodsDirectEvent) event; + int goodsId=buyGoodsDirectEvent.getGoodsId(); + SRechargeCommodityNewConfig rechargeConfig=SRechargeCommodityNewConfig.getConfigById(goodsId); + if (rechargeConfig==null||rechargeConfig.getType()!= GiftGoodsType.RechargeSumDay){ + return; + } + User user = UserManager.getUser(buyGoodsDirectEvent.getUid()); + ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(id); + boolean isSend=false; + for (Map.Entry item : activityMission.getActivityMissionMap().entrySet()) { + ActivityProgressInfo activityProgressInfo = item.getValue(); + int missionId=item.getKey(); + SActivityRewardConfig missionConfig=SActivityRewardConfig.getsActivityRewardConfigByMissionId(missionId); + if (missionConfig.getValues()[0][0]==goodsId&&missionConfig.getSort()-1==activityMission.getV()&&activityProgressInfo.getState()==ActivityType.WILL_TAKE){ + activityProgressInfo.setState(1); + isSend=true; + } + activityMission.getActivityMissionMap().put(item.getKey(), activityProgressInfo); + } + if (isSend){ + //更新进度 + ISession sessionByUid = OnlineUserManager.getSessionByUid(user.getId()); + sendActivityProgress(sessionByUid, activityMission, null); + } + + } + + @Override + public void onResume(User user)throws Exception { + ActivityManager activityManager = user.getActivityManager(); + ActivityMission activityMission = activityManager.getActivityMissionMap().get(id); + int buyNum=0; + for (Map.Entry progressInfoEntry : activityMission.getActivityMissionMap().entrySet()) { + if (progressInfoEntry.getValue().getState()==ActivityType.HAD_TAKED){ + buyNum++; + } + } + if (buyNum > activityMission.getV()) { + activityMission.setV(activityMission.getV() + 1); + } + if (activityMission.getV() >= SActivityRewardConfig.getsActivityRewardConfigByActivityId(id).size()) { + ActivityLogic.getInstance().initMissionInfo(activityMission,id); + } + ISession sessionByUid = OnlineUserManager.getSessionByUid(user.getId()); + sendActivityProgress(sessionByUid, activityMission, null); + } + + +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/NewWelfareActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/NewWelfareActivity.java index 7cb3fdd6a..fafbdf4e2 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/NewWelfareActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/NewWelfareActivity.java @@ -30,98 +30,181 @@ public class NewWelfareActivity extends AbstractActivity { Poster.getPoster().listenEvent(this, NewWelfareEvent.class); } + @Override + public void initActivity(User user) throws Exception { + super.initActivity(user); + } + @Override public void onEvent(IEvent event) throws Exception { - if(! (event instanceof NewWelfareEvent) ){ - return; - } + if (!(event instanceof NewWelfareEvent)) { + return; + } + if (this.id == 42) { + oldActivityEvent(event); + } else { + NewWelfareEvent newWelfareEvent = (NewWelfareEvent) event; + if (newWelfareEvent.getType() == NewWelfareTypeEnum.BUY_1106.getType()) { + User user = newWelfareEvent.getUser(); + ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(id); + for (Map.Entry item : activityMission.getActivityMissionMap().entrySet()) { + ActivityProgressInfo activityProgressInfo = item.getValue(); + int missionId=item.getKey(); + if (missionId==4209){ + activityProgressInfo.setState(1); + } + activityMission.getActivityMissionMap().put(item.getKey(), activityProgressInfo); + } + //更新进度 + ISession sessionByUid = OnlineUserManager.getSessionByUid(user.getId()); + sendActivityProgress(sessionByUid, activityMission, null); + } + } + } + + @Override + public boolean takeReward(ISession session, int missionId) throws Exception { + if (this.id == 42) { + User user = UserManager.getUser(session.getUid()); + SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(id); + if (sGlobalActivity == null || !user.getActivityManager().getActivityMissionMap().containsKey(id)) { + throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); + } + ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(id); + Map activityProgressInfoMap = activityMission.getActivityMissionMap(); + oldActivityTakeReward(session,missionId,user,activityMission,activityProgressInfoMap); + } else { + super.takeReward(session,missionId); + } + return true; + } + + @Override + public void getAllMissRewards(User user, ISession session, List itemAttrs) throws Exception { + if (this.id == 42) { + SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(id); + if (sGlobalActivity == null || !user.getActivityManager().getActivityMissionMap().containsKey(id)) { + return; + } + ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(id); + Map activityProgressInfoMap = activityMission.getActivityMissionMap(); + for (ActivityProgressInfo activityProgressInfo : activityProgressInfoMap.values()) { + if (activityProgressInfo.getState() != 1) { + return; + } + } + for (ActivityProgressInfo activityProgressInfo : activityProgressInfoMap.values()) { + activityProgressInfo.setState(2); + } + + for (Map.Entry item : activityProgressInfoMap.entrySet()) { + item.getValue().setState(2); + activityMission.getActivityMissionMap().put(item.getKey(), item.getValue()); + } + + List sActivityRewardConfigs = SActivityRewardConfig.getsActivityRewardConfigByActivityId(id); + itemAttrs.add(sActivityRewardConfigs.get(0).getReward()); + }else{ + super.getAllMissRewards(user,session,itemAttrs); + } + } + + + @Override + void updateProgress(ActivityMission activityMission, int count) { + Map activityProgressInfoMap = activityMission.getActivityMissionMap(); + for (Map.Entry item : activityProgressInfoMap.entrySet()) { + ActivityProgressInfo activityProgressInfo = item.getValue(); + int missionId=item.getKey(); + SActivityRewardConfig rewardConfig=SActivityRewardConfig.getsActivityRewardConfigByMissionId(missionId); + activityProgressInfo.setProgrss(count); + if (activityProgressInfo.getProgrss()>=rewardConfig.getValues()[0][0]&&rewardConfig.getReward().length<=0&&missionId!=4209){ + activityProgressInfo.setState(ActivityType.HAD_TAKED); + } + activityMission.getActivityMissionMap().put(item.getKey(), activityProgressInfo); + } + } + + private void oldActivityEvent(IEvent event) { NewWelfareEvent newWelfareEvent = (NewWelfareEvent) event; - User user =newWelfareEvent.getUser(); + User user = newWelfareEvent.getUser(); ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(id); - if( null == activityMission){ + if (null == activityMission) { return; } List sActivityRewardConfigs = SActivityRewardConfig.getsActivityRewardConfigByActivityId(id); Map activityProgressInfoMap = activityMission.getActivityMissionMap(); boolean isUpdate = false; - for(SActivityRewardConfig sActivityRewardConfig : sActivityRewardConfigs){ + for (SActivityRewardConfig sActivityRewardConfig : sActivityRewardConfigs) { ActivityProgressInfo activityProgressInfo = activityProgressInfoMap.get(sActivityRewardConfig.getId()); - if(sActivityRewardConfig.getSort()==1){//拿sort区分新老至尊降世活动任务 - if(activityProgressInfo.getState() == 1){ + if (sActivityRewardConfig.getSort() == 1) {//拿sort区分新老至尊降世活动任务 + if (activityProgressInfo.getState() == 1) { continue; } - if(sActivityRewardConfig.getValues()[0][0] == newWelfareEvent.getType() ){ + if (sActivityRewardConfig.getValues()[0][0] == newWelfareEvent.getType()) { int parm = newWelfareEvent.getParm(); - if( newWelfareEvent.getType() == NewWelfareTypeEnum.LOGIN_TIMES.getType()){ - activityProgressInfo.setProgrss(activityProgressInfo.getProgrss()+1); - parm=activityProgressInfo.getProgrss(); + if (newWelfareEvent.getType() == NewWelfareTypeEnum.LOGIN_TIMES.getType()) { + activityProgressInfo.setProgrss(activityProgressInfo.getProgrss() + 1); + parm = activityProgressInfo.getProgrss(); } - if(parm ==sActivityRewardConfig.getValues()[1][0]){ - if(newWelfareEvent.getType() == NewWelfareTypeEnum.RECHARGE_BUY.getType()){ + if (parm == sActivityRewardConfig.getValues()[1][0]) { + if (newWelfareEvent.getType() == NewWelfareTypeEnum.RECHARGE_BUY.getType()) { //可领取奖励 activityProgressInfo.setState(3); - }else{ + } else { activityProgressInfo.setState(1); } activityMission.getActivityMissionMap().put(sActivityRewardConfig.getId(), activityProgressInfo); isUpdate = true; } } - }else{ + } else { //新增任务 - if(activityProgressInfo.getState()!= 0){ + if (activityProgressInfo.getState() != 0) { continue; } - if(sActivityRewardConfig.getValues()[0][0] == newWelfareEvent.getType() ){ + if (sActivityRewardConfig.getValues()[0][0] == newWelfareEvent.getType()) { int parm = newWelfareEvent.getParm(); - if (newWelfareEvent.getType() == NewWelfareTypeEnum.ALL_MISSION_FIN.getType()||newWelfareEvent.getType() == NewWelfareTypeEnum.EXPLORE.getType()){ - activityProgressInfo.setProgrss(activityProgressInfo.getProgrss()+1); - parm=activityProgressInfo.getProgrss(); + if (newWelfareEvent.getType() == NewWelfareTypeEnum.ALL_MISSION_FIN.getType() || newWelfareEvent.getType() == NewWelfareTypeEnum.EXPLORE.getType()) { + activityProgressInfo.setProgrss(activityProgressInfo.getProgrss() + 1); + parm = activityProgressInfo.getProgrss(); } - if(parm ==sActivityRewardConfig.getValues()[1][0]){ + if (parm == sActivityRewardConfig.getValues()[1][0]) { activityProgressInfo.setState(3); activityMission.getActivityMissionMap().put(sActivityRewardConfig.getId(), activityProgressInfo); isUpdate = true; - if (sActivityRewardConfig.getSort()==2){ - Poster.getPoster().dispatchEvent(new NewWelfareEvent(user,NewWelfareTypeEnum.ALL_MISSION_FIN.getType(),1)); + if (sActivityRewardConfig.getSort() == 2) { + Poster.getPoster().dispatchEvent(new NewWelfareEvent(user, NewWelfareTypeEnum.ALL_MISSION_FIN.getType(), 1)); } } } } } - if(isUpdate){ + if (isUpdate) { //更新进度 ISession sessionByUid = OnlineUserManager.getSessionByUid(user.getId()); sendActivityProgress(sessionByUid, activityMission, null); } } - @Override - public boolean takeReward(ISession session, int missionId) throws Exception { + private void oldActivityTakeReward(ISession session, int missionId, User user, ActivityMission activityMission, Map activityProgressInfoMap) throws Exception { PlayerInfoProto.TakeActivityRewardResponse build = null; - User user = UserManager.getUser(session.getUid()); - SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(id); - if (sGlobalActivity == null || !user.getActivityManager().getActivityMissionMap().containsKey(id)) { - throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); - } - ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(id); - Map activityProgressInfoMap = activityMission.getActivityMissionMap(); //0是领取最后奖励 - if(missionId==0){ + if (missionId == 0) { for (Map.Entry inter : activityProgressInfoMap.entrySet()) { - ActivityProgressInfo activityProgressInfo=inter.getValue(); - int activityMissionId=inter.getKey(); - SActivityRewardConfig missonConfig= SActivityRewardConfig.getsActivityRewardConfigByMissionId(activityMissionId); - if(activityProgressInfo.getState() != 1&&missonConfig.getSort()==1){ + ActivityProgressInfo activityProgressInfo = inter.getValue(); + int activityMissionId = inter.getKey(); + SActivityRewardConfig missonConfig = SActivityRewardConfig.getsActivityRewardConfigByMissionId(activityMissionId); + if (activityProgressInfo.getState() != 1 && missonConfig.getSort() == 1) { throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); } } - for(Map.Entry item: activityProgressInfoMap.entrySet()){ - SActivityRewardConfig missonConfig= SActivityRewardConfig.getsActivityRewardConfigByMissionId(item.getKey()); - if (missonConfig.getSort()==1){ + for (Map.Entry item : activityProgressInfoMap.entrySet()) { + SActivityRewardConfig missonConfig = SActivityRewardConfig.getsActivityRewardConfigByMissionId(item.getKey()); + if (missonConfig.getSort() == 1) { item.getValue().setState(2); - activityMission.getActivityMissionMap().put(item.getKey(),item.getValue()); + activityMission.getActivityMissionMap().put(item.getKey(), item.getValue()); } } @@ -129,52 +212,24 @@ public class NewWelfareActivity extends AbstractActivity { List sActivityRewardConfigs = SActivityRewardConfig.getsActivityRewardConfigByActivityId(id); CommonProto.Drop.Builder drop = ItemUtil.drop(user, sActivityRewardConfigs.get(0).getReward(), BIReason.TAKE_ACTIVITY_REWARD); build = PlayerInfoProto.TakeActivityRewardResponse.newBuilder().setDrop(drop).build(); - reportTakeActivityReward(user,sActivityRewardConfigs.get(0).getReward(),missionId); + reportTakeActivityReward(user, sActivityRewardConfigs.get(0).getReward(), missionId); - }else{ + } else { //领取第三个奖励用 - if(!activityProgressInfoMap.containsKey(missionId)||activityProgressInfoMap.get(missionId).getState()!=3){ + if (!activityProgressInfoMap.containsKey(missionId) || activityProgressInfoMap.get(missionId).getState() != 3) { throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); } //领过了 activityProgressInfoMap.get(missionId).setState(1); SActivityRewardConfig sActivityRewardConfig = SActivityRewardConfig.getsActivityRewardConfigByMissionId(missionId); - if(sActivityRewardConfig==null){ + if (sActivityRewardConfig == null) { throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); } sendActivityProgress(session, activityMission, null); CommonProto.Drop.Builder drop = ItemUtil.drop(user, sActivityRewardConfig.getReward(), BIReason.TAKE_ACTIVITY_REWARD); build = PlayerInfoProto.TakeActivityRewardResponse.newBuilder().setDrop(drop).build(); - reportTakeActivityReward(user,sActivityRewardConfig.getReward(),missionId); + reportTakeActivityReward(user, sActivityRewardConfig.getReward(), missionId); } - MessageUtil.sendMessage(session, 1, rewardResponseValue, build, true); - return true; - } - - @Override - public void getAllMissRewards(User user, ISession session, List itemAttrs){ - SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(id); - if (sGlobalActivity == null || !user.getActivityManager().getActivityMissionMap().containsKey(id)) { - return; - } - ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(id); - Map activityProgressInfoMap = activityMission.getActivityMissionMap(); - for(ActivityProgressInfo activityProgressInfo : activityProgressInfoMap.values()){ - if(activityProgressInfo.getState() != 1){ - return; - } - } - for(ActivityProgressInfo activityProgressInfo : activityProgressInfoMap.values()){ - activityProgressInfo.setState(2); - } - - for(Map.Entry item: activityProgressInfoMap.entrySet()){ - item.getValue().setState(2); - activityMission.getActivityMissionMap().put(item.getKey(),item.getValue()); - } - - List sActivityRewardConfigs = SActivityRewardConfig.getsActivityRewardConfigByActivityId(id); - itemAttrs.add(sActivityRewardConfigs.get(0).getReward()); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/RechargeSumDayActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/RechargeSumDayActivity.java index dd5114447..7891e14d1 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/RechargeSumDayActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/RechargeSumDayActivity.java @@ -11,6 +11,8 @@ import com.ljsd.jieling.network.session.ISession; import config.SActivityRewardConfig; import manager.STableManager; +import java.util.Map; + class RechargeSumDayActivity extends AbstractActivity { public RechargeSumDayActivity(int id) { @@ -26,23 +28,32 @@ class RechargeSumDayActivity extends AbstractActivity { } catch (Exception e) { e.printStackTrace(); } + // 该活动已被替换,未参与的玩家不再累计 + if (activityMission.getV() <= 0 || activityMission.getV() >= 15) { + return; + } if (user.getPlayerInfoManager().getRechargedaily() > 0 ) {//充值0.99不触发修改 // SActivityRewardConfig.getsActivityRewardConfigByMissionId(missionId).getValues()[0][0] activityMission.setV(activityMission.getV() + 1); } - if (activityMission.getV() >= SActivityRewardConfig.getsActivityRewardConfigByActivityId(id).size()) { - ActivityLogic.getInstance().initMissionInfo(activityMission,id); - } +// if (activityMission.getV() >= SActivityRewardConfig.getsActivityRewardConfigByActivityId(id).size()) { +// ActivityLogic.getInstance().initMissionInfo(activityMission,id); +// } } @Override void updateProgress(ActivityMission activityMission, int count) { int missionId =STableManager.getFigureConfig(ActivityStaticConfig.class).getRechargeDaySum().get(activityMission.getV() + 1); - ActivityProgressInfo activityProgressInfo = activityMission.getActivityMissionMap().get(missionId); + Map activityMissionMap = activityMission.getActivityMissionMap(); + ActivityProgressInfo activityProgressInfo = activityMissionMap.get(missionId); if (activityProgressInfo == null || activityProgressInfo.getProgrss() == 1) { return; } + // 该活动已被替换,未参与的玩家不再累计 + if (activityMission.getV() <= 0 || activityMission.getV() >= 15) { + return; + } if (count>0 ) {//只要是充值就算 //>= SActivityRewardConfig.getsActivityRewardConfigByMissionId(missionId).getValues()[0][0] activityProgressInfo.setProgrss(1); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SuperFundActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SuperFundActivity.java index 442a0263d..f53f8e632 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SuperFundActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SuperFundActivity.java @@ -152,6 +152,10 @@ public class SuperFundActivity extends AbstractActivity { private void updateState(User user) throws Exception { // 活动信息 ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(id); + if(mission == null){ + LOGGER.info("updateState 玩家id ={},activityId={}",user.getId(),id); + return; + } if (mission.getV() != 2){ return; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/NewWelfareTypeEnum.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/NewWelfareTypeEnum.java index f91cd1ffd..53f90a993 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/NewWelfareTypeEnum.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/NewWelfareTypeEnum.java @@ -6,7 +6,8 @@ public enum NewWelfareTypeEnum { RECHARGE_BUY(3), EXPLORE(4),//极速探索n次 UPSTAR(5),//指定英雄升级至x星 - ALL_MISSION_FIN(6)//sort为2所有任务完成 + ALL_MISSION_FIN(6),//sort为2所有任务完成 + BUY_1106(7),//购买1106礼包 ; private int type; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/eventhandler/SummonTreasureHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/eventhandler/SummonTreasureHandler.java index 87b59da28..bea488f72 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/eventhandler/SummonTreasureHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/eventhandler/SummonTreasureHandler.java @@ -1,5 +1,6 @@ package com.ljsd.jieling.logic.activity.eventhandler; +import com.ljsd.jieling.core.GlobalsDef; import com.ljsd.jieling.logic.activity.IEventHandler; import com.ljsd.jieling.logic.activity.event.IEvent; import com.ljsd.jieling.logic.activity.event.Poster; @@ -19,7 +20,7 @@ public class SummonTreasureHandler implements IEventHandler { } SummonTreasureEvent event1 = (SummonTreasureEvent) event; User user = UserManager.getUser(event1.getUid()); - if (event1.getStar() == 5){ + if (event1.getStar() == GlobalsDef.WUJINGMIBAO_STAR){ user.getPlayerInfoManager().setGetFiveStarHeroNum(user.getPlayerInfoManager().getGetFiveStarHeroNum()+event1.getNum()); Poster.getPoster().dispatchEvent(new SummonTreasureActivityEvent(user.getId())); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java index 2e5ddfdf1..0091ee1eb 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java @@ -255,7 +255,6 @@ public class HeroLogic { public void random(ISession session, int type) throws Exception { - long time = System.currentTimeMillis(); int uid = session.getUid(); User user = UserManager.getUser(uid); SLotterySetting sLotterySetting = STableManager.getConfig(SLotterySetting.class).get(type); @@ -1548,8 +1547,11 @@ public class HeroLogic { throw new ErrorCodeException(ErrorCode.HERO_ITEM_NOT); } } - - if (needTotalHeroNums != (removeHeroIds.size() + removeItemMap.size())) { + int itemNum = 0; + for (Integer value : removeItemMap.values()) { + itemNum += value; + } + if (needTotalHeroNums != (removeHeroIds.size() + itemNum)) { LOGGER.error("hero num not enough"); throw new ErrorCodeException(ErrorCode.HERO_UN_MATCH); } @@ -1644,6 +1646,9 @@ public class HeroLogic { } hero.upStar(1); user.getHeroManager().addHeroHandBook(hero.getTemplateId(),hero.getStar()); + if (hero.getStar() == GlobalsDef.WUJINGMIBAO_STAR){ + Poster.getPoster().dispatchEvent(new SummonTreasureEvent(user.getId(),hero.getStar(),1)); + } } @@ -3016,7 +3021,7 @@ public class HeroLogic { } Map heroSkillAdMap = new HashMap<>(); - heroSkillList.forEach(skill -> { + for (Integer skill : heroSkillList) { SPassiveSkillLogicConfig config = SPassiveSkillLogicConfig.getConfig(skill); if (null != config.getValue() && config.getValue().length > 2 && config.getValue()[2] != 4) { PassiveskillCalEnum passiveskillCalEnum = PassiveskillCalEnum.calEnumMap.get(config.getType()); @@ -3024,7 +3029,7 @@ public class HeroLogic { passiveskillCalEnum.getPassiveSkillProcessor().process(config, hero, heroSkillAdMap); } } - }); + } if (!heroSkillAdMap.isEmpty()) { combinedAttribute(heroSkillAdMap, heroAllAttribute); @@ -4011,6 +4016,107 @@ public class HeroLogic { MessageUtil.sendMessage(session, 1, responseMsgId, build, true); } + + + /** + * 神将回退 + * 仅限6-9星神将 + * @param session + * @param heroId + * @throws Exception + */ + public void heroReturn(ISession session, String heroId) throws Exception { + int uid = session.getUid(); + int responseMsgId = MessageTypeProto.MessageType.HERO_RETURN_RESPONSE_VALUE; + User user = UserManager.getUser(uid); + Hero hero = user.getHeroManager().getHero(heroId); + if (hero == null || hero.getOriginalLevel() != 1) { + throw new ErrorCodeException(ErrorCode.HERO_RETURN_ONLY_LEVEL_ONE); + } + String recallCostDiamond = SSpecialConfig.getStringValue(SSpecialConfig.RecallCostDiamond); + Map cost = new HashMap<>(1); + if (recallCostDiamond != null && !recallCostDiamond.isEmpty()) { + String[] split = recallCostDiamond.split("#"); + cost.put(Integer.parseInt(split[0]), Integer.parseInt(split[1])); + boolean b = ItemUtil.checkCost(user, cost); + if (!b) { + throw new ErrorCodeException(ErrorCode.HERO_ITEM_NOT); + } + } + SCHero scHero = SCHero.sCHero.get(hero.getTemplateId()); + int[][] returnBook = scHero.getReturnBook(); + if (returnBook == null || returnBook.length == 0) { + throw new ErrorCodeException(ErrorCode.HERO_RETURN_CAN_NOT); + } + List returnPercent = new ArrayList<>(5); + for (int i = 0; i < returnBook.length; i++) { + if (returnBook[i][0] == hero.getStar()) { + returnPercent.add(returnBook[i]); + continue; + } + } + if (returnPercent.isEmpty()) { + throw new ErrorCodeException(ErrorCode.HERO_RETURN_CAN_NOT); + } + Map dropMap = new HashMap<>(); + // 法宝归元 + if (hero.getEspecialEquipLevel() > 0) { + Map dropTempMap = ItemLogic.getInstance().heroEspecialEquipReturnItem(hero); + if (dropTempMap != null) { + dropTempMap.forEach((k, v) -> dropMap.put(k, dropMap.getOrDefault(k, 0) + v)); + hero.updateEspecial(1); + } + } + // 卸下魂印 + Map soulEquipByPositionMap = hero.getSoulEquipByPositionMap(); + for (Integer value : soulEquipByPositionMap.values()) { + dropMap.put(value, 1); + } + + for (int[] ints : returnPercent) { + for (int i = 1; i < ints.length; i++) { + SHeroRankupGroup sHeroRankupGroup=STableManager.getConfig(SHeroRankupGroup.class).get(ints[i]); + if (sHeroRankupGroup == null) { + continue; + } + i++; + int isSame = sHeroRankupGroup.getIssame(); +// int starLimit = sHeroRankupGroup.getStarLimit(); +// int isSameClan = sHeroRankupGroup.getIsSameClan(); + int isId = sHeroRankupGroup.getIsId(); + if (isSame == 1) { + dropMap.put(hero.getTemplateId(), ints[i]); + } + if (isId != 0) { + dropMap.put(isId, ints[i]); + } + } + } + ItemUtil.itemCost(user, cost, BIReason.HERO_RETURN, hero.getTemplateId()); + CommonProto.Drop.Builder drop = ItemUtil.drop(user, ItemUtil.mapToArray(dropMap), BIReason.HERO_RETURN); + if (!soulEquipByPositionMap.isEmpty()) { + List itemlistList = drop.getItemlistList(); + Set needRemove = new HashSet<>(soulEquipByPositionMap.size()); + for (int i = 0; i < itemlistList.size(); i++) { + CommonProto.Item item = itemlistList.get(i); + if (soulEquipByPositionMap.values().contains(item.getItemId())) { + needRemove.add(i); + } + } + for (Integer index : needRemove) { + drop.removeItemlist(index); + } + } + hero.setLevel(1); + hero.setBreakId(0); + hero.setStar(5); + //鸿蒙阵 + addOrUpdateHongmeng(session); + HeroInfoProto.HeroReturnResponse build = HeroInfoProto.HeroReturnResponse.newBuilder().setDrop(drop).build(); + MessageUtil.sendMessage(session, 1, responseMsgId, build, true); + Poster.getPoster().dispatchEvent(new UserMainTeamForceEvent(uid)); + } + /** * 法宝归元 * diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/ridingSward/RidingSwardLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/ridingSward/RidingSwardLogic.java index e74118c23..490181735 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/ridingSward/RidingSwardLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/ridingSward/RidingSwardLogic.java @@ -1,6 +1,7 @@ package com.ljsd.jieling.logic.ridingSward; import com.google.gson.reflect.TypeToken; +import com.ljsd.GameApplication; import com.ljsd.jieling.db.redis.RedisKey; import com.ljsd.jieling.db.redis.RedisUtil; import com.ljsd.jieling.exception.ErrorCode; @@ -231,8 +232,16 @@ public class RidingSwardLogic{ if (startTime == 0 || endTime == 0) { // 初始化活动数据 SGlobalActivity activity = SGlobalActivity.getsGlobalActivityMap().get(proto.getActivityId()); - startTime = (int) (TimeUtils.stringToTimeLong(activity.getStartTime(), "yyyyMMdd HHmmss")/1000); - endTime = (int) (TimeUtils.stringToTimeLong(activity.getEndtime(), "yyyyMMdd HHmmss")/1000); + if(activity.getTime()==ActivityType.OPEN_TYPE_SERVER){ + String openTime = GameApplication.serverConfig.getOpenTime(); + long timeStamp2 = TimeUtils.stringToTimeLong2(openTime); + startTime = (int)(timeStamp2/1000)+Integer.parseInt(activity.getStartTime()); + endTime = (int)(timeStamp2/1000)+Integer.parseInt(activity.getEndtime()); + } + if(activity.getTime()==ActivityType.OPEN_TYPE_TIME){ + startTime = (int) (TimeUtils.stringToTimeLong(activity.getStartTime(), "yyyyMMdd HHmmss")/1000); + endTime = (int) (TimeUtils.stringToTimeLong(activity.getEndtime(), "yyyyMMdd HHmmss")/1000); + } // 定时器启动 getInstance().createExecuteScript(); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsNewLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsNewLogic.java index a3a1c1f9e..c5c6c6cb7 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsNewLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/BuyGoodsNewLogic.java @@ -21,7 +21,10 @@ import com.ljsd.jieling.logic.activity.ActivityType; import com.ljsd.jieling.logic.activity.ActivityTypeEnum; import com.ljsd.jieling.logic.activity.activityLogic.WeekCardLogic; import com.ljsd.jieling.logic.activity.event.*; -import com.ljsd.jieling.logic.dao.*; +import com.ljsd.jieling.logic.dao.PlayerManager; +import com.ljsd.jieling.logic.dao.RechargeInfo; +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.expedition.ExpeditionLogic; import com.ljsd.jieling.logic.fight.CombatLogic; @@ -224,6 +227,7 @@ public class BuyGoodsNewLogic { //处理特权 activePrivilege(user,config); resultRes.setResultCode(1); + //发送邮件 int[] mail = config.getMail(); if(config.getPrice()!=0&&mail!=null&&mail.length>1){ @@ -329,6 +333,7 @@ public class BuyGoodsNewLogic { ActivityLogic.getInstance().updateActivityMissionProgress(user, ActivityType.JADE_DYNASTY_RECHARGE_SUM,(int)(price*1000)); ActivityLogic.getInstance().updateActivityMissionProgress(user, ActivityType.RECHARGE_SUM_DAY, (int)(user.getPlayerInfoManager().getRechargedaily()*1000) ); ActivityLogic.getInstance().updateActivityMissionProgress(user, ActivityType.FIND_FAIRY_FESTIVAL, (int)(price*1000)); + ActivityLogic.getInstance().updateActivityMissionProgress(user, ActivityType.NEW_WELFARE, (int)(info.getRr())); AyyncWorker ayyncWorker = new AyyncWorker(user, true, new AynMissionWorker(GameEvent.RECHARGE_TOTAL,(int)(price*1000))) ; ProtocolsManager.getInstance().updateAyncWorker(ayyncWorker); @@ -377,9 +382,8 @@ public class BuyGoodsNewLogic { if(dropArray!=null && dropArray.length>=1){ drop = ItemUtil.drop(user,dropArray, BIReason.DIRECT_BUY); } - - if(type==GiftGoodsType.RED_PACKET){ - //红包事件 + //红包事件 和积天豪礼事件 + if(type==GiftGoodsType.RED_PACKET||type==GiftGoodsType.RechargeSumDay){ Poster.getPoster().dispatchEvent(new BuyGoodsDirectEvent(user.getId(),config.getId())); } if(type==GiftGoodsType.SKY_TREASURE){ @@ -405,6 +409,11 @@ public class BuyGoodsNewLogic { WeekCardLogic.getInstance().buyWeekCard(user,config.getId()); WeekCardLogic.getInstance().sendWeekCardInitInfo(session); } + //礼包开启活动 + if(type ==GiftGoodsType.DailyPreferentialGift){ + AbstractActivity abstractActivity = ActivityTypeEnum.getActicityType(ActivityType.DAILY_PREFERENTIAL_GIFT); + abstractActivity.initActivity(user); + } if(drop!=null&&session!=null){ PlayerInfoProto.DirectBuyIndication build = PlayerInfoProto.DirectBuyIndication.newBuilder().setDrop(drop).build(); MessageUtil.sendIndicationMessage(session,1, MessageTypeProto.MessageType.DIRECT_BUY_GOODS_INDICATION_VALUE,build,true); @@ -848,9 +857,14 @@ public class BuyGoodsNewLogic { public static CommonProto.GiftGoodsInfo buildGoodsInfo(AbstractWelfareBag bag){ SRechargeCommodityNewConfig configById = SRechargeCommodityNewConfig.getConfigById(bag.getModId()); + // 配置表里已删除的礼包 删除 if (configById == null) { return null; } + // 礼包类型已更改的删除 + if (bag.getType() != configById.getOtype()) { + return null; + } CommonProto.GiftGoodsInfo.Builder builder = CommonProto.GiftGoodsInfo.newBuilder(); builder.setGoodsId(bag.getModId()); builder.setBuyTimes(bag.getBuyTimes()); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/GiftGoodsType.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/GiftGoodsType.java index 712c5947c..841ddf37c 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/GiftGoodsType.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/GiftGoodsType.java @@ -14,5 +14,8 @@ public interface GiftGoodsType { int SUN_LONG = 11; //豪华基金 int SKY_TREASURE = 12; //天宫秘宝 int ENDLESS_TREASURE = 14;//无尽秘宝 + int DailyPreferentialGift = 17 ;//每日特惠礼包 + int RechargeSumDay = 18 ;//超值返利礼包(在积天豪礼活动里购买) } + 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 5e462826e..1c7f47046 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/ItemUtil.java @@ -395,7 +395,7 @@ public class ItemUtil { getMap((int)items[0],items[1],itemObj,1); } } - private static void selectDrop(User user, SRewardGroup sRewardGroup,ItemMap itemObj, float dropRatio)throws ErrorCodeException { + public static void selectDrop(User user, SRewardGroup sRewardGroup,ItemMap itemObj, float dropRatio)throws ErrorCodeException { String dropInfo = dropRewardMap.get(sRewardGroup.getId()); String rewardStr = dropInfo.split("\\|")[0]; String weight = dropInfo.split("\\|")[1]; @@ -544,7 +544,8 @@ public class ItemUtil { private static void getMap(int itemId ,long itemNum,ItemMap itemObj,float dropRatio) throws ErrorCodeException{ SItem sItem = SItem.getsItemMap().get(itemId); if(sItem==null){ - throw new ErrorCodeException("SItem配置不存在 id:"+itemId); + LOGGER.info("getMap SItem配置不存在 id:{}", itemId); + return; } int itemType =getItemType(sItem); long amount = MathUtils.numRount((itemNum * MathUtils.floatToDouble(dropRatio))); @@ -591,6 +592,7 @@ public class ItemUtil { case GlobalItemType.MOUNT_FRAGMENTS_ITEM: case GlobalItemType.TRUMP_CHIP: case GlobalItemType.TRANSFORMATION_CARD: + case GlobalItemType.HOOK_PROP: itemType = GlobalItemType.ITEM; break; default: @@ -1160,6 +1162,19 @@ public class ItemUtil { ItemManager itemManager = user.getItemManager(); Map itemMap = itemManager.getItemMap(); boolean needUpdateHero = true; + Item item1 = itemMap.get(GlobalsDef.LUOFUZHENG_MONEY); + if (item1 != null && item1.getItemNum() > 0) { + + String title = SErrorCodeEerverConfig.getI18NMessage("msarenashopchange_mile_title"); + String content = SErrorCodeEerverConfig.getI18NMessageNeedConvert("msarenashopchange_mile_txt", new Object[]{item1.getItemNum(), item1.getItemNum()}, new int[]{0,0}, "#"); + MailLogic.getInstance().sendMail(user.getId(), title, content, "24#" + item1.getItemNum(), TimeUtils.nowInt(), Global.MAIL_EFFECTIVE_TIME); + + Map map = new HashMap<>(1); + map.put(item1.getItemId(), (int) item1.getItemNum()); + useItem(user, map, BIReason.ITEM_RETURN, 0); + itemMap.remove(GlobalsDef.LUOFUZHENG_MONEY); + + } if (itemMap.size() !=0 ){ for (Map.Entry entry :itemMap.entrySet()){ @@ -1353,6 +1368,10 @@ public class ItemUtil { SItem sItem = SItem.getsItemMap().get(entry.getKey()); extraDropAop(user,dropBuilder,sItem); } + // 回退所得神将不更新任务或活动 + if (reason == BIReason.HERO_RETURN) { + continue; + } fiveStarEvent(user,entry.getKey()); if(reason != BIReason.HERO_RANDOM){ fiveStarPushByCombine(user,entry.getKey(),count); @@ -1388,11 +1407,18 @@ public class ItemUtil { PlayerManager playerInfoManager = user.getPlayerInfoManager(); int[] heroStar = SItem.getsItemMap().get(cardId).getHeroStar(); Hero hero = new Hero(user.getId(),heroStar[0],heroStar[1]); - Poster.getPoster().dispatchEvent(new SummonTreasureEvent(user.getId(),hero.getStar(),1)); + if (reason != BIReason.HERO_RETURN) { + if (hero.getStar() == GlobalsDef.WUJINGMIBAO_STAR){ + Poster.getPoster().dispatchEvent(new SummonTreasureEvent(user.getId(),hero.getStar(),1)); + } + } heroManager.addHero(hero); // 鸿蒙阵推送 HeroLogic.getInstance().addOrUpdateHongmeng(OnlineUserManager.getSessionByUid(user.getId())); heroList.add(CBean2Proto.getHero(hero)); + if (reason == BIReason.HERO_RETURN) { + return; + } SCHero scHero = SCHero.getsCHero().get(hero.getTemplateId()); if (scHero.getStar() >= SSpecialConfig.getIntegerValue(SSpecialConfig.lamp_lottery_content_parm)) { //策划资质改成星级 String message = SErrorCodeEerverConfig.getI18NMessageNeedConvert("lamp_lottery_content", new Object[]{playerInfoManager.getNameColor(), playerInfoManager.getNickName(), scHero.getStar(), scHero.getReadingName()},new int[]{0,0,0,1}); diff --git a/tablemanager/src/main/java/config/SCHero.java b/tablemanager/src/main/java/config/SCHero.java index 74d633413..8f89fd52f 100644 --- a/tablemanager/src/main/java/config/SCHero.java +++ b/tablemanager/src/main/java/config/SCHero.java @@ -74,6 +74,8 @@ public class SCHero implements BaseConfig{ private Map> skillListByStar; + private int[][] returnBook; + // 觉醒增加的技能属性 private Map>> awakSkillMap; @@ -378,4 +380,8 @@ public class SCHero implements BaseConfig{ public int getIsSoulOpen() { return isSoulOpen; } + + public int[][] getReturnBook() { + return returnBook; + } } diff --git a/tablemanager/src/main/java/config/SItem.java b/tablemanager/src/main/java/config/SItem.java index e3c4e824f..cd056b694 100644 --- a/tablemanager/src/main/java/config/SItem.java +++ b/tablemanager/src/main/java/config/SItem.java @@ -31,7 +31,8 @@ public class SItem implements BaseConfig { private int[][] extraReward; private int recycle; - + private int[][] useGain; + private int useLevel; private String name; @Override @@ -123,4 +124,12 @@ public class SItem implements BaseConfig { public int getRecycle() { return recycle; } + + public int[][] getUseGain() { + return useGain; + } + + public int getUseLevel() { + return useLevel; + } } diff --git a/tablemanager/src/main/java/config/SSpecialConfig.java b/tablemanager/src/main/java/config/SSpecialConfig.java index 7b600798b..23efb2dd4 100644 --- a/tablemanager/src/main/java/config/SSpecialConfig.java +++ b/tablemanager/src/main/java/config/SSpecialConfig.java @@ -86,6 +86,8 @@ public class SSpecialConfig implements BaseConfig { public static final String REPLACE_ITEM_ID = "replace_item_id";//置换玉道具ID public static final String REPLACE_COST = "replace_cost";//置换玉消耗 + public static final String RecallCostDiamond = "RecallCostDiamond";// 回退消耗妖晶数量 + public static final String XUANYUAN_OPEN_TIME = "xuanyuan_open_time";//轩辕开始时间(星期) public static final String EXCHANGE_FORCE_TYPE = "exchange_focus_type";//货币转换类型