From fc2d33d4c9a679cb5e51c609b7245874196a276c Mon Sep 17 00:00:00 2001 From: xuexinpeng Date: Mon, 1 Nov 2021 13:18:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=91=A8=E5=8D=A1=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamecommon/src/main/java/util/TimeUtils.java | 19 ++- .../com/ljsd/jieling/globals/BIReason.java | 1 + .../handler/activity/WeekCardHandler.java | 76 +++++++++++ .../handler/activity/WeekCardInfoHandler.java | 91 +++++++++++++ .../jieling/logic/GlobalDataManaager.java | 3 + .../activity/activityLogic/WeekCardLogic.java | 123 ++++++++++++++++++ .../ljsd/jieling/logic/dao/PlayerManager.java | 33 +++++ .../ljsd/jieling/logic/dao/WeekCardInfo.java | 49 +++++++ .../jieling/logic/store/BuyGoodsNewLogic.java | 7 +- .../src/main/java/config/SWeekcardConfig.java | 68 ++++++++++ .../java/config/SWeekcardRotationConfig.java | 49 +++++++ 11 files changed, 516 insertions(+), 3 deletions(-) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/handler/activity/WeekCardHandler.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/handler/activity/WeekCardInfoHandler.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/logic/activity/activityLogic/WeekCardLogic.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/logic/dao/WeekCardInfo.java create mode 100644 tablemanager/src/main/java/config/SWeekcardConfig.java create mode 100644 tablemanager/src/main/java/config/SWeekcardRotationConfig.java diff --git a/gamecommon/src/main/java/util/TimeUtils.java b/gamecommon/src/main/java/util/TimeUtils.java index 804d12d3b..c1857e156 100644 --- a/gamecommon/src/main/java/util/TimeUtils.java +++ b/gamecommon/src/main/java/util/TimeUtils.java @@ -794,10 +794,25 @@ public class TimeUtils { st.setTimeInMillis(src); Calendar et = Calendar.getInstance(); et.setTimeInMillis(target); - - return st.get(Calendar.WEEK_OF_YEAR) == et.get(Calendar.WEEK_OF_YEAR); + return (st.get(Calendar.YEAR) ==et.get(Calendar.YEAR)) && (st.get(Calendar.WEEK_OF_YEAR) == et.get(Calendar.WEEK_OF_YEAR)); } + /** + * 是否为同一周 + *星期1是一周的开始 + * @param src + * @param target + * @return + */ + public static boolean isSameWeek7(long src) { + long weekStart = getCurWeekdayStartTime(1,0); + long weekEnd = TimeUtils.getCurWeekdayStartTime(1,0) + TimeUtils.WEEK; + if(src>=weekStart && src<=weekEnd){ + return true; + } + return false; + } + /** * 是否为同一周周一算第一天 * 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 ad37c5297..86bdfca37 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java @@ -366,4 +366,5 @@ public interface BIReason { int LEVEL_UP_REWARD = 1220;// 玩家升级赠与的道具 int PRACTICE_SKILL_UP_COST=1221;//修行技能升级消耗 + int WEEK_CARD_REWARD =1222;//周卡奖励 } \ No newline at end of file diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/WeekCardHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/WeekCardHandler.java new file mode 100644 index 000000000..9a18a9364 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/WeekCardHandler.java @@ -0,0 +1,76 @@ +package com.ljsd.jieling.handler.activity; + +import com.ljsd.jieling.globals.BIReason; +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.WeekCardInfo; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.util.ItemUtil; +import com.ljsd.jieling.util.MessageUtil; +import config.SWeekcardConfig; +import config.SWeekcardRotationConfig; +import manager.STableManager; +import org.springframework.stereotype.Component; +import rpc.protocols.ActivityProto; +import rpc.protocols.CommonProto; +import rpc.protocols.MessageTypeProto; +import util.TimeUtils; + +import java.util.HashMap; +import java.util.Map; + + +/** + * 周卡领奖 + */ + +@Component +public class WeekCardHandler extends BaseHandler { + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.WeekCardRewardRequest; + } + + @Override + public void processWithProto(ISession session, ActivityProto.WeekCardRewardRequest proto) throws Exception{ + + User user = UserManager.getUser(session.getUid()); + int weekId = proto.getId(); + Map weekCard = user.getPlayerInfoManager().getWeekCard(); + ActivityProto.WeekCardRewardResponse.Builder res = ActivityProto.WeekCardRewardResponse.newBuilder(); + if(!weekCard.containsKey(weekId)){ + MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.WeekCardRewardResponse.getNumber(), res.build(), true); + return; + } + WeekCardInfo singleWeekCard = weekCard.get(weekId); + //没买或者过期 + if(!singleWeekCard.isBuy()&&!TimeUtils.isSameWeek7(singleWeekCard.getBugTime())){ + MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.WeekCardRewardResponse.getNumber(), res.build(), true); + return; + } + Map config = STableManager.getConfig(SWeekcardConfig.class); + if(!config.containsKey(weekId)){ + MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.WeekCardRewardResponse.getNumber(), res.build(), true); + return; + } + MapdropMap = new HashMap<>(); + for(int i=TimeUtils.getDayOfWeek()-singleWeekCard.getLeaveGetRewardDays();i>0;i--){ + int [][]drop =config.get(weekId).getBaseReward(); + for(int[] single:drop){ + if(dropMap.containsKey(single[0])){ + dropMap.put(single[0],dropMap.get(single[0])+single[1]); + }else{ + dropMap.put(single[0],single[1]); + } + } + } + int [][] dropArray= dropMap.entrySet().stream().map(n->new int[]{n.getKey(),n.getValue()}).toArray(int[][]::new); + CommonProto.Drop.Builder drop = ItemUtil.dropPer(user, dropArray, BIReason.WEEK_CARD_REWARD); + res.setDrop(drop); + singleWeekCard.setLeaveGetRewardDays(TimeUtils.getDayOfWeek()); + user.getPlayerInfoManager().setWeekCard(weekCard); + MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.WeekCardRewardResponse.getNumber(), res.build(), true); + + } +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/WeekCardInfoHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/WeekCardInfoHandler.java new file mode 100644 index 000000000..49663f1c3 --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/activity/WeekCardInfoHandler.java @@ -0,0 +1,91 @@ +package com.ljsd.jieling.handler.activity; + +import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.activity.activityLogic.WeekCardLogic; +import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.WeekCardInfo; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.util.MessageUtil; +import config.SMServerArenaSetting; +import config.SWeekcardConfig; +import config.SWeekcardRotationConfig; +import manager.STableManager; +import rpc.protocols.ActivityProto; +import rpc.protocols.CommonProto; +import rpc.protocols.MessageTypeProto; +import util.TimeUtils; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +public class WeekCardInfoHandler extends BaseHandler { + @Override + public MessageTypeProto.MessageType getMessageCode() { + return MessageTypeProto.MessageType.WeekCardInfoRequest; + } + + /** + * 获取可购买的周卡列表 + * @param session + * @param proto + * @throws Exception + */ + @Override + public void processWithProto(ISession session, ActivityProto.WeekCardInfoRequest proto) throws Exception{ + + User user = UserManager.getUser(session.getUid()); + int[] weekType = WeekCardLogic.getInstance().getWeekCardType(user); + if(weekType == null){ + return; + } + ActivityProto.WeekCardInfoResponse.Builder res = ActivityProto.WeekCardInfoResponse.newBuilder(); + List weekCardList = WeekCardLogic.getInstance().initAllWeekCardInfo(user); + /*long time= user.getPlayerInfoManager().getWeekCardTimeFirst(); + if(!TimeUtils.isSameWeek(time ,TimeUtils.now())){ + user.getPlayerInfoManager().setWeekCardTimeFirstLevel(user.getPlayerInfoManager().getLevel()); + user.getPlayerInfoManager().setWeekCardTimeFirst(TimeUtils.now()); + } + int [] weekCardType = WeekCardLogic.getInstance().getWeekCardType(user); + Map weekCard = user.getPlayerInfoManager().getWeekCard(); + Map config = STableManager.getConfig(SWeekcardRotationConfig.class); + boolean isSaveToDb =false; + for(int i= 0;i weekCardList = initAllWeekCardInfo(user); + res.addAllAllWeekCardInfo(weekCardList); + //MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.WeekCardIndicationInfoResponse, res.build(), true); + MessageUtil.sendIndicationMessage(session,1, MessageTypeProto.MessageType.WeekCardIndicationInfoResponse_VALUE,res.build(),true); + + } + + public List initAllWeekCardInfo(User user) throws Exception{ + long time= user.getPlayerInfoManager().getWeekCardTimeFirst(); + if(!TimeUtils.isSameWeek7(time)){ + user.getPlayerInfoManager().setWeekCardTimeFirstLevel(user.getPlayerInfoManager().getLevel()); + user.getPlayerInfoManager().setWeekCardTimeFirst(TimeUtils.now()); + } + int [] weekCardType = getWeekCardType(user); + Map weekCard = user.getPlayerInfoManager().getWeekCard(); + Map config = STableManager.getConfig(SWeekcardRotationConfig.class); + boolean isSaveToDb =false; + List weekCardList=new ArrayList<>(); + for(int i= 1;i weekCard = user.getPlayerInfoManager().getWeekCard(); + if(!weekCard.containsKey(weekCardType)){ + return; + } + WeekCardInfo singleWeekCard = weekCard.get(weekCardType); + singleWeekCard.setBuy(true); + singleWeekCard.setBugTime(TimeUtils.now()); + singleWeekCard.setLeaveGetRewardDays(0); + user.getPlayerInfoManager().setWeekCard(weekCard); + } + + public int[] getWeekCardType(User user) throws Exception{ + Map config = STableManager.getConfig(SWeekcardRotationConfig.class); + for(SWeekcardRotationConfig con:config.values()){ + if( TimeUtils.now()>=TimeUtils.parseTimeToMiles(con.getStartTime(),TimeUtils.Stand_CeHua_Data_format) + && TimeUtils.now()<=TimeUtils.parseTimeToMiles(con.getEndtime(),TimeUtils.Stand_CeHua_Data_format)){ + int [][]cardType = con.getWeekcardType(); + int level= user.getPlayerInfoManager().getWeekCardTimeFirstLevel(); + if(level == 0){ + level = user.getPlayerInfoManager().getLevel(); + } + if(level>=cardType[0][0]&&level<=cardType[1][0]){ + return cardType[0]; + }else { + return cardType[1]; + } + } + } + return null; + } + + + + + +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java index 0ef4b7158..4a227fd0f 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PlayerManager.java @@ -191,6 +191,11 @@ public class PlayerManager extends MongoBase { // 御剑行游玩次数 private int ridingSwardNum; + //周卡 + private Map weekCard = new HashMap<>(); + private long weekCardTimeFirst;//本周第一次看到周卡的时间 + private int weekCardTimeFirstLevel;//本周第一次看到周卡时人物等级 + public PlayerManager(){ this.setRootCollection(User._COLLECTION_NAME); } @@ -1302,4 +1307,32 @@ public class PlayerManager extends MongoBase { this.versionCode = versionCode; updateString("versionCode",versionCode); } + + public Map getWeekCard() { + return weekCard; + } + + public void setWeekCard(Map weekCard) { + this.weekCard = weekCard; + updateString("weekCard",weekCard); + } + + + public long getWeekCardTimeFirst() { + return weekCardTimeFirst; + } + + public void setWeekCardTimeFirst(long weekCardTimeFirst) { + this.weekCardTimeFirst = weekCardTimeFirst; + updateString("weekCardTimeFirst",weekCardTimeFirst); + } + + public int getWeekCardTimeFirstLevel() { + return weekCardTimeFirstLevel; + } + + public void setWeekCardTimeFirstLevel(int weekCardTimeFirstLevel) { + this.weekCardTimeFirstLevel = weekCardTimeFirstLevel; + updateString("weekCardTimeFirstLevel",weekCardTimeFirstLevel); + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/WeekCardInfo.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/WeekCardInfo.java new file mode 100644 index 000000000..ea06b853d --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/WeekCardInfo.java @@ -0,0 +1,49 @@ +package com.ljsd.jieling.logic.dao; + +public class WeekCardInfo { + + private int id; //周卡id + private boolean isBuy; //是否购买 + private int leaveGetRewardDays; //领取了几天的奖励 + private long bugTime; //购买周卡的时间 + + + public WeekCardInfo(int id, boolean isBuy, int leaveGetRewardDays, long bugTime) { + this.id = id; + this.isBuy = isBuy; + this.leaveGetRewardDays = leaveGetRewardDays; + this.bugTime = bugTime; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public boolean isBuy() { + return isBuy; + } + + public void setBuy(boolean buy) { + isBuy = buy; + } + + public int getLeaveGetRewardDays() { + return leaveGetRewardDays; + } + + public void setLeaveGetRewardDays(int leaveGetRewardDays) { + this.leaveGetRewardDays = leaveGetRewardDays; + } + + public long getBugTime() { + return bugTime; + } + + public void setBugTime(long bugTime) { + this.bugTime = bugTime; + } +} 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 ed17ad00d..c3a6de4a5 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 @@ -19,6 +19,7 @@ import com.ljsd.jieling.logic.activity.AbstractActivity; import com.ljsd.jieling.logic.activity.ActivityLogic; import com.ljsd.jieling.logic.activity.ActivityType; import com.ljsd.jieling.logic.activity.ActivityTypeEnum; +import com.ljsd.jieling.logic.activity.activityLogic.WeekCardLogic; import com.ljsd.jieling.logic.activity.event.*; import com.ljsd.jieling.logic.dao.*; import com.ljsd.jieling.logic.dao.root.User; @@ -399,7 +400,11 @@ public class BuyGoodsNewLogic { if(type==GiftGoodsType.ENDLESS_TREASURE){ user.getMapManager().setTreasureIsBuy(1); } - + //周卡 + if(type==GiftGoodsType.WEEKCARD){ + WeekCardLogic.getInstance().buyWeekCard(user,config.getId()); + WeekCardLogic.getInstance().sendWeekCardInitInfo(session); + } if(drop!=null&&session!=null){ PlayerInfoProto.DirectBuyIndication build = PlayerInfoProto.DirectBuyIndication.newBuilder().setDrop(drop).build(); MessageUtil.sendIndicationMessage(session,1, MessageTypeProto.MessageType.DIRECT_BUY_GOODS_INDICATION_VALUE,build,true); diff --git a/tablemanager/src/main/java/config/SWeekcardConfig.java b/tablemanager/src/main/java/config/SWeekcardConfig.java new file mode 100644 index 000000000..a9e4e04e4 --- /dev/null +++ b/tablemanager/src/main/java/config/SWeekcardConfig.java @@ -0,0 +1,68 @@ +package config; + +import manager.STableManager; +import manager.Table; + +import java.util.Map; + +@Table(name ="WeekcardConfig") +public class SWeekcardConfig implements BaseConfig { + + private int id; + + private String name; + + private int price; + + private int[][] baseReward; + + private int contiueDays; + + private int time; + + private String startTime; + + private String endtime; + + public static Map weekcardConfig; + @Override + public void init() throws Exception { + weekcardConfig = STableManager.getConfig(SWeekcardConfig.class); + + } + + + public int getId() { + return id; + } + + public String getName() { + return name; + } + + public int getPrice() { + return price; + } + + public int[][] getBaseReward() { + return baseReward; + } + + public int getContiueDays() { + return contiueDays; + } + + public int getTime() { + return time; + } + + public String getStartTime() { + return startTime; + } + + public String getEndtime() { + return endtime; + } + + +} \ No newline at end of file diff --git a/tablemanager/src/main/java/config/SWeekcardRotationConfig.java b/tablemanager/src/main/java/config/SWeekcardRotationConfig.java new file mode 100644 index 000000000..92eac7f5d --- /dev/null +++ b/tablemanager/src/main/java/config/SWeekcardRotationConfig.java @@ -0,0 +1,49 @@ +package config; + +import manager.STableManager; +import manager.Table; + +import java.util.Map; + +@Table(name ="WeekcardRotationConfig") +public class SWeekcardRotationConfig implements BaseConfig { + + private int id; + + private int[][] weekcardType; + + private int time; + + private String startTime; + + private String endtime; + + + @Override + public void init() throws Exception { + + } + + + public int getId() { + return id; + } + + public int[][] getWeekcardType() { + return weekcardType; + } + + public int getTime() { + return time; + } + + public String getStartTime() { + return startTime; + } + + public String getEndtime() { + return endtime; + } + + +} \ No newline at end of file