罗浮逻辑小优化

(cherry picked from commit 4073fc2579)
master_haizei01
grimm 2024-05-11 17:21:32 +08:00
parent f5eb45b65e
commit cf2e4e939e
2 changed files with 52 additions and 28 deletions

View File

@ -71,7 +71,7 @@ public class GetWorldArenaInfoRequestHandler extends BaseHandler<WorldProto.GetW
else if (luofuState == LuofuLogic.INIT_RANK) {
throw new ErrorTableException(176);//准备阶段
}
else if (luofuState == LuofuLogic.SENDR_EWARD) {
else if (luofuState == LuofuLogic.SEND_REWARD) {
throw new ErrorTableException(177);//发奖阶段
}
else {

View File

@ -51,7 +51,7 @@ public class LuofuLogic {
public static final int REGISTER = 1; // 报名
public static final int INIT_RANK = 2; // 初始化排行榜
public static final int FIGHT = 3; // 战斗
public static final int SENDR_EWARD = 4; //发奖
public static final int SEND_REWARD = 4; // 发奖
/**
*
@ -69,34 +69,47 @@ public class LuofuLogic {
private static int getState(){
long now = TimeUtils.now();
SMServerArenaSetting luofuSetting = SMServerArenaSetting.map.get(1);
Long[] timeLong = luofuSetting.getTimeLong();
// 每个阶段的初始时间
long registerStart = timeLong[0], registerEnd = timeLong[1];
long initRankStart = timeLong[2], initRankEnd = timeLong[3];
long fightStart = timeLong[4], fightEnd = timeLong[5];
long sendRewardStart = timeLong[6], sendRewardEnd = timeLong[7];
// 每个阶段的间隔时间
SMServerArenaSetting setting = SMServerArenaSetting.map.get(1);
if (setting == null) {
// Handle the situation when the setting is null, possibly return an error or throw an exception.
return -1;
}
Long[] timeIntervals = setting.getTimeLong();
if (timeIntervals.length < 8) {
// Handle the situation when the timeIntervals array is too short, possibly return an error or throw an exception.
return -1;
}
// Each phase's start and end times
long registerStart = timeIntervals[0], registerEnd = timeIntervals[1];
long initRankStart = timeIntervals[2], initRankEnd = timeIntervals[3];
long fightStart = timeIntervals[4], fightEnd = timeIntervals[5];
long sendRewardStart = timeIntervals[6], sendRewardEnd = timeIntervals[7];
// Each phase's duration
long registerInterval = registerEnd - registerStart;
long initRankInterval = initRankEnd - initRankStart;
long fightInterval = fightEnd - fightStart;
long sendRewardInterval = sendRewardEnd - sendRewardStart;
// 最近的开始时间
// The most recent start time
long startTime = TimeUtils.getLatelyTime(registerStart, sendRewardEnd - registerStart, now);
if (now >= startTime && now < startTime + registerInterval){
return REGISTER;//报名阶段
return REGISTER; // Registration phase
}
else if (now >= startTime + registerInterval && now < startTime + registerInterval + initRankInterval){
return INIT_RANK;//初始化排行榜阶段
return INIT_RANK; // Initial ranking phase
}
else if (now >= startTime + registerInterval + initRankInterval && now < startTime + registerInterval + initRankInterval + fightInterval){
return FIGHT;//战斗阶段
return FIGHT; // Fighting phase
}
else if (now >= startTime + registerInterval + initRankInterval + fightInterval && now < startTime + registerInterval + initRankInterval + fightInterval + sendRewardInterval){
return SENDR_EWARD;//发奖阶段
return SEND_REWARD; // Reward sending phase (fixed the typo)
}
else {
return 0;//未在功能时间内
return 0; // Not within the functional time
}
}
@ -109,7 +122,7 @@ public class LuofuLogic {
LOGGER.info("罗浮争锋 准备时间到......");
TaskKit.scheduleOne(this::initRankRobot,0);
}
else if (state == SENDR_EWARD){
else if (state == SEND_REWARD){
LOGGER.info("罗浮争锋 发奖时间到......");
TaskKit.scheduleOne(this::luoFuSendReward,0);
}
@ -237,8 +250,8 @@ public class LuofuLogic {
*
*/
public void initRankRobot() {
Thread.currentThread().setName("luofu_arena_init_rank");
long start = TimeUtils.now();
LOGGER.info("罗浮争锋,初始化排行榜开始......当前时间:{} ",TimeUtils.getTimeStamp2(start));
int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup();
if (crossGroup == -1) {
LOGGER.error("罗浮争锋初始化退出, 服务器未分组!耗时:{} ms, 当前时间:{}", TimeUtils.now() - start, TimeUtils.getTimeStamp2(TimeUtils.now()));
@ -332,8 +345,8 @@ public class LuofuLogic {
*
*/
public void luoFuSendReward() {
Thread.currentThread().setName("luofu_arena_send_reward");
long start = TimeUtils.now();
LOGGER.info("罗浮争锋,发奖开始......当前时间:{} ",TimeUtils.getTimeStamp2(start));
int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup();
if (crossGroup == -1) {
LOGGER.error("罗浮争锋发奖退出, 服务器未分组!耗时:{} ms, 当前时间:{}", TimeUtils.now() - start, TimeUtils.getTimeStamp2(TimeUtils.now()));
@ -433,19 +446,30 @@ public class LuofuLogic {
private TreeSet<Integer> getMatchID(int index) {
// 玩家排名 获取配置
TreeMap<Integer, Integer> rank2miss = SMServerArenaMatchConfig.rank2miss;
Integer integer = rank2miss.floorKey(index);
Integer integer1 = rank2miss.get(integer);
TreeSet<Integer> objects = new TreeSet<>();
Integer configIndex = rank2miss.floorKey(index);
if (configIndex == null) {
// 处理configIndex为空的情况可以根据实际需求抛出异常或返回默认值
return new TreeSet<>();
}
Integer missType = rank2miss.get(configIndex);
SMServerArenaMatchConfig config = STableManager.getConfig(SMServerArenaMatchConfig.class).get(missType);
if (config == null) {
// 处理serverArenaMatchConfig为空的情况
return new TreeSet<>();
}
//分配对手
SMServerArenaMatchConfig serverArenaMatchConfig = STableManager.getConfig(SMServerArenaMatchConfig.class).get(integer1);
int blockID1 = index - (int) (Math.random() * (serverArenaMatchConfig.getBlock1()[1] - serverArenaMatchConfig.getBlock1()[0]) + serverArenaMatchConfig.getBlock1()[0]);
int blockID2 = index - (int) (Math.random() * (serverArenaMatchConfig.getBlock2()[1] - serverArenaMatchConfig.getBlock2()[0]) + serverArenaMatchConfig.getBlock2()[0]);
int blockID3 = index - (int) (Math.random() * (serverArenaMatchConfig.getBlock3()[1] - serverArenaMatchConfig.getBlock3()[0]) + serverArenaMatchConfig.getBlock3()[0]);
int blockID4 = index - (int) (Math.random() * (serverArenaMatchConfig.getBlock4()[1] - serverArenaMatchConfig.getBlock4()[0]) + serverArenaMatchConfig.getBlock4()[0]);
TreeSet<Integer> objects = new TreeSet<>();
int blockID1 = index - (int) (Math.random() * (config.getBlock1()[1] - config.getBlock1()[0]) + config.getBlock1()[0]);
objects.add(blockID1);
int blockID2 = index - (int) (Math.random() * (config.getBlock2()[1] - config.getBlock2()[0]) + config.getBlock2()[0]);
objects.add(blockID2);
int blockID3 = index - (int) (Math.random() * (config.getBlock3()[1] - config.getBlock3()[0]) + config.getBlock3()[0]);
objects.add(blockID3);
int blockID4 = index - (int) (Math.random() * (config.getBlock4()[1] - config.getBlock4()[0]) + config.getBlock4()[0]);
objects.add(blockID4);
return objects;
}