From 2ee83fef7870feb00eaeda9cd40e4ab22fc10851 Mon Sep 17 00:00:00 2001 From: duhui Date: Tue, 8 Jun 2021 17:49:21 +0800 Subject: [PATCH 01/12] =?UTF-8?q?=E5=A5=87=E9=97=A8=E9=81=81=E7=94=B2?= =?UTF-8?q?=E5=88=9D=E7=89=88=E6=9C=AA=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ljsd/jieling/globals/BIReason.java | 2 + .../activity/QiMenDunJiaDrawHandler.java | 34 ++++++++ .../ljsd/jieling/jbean/ActivityManager.java | 10 +++ .../jieling/jbean/DoubleRewardPoolInfo.java | 47 +++++++++++ .../jieling/logic/activity/ActivityLogic.java | 81 +++++++++++++++++++ .../jieling/logic/activity/ActivityType.java | 2 +- .../logic/activity/ActivityTypeEnum.java | 1 + .../logic/activity/QiMenDunJiaActivity.java | 39 +++++++++ .../src/main/java/config/SLingLongPool.java | 61 ++++++++++++++ 9 files changed, 276 insertions(+), 1 deletion(-) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/handler/activity/QiMenDunJiaDrawHandler.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/jbean/DoubleRewardPoolInfo.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/logic/activity/QiMenDunJiaActivity.java create mode 100644 tablemanager/src/main/java/config/SLingLongPool.java 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 2598df27d..78c8aed1e 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java @@ -338,4 +338,6 @@ public interface BIReason { int CHOICE_DRAW_CARD = 1102;//心愿抽奖 + int QIMENDUNJIA_DRAW = 1103;//奇门遁甲 + } \ No newline at end of file diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/QiMenDunJiaDrawHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/QiMenDunJiaDrawHandler.java new file mode 100644 index 000000000..08d25277e --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/QiMenDunJiaDrawHandler.java @@ -0,0 +1,34 @@ +package com.ljsd.jieling.handler.activity; + +import com.google.protobuf.GeneratedMessage; +import com.ljsd.jieling.exception.ErrorCode; +import com.ljsd.jieling.exception.ErrorCodeException; +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.activity.ActivityLogic; +import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.root.User; +import rpc.protocols.ActivityProto; +import rpc.protocols.MessageTypeProto; + +/** + * @Author hj + * @Date 2021/6/8 15:40 + * @Description: 奇门遁甲/玲珑宝阁抽奖 + * @Version 1.0 + */ +public class QiMenDunJiaDrawHandler extends BaseHandler { + + @Override + public MessageTypeProto.MessageType getMessageCode() { + return null; + } + + public GeneratedMessage processWithProto(int uid, ActivityProto.qiMenDunJiaDrawRequest proto) throws Exception { + // 用户信息 + User user = UserManager.getUser(uid); + if (user == null) { + throw new ErrorCodeException(ErrorCode.UNKNOWN); + } + return ActivityLogic.getInstance().qiMenDunJiaDraw(user,proto.getActivityId()); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/jbean/ActivityManager.java b/serverlogic/src/main/java/com/ljsd/jieling/jbean/ActivityManager.java index 03bd79868..1d3fb5c52 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/jbean/ActivityManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/jbean/ActivityManager.java @@ -18,6 +18,7 @@ public final class ActivityManager extends MongoBase { private com.ljsd.jieling.jbean.LuckWheelMission luckWheel; // 幸运探宝奖池 private com.ljsd.jieling.jbean.LuckWheelMission luckWheelAdvance; // 高级幸运探宝奖池 private com.ljsd.jieling.jbean.SubRewardPoolInfo subRewardPoolInfo; // 挖矿奖池 + private Map> doubleRewardPoolInfo = new HashMap<>(); // 奇门遁甲奖池 public ActivityManager() { } @@ -30,6 +31,7 @@ public final class ActivityManager extends MongoBase { this.luckWheel = new LuckWheelMission(_o_.luckWheel); this.luckWheelAdvance = new LuckWheelMission(_o_.luckWheelAdvance); this.subRewardPoolInfo = new SubRewardPoolInfo(_o_.subRewardPoolInfo); + this.doubleRewardPoolInfo = new HashMap<>(); } public Map getActivityMissionMap() { @@ -77,6 +79,14 @@ public final class ActivityManager extends MongoBase { this.subRewardPoolInfo = subrewardpoolinfo; } + public void setDoubleRewardPoolInfo(Map> doubleRewardPoolInfo) { + updateString("doubleRewardPoolInfo",doubleRewardPoolInfo); + this.doubleRewardPoolInfo = doubleRewardPoolInfo; + } + + public Map> getDoubleRewardPoolInfo() { + return doubleRewardPoolInfo; + } @Override public String toString() { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/jbean/DoubleRewardPoolInfo.java b/serverlogic/src/main/java/com/ljsd/jieling/jbean/DoubleRewardPoolInfo.java new file mode 100644 index 000000000..853a1b7d2 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/jbean/DoubleRewardPoolInfo.java @@ -0,0 +1,47 @@ +package com.ljsd.jieling.jbean; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author hj + * @Date 2021/6/8 13:41 + * @Description: + * @Version 1.0 + */ +public class DoubleRewardPoolInfo{ + + /** + * 外圈,存储的是已抽中的奖励 + */ + private List bigRewardPool = new ArrayList<>(); + /** + * 内圈,存储的是已抽中的奖励 + */ + private List smallRewardPool = new ArrayList<>(); + + public DoubleRewardPoolInfo() { + } + + + public DoubleRewardPoolInfo(DoubleRewardPoolInfo _o_ ) { + this.bigRewardPool = new ArrayList<>(_o_.bigRewardPool); + this.smallRewardPool = new ArrayList<>(_o_.smallRewardPool); + } + + public List getBigRewardPool() { + return bigRewardPool; + } + + public void setBigRewardPool(List bigRewardPool) { + this.bigRewardPool = bigRewardPool; + } + + public List getSmallRewardPool() { + return smallRewardPool; + } + + public void setSmallRewardPool(List smallRewardPool) { + this.smallRewardPool = smallRewardPool; + } +} 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 0cad7184c..01d9d6cb0 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 @@ -23,6 +23,7 @@ import com.ljsd.jieling.logic.mission.GameEvent; import com.ljsd.jieling.logic.mission.event.MissionEventDistributor; import com.ljsd.jieling.logic.player.PlayerLogic; import com.ljsd.jieling.logic.store.StoreLogic; +import com.ljsd.jieling.netty.cocdex.PacketNetData; import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.util.InnerMessageUtil; import com.ljsd.jieling.util.ItemUtil; @@ -1669,4 +1670,84 @@ public class ActivityLogic implements IEventHandler{ // 返回奖励信息 return ItemUtil.dropPer(user, reward, BIReason.CHOICE_DRAW_CARD); } + + /** + * 奇门遁甲抽奖 + * @param user + * @return + * @throws Exception + */ + public ActivityProto.qiMenDunJiaDrawResponse qiMenDunJiaDraw(User user,int activityId) throws Exception { + ActivityProto.qiMenDunJiaDrawResponse.Builder response = ActivityProto.qiMenDunJiaDrawResponse.newBuilder(); + ArrayList hits = new ArrayList<>(); + int[][] rewards = new int[2][]; + // 根据返回判断是否需要抽外圈 + boolean result = qiMenRandom(user, 2, rewards, hits); + if (result){ + // 外圈抽奖 + qiMenRandom(user, 1, rewards, hits); + // 事件分发 + + } + // 处理奖励 + CommonProto.Drop.Builder drop = ItemUtil.dropPer(user, rewards, BIReason.QIMENDUNJIA_DRAW); + + response.setDrop(drop).addAllIdList(hits); + return response.build(); + } + + /** + * 奇门遁甲随机奖励 + * @param user 玩家 + * @param type 内圈,外圈 + * @param rewards 奖励的二维数组 + * @param hits 抽中的索引id + * @return true:需要进行外圈抽奖 false:不需要外圈抽奖 + */ + private boolean qiMenRandom(User user, int type, int[][] rewards, List hits){ + boolean result = false; + + // 根据类型获取卡池 + List smallPool = new ArrayList<>(SLingLongPool.map.get(type)); + // 玩家身上记录已抽中的索引id + Map> doubleRewardPoolInfo = user.getActivityManager().getDoubleRewardPoolInfo(); + List rewardPool = doubleRewardPoolInfo.getOrDefault(type,new ArrayList<>()); + // 已抽中的去除 + smallPool.removeIf(v->rewardPool.contains(v.getId())); + // 总权重和随机值 + int totalWeight = smallPool.stream().mapToInt(SLingLongPool::getGetRate).sum(); + int randomInt = MathUtils.randomInt(totalWeight); + + for (SLingLongPool pool : smallPool) { + // 中将 + if (randomInt <= pool.getGetRate()){ + // 物品id + rewards[type][0] = pool.getItemId()[0]; + // 物品数量 + rewards[type][1] = pool.getItemId()[1]; + // 中门 + if (pool.getItemId()[0] == 105){ + result = true; + // 更新数据用,已经抽中的需要记录 + rewardPool.add(pool.getItemId()[0]); + }else { + rewardPool.clear(); + } + // 返回给前端的抽中的id + hits.add(pool.getItemId()[0]); + } + randomInt -= pool.getGetRate(); + } + + // 外圈抽奖用,抽中全部 + if (rewardPool.size() >= SLingLongPool.map.get(type).size()){ + rewardPool.clear(); + } + + // 更新数据库 + doubleRewardPoolInfo.put(type,rewardPool); + user.getActivityManager().setDoubleRewardPoolInfo(doubleRewardPoolInfo); + + return result; + } } 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 9de4eee0b..6e66c8c1a 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 @@ -94,5 +94,5 @@ public interface ActivityType { int DEMON_TREASURE = 36;//降妖夺宝 int NEW_GENERAL_ATTACK = 200;//新将来袭 - + int QI_MEN_DUN_JIA = 67;//奇门遁甲 } 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 c8c00e210..6b3c989bd 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 @@ -72,6 +72,7 @@ public enum ActivityTypeEnum { EQUIP_UPLEVEL(ActivityType.EQUIP_UPLEVEL,EquipUpLevelActivity::new), TA_SUI_LING_XIAO(ActivityType.TA_SUI_LING_XIAO,TaSuiLingXiaoActivity::new), CHOICE_DRAW_CRAD(ActivityType.CHOICE_DRAW_CRAD,ChoiceDrawCardActivity::new), + QIMENDUNJIA_DRAW(ActivityType.QI_MEN_DUN_JIA,QiMenDunJiaActivity::new), ; private int type; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/QiMenDunJiaActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/QiMenDunJiaActivity.java new file mode 100644 index 000000000..e85385ade --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/QiMenDunJiaActivity.java @@ -0,0 +1,39 @@ +package com.ljsd.jieling.logic.activity; + +import com.ljsd.jieling.jbean.ActivityMission; +import com.ljsd.jieling.jbean.DoubleRewardPoolInfo; +import com.ljsd.jieling.logic.dao.root.User; +import config.SActivityRewardConfig; +import config.SLingLongPool; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author hj + * 奇门遁甲活动 + */ +@SuppressWarnings("ALL") +public class QiMenDunJiaActivity extends AbstractActivity { + + QiMenDunJiaActivity(int id) { + super(id); + } + + @Override + public void initActivity(User user) throws Exception { + ActivityMission mission = new ActivityMission(); + // 读表获取阶段奖励信息 + List configs = SActivityRewardConfig.getsActivityRewardConfigByActivityId(id); + List list = configs.stream().mapToInt(SActivityRewardConfig::getId).boxed().collect(Collectors.toList()); + // 初始化阶段奖励 + ActivityLogic.getInstance().initOtherMission(mission, list); + user.getActivityManager().getActivityMissionMap().put(id, mission); + // 卡池初始化 + user.getActivityManager().setDoubleRewardPoolInfo(new HashMap<>()); + LOGGER.info("奇门遁甲/玲珑宝阁 初始化..."+id); + } + +} diff --git a/tablemanager/src/main/java/config/SLingLongPool.java b/tablemanager/src/main/java/config/SLingLongPool.java new file mode 100644 index 000000000..27e3ef927 --- /dev/null +++ b/tablemanager/src/main/java/config/SLingLongPool.java @@ -0,0 +1,61 @@ +package config; + +import manager.STableManager; +import manager.Table; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Table(name ="LingLongPool") +public class SLingLongPool implements BaseConfig { + + private int id; + + private int activityId; + + private int[] itemId; + + private int getRate; + + private int position; + + /** + * key: 内圈外圈id value: 对象list + */ + public static Map> map = new HashMap<>(); + + @Override + public void init() throws Exception { + Map config = STableManager.getConfig(SLingLongPool.class); + config.values().forEach(v->{ + List longPools = map.getOrDefault(v.getPosition(), new ArrayList<>()); + longPools.add(v); + map.put(v.getPosition(),longPools); + }); + } + + + public int getId() { + return id; + } + + public int getActivityId() { + return activityId; + } + + public int[] getItemId() { + return itemId; + } + + public int getGetRate() { + return getRate; + } + + public int getPosition() { + return position; + } + + +} \ No newline at end of file From d6e2f5ffdde200c287402002cc4d03145cf64a76 Mon Sep 17 00:00:00 2001 From: duhui Date: Tue, 8 Jun 2021 17:52:23 +0800 Subject: [PATCH 02/12] =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E7=9B=91=E5=90=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jieling/logic/activity/ActivityLogic.java | 2 +- .../logic/activity/QiMenDunJiaActivity.java | 19 ++++++++ .../activity/event/QiMenDunJiaEvent.java | 44 +++++++++++++++++++ 3 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/QiMenDunJiaEvent.java 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 01d9d6cb0..fe1dbe981 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 @@ -1687,7 +1687,7 @@ public class ActivityLogic implements IEventHandler{ // 外圈抽奖 qiMenRandom(user, 1, rewards, hits); // 事件分发 - + Poster.getPoster().dispatchEvent(new QiMenDunJiaEvent(user.getId(),activityId,1)); } // 处理奖励 CommonProto.Drop.Builder drop = ItemUtil.dropPer(user, rewards, BIReason.QIMENDUNJIA_DRAW); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/QiMenDunJiaActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/QiMenDunJiaActivity.java index e85385ade..b8afbc1ad 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/QiMenDunJiaActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/QiMenDunJiaActivity.java @@ -2,6 +2,10 @@ package com.ljsd.jieling.logic.activity; import com.ljsd.jieling.jbean.ActivityMission; import com.ljsd.jieling.jbean.DoubleRewardPoolInfo; +import com.ljsd.jieling.logic.activity.event.IEvent; +import com.ljsd.jieling.logic.activity.event.Poster; +import com.ljsd.jieling.logic.activity.event.QiMenDunJiaEvent; +import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.logic.dao.root.User; import config.SActivityRewardConfig; import config.SLingLongPool; @@ -20,6 +24,7 @@ public class QiMenDunJiaActivity extends AbstractActivity { QiMenDunJiaActivity(int id) { super(id); + Poster.getPoster().listenEvent(this, QiMenDunJiaEvent.class); } @Override @@ -36,4 +41,18 @@ public class QiMenDunJiaActivity extends AbstractActivity { LOGGER.info("奇门遁甲/玲珑宝阁 初始化..."+id); } + @Override + public void onEvent(IEvent event) throws Exception { + // 类型验证 + if (!(event instanceof QiMenDunJiaEvent)) { + return; + } + // 获取信息 + QiMenDunJiaEvent drawCardEvent = (QiMenDunJiaEvent) event; + // 用户 + User user = UserManager.getUser(drawCardEvent.getUserId()); + // 更新进度 + update(user,drawCardEvent.getNum()); + } + } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/QiMenDunJiaEvent.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/QiMenDunJiaEvent.java new file mode 100644 index 000000000..6aba25de9 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/QiMenDunJiaEvent.java @@ -0,0 +1,44 @@ +package com.ljsd.jieling.logic.activity.event; + +/** + * @Author hj + * @Date 2021/5/26 11:05 + * @Description: + * @Version 1.0 + */ +public class QiMenDunJiaEvent implements IEvent { + + private int userId; + private int activityId; + private int num; + + public QiMenDunJiaEvent(int userId, int activityId, int num) { + this.userId = userId; + this.activityId = activityId; + this.num = num; + } + + public int getUserId() { + return userId; + } + + public void setUserId(int userId) { + this.userId = userId; + } + + public int getActivityId() { + return activityId; + } + + public void setActivityId(int activityId) { + this.activityId = activityId; + } + + public int getNum() { + return num; + } + + public void setNum(int num) { + this.num = num; + } +} From 16a9d3ae45cde45b0895a8f467ff2d069dbfba4b Mon Sep 17 00:00:00 2001 From: duhui Date: Tue, 15 Jun 2021 11:22:06 +0800 Subject: [PATCH 03/12] =?UTF-8?q?=E5=A5=87=E9=97=A8=E9=81=81=E7=94=B2?= =?UTF-8?q?=E5=8D=8F=E8=AE=AE=E8=A1=A5=E5=85=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../GetQiMenDunJiaHitListHandler.java | 44 +++++++++++++++++++ .../activity/QiMenDunJiaDrawHandler.java | 2 + 2 files changed, 46 insertions(+) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/handler/activity/GetQiMenDunJiaHitListHandler.java diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/GetQiMenDunJiaHitListHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/GetQiMenDunJiaHitListHandler.java new file mode 100644 index 000000000..e69b77b0a --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/GetQiMenDunJiaHitListHandler.java @@ -0,0 +1,44 @@ +package com.ljsd.jieling.handler.activity; + +import com.google.protobuf.GeneratedMessage; +import com.ljsd.jieling.exception.ErrorCode; +import com.ljsd.jieling.exception.ErrorCodeException; +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.activity.ActivityLogic; +import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.root.User; +import org.springframework.stereotype.Component; +import rpc.protocols.ActivityProto; +import rpc.protocols.MessageTypeProto; + +import java.util.*; + +/** + * @Author hj + * @Date 2021/6/8 15:40 + * @Description: 奇门遁甲/玲珑宝阁抽奖 + * @Version 1.0 + */ +@Component +public class GetQiMenDunJiaHitListHandler extends BaseHandler { + + @Override + public MessageTypeProto.MessageType getMessageCode() { + return null; + } + + public GeneratedMessage processWithProto(int uid, ActivityProto.qiMenDunJiaHitListRequest proto) throws Exception { + // 用户信息 + User user = UserManager.getUser(uid); + if (user == null) { + throw new ErrorCodeException(ErrorCode.UNKNOWN); + } + + // 获取全部已经抽中的id列表 + Set list = new HashSet<>(); + Map> poolInfo = user.getActivityManager().getDoubleRewardPoolInfo(); + poolInfo.values().forEach(list::addAll); + + return ActivityProto.qiMenDunJiaHitListResponse.newBuilder().addAllHitList(list).build(); + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/QiMenDunJiaDrawHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/QiMenDunJiaDrawHandler.java index 08d25277e..9ad341038 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/QiMenDunJiaDrawHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/QiMenDunJiaDrawHandler.java @@ -7,6 +7,7 @@ import com.ljsd.jieling.handler.BaseHandler; import com.ljsd.jieling.logic.activity.ActivityLogic; import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.logic.dao.root.User; +import org.springframework.stereotype.Component; import rpc.protocols.ActivityProto; import rpc.protocols.MessageTypeProto; @@ -16,6 +17,7 @@ import rpc.protocols.MessageTypeProto; * @Description: 奇门遁甲/玲珑宝阁抽奖 * @Version 1.0 */ +@Component public class QiMenDunJiaDrawHandler extends BaseHandler { @Override From 3afb198cf99a730361e749646385fbec1d39df4f Mon Sep 17 00:00:00 2001 From: duhui Date: Mon, 28 Jun 2021 16:24:05 +0800 Subject: [PATCH 04/12] =?UTF-8?q?=E5=A5=87=E9=97=A8=E9=81=81=E7=94=B2=20?= =?UTF-8?q?=E5=8D=8F=E8=AE=AE=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jieling/handler/activity/GetQiMenDunJiaHitListHandler.java | 2 +- .../ljsd/jieling/handler/activity/QiMenDunJiaDrawHandler.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/GetQiMenDunJiaHitListHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/GetQiMenDunJiaHitListHandler.java index e69b77b0a..91d284507 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/GetQiMenDunJiaHitListHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/GetQiMenDunJiaHitListHandler.java @@ -24,7 +24,7 @@ public class GetQiMenDunJiaHitListHandler extends BaseHandler Date: Tue, 29 Jun 2021 11:27:28 +0800 Subject: [PATCH 05/12] =?UTF-8?q?=E5=A5=87=E9=97=A8=E9=81=81=E7=94=B22.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ljsd/jieling/tools/Utils.java | 9 ++++++- .../ljsd/jieling/jbean/ActivityManager.java | 2 +- .../jieling/logic/activity/ActivityLogic.java | 25 ++++++++++--------- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/netty/src/main/java/com/ljsd/jieling/tools/Utils.java b/netty/src/main/java/com/ljsd/jieling/tools/Utils.java index 0b2176eb4..a952a4fc6 100644 --- a/netty/src/main/java/com/ljsd/jieling/tools/Utils.java +++ b/netty/src/main/java/com/ljsd/jieling/tools/Utils.java @@ -4,6 +4,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.security.MessageDigest; +import java.util.List; import java.util.Random; /** @@ -90,7 +91,13 @@ public class Utils { return randStr; } - + public static int[][] changeList(List list){ + int[][] objects = new int[list.size()][]; + for (int i = 0; i < list.size(); i++) { + objects[i] = list.get(i); + } + return objects; + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/jbean/ActivityManager.java b/serverlogic/src/main/java/com/ljsd/jieling/jbean/ActivityManager.java index 1d3fb5c52..7713f9bbb 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/jbean/ActivityManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/jbean/ActivityManager.java @@ -31,7 +31,7 @@ public final class ActivityManager extends MongoBase { this.luckWheel = new LuckWheelMission(_o_.luckWheel); this.luckWheelAdvance = new LuckWheelMission(_o_.luckWheelAdvance); this.subRewardPoolInfo = new SubRewardPoolInfo(_o_.subRewardPoolInfo); - this.doubleRewardPoolInfo = new HashMap<>(); + this.doubleRewardPoolInfo = new HashMap<>(_o_.doubleRewardPoolInfo); } public Map getActivityMissionMap() { 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 fe1dbe981..27fcf9ab9 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 @@ -25,6 +25,7 @@ import com.ljsd.jieling.logic.player.PlayerLogic; import com.ljsd.jieling.logic.store.StoreLogic; import com.ljsd.jieling.netty.cocdex.PacketNetData; import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.tools.Utils; import com.ljsd.jieling.util.InnerMessageUtil; import com.ljsd.jieling.util.ItemUtil; import com.ljsd.jieling.util.MessageUtil; @@ -1680,16 +1681,17 @@ public class ActivityLogic implements IEventHandler{ public ActivityProto.qiMenDunJiaDrawResponse qiMenDunJiaDraw(User user,int activityId) throws Exception { ActivityProto.qiMenDunJiaDrawResponse.Builder response = ActivityProto.qiMenDunJiaDrawResponse.newBuilder(); ArrayList hits = new ArrayList<>(); - int[][] rewards = new int[2][]; + List list = new ArrayList<>(); // 根据返回判断是否需要抽外圈 - boolean result = qiMenRandom(user, 2, rewards, hits); + boolean result = qiMenRandom(user, 2, list, hits); if (result){ // 外圈抽奖 - qiMenRandom(user, 1, rewards, hits); + qiMenRandom(user, 1, list, hits); // 事件分发 Poster.getPoster().dispatchEvent(new QiMenDunJiaEvent(user.getId(),activityId,1)); } // 处理奖励 + int[][] rewards = Utils.changeList(list); CommonProto.Drop.Builder drop = ItemUtil.dropPer(user, rewards, BIReason.QIMENDUNJIA_DRAW); response.setDrop(drop).addAllIdList(hits); @@ -1700,11 +1702,11 @@ public class ActivityLogic implements IEventHandler{ * 奇门遁甲随机奖励 * @param user 玩家 * @param type 内圈,外圈 - * @param rewards 奖励的二维数组 + * @param list 奖励的二维数组 * @param hits 抽中的索引id * @return true:需要进行外圈抽奖 false:不需要外圈抽奖 */ - private boolean qiMenRandom(User user, int type, int[][] rewards, List hits){ + private boolean qiMenRandom(User user, int type, List list, List hits){ boolean result = false; // 根据类型获取卡池 @@ -1721,20 +1723,19 @@ public class ActivityLogic implements IEventHandler{ for (SLingLongPool pool : smallPool) { // 中将 if (randomInt <= pool.getGetRate()){ - // 物品id - rewards[type][0] = pool.getItemId()[0]; - // 物品数量 - rewards[type][1] = pool.getItemId()[1]; + // 物品 + list.add(pool.getItemId()); // 中门 if (pool.getItemId()[0] == 105){ result = true; // 更新数据用,已经抽中的需要记录 - rewardPool.add(pool.getItemId()[0]); - }else { rewardPool.clear(); + }else { + rewardPool.add(pool.getId()); } // 返回给前端的抽中的id - hits.add(pool.getItemId()[0]); + hits.add(pool.getId()); + break; } randomInt -= pool.getGetRate(); } From 80b1659cb17ad2884d58b62ba05050f2c78d2b64 Mon Sep 17 00:00:00 2001 From: duhui Date: Mon, 12 Jul 2021 17:45:07 +0800 Subject: [PATCH 06/12] =?UTF-8?q?=E5=BF=83=E6=84=BF=E6=8A=BD=E5=8D=A1?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jieling/handler/GetPlayerInfoHandler.java | 2 +- .../ljsd/jieling/logic/dao/HeroManager.java | 33 ++++++-- .../ljsd/jieling/logic/hero/HeroLogic.java | 78 ++++++++++--------- tablemanager/src/main/java/config/SCHero.java | 6 ++ 4 files changed, 74 insertions(+), 45 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java index bf3726529..c1f9384a2 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java @@ -270,7 +270,7 @@ public class GetPlayerInfoHandler extends BaseHandler{ int value = SSpecialConfig.getIntegerValue(SSpecialConfig.UNLOCKCARDWISH); if (num < value){ // 修改次数 - user.getHeroManager().putRandomCount(1,value); + user.getHeroManager().putRandomType(1,value); } } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/HeroManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/HeroManager.java index 3d13da815..5ae33e11e 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/HeroManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/HeroManager.java @@ -1,17 +1,11 @@ package com.ljsd.jieling.logic.dao; import com.ljsd.common.mogodb.MongoBase; -import com.ljsd.jieling.logic.OnlineUserManager; import com.ljsd.jieling.logic.activity.event.Poster; import com.ljsd.jieling.logic.activity.event.RemoveHeroEvent; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.hero.HongMengAttributeEnum; -import com.ljsd.jieling.network.session.ISession; -import com.ljsd.jieling.util.CBean2Proto; -import com.ljsd.jieling.util.MessageUtil; import config.SSpecialConfig; -import rpc.protocols.HeroInfoProto; -import rpc.protocols.MessageTypeProto; import java.util.*; @@ -83,6 +77,11 @@ public class HeroManager extends MongoBase { */ private Map randomCountByType = new HashMap<>(); + /** + * key: 招募类型 value:< key: 星级 value: 数量 > + */ + private Map> randomCountByStar = new HashMap<>(); + public Map getRandomCountByType() { return randomCountByType; } @@ -92,12 +91,30 @@ public class HeroManager extends MongoBase { updateString("randomCountByType", randomCountByType); } - public void putRandomCount(int type,int value) { + public void putRandomType(int type,int value) { randomCountByType.put(type,value); updateString("randomCountByType."+type, value); } - public void updateRandCount(int type,int count){ + public Map> getRandomCountByStar() { + return randomCountByStar; + } + + public Map getRandomStar(int type) { + return randomCountByStar.getOrDefault(type,new HashMap<>()); + } + + public void setRandomCountByStar(Map> randomCountByStar) { + this.randomCountByStar = randomCountByStar; + updateString("randomCountByStar", randomCountByStar); + } + + public void putRandomStar(int type,Map starMap) { + randomCountByStar.put(type,starMap); + updateString("randomCountByStar."+type, starMap); + } + + public void updateRandCount(int type, int count){ updateString("totalCount." + type, count); totalCount.put(type,count); } 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 566ed99b7..b7dcc7792 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 @@ -383,19 +383,33 @@ public class HeroLogic{ */ private int[] drawCard(User user, SLotteryRewardConfig sLotteryRewardConfig, SLotterySetting sLotterySetting){ HeroManager heroManager = user.getHeroManager(); - // 限制次数 + // 参数 + int type = sLotterySetting.getLotteryType(); + int[] reward = sLotteryRewardConfig.getReward(); + // 限制满足次数 int value = SSpecialConfig.getIntegerValue(SSpecialConfig.UNLOCKCARDWISH); // 对应卡池抽奖次数 - Integer num = heroManager.getRandomCountByType().getOrDefault(sLotterySetting.getLotteryType(),0); + Integer num = heroManager.getRandomCountByType().getOrDefault(type,0); // 心愿抽卡 int[] result; - if (sLotterySetting.getLotteryType() == 1 && num >= value){ - result = wishDrawCardCheck(user,sLotteryRewardConfig.getReward()); + if (type == 1 && num >= value){ + // 钻石抽卡并且次数满足 + result = wishDrawCardCheck(user,reward,type); }else { - result = sLotteryRewardConfig.getReward(); + result = reward; } - //记录次数 - heroManager.putRandomCount(sLotterySetting.getLotteryType(),num+1); + //记录卡池抽奖次数 + heroManager.putRandomType(type,num+result[1]); + // 记录卡池,抽奖星级次数 + SCHero scHero = SCHero.getsCHero().get(reward[0]); + if (scHero != null){ + // 获取类型抽奖次数 + Map randomStar = heroManager.getRandomStar(type); + // 更新次数 + randomStar.put(scHero.getStar(),randomStar.getOrDefault(scHero.getStar(),0)+result[1]); + heroManager.putRandomStar(type,randomStar); + } + return result; } @@ -405,7 +419,7 @@ public class HeroLogic{ * @param item * @return */ - private int[] wishDrawCardCheck(User user,int[] item){ + private int[] wishDrawCardCheck(User user,int[] item,int type){ // 查找物品 SItem sItem = SItem.getsItemMap().get(item[0]); // 非英雄奖励直接返回 @@ -417,42 +431,34 @@ public class HeroLogic{ if (scHero.getStar() < 5){ return item; } - /* ======================= 中不中心愿 ======================= */ - // 随机权重 - int totalNum = 10000; - int anInt = MathUtils.randomInt(totalNum); - // 单个格子权重 - int value = SSpecialConfig.getIntegerValue(SSpecialConfig.CARDWISHBLOCKRATE); - // 获取玩家现在的心愿格子信息 - Map cardInfoMap = user.getHeroManager().getWishDrawCardInfoMap(); - // 中将权重值 - int weight = cardInfoMap.size() * value; - // 未中奖 - if (anInt > weight){ + // 获取钻石抽奖抽中五星的次数 + int num = user.getHeroManager().getRandomStar(type).getOrDefault(5, 0)+1; + boolean randomBol = (num - 1) % 3 == 0; + if (!randomBol){ + // 不到次数,不走心愿 return item; } - /*======================== 中心愿随机奖励 ========================*/ - + // 心愿格子信息 + HashMap cardInfoMap = user.getHeroManager().getWishDrawCardInfoMap(); + // 空格子权重 + int empty = SSpecialConfig.getIntegerValue(SSpecialConfig.CARDWISHBLOCKRATE); // 计算权重map HashMap map = new HashMap<>(); - for (Integer key : cardInfoMap.keySet()) { - if (cardInfoMap.get(key).getStatus() == 1){ - // 已经抽中得格子去除 - weight-=value; - continue; + cardInfoMap.forEach((k,v)->{ + if (v.getStatus() == 0 && v.getHeroTid() != 0){ + // 英雄格子 + SCHero hero = SCHero.getsCHero().get(v.getHeroTid()); + map.put(k,hero.getWeight()); + }else { + // 空格子 + map.put(k,empty); } - map.put(key,value); - } - - // 全部抽中 - if (map.isEmpty() || weight == 0){ - return item; - } - + }); + // 随机权重 + int weight = map.values().stream().mapToInt(Integer::intValue).sum(); int randomInt = MathUtils.randomInt(weight); - // 遍历权重 for (Map.Entry entry : map.entrySet()) { if (randomInt <= entry.getValue()){ diff --git a/tablemanager/src/main/java/config/SCHero.java b/tablemanager/src/main/java/config/SCHero.java index fa4188d4d..547c5f3ad 100644 --- a/tablemanager/src/main/java/config/SCHero.java +++ b/tablemanager/src/main/java/config/SCHero.java @@ -60,6 +60,8 @@ public class SCHero implements BaseConfig{ private int maxLevel; + private int weight; + private Map secondaryFactorMap; private Map> skillListByStar; @@ -348,4 +350,8 @@ public class SCHero implements BaseConfig{ public int getMaxLevel() { return maxLevel; } + + public int getWeight() { + return weight; + } } From 0092fc6886f80c2635e341ab2b9a6b02315a3ccd Mon Sep 17 00:00:00 2001 From: xuexinpeng Date: Tue, 13 Jul 2021 10:30:39 +0800 Subject: [PATCH 07/12] =?UTF-8?q?=E5=B1=B1=E6=B2=B3=E8=AF=95=E7=82=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../logic/activity/HardStageExerciseActivity.java | 11 +++++------ .../ljsd/jieling/logic/hardStage/HardStageLogic.java | 2 +- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/HardStageExerciseActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/HardStageExerciseActivity.java index 68e1cbdbd..3fb5fa426 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/HardStageExerciseActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/HardStageExerciseActivity.java @@ -13,7 +13,7 @@ import com.ljsd.jieling.network.session.ISession; import java.util.Map; -//暂时不上 先注释 +//山河试炼 public class HardStageExerciseActivity extends AbstractActivity{ public HardStageExerciseActivity(int id) { super(id); @@ -41,17 +41,16 @@ public class HardStageExerciseActivity extends AbstractActivity{ if(user == null){ return false; } - //checkState(user); - //super.takeReward(session,missionId); - return true; + checkState(user); + return super.takeReward(session,missionId); } /** * 活动结束邮件 */ @Override public void onActivityEndDealReward(User user) throws Exception { - //checkState(user); - //super.onActivityEndDealReward(user); + checkState(user); + super.onActivityEndDealReward(user); } //山河社稷功能已上 活动后上 为了保证老玩家这个活动数据正常 特在此容错 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/hardStage/HardStageLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/hardStage/HardStageLogic.java index 2f3148561..aaf161af6 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/hardStage/HardStageLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/hardStage/HardStageLogic.java @@ -457,7 +457,7 @@ public class HardStageLogic { if(n.getType()== 1){ n.setState(7); chapter.addStars(3); - Poster.getPoster().dispatchEvent(new HardStageExerciseEvent(user.getId(),3)); + //Poster.getPoster().dispatchEvent(new HardStageExerciseEvent(user.getId(),3)); user.getHardStageManager().updateString("chapterMap." + chapter.getChapterId(), chapter); //user.getHardStageManager().updateString("chapterMap",user.getHardStageManager().getChapterMap()); From a4ad63b731fdacec6b31d041a748d2f64f3dec1d Mon Sep 17 00:00:00 2001 From: duhui Date: Wed, 14 Jul 2021 17:11:57 +0800 Subject: [PATCH 08/12] =?UTF-8?q?=E8=B6=85=E5=80=BC=E5=9F=BA=E9=87=91?= =?UTF-8?q?=E6=B4=BB=E5=8A=A8=E6=94=B9=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jieling/handler/GetPlayerInfoHandler.java | 4 +- .../jieling/logic/GlobalDataManaager.java | 4 +- .../logic/activity/AbstractActivity.java | 44 ++- .../jieling/logic/activity/ActivityLogic.java | 31 +-- .../jieling/logic/activity/ActivityType.java | 3 + .../logic/activity/ActivityTypeEnum.java | 3 +- .../logic/activity/LuckyGetActivity.java | 1 + .../logic/activity/SuperBoxActivity.java | 2 +- .../logic/activity/SuperFundActivity.java | 262 ++++++++++++++++++ .../logic/activity/TreasureActivity.java | 26 +- .../logic/activity/event/SuperBoxEvent.java | 15 +- .../jieling/logic/store/BuyGoodsNewLogic.java | 78 +----- .../src/main/java/config/SLuxuryFund.java | 23 +- 13 files changed, 369 insertions(+), 127 deletions(-) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SuperFundActivity.java diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java index bf3726529..967e8a0a3 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/GetPlayerInfoHandler.java @@ -225,7 +225,9 @@ public class GetPlayerInfoHandler extends BaseHandler{ ReportUtil.onReportEvent(user, ReportEventEnum.APP_LOGIN.getType()); try { //hotfix - Poster.getPoster().dispatchEvent(new SuperBoxEvent(user.getId(),-1)); + Poster.getPoster().dispatchEvent(new SuperBoxEvent(user.getId(),SuperBoxEvent.default_id)); + // 超值基金,老玩家兼容 + Poster.getPoster().dispatchEvent(new SuperBoxEvent(user.getId(),SuperBoxEvent.fund_old_user)); user.getUserMissionManager().onGameEvent(user,GameEvent.DAILY_TASK_TYPE,0,user); MessageUtil.sendIndicationMessage(iSession, 1, MessageTypeProto.MessageType.WorldLevelIndication_VALUE, PlayerInfoProto.WorldLevelIndication.newBuilder().setWorldLeve(GlobleSystemLogic.getGloableWorldLeveCache()).build(), true); MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.GET_PLAYERINFO_RESPONSE_VALUE, getPlayerInfoResponse, true); 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 9c733d8a4..16ffde1a3 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java @@ -382,8 +382,8 @@ public class GlobalDataManaager implements IManager { // 道具刷新 BuyGoodsNewLogic.refreshWelfareState(user); user.getUserMissionManager().onGameEvent(user, GameEvent.LOGIN_GAME,0); - // 惊喜礼盒,事件推送 - Poster.getPoster().dispatchEvent(new SuperBoxEvent(user.getId(),-1)); + // 惊喜礼盒,超值基金,零点逻辑(可以同用一个状态) + Poster.getPoster().dispatchEvent(new SuperBoxEvent(user.getId(),SuperBoxEvent.fund_zero_init)); // 心愿格子信息刷新 HeroLogic.getInstance().resetWishDrawCardInfoMap(user); } 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 45c2b296e..ed03887d7 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 @@ -84,7 +84,7 @@ public abstract class AbstractActivity implements IActivity, IEventHandler { @Override public void update(User user, int count) { ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(id); - if( null == activityMission){ + if(null == activityMission){ return; } updateProgressWithUser(user, activityMission, count); @@ -114,6 +114,32 @@ public abstract class AbstractActivity implements IActivity, IEventHandler { } } + /** + * 检查活动是否完成或者可以领取 + * @param uid + * @param activityId + * @param activityMission + * @return + */ + public boolean checkActivityMissionFinishAndTake(int uid,int activityId,ActivityMission activityMission) { + Map activityProgressInfoMap = activityMission.getActivityMissionMap(); + if (activityProgressInfoMap.isEmpty()) { + return false; + } + for (Map.Entry item : activityProgressInfoMap.entrySet()) { + ActivityProgressInfo activityProgressInfo = item.getValue(); + int missionStatus = activityProgressInfo.getState(); + if (missionStatus == ActivityType.WILL_TAKE) { + return false; + } + } + SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(activityId); + if(sGlobalActivity.getResetGrade()==0){ + activityMission.setActivityState(ActivityType.FINISH_STATE); + Poster.getPoster().dispatchEvent(new ActivityStateChangeEvent(uid,activityId,ActivityType.FINISH_STATE)); + } + return true; + } /** * 领奖默认方法 走统一奖励配置表 @@ -151,7 +177,7 @@ public abstract class AbstractActivity implements IActivity, IEventHandler { CommonProto.Drop.Builder drop = ItemUtil.drop(user, reward, BIReason.TAKE_ACTIVITY_REWARD); checkAndSetProgress(activityMission, activityProgressInfo, missionId); SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(id); - if (null != sGlobalActivity && ActivityLogic.getInstance().checkActivityMissionFinishAndTaked(session.getUid(),id, activityMission) && sGlobalActivity.getResetGrade() == 1) { + if (null != sGlobalActivity && checkActivityMissionFinishAndTake(session.getUid(),id, activityMission) && sGlobalActivity.getResetGrade() == 1) { reSetValue(user); if(sGlobalActivity.getType() != ActivityType.OnlineReward) { ActivityMission newmiss = user.getActivityManager().getActivityMissionMap().get(id); @@ -162,7 +188,6 @@ public abstract class AbstractActivity implements IActivity, IEventHandler { sendActivityProgress(session, activityMission, Collections.singleton(missionId)); } } -// KtEventUtils.onKtEvent(user, ParamEventBean.UserActivityEvent, id, missionId); reportTakeActivityReward(user,reward,missionId); PlayerInfoProto.TakeActivityRewardResponse build = PlayerInfoProto.TakeActivityRewardResponse.newBuilder().setDrop(drop).build(); MessageUtil.sendMessage(session, 1, rewardResponseValue, build, true); @@ -175,6 +200,12 @@ public abstract class AbstractActivity implements IActivity, IEventHandler { ReportUtil.onReportEvent(user, ReportEventEnum.COMPLETE_ACTIVITY.getType(),String.valueOf(id),String.valueOf(missionId),itemId,itemNum,new Date()); } + protected void reportTakeActivityReward(User user, List reward, int missionId) throws Exception { + for (int[][] inits : reward) { + reportTakeActivityReward(user,inits,missionId); + } + } + /** * 领取所有活动奖励 有的活动是重置类型 迭代处理 */ @@ -346,6 +377,13 @@ public abstract class AbstractActivity implements IActivity, IEventHandler { } } + public void sendActivityProgress(User user, ActivityMission activityMission, Set filterMissId) { + ISession session = OnlineUserManager.sessionMap.get(user.getId()); + if (session != null){ + sendActivityProgress(session,activityMission,filterMissId); + } + } + public void setOpenState(User user,int openState){ ActivityMission activityMission = user.getActivityManager().getActivityMissionMap().get(id); 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 d81a2b484..f7bfe3fa3 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 @@ -288,6 +288,7 @@ public class ActivityLogic implements IEventHandler{ activityMission.setOpenType(1); activityMission.setV(0); activityMission.setActivityState(ActivityType.OPEN_STATE); + activityMission.setCreatTime(TimeUtils.now()); } public LuckWheelMission getLuckWheel(ActivityManager activityManager, int type) { @@ -741,37 +742,13 @@ public class ActivityLogic implements IEventHandler{ if (activityMission.getActivityState() != ActivityType.OPEN_STATE) { continue; } - checkActivityMissionFinishAndTaked(user.getId(),item.getKey(), activityMission); - } - } - - public boolean checkActivityMissionFinishAndTaked(int uid,int activityId, ActivityMission activityMission) { - Map activityProgressInfoMap = activityMission.getActivityMissionMap(); - for (Map.Entry item : activityProgressInfoMap.entrySet()) { - ActivityProgressInfo activityProgressInfo = item.getValue(); - int missionStatus = activityProgressInfo.getState(); - if (missionStatus == ActivityType.WILL_TAKE) { - return false; - } - if (SGlobalActivity.getsGlobalActivityMap().get(activityId).getType() == ActivityType.TREASURE) { - if (missionStatus == ActivityType.HAD_TAKED) { - return false; - } + AbstractActivity activityType = ActivityTypeEnum.getActicityType(item.getKey()); + if (activityType != null){ + activityType.checkActivityMissionFinishAndTake(user.getId(),item.getKey(), activityMission); } } - if (activityProgressInfoMap.isEmpty()) { - return false; - } - SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(activityId); - if(sGlobalActivity.getResetGrade()==0){ - activityMission.setActivityState(ActivityType.FINISH_STATE); - Poster.getPoster().dispatchEvent(new ActivityStateChangeEvent(uid,activityId,ActivityType.FINISH_STATE)); - } - - return true; } - public int getInitActivityMissionProgress(int activityId) { int defalutProgress = 0; switch (activityId) { 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 0a16db98a..f15b129e2 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 @@ -100,4 +100,7 @@ public interface ActivityType { int SUPER_DISCOUNT_SKIN = 73;//特惠神装 int HERO_STAR = 500; + int SUPERFUND128 = 78;//超值基金128 + int SUPERFUND328 = 79;//超值基金328 + } 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 a67e37b06..cfd48399e 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 @@ -77,7 +77,8 @@ public enum ActivityTypeEnum { HERO_STAR(ActivityType.HERO_STAR,HeroStarActivity::new), SUPER_DISCOUNT_SKIN(ActivityType.SUPER_DISCOUNT_SKIN,SuperBoxActivity::new), MISTYTRIP(ActivityType.MISTY_TRIP,MistyTripActivity::new), - + SUPERFUND128(ActivityType.SUPERFUND128,SuperFundActivity::new),//超值基金128 + SUPERFUND328(ActivityType.SUPERFUND328,SuperFundActivity::new),//超值基金328 ; private int type; private Function toActivityFunction; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/LuckyGetActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/LuckyGetActivity.java index a04437e2a..8ec9dae64 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/LuckyGetActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/LuckyGetActivity.java @@ -60,6 +60,7 @@ public class LuckyGetActivity extends AbstractActivity{ } } + @Override public boolean takeReward(ISession session, int missionId) throws Exception { if(missionId!=-1){ return super.takeReward(session, missionId); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SuperBoxActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SuperBoxActivity.java index 1d83ac3c0..8d5d4b6d2 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SuperBoxActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SuperBoxActivity.java @@ -79,7 +79,7 @@ public class SuperBoxActivity extends AbstractActivity { * @param missionMap */ private void giftHandle(User user, int giftId){ - if (giftId == -1){ + if (giftId < 0){ // 非礼包处理 return; } 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 new file mode 100644 index 000000000..fb920f225 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/SuperFundActivity.java @@ -0,0 +1,262 @@ +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.activity.event.IEvent; +import com.ljsd.jieling.logic.activity.event.Poster; +import com.ljsd.jieling.logic.activity.event.SuperBoxEvent; +import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.logic.store.newRechargeInfo.NewRechargeInfo; +import com.ljsd.jieling.logic.store.newRechargeInfo.bean.AbstractWelfareBag; +import com.ljsd.jieling.logic.store.newRechargeInfo.bean.ReceiveWelfareBag; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.util.ItemUtil; +import com.ljsd.jieling.util.MessageUtil; +import config.SLuxuryFund; +import rpc.protocols.CommonProto; +import rpc.protocols.PlayerInfoProto; +import util.TimeUtils; + +import java.security.Key; +import java.time.Year; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author hj + * 超值基金活动 + */ +public class SuperFundActivity extends AbstractActivity { + + SuperFundActivity(int id) { + super(id); + Poster.getPoster().listenEvent(this, SuperBoxEvent.class); + } + + @Override + public void initActivity(User user) { + ActivityMission mission = new ActivityMission(); + // 读表获取阶段奖励信息 + Map fundMap = SLuxuryFund.typeMap.getOrDefault(id, new HashMap<>()); + // 初始化阶段奖励 + ActivityLogic.getInstance().initOtherMission(mission, new ArrayList<>(fundMap.keySet())); + user.getActivityManager().getActivityMissionMap().put(id, mission); + LOGGER.info("超值基金初始化...{}",id); + } + + @Override + public void onEvent(IEvent event) throws Exception { + // 类型验证 + if (!(event instanceof SuperBoxEvent)) { + return; + } + // 获取信息 + SuperBoxEvent event1 = (SuperBoxEvent) event; + User user = UserManager.getUser(event1.getUserId()); + // 老玩家兼容 + compatibleOldUser(user,event1.getGiftId()); + // 状态初始化 + initState(user,event1.getGiftId()); + // 礼包处理 + updateValue(user); + // 状态刷新 + updateState(user); + // 状态推送 + sendActivityProgress(user, user.getActivityManager().getActivityMissionMap().get(id), null); + } + + /** + * 礼包处理 + * @param user + */ + private void updateValue(User user) throws Exception { + // 活动详情 + ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(id); + if (mission == null || mission.getV() == 2){ + // 活动不存在或者已经购买了 + return; + } + // 获取活动信息 + ReceiveWelfareBag bag = getBagInfo(user); + // 已购买月卡 + if (bag.isOpen()){ + mission.setV(1); + } + // 已购买基金 + if (bag.isBought()){ + mission.setV(2); + } + } + + @Override + public boolean takeReward(ISession session, int missionId) throws Exception { + User user = UserManager.getUser(session.getUid()); + // activity check + ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(id); + Map infoMap =getMissionMap(mission); + // 处理状态 + updateState(user); + // 获取奖励 + Map fundMap = SLuxuryFund.typeMap.get(id); + List rewards = new ArrayList<>(); + infoMap.forEach((k,v)->{ + // 可以领取得奖励 + if (v.getProgrss() == 1){ + SLuxuryFund fund = fundMap.get(k); + rewards.add(fund.getReward()); + // 修改状态 + v.setState(1); + mission.getActivityMissionMap().put(k,v); + } + }); + // 已领取全部奖励 + if (rewards.isEmpty()){ + throw new ErrorCodeException(ErrorCode.newDefineCode("活动奖励已经领取")); + } + // reward + CommonProto.Drop.Builder drop = ItemUtil.drop(user, rewards, BIReason.TAKE_ACTIVITY_REWARD); + PlayerInfoProto.TakeActivityRewardResponse build = PlayerInfoProto.TakeActivityRewardResponse.newBuilder().setDrop(drop).build(); + MessageUtil.sendMessage(session, 1, rewardResponseValue, build, true); + // 状态推送 + sendActivityProgress(session, mission, null); + // 打点上报 + reportTakeActivityReward(user,rewards,missionId); + return true; + } + + /** + * 修改详细奖励状态 + * @param user + * @throws ErrorCodeException + */ + private void updateState(User user) throws Exception { + // 获取礼包信息 + AbstractWelfareBag bag = getBagInfo(user); + if (bag.getLastBuyTime() == 0){ + return; + } + // 间隔天数,购买当天算第一天,所以需要+1 + int days = TimeUtils.differentDays(bag.getLastBuyTime(), TimeUtils.getTodayZero())+1; + // 活动信息 + ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(id); + Map infoMap = getMissionMap(mission); + // 遍历 + infoMap.forEach((k,v)->{ + // 已领取得不做处理 + if (v.getState() == 0){ + // 满足天数修改状态 + if (days >= k){ + v.setProgrss(1); + } + // 入库 + mission.getActivityMissionMap().put(k,v); + } + }); + } + + /** + * 初始化状态 + * @param user + * @param gId + * @throws ErrorCodeException + */ + private void initState(User user,int gId) throws Exception { + if (gId != SuperBoxEvent.fund_zero_init){ + // 不是零点得逻辑 + return; + } + // 活动信息 + ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(id); + Map infoMap = getMissionMap(mission); + // 获取已经领取得状态 + long count = infoMap.values().stream().filter(v -> v.getState() == 1).count(); + // 全部领取得话 + if (count == infoMap.size()){ + // 重置活动信息 + reSetValue(user); + } + } + + /** + * 老玩家兼容 + * @param user + * @param gId + * @throws ErrorCodeException + */ + private void compatibleOldUser(User user,int gId) throws Exception { + if (gId != SuperBoxEvent.fund_old_user){ + // 不是老玩家兼容逻辑 + return; + } + // 获取礼包信息 + ReceiveWelfareBag bag = getBagInfo(user); + if (bag.getGetRewardTime() == 0){ + // 未领取过 + return; + } + // 活动信息 + ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(id); + Map infoMap = getMissionMap(mission); + // 领取得天数 + int days = TimeUtils.differentDays(bag.getGetRewardTime(), TimeUtils.getTodayZero())+1; + // 遍历 + infoMap.forEach((k,v)->{ + // 已领取得不做处理 + if (k >= days){ + v.setState(1); + mission.getActivityMissionMap().put(k,v); + } + }); + } + + @Override + public void reSetValue(User user) throws Exception { + // 活动信息重置 + ActivityManager activityManager = user.getActivityManager(); + activityManager.getActivityMissionMap().remove(id); + initActivity(user); + // 礼包信息重置 + ReceiveWelfareBag bagInfo = getBagInfo(user); + bagInfo.refresh(); + } + + /** + * 获取活动单个页签信息 + * @param mission + * @return + * @throws Exception + */ + private Map getMissionMap(ActivityMission mission) throws Exception{ + Map infoMap = Optional.ofNullable(mission).map(ActivityMission::getActivityMissionMap).orElse(new HashMap<>()); + if (infoMap.isEmpty()){ + throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE,"超值基金活动数据错误:"+id); + } + return infoMap; + } + + /** + * 获取礼包信息 + * @param user + * @return + * @throws Exception + */ + private ReceiveWelfareBag getBagInfo(User user) throws Exception{ + ReceiveWelfareBag bag = (ReceiveWelfareBag)Optional.ofNullable(user.getPlayerInfoManager().getNewRechargeInfo().getReceiveMap()).map(v -> v.get(id)).orElse(null); + if (bag == null){ + throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE,"超值基金礼包信息错误:"+id); + } + return bag; + } + + @Override + public boolean checkActivityMissionFinishAndTake(int uid, int activityId, ActivityMission activityMission) { + return false; + } + +} 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 fffee0d0d..bc4699a87 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 @@ -7,6 +7,8 @@ import com.ljsd.jieling.globals.BIReason; 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.ActivityStateChangeEvent; +import com.ljsd.jieling.logic.activity.event.Poster; import com.ljsd.jieling.logic.dao.PlayerManager; import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.logic.dao.VipInfo; @@ -52,14 +54,12 @@ public class TreasureActivity extends AbstractActivity { id=sRechargeCommodityConfig.getId(); } } -// user.getPlayerInfoManager().getRechargeInfo().updateBuyGoodsTimes(id,0); } 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()); //戒灵秘宝改为青龙秘宝,只有周任务和月任务 2020.8.14 - //user.getUserMissionManager().onGameEvent(user, GameEvent.TREASH_REFRESH, sGlobalActivity.getId()); ActivityMission activityMission = new ActivityMission(); activityMission.setActivityState(1); List levels = new ArrayList<>(STreasureSunlongConfig.levelTreasureConfigMap.get(id).keySet()); @@ -67,7 +67,6 @@ public class TreasureActivity extends AbstractActivity { levels.remove(0); } ActivityLogic.getInstance().initOtherMission(activityMission,levels); -// long endTime = ToolsUtil.getTimeLong(sGlobalActivity.getStartTimeLong(),sGlobalActivity.getEndTimeLong(),sGlobalActivity.getTime(),user.getPlayerInfoManager().getCreateTime(), 2) - 24 * 3600 * 1000; user.getActivityManager().getActivityMissionMap().put(sGlobalActivity.getId(), activityMission); PlayerInfoProto.TreasureLevelUpIndication indication = PlayerInfoProto.TreasureLevelUpIndication.newBuilder().setLevel(user.getPlayerInfoManager().getTreasureLevel()) .setHadBuy(user.getPlayerInfoManager().getHadBuyTreasure()).build(); @@ -283,4 +282,25 @@ public class TreasureActivity extends AbstractActivity { indication.addAllInfos(privilege); MessageUtil.sendIndicationMessage(sesson, 1, MessageTypeProto.MessageType.PRIVILLEGE_ADD_INDICATION_VALUE, indication.build(), true); } + + @Override + public boolean checkActivityMissionFinishAndTake(int uid,int activityId,ActivityMission activityMission) { + Map activityProgressInfoMap = activityMission.getActivityMissionMap(); + if (activityProgressInfoMap.isEmpty()) { + return false; + } + for (Map.Entry item : activityProgressInfoMap.entrySet()) { + ActivityProgressInfo activityProgressInfo = item.getValue(); + int missionStatus = activityProgressInfo.getState(); + if (missionStatus == ActivityType.WILL_TAKE || missionStatus == ActivityType.HAD_TAKED) { + return false; + } + } + SGlobalActivity sGlobalActivity = SGlobalActivity.getsGlobalActivityMap().get(activityId); + if(sGlobalActivity.getResetGrade()==0){ + activityMission.setActivityState(ActivityType.FINISH_STATE); + Poster.getPoster().dispatchEvent(new ActivityStateChangeEvent(uid,activityId,ActivityType.FINISH_STATE)); + } + return true; + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/SuperBoxEvent.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/SuperBoxEvent.java index cea74ced7..721a0b476 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/SuperBoxEvent.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/event/SuperBoxEvent.java @@ -8,8 +8,21 @@ package com.ljsd.jieling.logic.activity.event; */ public class SuperBoxEvent implements IEvent { + /** + * 默认状态 + */ + public static int default_id = -1; + /** + * 超值基金, 零点刷新初始化 + */ + public static int fund_zero_init = -2; + /** + * 超值基金, 老玩家兼容 + */ + public static int fund_old_user = -3; + private int userId; - private int giftId = -1;//礼包id + private int giftId = default_id;//礼包id public SuperBoxEvent(int userId, int giftId) { this.userId = userId; 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 27882341b..d2a267bac 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 @@ -1,9 +1,7 @@ package com.ljsd.jieling.logic.store; -import ch.qos.logback.core.util.TimeUtil; import com.ljsd.GameApplication; import com.ljsd.jieling.config.reportData.DataMessageUtils; -import com.ljsd.jieling.core.GlobalsDef; import com.ljsd.jieling.core.VipPrivilegeType; import com.ljsd.jieling.db.mongo.MongoUtil; import com.ljsd.jieling.exception.ErrorCode; @@ -44,7 +42,6 @@ import rpc.protocols.CommonProto; import rpc.protocols.MessageTypeProto; import rpc.protocols.PlayerInfoProto; import util.MathUtils; -import util.StringUtil; import util.TimeUtils; import java.math.BigDecimal; @@ -84,7 +81,6 @@ public class BuyGoodsNewLogic { user.getPlayerInfoManager().setNewRechargeInfo(info); } dailyRefresh(user); - sendDailyMailReward(user); boolean needChange = false; List pAddList = new ArrayList<>(); for(Map.Entry entry : SRechargeCommodityNewConfig.configMap.entrySet()){ @@ -179,10 +175,8 @@ public class BuyGoodsNewLogic { User user = UserManager.getUser(uid); NewRechargeInfo info = user.getPlayerInfoManager().getNewRechargeInfo(); - AbstractWelfareBag bag = null; RechargeHandler rechargeHandler = getRechargeHandler(config.getOtype()); - bag = rechargeHandler.getRechargeMap(user).get(goodsId); - String rewardStr=""; + AbstractWelfareBag bag = rechargeHandler.getRechargeMap(user).get(goodsId); if(bag == null || !bag.buy()){ LOGGER.error("购买失败!bag是否为空:{}",bag == null); return resultRes; @@ -218,9 +212,6 @@ public class BuyGoodsNewLogic { //活动 user.getPlayerInfoManager().setRechargedaily(user.getPlayerInfoManager().getRechargedaily()+price); changeActivity(user,price,info); - - // 惊喜礼盒,事件推送 - Poster.getPoster().dispatchEvent(new SuperBoxEvent(user.getId(),config.getId())); } if(!info.getIsFirst()){ info.setIsFirst(true); @@ -240,6 +231,9 @@ public class BuyGoodsNewLogic { notifyPaySuccessFul(uid,goodsId,amount != -999); sendGiftGoodsWithoutJudge(uid); openPush(session,user, PushRechargeType.point_recharge.getType(),goodsId,1); + // 惊喜礼盒,事件推送 + Poster.getPoster().dispatchEvent(new SuperBoxEvent(user.getId(),config.getId())); + // 更新入库 MongoUtil.getLjsdMongoTemplate().lastUpdate(); // 扶持订单不需要上报 if(price>0 && !orderId.equals("support-order")){ @@ -791,70 +785,6 @@ public class BuyGoodsNewLogic { return list; } - /** - * 每日礼包奖励发送 - */ - public static void sendDailyMailReward(User user) throws Exception{ - NewRechargeInfo info = user.getPlayerInfoManager().getNewRechargeInfo(); - List found1 = SRechargeCommodityNewConfig.getConfigListByType(GiftGoodsType.FOUND_ONE); - List found2 = SRechargeCommodityNewConfig.getConfigListByType(GiftGoodsType.FOUND_TWO); - for(AbstractWelfareBag bag : info.getReceiveMap().values()){ - for(int id :found1){ - if(bag.getModId() == id && canReward((ReceiveWelfareBag) bag)){ - sendReward(user.getId(),id,(ReceiveWelfareBag) bag,GiftGoodsType.FOUND_ONE); - } - } - for(int id :found2){ - if(bag.getModId() == id && canReward((ReceiveWelfareBag)bag)){ - sendReward(user.getId(),id,(ReceiveWelfareBag) bag,GiftGoodsType.FOUND_TWO); - } - } - } - } - - public static void sendReward(int uid,int id,ReceiveWelfareBag bag,int type) throws Exception{ - int nowTime = (int)(System.currentTimeMillis()/1000); - int getDays = 0; - if(bag.getGetRewardTime() != 0){ - getDays = TimeUtils.differentDays(bag.getLastBuyTime() - TimeUtils.DAY,bag.getGetRewardTime()); - }else{ - bag.setGetRewardTime(TimeUtils.getTodayZero() - TimeUtils.DAY); - } - int canget = TimeUtils.differentDays(bag.getGetRewardTime(),System.currentTimeMillis()); - getRewards(uid,id,getDays,canget,bag.getContinueDays()); - bag.setGetRewardTime(TimeUtils.getTodayZero()); - } - - public static boolean canReward(ReceiveWelfareBag bag){ - if(!bag.isOpen()){ - return false; - } - if(!bag.isBought()){ - return false; - } - if(TimeUtils.differentDays(bag.getGetRewardTime(),System.currentTimeMillis())<1){ - return false; - } - return true; - } - - public static void getRewards(int uid,int type,int startDay,int cDay,int continueDays) throws Exception{ - int nowTime = (int)(System.currentTimeMillis()/1000); - for(int i = 1;i<=cDay;i++){ - SLuxuryFund fund = SLuxuryFund.getByFoundIdAndDay(type,startDay+i); - if(fund == null){ - break; - } - SRechargeCommodityNewConfig config = SRechargeCommodityNewConfig.getConfigById(type); - String reward = ItemUtil.getMailReward(fund.getreward()); - String title = SErrorCodeEerverConfig.getI18NMessage("recharge_"+config.getType()+"_daily_title"); - String content; - content = SErrorCodeEerverConfig.getI18NMessageNeedConvert("recharge_"+config.getType()+"_daily_txt", - new Object[]{continueDays-startDay-cDay},new int[]{0},"#"); - MailLogic.getInstance().sendMail(uid,title,content,reward,nowTime, Global.MAIL_EFFECTIVE_TIME); - } - } - private static void dailyRefresh(User user){ NewRechargeInfo info = user.getPlayerInfoManager().getNewRechargeInfo(); if(TimeUtils.differentDays(info.getLastRefreshTime(),System.currentTimeMillis())<1){ diff --git a/tablemanager/src/main/java/config/SLuxuryFund.java b/tablemanager/src/main/java/config/SLuxuryFund.java index ac10e9b2a..5579cfc46 100644 --- a/tablemanager/src/main/java/config/SLuxuryFund.java +++ b/tablemanager/src/main/java/config/SLuxuryFund.java @@ -17,25 +17,21 @@ public class SLuxuryFund implements BaseConfig { private int[][] reward; - private static Map sLuxuryFundByFoundAndDay; - - + /** + * key: type value: < key: day value: SLuxuryFund对象 > + */ + public static Map> typeMap = new HashMap<>(); @Override public void init() throws Exception { Map config = STableManager.getConfig(SLuxuryFund.class); - Map sLuxuryFundByFoundAndDayTmp = new HashMap<>(); - config.values().forEach(sLuxuryFund->{ - sLuxuryFundByFoundAndDayTmp.put(sLuxuryFund.getType()*100 + sLuxuryFund.getDay(),sLuxuryFund); + config.values().forEach(v->{ + Map fundMap = typeMap.getOrDefault(v.getType(), new HashMap<>()); + fundMap.put(v.getDay(),v); + typeMap.put(v.getType(),fundMap); }); - sLuxuryFundByFoundAndDay = sLuxuryFundByFoundAndDayTmp; } - public static SLuxuryFund getByFoundIdAndDay(int foundId,int day){ - return sLuxuryFundByFoundAndDay.get(foundId*100+day); - } - - public int getId() { return id; } @@ -48,9 +44,8 @@ public class SLuxuryFund implements BaseConfig { return day; } - public int[][] getreward() { + public int[][] getReward() { return reward; } - } \ No newline at end of file From af37022e38e8743aa7bee3fdaaf517f815488414 Mon Sep 17 00:00:00 2001 From: xuexinpeng Date: Wed, 14 Jul 2021 17:18:09 +0800 Subject: [PATCH 09/12] =?UTF-8?q?=20=20=E6=88=98=E4=BB=A4=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ljsd/jieling/logic/dao/UserMissionManager.java | 9 +++++++-- .../src/main/java/config/SDailyTasksConfig.java | 12 ++++++++++++ tablemanager/src/main/java/config/SEndlessTask.java | 9 +++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) 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 05ebed227..58ccda8bf 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 @@ -26,6 +26,7 @@ import manager.STableManager; import util.TimeUtils; import java.util.*; +import java.util.stream.Collectors; /** @@ -101,7 +102,9 @@ public class UserMissionManager extends MongoBase { break; } case DAILY_REFRESH: - Set missionIds = SDailyTasksConfig.config.keySet(); + int day = new Date(TimeUtils.now()).getDate();//当月第几天 + Set missionIds = SDailyTasksConfig.config.values().stream().filter(n->day >=n. + getViewDateUp()&& day <=n.getViewDataDown()).map(n ->n.getId()).collect(Collectors.toSet()); int type = (int) parm[0]; if (type == 0) { dailyMissionIdsType.getDoingMissionIds().clear(); @@ -228,7 +231,9 @@ public class UserMissionManager extends MongoBase { updateString("cowFlySkyMissionType", cowFlySkyMissionType); break; case ENDLESS_MISSION_REFRESH: - Set endlessTask = STableManager.getConfig(SEndlessTask.class).keySet(); + int days = new Date(TimeUtils.now()).getDate();//当月第几天 + Set endlessTask = STableManager.getConfig(SEndlessTask.class).values().stream().filter(n->days >=n. + getViewDateUp()&& days <=n.getViewDataDown()).map(n ->n.getId()).collect(Collectors.toSet()); endlessMissionType.getDoingMissionIds().clear(); endlessMissionType.getFinishMissionIds().clear(); endlessMissionType.getRewardedMissionIds().clear(); diff --git a/tablemanager/src/main/java/config/SDailyTasksConfig.java b/tablemanager/src/main/java/config/SDailyTasksConfig.java index a2db75afd..c7eadfbc8 100644 --- a/tablemanager/src/main/java/config/SDailyTasksConfig.java +++ b/tablemanager/src/main/java/config/SDailyTasksConfig.java @@ -21,6 +21,10 @@ public class SDailyTasksConfig implements BaseConfig { private int[][] mazePoint;//戒灵秘宝积分 + private int viewDateUp; + + private int viewDataDown; + public static Map config; public static Map> sTaskConfigByTypeMap; @@ -69,4 +73,12 @@ public class SDailyTasksConfig implements BaseConfig { return mazePoint; } + + public int getViewDateUp() { + return viewDateUp; + } + + public int getViewDataDown() { + return viewDataDown; + } } \ No newline at end of file diff --git a/tablemanager/src/main/java/config/SEndlessTask.java b/tablemanager/src/main/java/config/SEndlessTask.java index 0e2c0471d..0b946fa9f 100644 --- a/tablemanager/src/main/java/config/SEndlessTask.java +++ b/tablemanager/src/main/java/config/SEndlessTask.java @@ -18,6 +18,9 @@ public class SEndlessTask implements BaseConfig { private int[][] mazePoint; + private int viewDateUp; + private int viewDataDown; + @Override public void init() throws Exception { @@ -45,5 +48,11 @@ public class SEndlessTask implements BaseConfig { return mazePoint; } + public int getViewDateUp() { + return viewDateUp; + } + public int getViewDataDown() { + return viewDataDown; + } } \ No newline at end of file From 4221f30b3a1db1e1c2dee242b135fe80f4cb56fa Mon Sep 17 00:00:00 2001 From: duhui Date: Wed, 14 Jul 2021 17:59:24 +0800 Subject: [PATCH 10/12] =?UTF-8?q?=E6=88=98=E6=8A=A5=E5=B0=8F=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ljsd/jieling/kefu/Cmd_fightrecord.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_fightrecord.java b/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_fightrecord.java index 6d45c2145..cb2ec2cd3 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_fightrecord.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/kefu/Cmd_fightrecord.java @@ -14,8 +14,8 @@ public class Cmd_fightrecord extends GmAbstract { @Override public String exec2(String[] args){ // 获取玩家战报系统 - String sign = Optional.ofNullable(args[0]).orElse(""); - String content = Optional.ofNullable(args[1]).orElse(""); + String sign = args.length>0 ? args[0]:""; + String content = args.length>1 ? args[1]:""; String result = ""; if (sign.equals("delete")){ FightRecordLogic.getInstance().delete(); From b2f31798b0e9fc949812aae5f74e484f693da77b Mon Sep 17 00:00:00 2001 From: duhui Date: Thu, 15 Jul 2021 16:03:04 +0800 Subject: [PATCH 11/12] =?UTF-8?q?=E5=BF=83=E6=84=BF=E6=8A=BD=E5=8D=A1?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ljsd/jieling/logic/dao/HeroManager.java | 23 +++++----- .../ljsd/jieling/logic/hero/HeroLogic.java | 42 +++++++++++-------- 2 files changed, 36 insertions(+), 29 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/HeroManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/HeroManager.java index 5ae33e11e..408b2ac5e 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/HeroManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/HeroManager.java @@ -78,9 +78,10 @@ public class HeroManager extends MongoBase { private Map randomCountByType = new HashMap<>(); /** + * 心愿专用 * key: 招募类型 value:< key: 星级 value: 数量 > */ - private Map> randomCountByStar = new HashMap<>(); + private Map> wishCountByStar = new HashMap<>(); public Map getRandomCountByType() { return randomCountByType; @@ -96,22 +97,22 @@ public class HeroManager extends MongoBase { updateString("randomCountByType."+type, value); } - public Map> getRandomCountByStar() { - return randomCountByStar; + public Map> getWishCountByStar() { + return wishCountByStar; } - public Map getRandomStar(int type) { - return randomCountByStar.getOrDefault(type,new HashMap<>()); + public Map getWishStar(int type) { + return wishCountByStar.getOrDefault(type,new HashMap<>()); } - public void setRandomCountByStar(Map> randomCountByStar) { - this.randomCountByStar = randomCountByStar; - updateString("randomCountByStar", randomCountByStar); + public void setWishCountByStar(Map> wishCountByStar) { + this.wishCountByStar = wishCountByStar; + updateString("wishCountByStar", wishCountByStar); } - public void putRandomStar(int type,Map starMap) { - randomCountByStar.put(type,starMap); - updateString("randomCountByStar."+type, starMap); + public void putWishStar(int type,Map starMap) { + wishCountByStar.put(type,starMap); + updateString("wishCountByStar."+type, starMap); } public void updateRandCount(int type, int count){ 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 b7dcc7792..2b714ad75 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 @@ -400,15 +400,6 @@ public class HeroLogic{ } //记录卡池抽奖次数 heroManager.putRandomType(type,num+result[1]); - // 记录卡池,抽奖星级次数 - SCHero scHero = SCHero.getsCHero().get(reward[0]); - if (scHero != null){ - // 获取类型抽奖次数 - Map randomStar = heroManager.getRandomStar(type); - // 更新次数 - randomStar.put(scHero.getStar(),randomStar.getOrDefault(scHero.getStar(),0)+result[1]); - heroManager.putRandomStar(type,randomStar); - } return result; } @@ -428,13 +419,21 @@ public class HeroLogic{ } // 非五星英雄 SCHero scHero = SCHero.getsCHero().get(item[0]); - if (scHero.getStar() < 5){ + if (scHero == null || scHero.getStar() < 5){ return item; } + // 更新抽奖次数, 记录卡池 + HeroManager heroManager = user.getHeroManager(); + // 获取类型抽奖次数 + Map randomStar = heroManager.getWishStar(type); + // 更新次数 + int num = heroManager.getWishStar(type).getOrDefault(scHero.getStar(), 0)+1; + randomStar.put(scHero.getStar(),num); + heroManager.putWishStar(type,randomStar); /* ======================= 中不中心愿 ======================= */ // 获取钻石抽奖抽中五星的次数 - int num = user.getHeroManager().getRandomStar(type).getOrDefault(5, 0)+1; boolean randomBol = (num - 1) % 3 == 0; + LOGGER.error("*************************************是否中心愿;num:{},random:{}",num, randomBol); if (!randomBol){ // 不到次数,不走心愿 return item; @@ -447,18 +446,25 @@ public class HeroLogic{ // 计算权重map HashMap map = new HashMap<>(); cardInfoMap.forEach((k,v)->{ - if (v.getStatus() == 0 && v.getHeroTid() != 0){ - // 英雄格子 - SCHero hero = SCHero.getsCHero().get(v.getHeroTid()); - map.put(k,hero.getWeight()); - }else { - // 空格子 - map.put(k,empty); + if (v.getStatus() == 0){ + if (v.getHeroTid() == 0){ + // 空格子 + map.put(k,empty); + }else { + // 英雄格子 + int heroWeight = Optional.ofNullable(SCHero.getsCHero().get(v.getHeroTid())).map(SCHero::getWeight).orElse(0); + map.put(k,heroWeight); + } } }); + // 全部抽中 + if (map.isEmpty()){ + return item; + } // 随机权重 int weight = map.values().stream().mapToInt(Integer::intValue).sum(); int randomInt = MathUtils.randomInt(weight); + LOGGER.error("*************************************心愿抽奖权重,总权重:{},随机值:{},map:{}",weight,randomInt,map.toString()); // 遍历权重 for (Map.Entry entry : map.entrySet()) { if (randomInt <= entry.getValue()){ From fd888a7141947c6b0eb7274c7337602140f1dfd6 Mon Sep 17 00:00:00 2001 From: duhui Date: Thu, 15 Jul 2021 16:27:08 +0800 Subject: [PATCH 12/12] =?UTF-8?q?=E5=A5=87=E9=97=A8=E9=81=81=E7=94=B2?= =?UTF-8?q?=E6=B6=88=E8=80=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ljsd/jieling/globals/BIReason.java | 1 + .../activity/QiMenDunJiaDrawHandler.java | 1 + .../jieling/logic/activity/ActivityLogic.java | 22 +++++++++++++++++++ .../src/main/java/config/SSpecialConfig.java | 2 ++ 4 files changed, 26 insertions(+) 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 78c8aed1e..0ad5752d2 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java @@ -339,5 +339,6 @@ public interface BIReason { int CHOICE_DRAW_CARD = 1102;//心愿抽奖 int QIMENDUNJIA_DRAW = 1103;//奇门遁甲 + int QIMENDUNJIA_DRAW_CONSUME = 1104;//奇门遁甲消耗 } \ No newline at end of file diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/QiMenDunJiaDrawHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/QiMenDunJiaDrawHandler.java index 3d7ea53c3..1c1b0a8ca 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/QiMenDunJiaDrawHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/QiMenDunJiaDrawHandler.java @@ -25,6 +25,7 @@ public class QiMenDunJiaDrawHandler extends BaseHandler hits = new ArrayList<>(); List list = new ArrayList<>(); @@ -1698,6 +1701,25 @@ public class ActivityLogic implements IEventHandler{ return response.build(); } + /** + * 奇门遁甲消耗 + * @param user + * @return + */ + private void qiMenConsume(User user) throws Exception { + // 获取抽奖消耗配置 + int[][] value = SSpecialConfig.getTwiceArrayValue(SSpecialConfig.LING_LONG_COST); + // 计算数量 + int num = (int)MathUtils.calABX(1,value[1]); + // 拼装 + int[][] cost = {{value[0][0], num}}; + // 消耗验证 + boolean result = ItemUtil.itemCost(user, cost, BIReason.QIMENDUNJIA_DRAW_CONSUME, 0); + if (!result){ + throw new ErrorCodeException(ErrorCode.ITEM_NOT_ENOUGH,"奇门遁甲消耗道具不足!"); + } + } + /** * 奇门遁甲随机奖励 * @param user 玩家 diff --git a/tablemanager/src/main/java/config/SSpecialConfig.java b/tablemanager/src/main/java/config/SSpecialConfig.java index 49cc8fd6c..9cb8bb709 100644 --- a/tablemanager/src/main/java/config/SSpecialConfig.java +++ b/tablemanager/src/main/java/config/SSpecialConfig.java @@ -102,6 +102,8 @@ public class SSpecialConfig implements BaseConfig { public static final String YIJIANGOUMAI = "YiJianGouMai";//一件购买 public static final String WELFAREREDPACKET_LIMIT = "RedPackMaxGainNum";//每日领取红包数量上限 public static final String SWEEP_ONEKEY = "floodprivilegeid";//一键扫荡 + + public static final String LING_LONG_COST = "LingLongCost";//玲珑宝镜消耗道具ID @Override public void init() throws Exception {