Fix basic trials not rewarding materials

This commit is contained in:
Melledy
2025-10-29 20:49:34 -07:00
parent d024ab62a8
commit e002bec13a
13 changed files with 147 additions and 57 deletions

View File

@@ -41,6 +41,7 @@ public class GameData {
@Getter private static DataTable<DictionaryEntryDef> DictionaryEntryDataTable = new DataTable<>();
@Getter private static DataTable<DailyInstanceDef> DailyInstanceDataTable = new DataTable<>();
@Getter private static DataTable<DailyInstanceRewardGroupDef> DailyInstanceRewardGroupDataTable = new DataTable<>();
@Getter private static DataTable<RegionBossLevelDef> RegionBossLevelDataTable = new DataTable<>();
@Getter private static DataTable<SkillInstanceDef> SkillInstanceDataTable = new DataTable<>();
@Getter private static DataTable<CharGemInstanceDef> CharGemInstanceDataTable = new DataTable<>();

View File

@@ -1,24 +1,21 @@
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.ItemParamMap;
import emu.nebula.util.JsonUtils;
import lombok.Getter;
@Getter
@ResourceType(name = "DailyInstance.json")
public class DailyInstanceDef extends BaseDef implements InstanceData {
private int Id;
private int AwardDropId;
private int PreLevelId;
private int PreLevelStar;
private int OneStarEnergyConsume;
private int NeedWorldClass;
private String BaseAwardPreview;
private transient ItemParamMap firstRewards;
private transient ItemParamMap rewards;
@Override
public int getId() {
@@ -30,28 +27,40 @@ public class DailyInstanceDef extends BaseDef implements InstanceData {
return OneStarEnergyConsume;
}
public DailyInstanceRewardGroupDef getRewardGroup(int rewardType) {
int groupId = this.getAwardDropId() + rewardType;
return GameData.getDailyInstanceRewardGroupDataTable().get(groupId);
}
@Override
public void onLoad() {
// Init reward maps
this.firstRewards = new ItemParamMap();
this.rewards = new ItemParamMap();
public ItemParamMap getFirstRewards() {
return null;
}
@Override
public ItemParamMap getRewards() {
return null;
}
@Override
public ItemParamMap getFirstRewards(int rewardType) {
var data = this.getRewardGroup(rewardType);
// Parse rewards
var awards = JsonUtils.decodeList(this.BaseAwardPreview, int[].class);
if (awards == null) {
return;
if (data != null) {
return data.getFirstRewards();
} else {
return null;
}
}
@Override
public ItemParamMap getRewards(int rewardType) {
var data = this.getRewardGroup(rewardType);
for (int[] award : awards) {
int itemId = award[0];
int count = award[1];
boolean isFirst = award[2] == 1;
if (isFirst) {
this.firstRewards.put(itemId, count);
} else {
this.rewards.put(itemId, count);
}
if (data != null) {
return data.getRewards();
} else {
return null;
}
}
}

View File

@@ -0,0 +1,47 @@
package emu.nebula.data.resources;
import emu.nebula.data.BaseDef;
import emu.nebula.data.ResourceType;
import emu.nebula.game.inventory.ItemParamMap;
import emu.nebula.util.JsonUtils;
import lombok.Getter;
@Getter
@ResourceType(name = "DailyInstanceRewardGroup.json")
public class DailyInstanceRewardGroupDef extends BaseDef {
private int Id;
private String BaseAwardPreview;
private transient ItemParamMap firstRewards;
private transient ItemParamMap rewards;
@Override
public int getId() {
return Id;
}
@Override
public void onLoad() {
// Init reward maps
this.firstRewards = new ItemParamMap();
this.rewards = new ItemParamMap();
// Parse rewards
var awards = JsonUtils.decodeList(this.BaseAwardPreview, int[].class);
if (awards == null) {
return;
}
for (int[] award : awards) {
int itemId = award[0];
int count = award[1];
boolean isFirst = award[2] == 1;
if (isFirst) {
this.firstRewards.put(itemId, count);
} else {
this.rewards.put(itemId, count);
}
}
}
}

View File

@@ -15,6 +15,14 @@ public interface InstanceData {
public ItemParamMap getRewards();
public default ItemParamMap getFirstRewards(int rewardType) {
return this.getFirstRewards();
}
public default ItemParamMap getRewards(int rewardType) {
return this.getRewards();
}
/**
* Checks if the player has enough energy to complete this instance
* @return true if the player has enough energy

View File

@@ -19,7 +19,6 @@ import emu.nebula.proto.Public.WeekBossLevel;
import it.unimi.dsi.fastutil.ints.Int2IntMap;
import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap;
import lombok.Getter;
import lombok.Setter;
@Getter
@Entity(value = "instances", useDiscriminator = false)
@@ -33,8 +32,8 @@ public class InstanceManager extends PlayerManager implements GameDatabaseObject
private Int2IntMap charGemLog;
private Int2IntMap weekBossLog;
@Setter
private transient int curInstanceId;
private transient int rewardType;
@Deprecated // Morphia
public InstanceManager() {
@@ -54,6 +53,15 @@ public class InstanceManager extends PlayerManager implements GameDatabaseObject
this.save();
}
public void setCurInstanceId(int id) {
this.setCurInstanceId(id, 0);
}
public void setCurInstanceId(int id, int rewardType) {
this.curInstanceId = id;
this.rewardType = rewardType;
}
public void saveInstanceLog(Int2IntMap log, String logName, int id, int newStar) {
// Get current star
int star = log.get(id);

View File

@@ -197,6 +197,12 @@ public class Inventory extends PlayerManager {
changes = new PlayerChangeInfo();
}
// Sanity
if (params == null || params.isEmpty()) {
return changes;
}
// Add items
for (var param : params.getEntrySet()) {
this.addItem(param.getIntKey(), param.getIntValue(), changes);
}
@@ -222,6 +228,12 @@ public class Inventory extends PlayerManager {
changes = new PlayerChangeInfo();
}
// Sanity
if (params == null || params.isEmpty()) {
return changes;
}
// Remove items
for (var param : params.getEntrySet()) {
this.removeItem(param.getIntKey(), param.getIntValue(), changes);
}

View File

@@ -4,6 +4,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
import emu.nebula.proto.Public.Item;
import emu.nebula.proto.Public.ItemInfo;
import emu.nebula.proto.Public.ItemTpl;
import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap;
@@ -60,6 +61,8 @@ public class ItemParamMap extends Int2IntOpenHashMap {
return this.int2IntEntrySet();
}
// Converters (lists/streams)
public List<ItemParam> toList() {
List<ItemParam> list = new ArrayList<>();
@@ -76,6 +79,12 @@ public class ItemParamMap extends Int2IntOpenHashMap {
.map(e -> ItemTpl.newInstance().setTid(e.getIntKey()).setQty(e.getIntValue()));
}
public Stream<Item> toItemProtoStream() {
return getEntrySet()
.stream()
.map(e -> Item.newInstance().setTid(e.getIntKey()).setQty(e.getIntValue()));
}
// Helpers
public static ItemParamMap fromTemplates(RepeatedMessage<ItemTpl> items) {

View File

@@ -16,19 +16,14 @@ public class HandlerCharGemInstanceApplyReq extends NetHandler {
var req = CharGemInstanceApplyReq.parseFrom(message);
var data = GameData.getCharGemInstanceDataTable().get(req.getId());
if (data == null) {
if (data == null || !data.hasEnergy(session.getPlayer())) {
return this.encodeMsg(NetMsgId.char_gem_instance_apply_failed_ack);
}
// Check player energy
if (data.getEnergyConsume() > session.getPlayer().getEnergy()) {
return this.encodeMsg(NetMsgId.char_gem_instance_apply_failed_ack);
}
// Set player
// Set player instance id
session.getPlayer().getInstanceManager().setCurInstanceId(req.getId());
// Template
// Send response
return this.encodeMsg(NetMsgId.char_gem_instance_apply_succeed_ack);
}

View File

@@ -16,19 +16,19 @@ public class HandlerDailyInstanceApplyReq extends NetHandler {
var req = DailyInstanceApplyReq.parseFrom(message);
var data = GameData.getDailyInstanceDataTable().get(req.getId());
if (data == null) {
if (data == null || !data.hasEnergy(session.getPlayer())) {
return this.encodeMsg(NetMsgId.daily_instance_apply_failed_ack);
}
// Check player energy
if (data.getEnergyConsume() > session.getPlayer().getEnergy()) {
// Check reward group
if (data.getRewardGroup(req.getRewardType()) == null) {
return this.encodeMsg(NetMsgId.daily_instance_apply_failed_ack);
}
// Set player
session.getPlayer().getInstanceManager().setCurInstanceId(req.getId());
session.getPlayer().getInstanceManager().setCurInstanceId(req.getId(), req.getRewardType());
// Template
// Send response
return this.encodeMsg(NetMsgId.daily_instance_apply_succeed_ack);
}

View File

@@ -41,6 +41,17 @@ public class HandlerDailyInstanceSettleReq extends NetHandler {
.setExp(settleData.getExp())
.setChange(changes.toProto());
// Add reward items
if (settleData.isWin()) {
int rewardType = player.getInstanceManager().getRewardType();
data.getRewards(rewardType).toItemProtoStream().forEach(rsp::addSelect);
if (settleData.isFirst()) {
data.getFirstRewards(rewardType).toItemProtoStream().forEach(rsp::addFirst);
}
}
// Send response
return this.encodeMsg(NetMsgId.daily_instance_settle_succeed_ack, rsp);
}

View File

@@ -16,19 +16,14 @@ public class HandlerRegionBossLevelApplyReq extends NetHandler {
var req = RegionBossLevelApplyReq.parseFrom(message);
var data = GameData.getRegionBossLevelDataTable().get(req.getId());
if (data == null) {
if (data == null || !data.hasEnergy(session.getPlayer())) {
return this.encodeMsg(NetMsgId.region_boss_level_apply_failed_ack);
}
// Check player energy
if (data.getEnergyConsume() > session.getPlayer().getEnergy()) {
return this.encodeMsg(NetMsgId.region_boss_level_apply_failed_ack);
}
// Set player
// Set player instance id
session.getPlayer().getInstanceManager().setCurInstanceId(req.getId());
// Template
// Send response
return this.encodeMsg(NetMsgId.region_boss_level_apply_succeed_ack);
}

View File

@@ -16,19 +16,14 @@ public class HandlerSkillInstanceApplyReq extends NetHandler {
var req = SkillInstanceApplyReq.parseFrom(message);
var data = GameData.getSkillInstanceDataTable().get(req.getId());
if (data == null) {
if (data == null || !data.hasEnergy(session.getPlayer())) {
return this.encodeMsg(NetMsgId.skill_instance_apply_failed_ack);
}
// Check player energy
if (data.getEnergyConsume() > session.getPlayer().getEnergy()) {
return this.encodeMsg(NetMsgId.skill_instance_apply_failed_ack);
}
// Set player
// Set player instance id
session.getPlayer().getInstanceManager().setCurInstanceId(req.getId());
// Template
// Send response
return this.encodeMsg(NetMsgId.skill_instance_apply_succeed_ack);
}

View File

@@ -16,14 +16,14 @@ public class HandlerWeekBossApplyReq extends NetHandler {
var req = WeekBossApplyReq.parseFrom(message);
var data = GameData.getWeekBossLevelDataTable().get(req.getId());
if (data == null) {
if (data == null || !data.hasEnergy(session.getPlayer())) {
return this.encodeMsg(NetMsgId.week_boss_apply_failed_ack);
}
// Set player
// Set player instance id
session.getPlayer().getInstanceManager().setCurInstanceId(req.getId());
// Template
// Send response
return this.encodeMsg(NetMsgId.week_boss_apply_succeed_ack);
}