Merge branch 'master_test_gn' into master_prb_gn

back_recharge
jiahuiwen 2022-05-25 17:27:16 +08:00
commit 04977c5abd
3 changed files with 175 additions and 114 deletions

View File

@ -256,9 +256,12 @@ public class GlobleSystemLogic implements IEventHandler {
// Map<String,Integer> worldLevelMap = redisUtil.getMapValues(RedisKey.SERVER_WORLDLEVE_INFO,"",String.class,Integer.class);
LOGGER.info("跨服开始分组");
// 周一零点时间戳,毫秒
long lastHour = TimeUtils.getLastOrUnderHour(TimeUtils.now(), 1, 0, 0, true);
lastHour+=TimeUtils.WEEK;
int expireTime =(int)(lastHour-TimeUtils.nowInt());
// 加上七天,秒
lastHour = (lastHour + TimeUtils.WEEK)/1000;
// 当前时间
long expireTime = lastHour-TimeUtils.nowInt();
redisUtil.set(RedisKey.MATCHED_SPLIT_KEY,String.valueOf(1),expireTime-60);
//提前两分钟结算

View File

@ -1718,9 +1718,9 @@ public class ActivityLogic implements IEventHandler{
CommonProto.Drop.Builder drop = null;
int[] markReward = new int[]{0,0};
int[][] markRewards = new int[num][];
// int[][] markRewards = new int[num+1][];
// markRewards[num] = setting.getRecruit();
// int[][] markRewards = new int[num][];
int[][] markRewards = new int[num+1][];
markRewards[num] = new int[]{setting.getRecruit()[0],num};
// 单抽
if (num == 1){
// 验证免费特权
@ -1733,7 +1733,7 @@ public class ActivityLogic implements IEventHandler{
// 消费抽取
if (drop == null){
// 十连抽还是单抽消耗物品获取
int[][] item = type == 1?setting.getCostItemSingle():setting.getCostItemMul();
int[][] item = num == 1?setting.getCostItemSingle():setting.getCostItemMul();
// 验证道具消耗
int[][] cost = new int[][]{{item[0][0],item[0][1]}};
boolean itemCost = ItemUtil.itemCost(user, cost, BIReason.CHOICE_DRAW_CARD, 0);
@ -1807,12 +1807,27 @@ public class ActivityLogic implements IEventHandler{
* @param num
* @return
* @throws Exception
*
*/
private CommonProto.Drop.Builder getDrawReward(User user,int activityId,int num,int[][] reward) throws Exception {
if (num == 1){
return getDrawRewardOne(user,activityId,num,reward);
}else {
return getDrawRewardTen(user,activityId,num,reward);
}
}
/**
*
* @param user
* @param activityId
* @param num
* @return
* @throws Exception
*/
private CommonProto.Drop.Builder getDrawRewardOne(User user,int activityId,int num,int[][] reward) throws Exception {
// 活动信息
ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(activityId);
// 累计得抽奖次数
int count = mission.getV();
// up奖励id
int upRewardId = mission.getChoiceRewardIdByActivity(activityId);
// 根据活动获取本期得全部up信息
@ -1823,47 +1838,30 @@ public class ActivityLogic implements IEventHandler{
int camp = incs[4];
// 排序权重map
Map<Integer, Integer> weight = new TreeMap<>(SWishActivityPool.weight.get(camp));
// 常驻卡池
Map<Integer, SWishActivityPool> poolMap = SWishActivityPool.map;
// 将up奖励id得权重加入到整个卡池权重中
weight.put(-1,incs[2]);
// 计算总权重
int totalWeight = weight.values().stream().mapToInt(Integer::intValue).sum();
int i = 0;
// 根据抽奖次数循环
while (i < num){
// 已抽奖次数+1
count++;
for (int i = 0; i < 1; i++) {
// 随机数
int randomInt = MathUtils.randomInt(totalWeight);
// LOGGER.error("心愿抽奖,总权重:{},随机值:{},权重区间:{}-{},当前次数:{}",totalWeight,randomInt,totalWeight-incs[2],totalWeight,count);
// up奖励信息
int[] result = new int[]{incs[0],incs[1]};
// 抽奖次数达到必出up次数
if (count >= incs[3]){
// 次数归0
count = 0;
// 添加奖励
reward[i++] = result;
continue;
}
// 权重循环
for (Map.Entry<Integer, Integer> entry : weight.entrySet()) {
// 随机值小于等于当前次数权重,证明抽到了
if (randomInt <= entry.getValue()){
// 根据id获取奖池信息
SWishActivityPool pool = poolMap.get(entry.getKey());
SWishActivityPool pool = SWishActivityPool.map.get(entry.getKey());
// null意味着是up奖励
if (pool == null){
count = 0;
reward[i++] = result;
reward[i] = result;
}
// 非up奖励
else {
reward[i++] = pool.getItemId();
reward[i] = pool.getItemId();
}
break;
}
@ -1871,9 +1869,61 @@ public class ActivityLogic implements IEventHandler{
randomInt -= entry.getValue();
}
}
// 返回奖励信息
return ItemUtil.dropPer(user, reward, BIReason.CHOICE_DRAW_CARD);
}
// 更新抽奖次数和up奖励id
mission.setV(count);
/**
*
* @param user
* @param activityId
* @param num
* @return
* @throws Exception
*/
private CommonProto.Drop.Builder getDrawRewardTen(User user,int activityId,int num,int[][] reward) throws Exception {
// 活动信息
ActivityMission mission = user.getActivityManager().getActivityMissionMap().get(activityId);
// up奖励id
int upRewardId = mission.getChoiceRewardIdByActivity(activityId);
// 根据活动获取本期得全部up信息
int[] incs = SWishActivityUp.upMap.getOrDefault(activityId,new HashMap<>()).get(upRewardId);
if (incs == null){
throw new ErrorCodeException(ErrorCode.SYS_ERROR_CODE,"WishActivityUp查询不到活动" + activityId + "或奖励id" + upRewardId);
}
//拿到当前阵营
int camp = incs[4];
// 排序权重map
Map<Integer, Integer> weight = new TreeMap<>(SWishActivityPool.weight.get(camp));
// 计算总权重
int totalWeight = weight.values().stream().mapToInt(Integer::intValue).sum();
// 固定5次给碎片
int[] ints = {0,1,2,3,4,5,6,7,8,9};
List<Integer> random = MathUtils.randomForOneArray(ints, 5);
for (int i = 0; i < 10; i++) {
// 随机位置给碎片
if (random.contains(i)){
reward[i] = new int[]{incs[0],incs[1]};
continue;
}
// 随机数
int randomInt = MathUtils.randomInt(totalWeight);
// 权重循环
for (Map.Entry<Integer, Integer> entry : weight.entrySet()) {
// 随机值小于等于当前次数权重,证明抽到了
if (randomInt <= entry.getValue()){
// 根据id获取奖池信息
SWishActivityPool pool = SWishActivityPool.map.get(entry.getKey());
reward[i] = pool.getItemId();
break;
}
// 未抽到, 减去当前次数权重
randomInt -= entry.getValue();
}
}
// 返回奖励信息
return ItemUtil.dropPer(user, reward, BIReason.CHOICE_DRAW_CARD);
}

View File

@ -2,12 +2,14 @@ package com.ljsd.jieling.logic.activity.activityLogic;
import com.ljsd.jieling.globals.Global;
import com.ljsd.jieling.logic.activity.ActivityType;
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.logic.mail.MailLogic;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.util.MessageUtil;
import com.ljsd.jieling.util.ToolsUtil;
import config.SErrorCodeEerverConfig;
import config.SWeekcardConfig;
import config.SWeekcardRotationConfig;
@ -25,65 +27,61 @@ 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{
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);
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);
MessageUtil.sendIndicationMessage(session, 1, MessageTypeProto.MessageType.WeekCardIndicationInfoResponse_VALUE, res.build(), true);
}
public void sendWeekCardRewardMail(ISession session)throws Exception{
public void sendWeekCardRewardMail(ISession session) throws Exception {
//发每周未领取的奖励
User user = UserManager.getUser(session.getUid());
Map<Integer, WeekCardInfo> weekCard = user.getPlayerInfoManager().getWeekCard();
Map<Integer,Integer>dropMap = new HashMap<>();
Map<Integer, Integer> dropMap = new HashMap<>();
boolean isSave = false;
for(WeekCardInfo weekCardVal:weekCard.values()){
for (WeekCardInfo weekCardVal : weekCard.values()) {
Map<Integer, SWeekcardConfig> config = STableManager.getConfig(SWeekcardConfig.class);
if(!config.containsKey(weekCardVal.getId())){
if (!config.containsKey(weekCardVal.getId())) {
continue;
}
if(!weekCardVal.isBuy()){
if (!weekCardVal.isBuy()) {
continue;
}
if(TimeUtils.isSameWeek7(weekCardVal.getBugTime())){
continue;
if (TimeUtils.isSameWeek7(weekCardVal.getBugTime())) {
continue;
}
if(Calendar.DAY_OF_WEEK - weekCardVal.getLeaveGetRewardDays()>0){
for(int i= (Calendar.DAY_OF_WEEK - weekCardVal.getLeaveGetRewardDays());i>0;i--){
int [][]drop =config.get(weekCardVal.getId()).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]);
if (Calendar.DAY_OF_WEEK - weekCardVal.getLeaveGetRewardDays() > 0) {
for (int i = (Calendar.DAY_OF_WEEK - weekCardVal.getLeaveGetRewardDays()); i > 0; i--) {
int[][] drop = config.get(weekCardVal.getId()).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]);
}
}
}
weekCardVal.setBuy(false);
weekCardVal.setBugTime(0);
isSave =true;
}else{
isSave = true;
} else {
weekCardVal.setBuy(false);
weekCardVal.setBugTime(0);
isSave = true;
}
}
if(isSave){
if (isSave) {
user.getPlayerInfoManager().setWeekCard(weekCard);
}
if(dropMap.size()>0){
int [][] dropArray= dropMap.entrySet().stream().map(n->new int[]{n.getKey(),n.getValue()}).toArray(int[][]::new);
if (dropMap.size() > 0) {
int[][] dropArray = dropMap.entrySet().stream().map(n -> new int[]{n.getKey(), n.getValue()}).toArray(int[][]::new);
String title = SErrorCodeEerverConfig.getI18NMessage("WeekcardReward_mail_title");
String content = SErrorCodeEerverConfig.getI18NMessage("WeekcardReward_mail_txt");
// 排行奖励
@ -92,70 +90,69 @@ public class WeekCardLogic {
}
}
public List<CommonProto.WeekCard> initAllWeekCardInfo(User user) throws Exception{
long time= user.getPlayerInfoManager().getWeekCardTimeFirst();
if(!TimeUtils.isSameWeek7(time)){
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);
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<>();
if(weekCardType == null || weekCardType.length ==0){
Map<Integer, SWeekcardRotationConfig> config = STableManager.getConfig(SWeekcardRotationConfig.class);
boolean isSaveToDb = false;
List<CommonProto.WeekCard> weekCardList = new ArrayList<>();
if (weekCardType == null || weekCardType.length == 0) {
return weekCardList;
}
for(int i= 1;i<weekCardType.length;i++){
CommonProto.WeekCard.Builder weekCardProto = CommonProto.WeekCard.newBuilder();
//周卡是否存在 判断是否过期
if(!weekCard.containsKey(weekCardType[i])){
weekCard.put(weekCardType[i],new WeekCardInfo(weekCardType[i],false,0,0));
for (int i = 1; i < weekCardType.length; 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;
}
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());
}
weekCardProto.setId(singleWeekCard.getId());
weekCardProto.setIsBuy(singleWeekCard.isBuy());
weekCardProto.setLeaveGetRewardDays(TimeUtils.getDayOfWeek() - singleWeekCard.getLeaveGetRewardDays());
weekCardList.add(weekCardProto.build());
}
if(isSaveToDb){
if (isSaveToDb) {
user.getPlayerInfoManager().setWeekCard(weekCard);
}
return weekCardList;
}
public void buyWeekCard(User user,int weekCardType) throws Exception{
public void buyWeekCard(User user, int weekCardType) throws Exception {
Map<Integer, WeekCardInfo> weekCard = user.getPlayerInfoManager().getWeekCard();
int[] weekType = WeekCardLogic.getInstance().getWeekCardType(user);
if(weekType == null){
if (weekType == null) {
return;
}
//根据礼包id 找出此时开卖的周卡id
int id = 0;
Map<Integer,SWeekcardConfig> config = STableManager.getConfig(SWeekcardConfig.class);
for(int i=1;i<weekType.length;i++){
if(config.containsKey(weekType[i])){
if(config.get(weekType[i]).getRechargeId()== weekCardType){
id = config.get(weekType[i]).getId();
break;
Map<Integer, SWeekcardConfig> config = STableManager.getConfig(SWeekcardConfig.class);
for (int i = 1; i < weekType.length; i++) {
if (config.containsKey(weekType[i])) {
if (config.get(weekType[i]).getRechargeId() == weekCardType) {
id = config.get(weekType[i]).getId();
break;
}
}
}
if(id == 0){
if (id == 0) {
return;
}
if(!weekCard.containsKey(id)){
if (!weekCard.containsKey(id)) {
return;
}
WeekCardInfo singleWeekCard = weekCard.get(id);
@ -165,32 +162,43 @@ public class WeekCardLogic {
user.getPlayerInfoManager().setWeekCard(weekCard);
}
public int[] getWeekCardType(User user) throws Exception{
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();
for (SWeekcardRotationConfig con : config.values()) {
if (con.getTime() == ActivityType.OPEN_TYPE_ROLE) {
long userCreateTime = user.getPlayerInfoManager().getCreateTime();
long startTime = ToolsUtil.getTimeLong(Long.parseLong(con.getStartTime()), Long.parseLong(con.getEndtime()), con.getTime(), userCreateTime, 1);
long endTime = ToolsUtil.getTimeLong(Long.parseLong(con.getStartTime()), Long.parseLong(con.getEndtime()), con.getTime(), userCreateTime, 2);
if (TimeUtils.now() >= startTime && TimeUtils.now() <= endTime) {
return con.getWeekcardType()[0];
}
if(cardType.length>1){
if(level>=cardType[0][0]&&level<=cardType[1][0]){
return cardType[0];
}else {
return cardType[1];
}
if (con.getTime() == ActivityType.OPEN_TYPE_TIME) {
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 (cardType.length > 1) {
if (level >= cardType[0][0] && level <= cardType[1][0]) {
return cardType[0];
} else {
return cardType[1];
}
} else {
return cardType[0];
}
}else {
return cardType[0];
}
}
}
return null;
}
public static class Instance {
public final static WeekCardLogic instance = new WeekCardLogic();
}
}