周卡相关

back_recharge
xuexinpeng 2021-11-01 13:18:29 +08:00
parent 182244cfb0
commit fc2d33d4c9
11 changed files with 516 additions and 3 deletions

View File

@ -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;
}
/**
*
*

View File

@ -366,4 +366,5 @@ public interface BIReason {
int LEVEL_UP_REWARD = 1220;// 玩家升级赠与的道具
int PRACTICE_SKILL_UP_COST=1221;//修行技能升级消耗
int WEEK_CARD_REWARD =1222;//周卡奖励
}

View File

@ -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<ActivityProto.WeekCardRewardRequest> {
@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<Integer, WeekCardInfo> 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<Integer, SWeekcardConfig> config = STableManager.getConfig(SWeekcardConfig.class);
if(!config.containsKey(weekId)){
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.WeekCardRewardResponse.getNumber(), res.build(), true);
return;
}
Map<Integer,Integer>dropMap = 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);
}
}

View File

@ -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<ActivityProto.WeekCardInfoRequest> {
@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<CommonProto.WeekCard> 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<Integer, WeekCardInfo> weekCard = user.getPlayerInfoManager().getWeekCard();
Map<Integer,SWeekcardRotationConfig> config = STableManager.getConfig(SWeekcardRotationConfig.class);
boolean isSaveToDb =false;
for(int i= 0;i<weekCardType.length;i++){
if(config.containsKey(weekCardType[i])){
CommonProto.WeekCard.Builder weekCardProto = CommonProto.WeekCard.newBuilder();
//周卡是否存在 判断是否过期
if(!weekCard.containsKey(weekCardType[i])){
weekCard.put(weekCardType[i],new WeekCardInfo(weekCardType[i],false,0,0));
isSaveToDb = true;
}
WeekCardInfo singleWeekCard = weekCard.get(weekCardType[i]);
if(singleWeekCard.isBuy()){
//买过周卡
if(!TimeUtils.isSameWeek(singleWeekCard.getBugTime() ,TimeUtils.now())){
//周卡已经过期
singleWeekCard.setBuy(false);
singleWeekCard.setLeaveGetRewardDays(0);
isSaveToDb = true;
}
}
weekCardProto.setId(singleWeekCard.getId());
weekCardProto.setIsBuy(singleWeekCard.isBuy());
if(singleWeekCard.isBuy()){
weekCardProto.setLeaveGetRewardDays(TimeUtils.getDayOfWeek()-singleWeekCard.getLeaveGetRewardDays());
}else{
weekCardProto.setLeaveGetRewardDays(singleWeekCard.getLeaveGetRewardDays());
}
res.addAllWeekCardInfo(weekCardProto);
}
}
if(isSaveToDb){
user.getPlayerInfoManager().setWeekCard(weekCard);
}*/
res.addAllAllWeekCardInfo(weekCardList);
MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.WeekCardInfoResponse.getNumber(), res.build(), true);
}
}

View File

@ -13,6 +13,7 @@ import com.ljsd.jieling.logic.activity.ActivityLogic;
import com.ljsd.jieling.logic.activity.FightMainEventHandler;
import com.ljsd.jieling.logic.activity.RemoveEventHeroHandler;
import com.ljsd.jieling.logic.activity.UserLevelEventHandler;
import com.ljsd.jieling.logic.activity.activityLogic.WeekCardLogic;
import com.ljsd.jieling.logic.activity.event.Poster;
import com.ljsd.jieling.logic.activity.event.SuperBoxEvent;
import com.ljsd.jieling.logic.activity.eventhandler.ActivityStateChangeHandler;
@ -406,6 +407,8 @@ public class GlobalDataManaager implements IManager {
public static void checkNeedReFlush(ISession session,User user,PlayerInfoProto.FivePlayerUpdateIndication.Builder fBuilder) throws Exception {
// 需要隔天刷新的字段统一在这里处理
if (TimeUtils.isOverTime(0,user.getPlayerInfoManager().getLoginTime())) {
//周卡每日刷新
//WeekCardLogic.getInstance().sendWeekCardInitInfo(session);
//活动刷新
ActivityLogic.getInstance().flushEveryDay(user,fBuilder);
PlayerLogic.getInstance().vipflushEveryDay(user,fBuilder);

View File

@ -0,0 +1,123 @@
package com.ljsd.jieling.logic.activity.activityLogic;
import com.ljsd.jieling.logic.OnlineUserManager;
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.SWeekcardRotationConfig;
import manager.STableManager;
import rpc.protocols.ActivityProto;
import rpc.protocols.CommonProto;
import rpc.protocols.MessageTypeProto;
import util.TimeUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class WeekCardLogic {
public WeekCardLogic() {
}
public static class Instance {
public final static WeekCardLogic instance = new WeekCardLogic();
}
public static WeekCardLogic getInstance() {
return WeekCardLogic.Instance.instance;
}
public void sendWeekCardInitInfo(ISession session)throws Exception{
ActivityProto.WeekCardIndicationInfoResponse.Builder res = ActivityProto.WeekCardIndicationInfoResponse.newBuilder();
User user = UserManager.getUser(session.getUid());
List<CommonProto.WeekCard> 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<CommonProto.WeekCard> 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<Integer, WeekCardInfo> weekCard = user.getPlayerInfoManager().getWeekCard();
Map<Integer,SWeekcardRotationConfig> config = STableManager.getConfig(SWeekcardRotationConfig.class);
boolean isSaveToDb =false;
List<CommonProto.WeekCard> weekCardList=new ArrayList<>();
for(int i= 1;i<weekCardType.length;i++){
//if(config.containsKey(weekCardType[i])){
CommonProto.WeekCard.Builder weekCardProto = CommonProto.WeekCard.newBuilder();
//周卡是否存在 判断是否过期
if(!weekCard.containsKey(weekCardType[i])){
weekCard.put(weekCardType[i],new WeekCardInfo(weekCardType[i],false,0,0));
isSaveToDb = true;
}
WeekCardInfo singleWeekCard = weekCard.get(weekCardType[i]);
if(singleWeekCard.isBuy()){
//买过周卡
if(!TimeUtils.isSameWeek7(singleWeekCard.getBugTime())){
//周卡已经过期
singleWeekCard.setBuy(false);
singleWeekCard.setLeaveGetRewardDays(0);
isSaveToDb = true;
}
}
weekCardProto.setId(singleWeekCard.getId());
weekCardProto.setIsBuy(singleWeekCard.isBuy());
weekCardProto.setLeaveGetRewardDays(TimeUtils.getDayOfWeek()-singleWeekCard.getLeaveGetRewardDays());
weekCardList.add(weekCardProto.build());
//}
}
if(isSaveToDb){
user.getPlayerInfoManager().setWeekCard(weekCard);
}
return weekCardList;
}
public void buyWeekCard(User user,int weekCardType){
Map<Integer, WeekCardInfo> 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<Integer,SWeekcardRotationConfig> 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;
}
}

View File

@ -191,6 +191,11 @@ public class PlayerManager extends MongoBase {
// 御剑行游玩次数
private int ridingSwardNum;
//周卡
private Map<Integer,WeekCardInfo> 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<Integer, WeekCardInfo> getWeekCard() {
return weekCard;
}
public void setWeekCard(Map<Integer, WeekCardInfo> 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);
}
}

View File

@ -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;
}
}

View File

@ -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);

View File

@ -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<Integer,SWeekcardConfig> 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;
}
}

View File

@ -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;
}
}