增加新的推送礼包条件

master_longzhu_new
DESKTOP-C3M45P4\dengdan 2025-08-15 15:25:19 +08:00
parent c50ee67411
commit 39ebc29512
2 changed files with 192 additions and 52 deletions

View File

@ -20,10 +20,7 @@ import com.ljsd.jieling.logic.activity.ActivityType;
import com.ljsd.jieling.logic.activity.ActivityTypeEnum;
import com.ljsd.jieling.logic.activity.activityLogic.GmSingleActivityLogic;
import com.ljsd.jieling.logic.activity.event.*;
import com.ljsd.jieling.logic.dao.Order;
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.*;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.expedition.ExpeditionLogic;
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){
int[] scope = con.getScopeId();
switch (scope[0]){
@ -1085,4 +1034,188 @@ public class BuyGoodsNewLogic {
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());
}
}
}

View File

@ -38,6 +38,13 @@ public enum PushRechargeType {
XIANYUAN_BAOJING(13),
FORE_SHILIAN(14),
BAOWU_SHENYING(15),
FABAO_ZHOAHUAN(16),
XUNAXIAN_ZHOAHUAN(17),
XIANDOU_ZHOAHUAN(18),
QIANNENG_UP(19),
//开服天数
OPEN_DAY(20),
;
private int type;