Handle randomized daily instance rewards

This commit is contained in:
Melledy
2025-11-08 18:03:53 -08:00
parent 34e4b1c3f8
commit b9e8be97d1
20 changed files with 313 additions and 146 deletions

View File

@@ -1,10 +1,14 @@
package emu.nebula.data.resources;
import java.util.ArrayList;
import java.util.List;
import emu.nebula.data.BaseDef;
import emu.nebula.data.ResourceType;
import emu.nebula.game.instance.InstanceData;
import emu.nebula.game.inventory.ItemParamMap;
import emu.nebula.game.instance.InstanceRewardParam;
import emu.nebula.util.JsonUtils;
import lombok.Getter;
@Getter
@@ -15,8 +19,8 @@ public class WeekBossLevelDef extends BaseDef implements InstanceData {
private int NeedWorldClass;
private String BaseAwardPreview;
private transient ItemParamMap firstRewards;
private transient ItemParamMap rewards;
private transient List<InstanceRewardParam> firstRewards;
private transient List<InstanceRewardParam> rewards;
@Override
public int getId() {
@@ -29,9 +33,9 @@ public class WeekBossLevelDef extends BaseDef implements InstanceData {
@Override
public void onLoad() {
// Init reward maps
this.firstRewards = new ItemParamMap();
this.rewards = new ItemParamMap();
// Init reward lists
this.firstRewards = new ArrayList<>();
this.rewards = new ArrayList<>();
// Parse rewards
var awards = JsonUtils.decodeList(this.BaseAwardPreview, int[].class);
@@ -41,13 +45,21 @@ public class WeekBossLevelDef extends BaseDef implements InstanceData {
for (int[] award : awards) {
int itemId = award[0];
int count = award[1];
boolean isFirst = award[2] == 1;
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 InstanceRewardParam(itemId, min, max);
if (isFirst) {
this.firstRewards.put(itemId, count);
this.firstRewards.add(reward);
} else {
this.rewards.put(itemId, count);
this.rewards.add(reward);
}
}
}