Implement Finale Echoing (Permanent)

- Sweeps and quests this game mode are not implemented yet
This commit is contained in:
Melledy
2026-03-15 02:33:40 -07:00
parent e0a6659c38
commit f007b6624f
23 changed files with 989 additions and 7 deletions
@@ -166,6 +166,9 @@ public class GameData {
@Getter private static DataTable<TrialControlDef> TrialControlDataTable = new DataTable<>();
@Getter private static DataTable<TrialGroupDef> TrialGroupDataTable = new DataTable<>();
// Activity: Joint Drill
@Getter private static DataTable<JointDrill2LevelDef> JointDrill2LevelDataTable = new DataTable<>();
// Activity: Levels
@Getter private static DataTable<ActivityLevelsLevelDef> ActivityLevelsLevelDataTable = new DataTable<>();
@@ -10,8 +10,12 @@ import lombok.Getter;
public class ActivityDef extends BaseDef {
private int Id;
private int ActivityType;
//private String StartTime;
//private String EndTime;
private transient emu.nebula.game.activity.ActivityType type;
//private transient long startTimeSec;
//private transient long endTimeSec;
@Override
public int getId() {
@@ -20,6 +24,20 @@ public class ActivityDef extends BaseDef {
@Override
public void onLoad() {
// Cache activity type
this.type = emu.nebula.game.activity.ActivityType.getByValue(this.ActivityType);
// Parse start/end times
/*
if (this.StartTime != null) {
var start = OffsetDateTime.parse(this.StartTime);
this.startTimeSec = start.toEpochSecond();
}
if (this.EndTime != null) {
var end = OffsetDateTime.parse(this.EndTime);
this.endTimeSec = end.toEpochSecond();
}
*/
}
}
@@ -0,0 +1,63 @@
package emu.nebula.data.resources;
import emu.nebula.data.BaseDef;
import emu.nebula.data.ResourceType;
import emu.nebula.game.inventory.ItemRewardList;
import emu.nebula.game.inventory.ItemRewardParam;
import emu.nebula.util.JsonUtils;
import lombok.Getter;
@Getter
@ResourceType(name = "JointDrill_2_Level.json")
public class JointDrill2LevelDef extends BaseDef {
private int Id;
private int BattleTime;
private int TimeScore;
private int ScorePerSec;
private int LevelScore;
private int BaseHpScore;
private String RewardPreview;
private transient ItemRewardList firstRewards;
private transient ItemRewardList rewards;
@Override
public int getId() {
return Id;
}
@Override
public void onLoad() {
// Init reward lists
this.firstRewards = new ItemRewardList();
this.rewards = new ItemRewardList();
// Parse rewards
var awards = JsonUtils.decodeList(this.RewardPreview, int[].class);
if (awards == null) {
return;
}
for (int[] award : awards) {
int itemId = award[0];
int min = award[1];
int max = min;
boolean isFirst = award[award.length - 1] == 1;
if (min == -1) {
min = 0;
max = 1;
}
var reward = new ItemRewardParam(itemId, min, max);
if (isFirst) {
this.firstRewards.add(reward);
} else {
this.rewards.add(reward);
}
}
}
}