mirror of
https://github.com/Melledy/Nebula.git
synced 2025-12-13 12:54: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<DictionaryEntryDef> DictionaryEntryDataTable = new DataTable<>();
|
||||||
|
|
||||||
@Getter private static DataTable<DailyInstanceDef> DailyInstanceDataTable = 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<RegionBossLevelDef> RegionBossLevelDataTable = new DataTable<>();
|
||||||
@Getter private static DataTable<SkillInstanceDef> SkillInstanceDataTable = new DataTable<>();
|
@Getter private static DataTable<SkillInstanceDef> SkillInstanceDataTable = new DataTable<>();
|
||||||
@Getter private static DataTable<CharGemInstanceDef> CharGemInstanceDataTable = new DataTable<>();
|
@Getter private static DataTable<CharGemInstanceDef> CharGemInstanceDataTable = new DataTable<>();
|
||||||
|
|||||||
@@ -1,24 +1,21 @@
|
|||||||
package emu.nebula.data.resources;
|
package emu.nebula.data.resources;
|
||||||
|
|
||||||
import emu.nebula.data.BaseDef;
|
import emu.nebula.data.BaseDef;
|
||||||
|
import emu.nebula.data.GameData;
|
||||||
import emu.nebula.data.ResourceType;
|
import emu.nebula.data.ResourceType;
|
||||||
import emu.nebula.game.instance.InstanceData;
|
import emu.nebula.game.instance.InstanceData;
|
||||||
import emu.nebula.game.inventory.ItemParamMap;
|
import emu.nebula.game.inventory.ItemParamMap;
|
||||||
import emu.nebula.util.JsonUtils;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@ResourceType(name = "DailyInstance.json")
|
@ResourceType(name = "DailyInstance.json")
|
||||||
public class DailyInstanceDef extends BaseDef implements InstanceData {
|
public class DailyInstanceDef extends BaseDef implements InstanceData {
|
||||||
private int Id;
|
private int Id;
|
||||||
|
private int AwardDropId;
|
||||||
private int PreLevelId;
|
private int PreLevelId;
|
||||||
private int PreLevelStar;
|
private int PreLevelStar;
|
||||||
private int OneStarEnergyConsume;
|
private int OneStarEnergyConsume;
|
||||||
private int NeedWorldClass;
|
private int NeedWorldClass;
|
||||||
private String BaseAwardPreview;
|
|
||||||
|
|
||||||
private transient ItemParamMap firstRewards;
|
|
||||||
private transient ItemParamMap rewards;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getId() {
|
public int getId() {
|
||||||
@@ -30,28 +27,40 @@ public class DailyInstanceDef extends BaseDef implements InstanceData {
|
|||||||
return OneStarEnergyConsume;
|
return OneStarEnergyConsume;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public DailyInstanceRewardGroupDef getRewardGroup(int rewardType) {
|
||||||
|
int groupId = this.getAwardDropId() + rewardType;
|
||||||
|
return GameData.getDailyInstanceRewardGroupDataTable().get(groupId);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoad() {
|
public ItemParamMap getFirstRewards() {
|
||||||
// Init reward maps
|
return null;
|
||||||
this.firstRewards = new ItemParamMap();
|
}
|
||||||
this.rewards = new ItemParamMap();
|
|
||||||
|
|
||||||
// Parse rewards
|
@Override
|
||||||
var awards = JsonUtils.decodeList(this.BaseAwardPreview, int[].class);
|
public ItemParamMap getRewards() {
|
||||||
if (awards == null) {
|
return null;
|
||||||
return;
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemParamMap getFirstRewards(int rewardType) {
|
||||||
|
var data = this.getRewardGroup(rewardType);
|
||||||
|
|
||||||
|
if (data != null) {
|
||||||
|
return data.getFirstRewards();
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (int[] award : awards) {
|
@Override
|
||||||
int itemId = award[0];
|
public ItemParamMap getRewards(int rewardType) {
|
||||||
int count = award[1];
|
var data = this.getRewardGroup(rewardType);
|
||||||
boolean isFirst = award[2] == 1;
|
|
||||||
|
|
||||||
if (isFirst) {
|
if (data != null) {
|
||||||
this.firstRewards.put(itemId, count);
|
return data.getRewards();
|
||||||
} else {
|
} else {
|
||||||
this.rewards.put(itemId, count);
|
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 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
|
* Checks if the player has enough energy to complete this instance
|
||||||
* @return true if the player has enough energy
|
* @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.Int2IntMap;
|
||||||
import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap;
|
import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@Entity(value = "instances", useDiscriminator = false)
|
@Entity(value = "instances", useDiscriminator = false)
|
||||||
@@ -33,8 +32,8 @@ public class InstanceManager extends PlayerManager implements GameDatabaseObject
|
|||||||
private Int2IntMap charGemLog;
|
private Int2IntMap charGemLog;
|
||||||
private Int2IntMap weekBossLog;
|
private Int2IntMap weekBossLog;
|
||||||
|
|
||||||
@Setter
|
|
||||||
private transient int curInstanceId;
|
private transient int curInstanceId;
|
||||||
|
private transient int rewardType;
|
||||||
|
|
||||||
@Deprecated // Morphia
|
@Deprecated // Morphia
|
||||||
public InstanceManager() {
|
public InstanceManager() {
|
||||||
@@ -54,6 +53,15 @@ public class InstanceManager extends PlayerManager implements GameDatabaseObject
|
|||||||
this.save();
|
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) {
|
public void saveInstanceLog(Int2IntMap log, String logName, int id, int newStar) {
|
||||||
// Get current star
|
// Get current star
|
||||||
int star = log.get(id);
|
int star = log.get(id);
|
||||||
|
|||||||
@@ -197,6 +197,12 @@ public class Inventory extends PlayerManager {
|
|||||||
changes = new PlayerChangeInfo();
|
changes = new PlayerChangeInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Sanity
|
||||||
|
if (params == null || params.isEmpty()) {
|
||||||
|
return changes;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add items
|
||||||
for (var param : params.getEntrySet()) {
|
for (var param : params.getEntrySet()) {
|
||||||
this.addItem(param.getIntKey(), param.getIntValue(), changes);
|
this.addItem(param.getIntKey(), param.getIntValue(), changes);
|
||||||
}
|
}
|
||||||
@@ -222,6 +228,12 @@ public class Inventory extends PlayerManager {
|
|||||||
changes = new PlayerChangeInfo();
|
changes = new PlayerChangeInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Sanity
|
||||||
|
if (params == null || params.isEmpty()) {
|
||||||
|
return changes;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove items
|
||||||
for (var param : params.getEntrySet()) {
|
for (var param : params.getEntrySet()) {
|
||||||
this.removeItem(param.getIntKey(), param.getIntValue(), changes);
|
this.removeItem(param.getIntKey(), param.getIntValue(), changes);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
import emu.nebula.proto.Public.Item;
|
||||||
import emu.nebula.proto.Public.ItemInfo;
|
import emu.nebula.proto.Public.ItemInfo;
|
||||||
import emu.nebula.proto.Public.ItemTpl;
|
import emu.nebula.proto.Public.ItemTpl;
|
||||||
import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap;
|
import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap;
|
||||||
@@ -60,6 +61,8 @@ public class ItemParamMap extends Int2IntOpenHashMap {
|
|||||||
return this.int2IntEntrySet();
|
return this.int2IntEntrySet();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Converters (lists/streams)
|
||||||
|
|
||||||
public List<ItemParam> toList() {
|
public List<ItemParam> toList() {
|
||||||
List<ItemParam> list = new ArrayList<>();
|
List<ItemParam> list = new ArrayList<>();
|
||||||
|
|
||||||
@@ -76,6 +79,12 @@ public class ItemParamMap extends Int2IntOpenHashMap {
|
|||||||
.map(e -> ItemTpl.newInstance().setTid(e.getIntKey()).setQty(e.getIntValue()));
|
.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
|
// Helpers
|
||||||
|
|
||||||
public static ItemParamMap fromTemplates(RepeatedMessage<ItemTpl> items) {
|
public static ItemParamMap fromTemplates(RepeatedMessage<ItemTpl> items) {
|
||||||
|
|||||||
@@ -16,19 +16,14 @@ public class HandlerCharGemInstanceApplyReq extends NetHandler {
|
|||||||
var req = CharGemInstanceApplyReq.parseFrom(message);
|
var req = CharGemInstanceApplyReq.parseFrom(message);
|
||||||
|
|
||||||
var data = GameData.getCharGemInstanceDataTable().get(req.getId());
|
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);
|
return this.encodeMsg(NetMsgId.char_gem_instance_apply_failed_ack);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check player energy
|
// Set player instance id
|
||||||
if (data.getEnergyConsume() > session.getPlayer().getEnergy()) {
|
|
||||||
return this.encodeMsg(NetMsgId.char_gem_instance_apply_failed_ack);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set player
|
|
||||||
session.getPlayer().getInstanceManager().setCurInstanceId(req.getId());
|
session.getPlayer().getInstanceManager().setCurInstanceId(req.getId());
|
||||||
|
|
||||||
// Template
|
// Send response
|
||||||
return this.encodeMsg(NetMsgId.char_gem_instance_apply_succeed_ack);
|
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 req = DailyInstanceApplyReq.parseFrom(message);
|
||||||
|
|
||||||
var data = GameData.getDailyInstanceDataTable().get(req.getId());
|
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);
|
return this.encodeMsg(NetMsgId.daily_instance_apply_failed_ack);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check player energy
|
// Check reward group
|
||||||
if (data.getEnergyConsume() > session.getPlayer().getEnergy()) {
|
if (data.getRewardGroup(req.getRewardType()) == null) {
|
||||||
return this.encodeMsg(NetMsgId.daily_instance_apply_failed_ack);
|
return this.encodeMsg(NetMsgId.daily_instance_apply_failed_ack);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set player
|
// 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);
|
return this.encodeMsg(NetMsgId.daily_instance_apply_succeed_ack);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -41,6 +41,17 @@ public class HandlerDailyInstanceSettleReq extends NetHandler {
|
|||||||
.setExp(settleData.getExp())
|
.setExp(settleData.getExp())
|
||||||
.setChange(changes.toProto());
|
.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
|
// Send response
|
||||||
return this.encodeMsg(NetMsgId.daily_instance_settle_succeed_ack, rsp);
|
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 req = RegionBossLevelApplyReq.parseFrom(message);
|
||||||
|
|
||||||
var data = GameData.getRegionBossLevelDataTable().get(req.getId());
|
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);
|
return this.encodeMsg(NetMsgId.region_boss_level_apply_failed_ack);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check player energy
|
// Set player instance id
|
||||||
if (data.getEnergyConsume() > session.getPlayer().getEnergy()) {
|
|
||||||
return this.encodeMsg(NetMsgId.region_boss_level_apply_failed_ack);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set player
|
|
||||||
session.getPlayer().getInstanceManager().setCurInstanceId(req.getId());
|
session.getPlayer().getInstanceManager().setCurInstanceId(req.getId());
|
||||||
|
|
||||||
// Template
|
// Send response
|
||||||
return this.encodeMsg(NetMsgId.region_boss_level_apply_succeed_ack);
|
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 req = SkillInstanceApplyReq.parseFrom(message);
|
||||||
|
|
||||||
var data = GameData.getSkillInstanceDataTable().get(req.getId());
|
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);
|
return this.encodeMsg(NetMsgId.skill_instance_apply_failed_ack);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check player energy
|
// Set player instance id
|
||||||
if (data.getEnergyConsume() > session.getPlayer().getEnergy()) {
|
|
||||||
return this.encodeMsg(NetMsgId.skill_instance_apply_failed_ack);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set player
|
|
||||||
session.getPlayer().getInstanceManager().setCurInstanceId(req.getId());
|
session.getPlayer().getInstanceManager().setCurInstanceId(req.getId());
|
||||||
|
|
||||||
// Template
|
// Send response
|
||||||
return this.encodeMsg(NetMsgId.skill_instance_apply_succeed_ack);
|
return this.encodeMsg(NetMsgId.skill_instance_apply_succeed_ack);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,14 +16,14 @@ public class HandlerWeekBossApplyReq extends NetHandler {
|
|||||||
var req = WeekBossApplyReq.parseFrom(message);
|
var req = WeekBossApplyReq.parseFrom(message);
|
||||||
|
|
||||||
var data = GameData.getWeekBossLevelDataTable().get(req.getId());
|
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);
|
return this.encodeMsg(NetMsgId.week_boss_apply_failed_ack);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set player
|
// Set player instance id
|
||||||
session.getPlayer().getInstanceManager().setCurInstanceId(req.getId());
|
session.getPlayer().getInstanceManager().setCurInstanceId(req.getId());
|
||||||
|
|
||||||
// Template
|
// Send response
|
||||||
return this.encodeMsg(NetMsgId.week_boss_apply_succeed_ack);
|
return this.encodeMsg(NetMsgId.week_boss_apply_succeed_ack);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user