mirror of
https://github.com/Melledy/Nebula.git
synced 2026-11-04 21:36:51 +01:00
Fix emblem trial rewards
This commit is contained in:
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;
|
||||
|
||||
|
||||
@@ -11,6 +11,14 @@ public interface InstanceData {
|
||||
|
||||
public int getEnergyConsume();
|
||||
|
||||
/**
|
||||
* Gets the highest star value that can be saved for this instance
|
||||
* @return the max star value
|
||||
*/
|
||||
public default int getMaxStar() {
|
||||
return 3;
|
||||
}
|
||||
|
||||
// Item rewards
|
||||
|
||||
public ItemRewardList getFirstRewards();
|
||||
|
||||
@@ -84,19 +84,12 @@ public class InstanceManager extends PlayerManager {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Check if we have 3 starred this instance
|
||||
// Get star count of our best run
|
||||
int stars = log.get(data.getId());
|
||||
|
||||
if (rewardType > 0) {
|
||||
// Daily instance
|
||||
if (stars != 7) {
|
||||
return null;
|
||||
}
|
||||
} else {
|
||||
// Other instances
|
||||
if (stars != 3) {
|
||||
return null;
|
||||
}
|
||||
// Check if we have 3 starred this instance
|
||||
if (stars != data.getMaxStar()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Check energy cost
|
||||
|
||||
@@ -20,8 +20,13 @@ public class HandlerCharGemInstanceApplyReq extends NetHandler {
|
||||
return session.encodeMsg(NetMsgId.char_gem_instance_apply_failed_ack);
|
||||
}
|
||||
|
||||
// Check reward group
|
||||
if (data.getDropId() > 0 && data.getRewardGroup(req.getRewardType()) == null) {
|
||||
return session.encodeMsg(NetMsgId.char_gem_instance_apply_failed_ack);
|
||||
}
|
||||
|
||||
// Set player instance id
|
||||
session.getPlayer().getInstanceManager().setCurInstanceId(req.getId());
|
||||
session.getPlayer().getInstanceManager().setCurInstanceId(req.getId(), req.getRewardType());
|
||||
|
||||
// Send response
|
||||
return session.encodeMsg(NetMsgId.char_gem_instance_apply_succeed_ack);
|
||||
|
||||
@@ -28,12 +28,17 @@ public class HandlerCharGemInstanceSweepReq extends NetHandler {
|
||||
return session.encodeMsg(NetMsgId.char_gem_instance_sweep_failed_ack);
|
||||
}
|
||||
|
||||
// Check reward group
|
||||
if (data.getDropId() > 0 && data.getRewardGroup(req.getRewardType()) == null) {
|
||||
return session.encodeMsg(NetMsgId.char_gem_instance_sweep_failed_ack);
|
||||
}
|
||||
|
||||
// Sweep
|
||||
var change = session.getPlayer().getInstanceManager().sweepInstance(
|
||||
data,
|
||||
QuestCondition.CharGemInstanceClearTotal,
|
||||
session.getPlayer().getProgress().getCharGemLog(),
|
||||
0,
|
||||
req.getRewardType(),
|
||||
req.getTimes()
|
||||
);
|
||||
|
||||
|
||||
Reference in new issue
Block a user