From 2ee83fef7870feb00eaeda9cd40e4ab22fc10851 Mon Sep 17 00:00:00 2001 From: duhui Date: Tue, 8 Jun 2021 17:49:21 +0800 Subject: [PATCH 1/6] =?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 2/6] =?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 3/6] =?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 4/6] =?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 5/6] =?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 fd888a7141947c6b0eb7274c7337602140f1dfd6 Mon Sep 17 00:00:00 2001 From: duhui Date: Thu, 15 Jul 2021 16:27:08 +0800 Subject: [PATCH 6/6] =?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 {