增加新的推送礼包条件
parent
c50ee67411
commit
39ebc29512
|
@ -20,10 +20,7 @@ import com.ljsd.jieling.logic.activity.ActivityType;
|
||||||
import com.ljsd.jieling.logic.activity.ActivityTypeEnum;
|
import com.ljsd.jieling.logic.activity.ActivityTypeEnum;
|
||||||
import com.ljsd.jieling.logic.activity.activityLogic.GmSingleActivityLogic;
|
import com.ljsd.jieling.logic.activity.activityLogic.GmSingleActivityLogic;
|
||||||
import com.ljsd.jieling.logic.activity.event.*;
|
import com.ljsd.jieling.logic.activity.event.*;
|
||||||
import com.ljsd.jieling.logic.dao.Order;
|
import com.ljsd.jieling.logic.dao.*;
|
||||||
import com.ljsd.jieling.logic.dao.PlayerManager;
|
|
||||||
import com.ljsd.jieling.logic.dao.UserManager;
|
|
||||||
import com.ljsd.jieling.logic.dao.VipInfo;
|
|
||||||
import com.ljsd.jieling.logic.dao.root.User;
|
import com.ljsd.jieling.logic.dao.root.User;
|
||||||
import com.ljsd.jieling.logic.expedition.ExpeditionLogic;
|
import com.ljsd.jieling.logic.expedition.ExpeditionLogic;
|
||||||
import com.ljsd.jieling.logic.fight.CombatLogic;
|
import com.ljsd.jieling.logic.fight.CombatLogic;
|
||||||
|
@ -921,54 +918,6 @@ public class BuyGoodsNewLogic {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 发送推送礼包
|
|
||||||
*/
|
|
||||||
public static void openPush(ISession session,User user,int type,int star){
|
|
||||||
try {
|
|
||||||
NewRechargeInfo info = user.getPlayerInfoManager().getNewRechargeInfo();
|
|
||||||
List<SPackPushConfig> list = SPackPushConfig.findConfigByCon(type,star);
|
|
||||||
if(list == null){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
list.sort(Comparator.comparingInt(SPackPushConfig::getPriority));
|
|
||||||
long now = TimeUtils.now();
|
|
||||||
int bagId = 0;
|
|
||||||
boolean push = false;
|
|
||||||
for(SPackPushConfig con : list){
|
|
||||||
bagId = judgePushCondition(user,con);
|
|
||||||
int conditionType=con.getConditionId()[0];
|
|
||||||
int pushId = con.getId();
|
|
||||||
int statistics = con.getStatistics();
|
|
||||||
int count = con.getCount();
|
|
||||||
// todo DayPushNum和AllPuthNum可以放到redis里操作
|
|
||||||
if (statistics >0 && info.getDayPushNum(pushId)>= statistics && count > 0 && info.getAllPuthNum(pushId)>= count){
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
//条件成功
|
|
||||||
if(bagId > 0 && info.getNextPushTime() < now && info.getTypePushTimeMap(conditionType) < now){
|
|
||||||
info.setNextPushTime(now + con.getcDTime() * TimeUtils.HOUR);
|
|
||||||
info.setTypePushTimeMap(conditionType, now + con.getPrivateCD() * TimeUtils.HOUR);
|
|
||||||
info.setDayPushNum(pushId,1);
|
|
||||||
info.setAllPuthNum(pushId,1);
|
|
||||||
push = createPushBag(bagId, user);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
List<CommonProto.GiftGoodsInfo> goodsBagInfo = new ArrayList<>(SRechargeCommodityNewConfig.configMap.size());
|
|
||||||
getGoodsBagInfo(user.getId(), goodsBagInfo);
|
|
||||||
PlayerInfoProto.AllGiftGoodsIndication goodsBuild = PlayerInfoProto.AllGiftGoodsIndication.newBuilder().addAllGiftGoodsInfo(goodsBagInfo).build();
|
|
||||||
MessageUtil.sendIndicationMessage(session, 1, MessageTypeProto.MessageType.ALL_GIFTGOODS_INDICATION_VALUE, goodsBuild, true);
|
|
||||||
if(bagId != 0 && push){
|
|
||||||
PlayerInfoProto.PushWelfareResponse pushWelfareResponse = PlayerInfoProto.PushWelfareResponse.newBuilder().addId(bagId).build();
|
|
||||||
MessageUtil.sendIndicationMessage(session, 1, MessageTypeProto.MessageType.PUSH_WELFARE_RESPONSE.getNumber(), pushWelfareResponse, true);
|
|
||||||
}
|
|
||||||
}catch (Exception e){
|
|
||||||
e.printStackTrace();
|
|
||||||
LOGGER.error("创建推送礼包报错,uid:{},触发礼包id:{},type:{}, 异常:{}",user.getId(), star, type, e.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static int judgePushCondition(User user,SPackPushConfig con){
|
private static int judgePushCondition(User user,SPackPushConfig con){
|
||||||
int[] scope = con.getScopeId();
|
int[] scope = con.getScopeId();
|
||||||
switch (scope[0]){
|
switch (scope[0]){
|
||||||
|
@ -1085,4 +1034,188 @@ public class BuyGoodsNewLogic {
|
||||||
MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.CHECK_BUY_GOODS_RESPONSE_VALUE,response);
|
MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.CHECK_BUY_GOODS_RESPONSE_VALUE,response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static int judgePushCondition(User user,SPackPushConfig con,boolean checkCondition){
|
||||||
|
int[] scope = con.getScopeId();
|
||||||
|
//scope和condition条件类型复用,先检测scope
|
||||||
|
boolean result = checkPushCondition(scope,user);
|
||||||
|
if(!result){
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
//scope条件满足之后还要做condition条件检测
|
||||||
|
if(checkCondition){
|
||||||
|
int[] condition = con.getConditionId();
|
||||||
|
result = checkPushCondition(condition,user);
|
||||||
|
if(!result){
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//此处根据需求改成指定天数累计充值,之前的条件是历史累计充值
|
||||||
|
double rr = user.getPlayerInfoManager().getNewRechargeInfo().GetAllRechargeNum(SSpecialConfig.getIntegerValue(SSpecialConfig.DAYS_FOR_RECHARGE_SUM));
|
||||||
|
int index = 0;
|
||||||
|
for(int i = 1;i<con.getPersonas().length;i++){
|
||||||
|
if(con.getPersonas()[i] > rr){
|
||||||
|
index = i-1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(con.getPersonas()[index] > rr){
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return con.getPacks()[index];
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int[] judgePushConditionMulti(User user,SPackPushConfig con,boolean checkCondition){
|
||||||
|
int[] scope = con.getScopeId();
|
||||||
|
//scope和condition条件类型复用,先检测scope
|
||||||
|
boolean result = checkPushCondition(scope,user);
|
||||||
|
if(!result){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
//scope条件满足之后还要做condition条件检测
|
||||||
|
if(checkCondition){
|
||||||
|
int[] condition = con.getConditionId();
|
||||||
|
result = checkPushCondition(condition,user);
|
||||||
|
if(!result){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//寻仙,法宝,仙豆,潜能等同时推多个礼包
|
||||||
|
return con.getPacks();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean checkPushCondition(int[] condition,User user){
|
||||||
|
switch (condition[0]){
|
||||||
|
case 1://主线关卡
|
||||||
|
int mainLevel = user.getMainLevelManager().getFightId();
|
||||||
|
if(mainLevel < condition[1]){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2://爬塔
|
||||||
|
int towerLevel = condition[1];
|
||||||
|
if(towerLevel < condition[1]){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 3://玩家等级
|
||||||
|
int level = user.getPlayerInfoManager().getLevel();
|
||||||
|
if(level < condition[1]){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 7://主线关卡
|
||||||
|
//此处根据需求改成指定天数内最大充值订单,之前的条件是历史充值最大订单
|
||||||
|
int value = SSpecialConfig.getIntegerValue(SSpecialConfig.DAYS_FOR_RECHARGE_SINGLE);
|
||||||
|
double mxr = user.getPlayerInfoManager().getNewRechargeInfo().GetSingleMaxRechargeNum(value);
|
||||||
|
if(mxr < condition[1]){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 16://法宝召唤
|
||||||
|
case 17://寻仙召唤
|
||||||
|
int itemId = condition[1];
|
||||||
|
Item item = user.getItemManager().getItem(itemId);
|
||||||
|
//够10连不弹
|
||||||
|
if(item != null && item.getItemNum() >= 10){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 18://仙豆
|
||||||
|
int xiandouId = condition[1];
|
||||||
|
Item xiandouItem = user.getItemManager().getItem(xiandouId);
|
||||||
|
//够抽就不用弹
|
||||||
|
if(xiandouItem!= null && xiandouItem.getItemNum() >= 1){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 19://潜能(触发了直接返回礼包,由外面判断)
|
||||||
|
break;
|
||||||
|
case 20://开服天数礼包(开服指定天数登录自动触发)
|
||||||
|
int day = condition[1];
|
||||||
|
String openTime = GameApplication.serverConfig.getOpenTime();
|
||||||
|
long openTimeLong = TimeUtils.stringToTimeLong2(openTime);
|
||||||
|
long haveTime = System.currentTimeMillis() - openTimeLong;
|
||||||
|
int nowDay = (int)(haveTime/TimeUtils.ONE_DAY) + 1;
|
||||||
|
if(nowDay != day){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送推送礼包
|
||||||
|
*/
|
||||||
|
public static void openPush(ISession session,User user,int type,int star){
|
||||||
|
try {
|
||||||
|
NewRechargeInfo info = user.getPlayerInfoManager().getNewRechargeInfo();
|
||||||
|
List<SPackPushConfig> list = SPackPushConfig.findConfigByCon(type,star);
|
||||||
|
if(list == null){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
list.sort(Comparator.comparingInt(SPackPushConfig::getPriority));
|
||||||
|
long now = TimeUtils.now();
|
||||||
|
int bagId = 0;
|
||||||
|
boolean push = false;
|
||||||
|
for(SPackPushConfig con : list){
|
||||||
|
int conditionType=con.getConditionId()[0];
|
||||||
|
int pushId = con.getId();
|
||||||
|
int statistics = con.getStatistics();
|
||||||
|
int count = con.getCount();
|
||||||
|
//道具检测类礼包需要批量推送礼包
|
||||||
|
if(type == PushRechargeType.FABAO_ZHOAHUAN.getType() ||
|
||||||
|
type == PushRechargeType.XUNAXIAN_ZHOAHUAN.getType() ||
|
||||||
|
type == PushRechargeType.XIANDOU_ZHOAHUAN.getType() ||
|
||||||
|
type == PushRechargeType.QIANNENG_UP.getType()||
|
||||||
|
type == PushRechargeType.OPEN_DAY.getType()){
|
||||||
|
int[] bagIds = judgePushConditionMulti(user,con,true);
|
||||||
|
// todo DayPushNum和AllPuthNum可以放到redis里操作
|
||||||
|
if (statistics >0 && info.getDayPushNum(pushId)>= statistics && count > 0 && info.getAllPuthNum(pushId)>= count){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
//条件成功
|
||||||
|
if(bagIds !=null && bagIds.length > 0 && info.getNextPushTime() < now && info.getTypePushTimeMap(conditionType) < now){
|
||||||
|
info.setNextPushTime(now + con.getcDTime() * TimeUtils.HOUR);
|
||||||
|
info.setTypePushTimeMap(conditionType, now + con.getPrivateCD() * TimeUtils.HOUR);
|
||||||
|
info.setDayPushNum(pushId,1);
|
||||||
|
info.setAllPuthNum(pushId,1);
|
||||||
|
for(int _bagId : bagIds){
|
||||||
|
push = createPushBag(_bagId, user);
|
||||||
|
bagId = _bagId;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
bagId = judgePushCondition(user,con,false);
|
||||||
|
// todo DayPushNum和AllPuthNum可以放到redis里操作
|
||||||
|
if (statistics >0 && info.getDayPushNum(pushId)>= statistics && count > 0 && info.getAllPuthNum(pushId)>= count){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
//条件成功
|
||||||
|
if(bagId > 0 && info.getNextPushTime() < now && info.getTypePushTimeMap(conditionType) < now){
|
||||||
|
info.setNextPushTime(now + con.getcDTime() * TimeUtils.HOUR);
|
||||||
|
info.setTypePushTimeMap(conditionType, now + con.getPrivateCD() * TimeUtils.HOUR);
|
||||||
|
info.setDayPushNum(pushId,1);
|
||||||
|
info.setAllPuthNum(pushId,1);
|
||||||
|
push = createPushBag(bagId, user);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
List<CommonProto.GiftGoodsInfo> goodsBagInfo = new ArrayList<>(SRechargeCommodityNewConfig.configMap.size());
|
||||||
|
getGoodsBagInfo(user.getId(), goodsBagInfo);
|
||||||
|
PlayerInfoProto.AllGiftGoodsIndication goodsBuild = PlayerInfoProto.AllGiftGoodsIndication.newBuilder().addAllGiftGoodsInfo(goodsBagInfo).build();
|
||||||
|
MessageUtil.sendIndicationMessage(session, 1, MessageTypeProto.MessageType.ALL_GIFTGOODS_INDICATION_VALUE, goodsBuild, true);
|
||||||
|
if(bagId != 0 && push){
|
||||||
|
PlayerInfoProto.PushWelfareResponse pushWelfareResponse = PlayerInfoProto.PushWelfareResponse.newBuilder().addId(bagId).build();
|
||||||
|
MessageUtil.sendIndicationMessage(session, 1, MessageTypeProto.MessageType.PUSH_WELFARE_RESPONSE.getNumber(), pushWelfareResponse, true);
|
||||||
|
}
|
||||||
|
}catch (Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
LOGGER.error("创建推送礼包报错,uid:{},触发礼包id:{},type:{}, 异常:{}",user.getId(), star, type, e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,6 +38,13 @@ public enum PushRechargeType {
|
||||||
XIANYUAN_BAOJING(13),
|
XIANYUAN_BAOJING(13),
|
||||||
FORE_SHILIAN(14),
|
FORE_SHILIAN(14),
|
||||||
BAOWU_SHENYING(15),
|
BAOWU_SHENYING(15),
|
||||||
|
|
||||||
|
FABAO_ZHOAHUAN(16),
|
||||||
|
XUNAXIAN_ZHOAHUAN(17),
|
||||||
|
XIANDOU_ZHOAHUAN(18),
|
||||||
|
QIANNENG_UP(19),
|
||||||
|
//开服天数
|
||||||
|
OPEN_DAY(20),
|
||||||
;
|
;
|
||||||
|
|
||||||
private int type;
|
private int type;
|
||||||
|
|
Loading…
Reference in New Issue