Fix emblem trial rewards

This commit is contained in:
Melledy committed 2026-10-20 22:21:13 -07:00
1 parent bd4aabd464
commit 3878d1ff38
9 files changed
+125 -13

No files matched your search

@@ -107,6 +107,7 @@ public class GameData {
@Getter private static DataTable<RegionBossLevelDef> RegionBossLevelDataTable = new DataTable<>();
@Getter private static DataTable<SkillInstanceDef> SkillInstanceDataTable = new DataTable<>();
@Getter private static DataTable<CharGemInstanceDef> CharGemInstanceDataTable = new DataTable<>();
@Getter private static DataTable<CharGemInstanceRewardGroupDef> CharGemInstanceRewardGroupDataTable = new DataTable<>();
@Getter private static DataTable<WeekBossLevelDef> WeekBossLevelDataTable = new DataTable<>();
// ===== Star Tower =====
@@ -1,6 +1,7 @@
package emu.nebula.data.resources;
import emu.nebula.data.BaseDef;
import emu.nebula.data.GameData;
import emu.nebula.data.ResourceType;
import emu.nebula.game.instance.InstanceData;
import emu.nebula.game.inventory.ItemRewardList;
@@ -17,6 +18,7 @@ public class CharGemInstanceDef extends BaseDef implements InstanceData {
private int PreLevelStar;
private int NeedWorldClass;
private int EnergyConsume;
private int DropId;
private String BaseAwardPreview;
private transient ItemRewardList firstRewards;
@@ -59,4 +61,36 @@ public class CharGemInstanceDef extends BaseDef implements InstanceData {
}
}
}
public CharGemInstanceRewardGroupDef getRewardGroup(int rewardType) {
// Instances without a drop id don't have selectable rewards
if (this.DropId <= 0) {
return null;
}
int groupId = this.getDropId() + rewardType;
return GameData.getCharGemInstanceRewardGroupDataTable().get(groupId);
}
@Override
public ItemRewardList getFirstRewards(int rewardType) {
var data = this.getRewardGroup(rewardType);
if (data != null) {
return data.getFirstRewards();
} else {
return this.firstRewards;
}
}
@Override
public ItemRewardList getRewards(int rewardType) {
var data = this.getRewardGroup(rewardType);
if (data != null) {
return data.getRewards();
} else {
return this.rewards;
}
}
}
@@ -0,0 +1,59 @@
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 = "CharGemInstanceRewardGroup.json")
public class CharGemInstanceRewardGroupDef extends BaseDef {
private int GroupId;
private int RewardType;
private String BaseAwardPreview;
// Parsed rewards
private transient ItemRewardList firstRewards;
private transient ItemRewardList rewards;
@Override
public int getId() {
return GroupId + RewardType;
}
@Override
public void onLoad() {
// Init reward lists
this.firstRewards = new ItemRewardList();
this.rewards = new ItemRewardList();
// Parse rewards
var awards = JsonUtils.decodeList(this.BaseAwardPreview, int[].class);
if (awards == null) {
return;
}
for (int[] award : awards) {
int itemId = award[0];
int min = award[1];
int max = award.length >= 4 ? award[2] : 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);
}
}
}
}
@@ -27,6 +27,12 @@ public class DailyInstanceDef extends BaseDef implements InstanceData {
return OneStarEnergyConsume;
}
@Override
public int getMaxStar() {
// Daily instance stars are saved as a bitmask (1 + 2 + 4)
return 7;
}
public DailyInstanceRewardGroupDef getRewardGroup(int rewardType) {
int groupId = this.getAwardDropId() + rewardType;
return GameData.getDailyInstanceRewardGroupDataTable().get(groupId);
@@ -15,6 +15,7 @@ public class DailyInstanceRewardGroupDef extends BaseDef {
private int DailyRewardType;
private String BaseAwardPreview;
// Parsed rewards
private transient ItemRewardList firstRewards;
private transient ItemRewardList rewards;