Skip to content

Commit f007b66

Browse files
committed
Implement Finale Echoing (Permanent)
- Sweeps and quests this game mode are not implemented yet
1 parent e0a6659 commit f007b66

23 files changed

Lines changed: 989 additions & 7 deletions

src/main/java/emu/nebula/GameConstants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public class GameConstants {
2222
public static final int ENERGY_BUY_ITEM_ID = GEM_ITEM_ID;
2323
public static final int EXP_ITEM_ID = 21;
2424
public static final int WEEKLY_ENTRY_ITEM_ID = 28;
25+
public static final int JOINT_DRILL_TICKET_ID = 36;
2526

2627
public static final int MAX_ENERGY = 240;
2728
public static final int ENERGY_REGEN_TIME = 360; // Seconds

src/main/java/emu/nebula/data/GameData.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,9 @@ public class GameData {
166166
@Getter private static DataTable<TrialControlDef> TrialControlDataTable = new DataTable<>();
167167
@Getter private static DataTable<TrialGroupDef> TrialGroupDataTable = new DataTable<>();
168168

169+
// Activity: Joint Drill
170+
@Getter private static DataTable<JointDrill2LevelDef> JointDrill2LevelDataTable = new DataTable<>();
171+
169172
// Activity: Levels
170173
@Getter private static DataTable<ActivityLevelsLevelDef> ActivityLevelsLevelDataTable = new DataTable<>();
171174

src/main/java/emu/nebula/data/resources/ActivityDef.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,12 @@
1010
public class ActivityDef extends BaseDef {
1111
private int Id;
1212
private int ActivityType;
13+
//private String StartTime;
14+
//private String EndTime;
1315

1416
private transient emu.nebula.game.activity.ActivityType type;
17+
//private transient long startTimeSec;
18+
//private transient long endTimeSec;
1519

1620
@Override
1721
public int getId() {
@@ -20,6 +24,20 @@ public int getId() {
2024

2125
@Override
2226
public void onLoad() {
27+
// Cache activity type
2328
this.type = emu.nebula.game.activity.ActivityType.getByValue(this.ActivityType);
29+
30+
// Parse start/end times
31+
/*
32+
if (this.StartTime != null) {
33+
var start = OffsetDateTime.parse(this.StartTime);
34+
this.startTimeSec = start.toEpochSecond();
35+
}
36+
37+
if (this.EndTime != null) {
38+
var end = OffsetDateTime.parse(this.EndTime);
39+
this.endTimeSec = end.toEpochSecond();
40+
}
41+
*/
2442
}
2543
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package emu.nebula.data.resources;
2+
3+
import emu.nebula.data.BaseDef;
4+
import emu.nebula.data.ResourceType;
5+
import emu.nebula.game.inventory.ItemRewardList;
6+
import emu.nebula.game.inventory.ItemRewardParam;
7+
import emu.nebula.util.JsonUtils;
8+
import lombok.Getter;
9+
10+
@Getter
11+
@ResourceType(name = "JointDrill_2_Level.json")
12+
public class JointDrill2LevelDef extends BaseDef {
13+
private int Id;
14+
private int BattleTime;
15+
16+
private int TimeScore;
17+
private int ScorePerSec;
18+
private int LevelScore;
19+
private int BaseHpScore;
20+
21+
private String RewardPreview;
22+
23+
private transient ItemRewardList firstRewards;
24+
private transient ItemRewardList rewards;
25+
26+
@Override
27+
public int getId() {
28+
return Id;
29+
}
30+
31+
@Override
32+
public void onLoad() {
33+
// Init reward lists
34+
this.firstRewards = new ItemRewardList();
35+
this.rewards = new ItemRewardList();
36+
37+
// Parse rewards
38+
var awards = JsonUtils.decodeList(this.RewardPreview, int[].class);
39+
if (awards == null) {
40+
return;
41+
}
42+
43+
for (int[] award : awards) {
44+
int itemId = award[0];
45+
int min = award[1];
46+
int max = min;
47+
boolean isFirst = award[award.length - 1] == 1;
48+
49+
if (min == -1) {
50+
min = 0;
51+
max = 1;
52+
}
53+
54+
var reward = new ItemRewardParam(itemId, min, max);
55+
56+
if (isFirst) {
57+
this.firstRewards.add(reward);
58+
} else {
59+
this.rewards.add(reward);
60+
}
61+
}
62+
}
63+
}

src/main/java/emu/nebula/game/GameContext.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import emu.nebula.game.activity.ActivityModule;
1212
import emu.nebula.game.ban.BanModule;
1313
import emu.nebula.game.gacha.GachaModule;
14+
import emu.nebula.game.jointdrill.JointDrillModule;
1415
import emu.nebula.game.player.PlayerModule;
1516
import emu.nebula.game.scoreboss.ScoreBossModule;
1617
import emu.nebula.game.tutorial.TutorialModule;
@@ -31,6 +32,7 @@ public class GameContext implements Runnable {
3132
private final TutorialModule tutorialModule;
3233
private final ActivityModule activityModule;
3334
private final ScoreBossModule scoreBossModule;
35+
private final JointDrillModule jointDrillModule;
3436
private final BanModule banModule;
3537

3638
// Game loop
@@ -50,6 +52,7 @@ public GameContext() {
5052
this.tutorialModule = new TutorialModule(this);
5153
this.activityModule = new ActivityModule(this);
5254
this.scoreBossModule = new ScoreBossModule(this);
55+
this.jointDrillModule = new JointDrillModule(this);
5356
this.banModule = new BanModule(this);
5457

5558
// Run game loop

src/main/java/emu/nebula/game/activity/ActivityManager.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ private GameActivity createActivity(int id) {
132132
case LoginReward -> new LoginRewardActivity(this, data);
133133
case TowerDefense -> new TowerDefenseActivity(this, data);
134134
case Trial -> new TrialActivity(this, data);
135+
case JointDrill -> new JointDrillActivity(this, data);
135136
case Levels -> new LevelsActivity(this, data);
136137
case Task -> new TaskActivity(this, data);
137138
case Shop -> new ShopActivity(this, data);

src/main/java/emu/nebula/game/activity/ActivityModule.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ public ActivityModule(GameContext context) {
4444
this.activities.add(1010503);
4545
this.activities.add(1010504);
4646

47+
// ===== Joint Drills (Finale Echoing) =====
48+
this.activities.add(510003);
49+
4750
// ===== Etc Events =====
4851

4952
// Trial activities

src/main/java/emu/nebula/game/activity/GameActivity.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,16 @@ public GameActivity(ActivityManager manager, ActivityDef data) {
3131
public Player getPlayer() {
3232
return this.getManager().getPlayer();
3333
}
34+
35+
public long getStartTime() {
36+
return 1;
37+
}
38+
39+
public long getEndTime() {
40+
return Integer.MAX_VALUE;
41+
}
42+
43+
// Database
3444

3545
public void save() {
3646
Nebula.getGameDatabase().update(
@@ -52,8 +62,8 @@ public void onLogin() {
5262
public Activity toProto() {
5363
var proto = Activity.newInstance()
5464
.setId(this.getId())
55-
.setStartTime(1)
56-
.setEndTime(Integer.MAX_VALUE);
65+
.setStartTime(this.getStartTime())
66+
.setEndTime(this.getEndTime());
5767

5868
return proto;
5969
}

0 commit comments

Comments
 (0)