mirror of
https://github.com/Melledy/Nebula.git
synced 2025-12-12 20:34:36 +01:00
Fix basic trials not rewarding materials
This commit is contained in:
@@ -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<>();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user