diff --git a/src/main/java/emu/nebula/data/resources/CharGemInstanceDef.java b/src/main/java/emu/nebula/data/resources/CharGemInstanceDef.java index b6d2274..9e66164 100644 --- a/src/main/java/emu/nebula/data/resources/CharGemInstanceDef.java +++ b/src/main/java/emu/nebula/data/resources/CharGemInstanceDef.java @@ -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 @@ -17,8 +21,8 @@ public class CharGemInstanceDef extends BaseDef implements InstanceData { private int EnergyConsume; private String BaseAwardPreview; - private transient ItemParamMap firstRewards; - private transient ItemParamMap rewards; + private transient List firstRewards; + private transient List rewards; @Override public int getId() { @@ -27,9 +31,9 @@ public class CharGemInstanceDef 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); @@ -39,13 +43,21 @@ public class CharGemInstanceDef 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); } } } diff --git a/src/main/java/emu/nebula/data/resources/DailyInstanceDef.java b/src/main/java/emu/nebula/data/resources/DailyInstanceDef.java index f029a7e..2913be3 100644 --- a/src/main/java/emu/nebula/data/resources/DailyInstanceDef.java +++ b/src/main/java/emu/nebula/data/resources/DailyInstanceDef.java @@ -1,10 +1,13 @@ package emu.nebula.data.resources; +import java.util.List; + 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.game.instance.InstanceRewardParam; + import lombok.Getter; @Getter @@ -33,17 +36,19 @@ public class DailyInstanceDef extends BaseDef implements InstanceData { } @Override - public ItemParamMap getFirstRewards() { + @Deprecated + public List getFirstRewards() { return null; } @Override - public ItemParamMap getRewards() { + @Deprecated + public List getRewards() { return null; } @Override - public ItemParamMap getFirstRewards(int rewardType) { + public List getFirstRewards(int rewardType) { var data = this.getRewardGroup(rewardType); if (data != null) { @@ -54,7 +59,7 @@ public class DailyInstanceDef extends BaseDef implements InstanceData { } @Override - public ItemParamMap getRewards(int rewardType) { + public List getRewards(int rewardType) { var data = this.getRewardGroup(rewardType); if (data != null) { diff --git a/src/main/java/emu/nebula/data/resources/DailyInstanceRewardGroupDef.java b/src/main/java/emu/nebula/data/resources/DailyInstanceRewardGroupDef.java index bc6803d..cc3bdf0 100644 --- a/src/main/java/emu/nebula/data/resources/DailyInstanceRewardGroupDef.java +++ b/src/main/java/emu/nebula/data/resources/DailyInstanceRewardGroupDef.java @@ -1,8 +1,11 @@ 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.inventory.ItemParamMap; +import emu.nebula.game.instance.InstanceRewardParam; import emu.nebula.util.JsonUtils; import lombok.Getter; @@ -13,8 +16,8 @@ public class DailyInstanceRewardGroupDef extends BaseDef { private int DailyRewardType; private String BaseAwardPreview; - private transient ItemParamMap firstRewards; - private transient ItemParamMap rewards; + private transient List firstRewards; + private transient List rewards; @Override public int getId() { @@ -23,9 +26,9 @@ public class DailyInstanceRewardGroupDef extends BaseDef { @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); @@ -35,13 +38,21 @@ public class DailyInstanceRewardGroupDef extends BaseDef { 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); } } } diff --git a/src/main/java/emu/nebula/data/resources/RegionBossLevelDef.java b/src/main/java/emu/nebula/data/resources/RegionBossLevelDef.java index 27b2b46..af82bfb 100644 --- a/src/main/java/emu/nebula/data/resources/RegionBossLevelDef.java +++ b/src/main/java/emu/nebula/data/resources/RegionBossLevelDef.java @@ -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 @@ -17,8 +21,8 @@ public class RegionBossLevelDef extends BaseDef implements InstanceData { private int EnergyConsume; private String BaseAwardPreview; - private transient ItemParamMap firstRewards; - private transient ItemParamMap rewards; + private transient List firstRewards; + private transient List rewards; @Override public int getId() { @@ -27,9 +31,9 @@ public class RegionBossLevelDef 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); @@ -39,13 +43,21 @@ public class RegionBossLevelDef 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); } } } diff --git a/src/main/java/emu/nebula/data/resources/SkillInstanceDef.java b/src/main/java/emu/nebula/data/resources/SkillInstanceDef.java index ef6644e..e5bcc69 100644 --- a/src/main/java/emu/nebula/data/resources/SkillInstanceDef.java +++ b/src/main/java/emu/nebula/data/resources/SkillInstanceDef.java @@ -1,9 +1,12 @@ 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; @@ -17,8 +20,8 @@ public class SkillInstanceDef extends BaseDef implements InstanceData { private int EnergyConsume; private String BaseAwardPreview; - private transient ItemParamMap firstRewards; - private transient ItemParamMap rewards; + private transient List firstRewards; + private transient List rewards; @Override public int getId() { @@ -27,9 +30,9 @@ public class SkillInstanceDef 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); @@ -39,13 +42,21 @@ public class SkillInstanceDef 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); } } } diff --git a/src/main/java/emu/nebula/data/resources/WeekBossLevelDef.java b/src/main/java/emu/nebula/data/resources/WeekBossLevelDef.java index e42eba4..5cc7644 100644 --- a/src/main/java/emu/nebula/data/resources/WeekBossLevelDef.java +++ b/src/main/java/emu/nebula/data/resources/WeekBossLevelDef.java @@ -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 firstRewards; + private transient List 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); } } } diff --git a/src/main/java/emu/nebula/game/instance/InstanceData.java b/src/main/java/emu/nebula/game/instance/InstanceData.java index 9b620ad..704016b 100644 --- a/src/main/java/emu/nebula/game/instance/InstanceData.java +++ b/src/main/java/emu/nebula/game/instance/InstanceData.java @@ -1,5 +1,7 @@ package emu.nebula.game.instance; +import java.util.List; + import emu.nebula.game.inventory.ItemParamMap; import emu.nebula.game.player.Player; @@ -11,16 +13,36 @@ public interface InstanceData { public int getEnergyConsume(); - public ItemParamMap getFirstRewards(); + // Handle reward generation - public ItemParamMap getRewards(); + public List getFirstRewards(); - public default ItemParamMap getFirstRewards(int rewardType) { - return this.getFirstRewards(); + public default List getFirstRewards(int rewardType) { + return getFirstRewards(); } - public default ItemParamMap getRewards(int rewardType) { - return this.getRewards(); + public default ItemParamMap generateFirstRewards(int rewardType) { + return this.generateRewards(this.getFirstRewards()); + } + + public List getRewards(); + + public default List getRewards(int rewardType) { + return getRewards(); + } + + public default ItemParamMap generateRewards(int rewardType) { + return this.generateRewards(this.getRewards()); + } + + public default ItemParamMap generateRewards(List params) { + var map = new ItemParamMap(); + + for (var param : params) { + map.add(param.getId(), param.getRandomCount()); + } + + return map; } /** diff --git a/src/main/java/emu/nebula/game/instance/InstanceManager.java b/src/main/java/emu/nebula/game/instance/InstanceManager.java index d4a61c5..81eb774 100644 --- a/src/main/java/emu/nebula/game/instance/InstanceManager.java +++ b/src/main/java/emu/nebula/game/instance/InstanceManager.java @@ -1,11 +1,14 @@ package emu.nebula.game.instance; +import java.util.ArrayList; + import dev.morphia.annotations.Entity; import dev.morphia.annotations.Id; import emu.nebula.GameConstants; import emu.nebula.Nebula; import emu.nebula.data.GameData; import emu.nebula.database.GameDatabaseObject; +import emu.nebula.game.inventory.ItemParamMap; import emu.nebula.game.player.Player; import emu.nebula.game.player.PlayerChangeInfo; import emu.nebula.game.player.PlayerManager; @@ -88,20 +91,17 @@ public class InstanceManager extends PlayerManager implements GameDatabaseObject // Handle win if (settleData.isWin()) { - // Reward type - int rewardType = this.getRewardType(); - // Calculate energy and exp settleData.setExp(data.getEnergyConsume()); getPlayer().consumeEnergy(settleData.getExp(), change); - // Awards - getPlayer().getInventory().addItem(GameConstants.EXP_ITEM_ID, settleData.getExp(), change); - getPlayer().getInventory().addItems(data.getRewards(rewardType), change); + // Calculate rewards + settleData.generateRewards(data, this.getRewardType()); - if (settleData.isFirst()) { - getPlayer().getInventory().addItems(data.getFirstRewards(rewardType), change); - } + // Add to inventory + getPlayer().getInventory().addItem(GameConstants.EXP_ITEM_ID, settleData.getExp(), change); + getPlayer().getInventory().addItems(settleData.getRewards(), change); + getPlayer().getInventory().addItems(settleData.getFirstRewards(), change); // Log this.saveInstanceLog(log, logName, data.getId(), star); @@ -146,15 +146,33 @@ public class InstanceManager extends PlayerManager implements GameDatabaseObject return null; } - // Init player change info + // Init variables var change = new PlayerChangeInfo(); + var list = new ArrayList(); // Consume exp getPlayer().consumeEnergy(energyCost, change); - - // Awards getPlayer().getInventory().addItem(GameConstants.EXP_ITEM_ID, energyCost, change); - getPlayer().getInventory().addItems(data.getRewards(rewardType).mulitply(count), change); + + // Calculate total rewards + var totalRewards = new ItemParamMap(); + + for (int i = 0; i < count; i++) { + // Generate rewards for each settle count + var rewards = data.generateRewards(rewardType); + + // Add to reward list + list.add(rewards); + + // Add to total rewards + totalRewards.add(rewards); + } + + // Add total rewards to inventory + getPlayer().getInventory().addItems(totalRewards, change); + + // Set reward list in change info so we can serialize it in the response proto later + change.setExtraData(list); // Quest triggers this.getPlayer().getQuestManager().triggerQuest(questCondition, count); diff --git a/src/main/java/emu/nebula/game/instance/InstanceRewardParam.java b/src/main/java/emu/nebula/game/instance/InstanceRewardParam.java new file mode 100644 index 0000000..51c16f8 --- /dev/null +++ b/src/main/java/emu/nebula/game/instance/InstanceRewardParam.java @@ -0,0 +1,25 @@ +package emu.nebula.game.instance; + +import emu.nebula.util.Utils; +import lombok.Getter; + +@Getter +public class InstanceRewardParam { + public int id; + public int min; + public int max; + + public InstanceRewardParam(int id, int min, int max) { + this.id = id; + this.min = min; + this.max = max; + } + + public int getRandomCount() { + if (this.min == this.max) { + return this.min; + } + + return Utils.randomRange(this.min, this.max); + } +} \ No newline at end of file diff --git a/src/main/java/emu/nebula/game/instance/InstanceSettleData.java b/src/main/java/emu/nebula/game/instance/InstanceSettleData.java index 75b2a19..d7436bf 100644 --- a/src/main/java/emu/nebula/game/instance/InstanceSettleData.java +++ b/src/main/java/emu/nebula/game/instance/InstanceSettleData.java @@ -1,5 +1,6 @@ package emu.nebula.game.instance; +import emu.nebula.game.inventory.ItemParamMap; import lombok.Getter; import lombok.Setter; @@ -9,7 +10,18 @@ public class InstanceSettleData { private boolean isFirst; private int exp; + private ItemParamMap firstRewards; + private ItemParamMap rewards; + public InstanceSettleData() { } + + public void generateRewards(InstanceData data, int rewardType) { + if (this.isFirst) { + this.firstRewards = data.generateFirstRewards(rewardType); + } + + this.rewards = data.generateRewards(rewardType); + } } diff --git a/src/main/java/emu/nebula/game/inventory/ItemParamMap.java b/src/main/java/emu/nebula/game/inventory/ItemParamMap.java index 2e65cb3..f18a3e5 100644 --- a/src/main/java/emu/nebula/game/inventory/ItemParamMap.java +++ b/src/main/java/emu/nebula/game/inventory/ItemParamMap.java @@ -19,6 +19,16 @@ import us.hebi.quickbuf.RepeatedMessage; public class ItemParamMap extends Int2IntLinkedOpenHashMap implements ObjectBidirectionalIterable { private static final long serialVersionUID = -4186524272780523459L; + public static final ItemParamMap EMPTY = new ItemParamMap() { + public int put(int itemId, int count) { + return 0; + } + + public int add(int itemId, int count) { + return 0; + } + }; + @Override @Deprecated public int addTo(int itemId, int count) { return this.add(itemId, count); diff --git a/src/main/java/emu/nebula/server/handlers/HandlerCharGemInstanceSettleReq.java b/src/main/java/emu/nebula/server/handlers/HandlerCharGemInstanceSettleReq.java index 502376b..6fc0f1a 100644 --- a/src/main/java/emu/nebula/server/handlers/HandlerCharGemInstanceSettleReq.java +++ b/src/main/java/emu/nebula/server/handlers/HandlerCharGemInstanceSettleReq.java @@ -45,12 +45,11 @@ public class HandlerCharGemInstanceSettleReq extends NetHandler { .setChange(changes.toProto()); // Add reward items - if (settleData.isWin()) { - data.getRewards().toItemTemplateStream().forEach(rsp::addAwardItems); - - if (settleData.isFirst()) { - data.getFirstRewards().toItemTemplateStream().forEach(rsp::addAwardItems); - } + if (settleData.getRewards() != null) { + settleData.getRewards().toItemTemplateStream().forEach(rsp::addAwardItems); + } + if (settleData.getFirstRewards() != null) { + settleData.getFirstRewards().toItemTemplateStream().forEach(rsp::addFirstItems); } // Send response diff --git a/src/main/java/emu/nebula/server/handlers/HandlerCharGemInstanceSweepReq.java b/src/main/java/emu/nebula/server/handlers/HandlerCharGemInstanceSweepReq.java index 436f9d3..ad95c79 100644 --- a/src/main/java/emu/nebula/server/handlers/HandlerCharGemInstanceSweepReq.java +++ b/src/main/java/emu/nebula/server/handlers/HandlerCharGemInstanceSweepReq.java @@ -6,7 +6,11 @@ import emu.nebula.proto.CharGemInstanceSweep.CharGemInstanceSweepReq; import emu.nebula.proto.CharGemInstanceSweep.CharGemInstanceSweepResp; import emu.nebula.proto.CharGemInstanceSweep.CharGemInstanceSweepReward; import emu.nebula.net.HandlerId; + +import java.util.List; + import emu.nebula.data.GameData; +import emu.nebula.game.inventory.ItemParamMap; import emu.nebula.game.quest.QuestCondType; import emu.nebula.net.GameSession; @@ -42,17 +46,19 @@ public class HandlerCharGemInstanceSweepReq extends NetHandler { var rsp = CharGemInstanceSweepResp.newInstance() .setChange(change.toProto()); - // Cache reward list - var rewardList = data.getRewards().toItemTemplateStream().toList(); - - // Add rewards - for (int i = 0; i < req.getTimes(); i++) { - var reward = CharGemInstanceSweepReward.newInstance() - .setExp(data.getEnergyConsume()); + // Add reward list to response + if (change.getExtraData() != null) { + @SuppressWarnings("unchecked") + var list = (List) change.getExtraData(); - rewardList.forEach(reward::addAwardItems); - - rsp.addRewards(reward); + for (var rewards : list) { + var reward = CharGemInstanceSweepReward.newInstance() + .setExp(data.getEnergyConsume()); + + rewards.toItemTemplateStream().forEach(reward::addAwardItems); + + rsp.addRewards(reward); + } } // Send response diff --git a/src/main/java/emu/nebula/server/handlers/HandlerDailyInstanceRaidReq.java b/src/main/java/emu/nebula/server/handlers/HandlerDailyInstanceRaidReq.java index 28b4844..be1bb36 100644 --- a/src/main/java/emu/nebula/server/handlers/HandlerDailyInstanceRaidReq.java +++ b/src/main/java/emu/nebula/server/handlers/HandlerDailyInstanceRaidReq.java @@ -6,7 +6,11 @@ import emu.nebula.proto.DailyInstanceRaid.DailyInstanceRaidReq; import emu.nebula.proto.DailyInstanceRaid.DailyInstanceRaidResp; import emu.nebula.proto.DailyInstanceRaid.DailyInstanceReward; import emu.nebula.net.HandlerId; + +import java.util.List; + import emu.nebula.data.GameData; +import emu.nebula.game.inventory.ItemParamMap; import emu.nebula.game.quest.QuestCondType; import emu.nebula.net.GameSession; @@ -47,17 +51,19 @@ public class HandlerDailyInstanceRaidReq extends NetHandler { var rsp = DailyInstanceRaidResp.newInstance() .setChange(change.toProto()); - // Cache reward list - var rewardList = data.getRewards(req.getRewardType()).toItemProtoStream().toList(); - - // Add rewards - for (int i = 0; i < req.getTimes(); i++) { - var reward = DailyInstanceReward.newInstance() - .setExp(data.getEnergyConsume()); + // Add reward list to response + if (change.getExtraData() != null) { + @SuppressWarnings("unchecked") + var list = (List) change.getExtraData(); - rewardList.forEach(reward::addSelect); - - rsp.addRewards(reward); + for (var rewards : list) { + var reward = DailyInstanceReward.newInstance() + .setExp(data.getEnergyConsume()); + + rewards.toItemProtoStream().forEach(reward::addSelect); + + rsp.addRewards(reward); + } } // Send response diff --git a/src/main/java/emu/nebula/server/handlers/HandlerDailyInstanceSettleReq.java b/src/main/java/emu/nebula/server/handlers/HandlerDailyInstanceSettleReq.java index 012f00b..a59ddd8 100644 --- a/src/main/java/emu/nebula/server/handlers/HandlerDailyInstanceSettleReq.java +++ b/src/main/java/emu/nebula/server/handlers/HandlerDailyInstanceSettleReq.java @@ -44,14 +44,11 @@ public class HandlerDailyInstanceSettleReq extends NetHandler { .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); - } + if (settleData.getRewards() != null) { + settleData.getRewards().toItemProtoStream().forEach(rsp::addSelect); + } + if (settleData.getFirstRewards() != null) { + settleData.getFirstRewards().toItemProtoStream().forEach(rsp::addFirst); } // Send response diff --git a/src/main/java/emu/nebula/server/handlers/HandlerRegionBossLevelSettleReq.java b/src/main/java/emu/nebula/server/handlers/HandlerRegionBossLevelSettleReq.java index ee2dc33..5cfd87e 100644 --- a/src/main/java/emu/nebula/server/handlers/HandlerRegionBossLevelSettleReq.java +++ b/src/main/java/emu/nebula/server/handlers/HandlerRegionBossLevelSettleReq.java @@ -45,12 +45,11 @@ public class HandlerRegionBossLevelSettleReq extends NetHandler { .setChange(changes.toProto()); // Add reward items - if (settleData.isWin()) { - data.getRewards().toItemTemplateStream().forEach(rsp::addAwardItems); - - if (settleData.isFirst()) { - data.getFirstRewards().toItemTemplateStream().forEach(rsp::addAwardItems); - } + if (settleData.getRewards() != null) { + settleData.getRewards().toItemTemplateStream().forEach(rsp::addAwardItems); + } + if (settleData.getFirstRewards() != null) { + settleData.getFirstRewards().toItemTemplateStream().forEach(rsp::addFirstItems); } // Send response diff --git a/src/main/java/emu/nebula/server/handlers/HandlerRegionBossLevelSweepReq.java b/src/main/java/emu/nebula/server/handlers/HandlerRegionBossLevelSweepReq.java index c28a36f..8b01648 100644 --- a/src/main/java/emu/nebula/server/handlers/HandlerRegionBossLevelSweepReq.java +++ b/src/main/java/emu/nebula/server/handlers/HandlerRegionBossLevelSweepReq.java @@ -6,7 +6,11 @@ import emu.nebula.proto.RegionBossLevelSweep.RegionBossLevelSweepReq; import emu.nebula.proto.RegionBossLevelSweep.RegionBossLevelSweepResp; import emu.nebula.proto.RegionBossLevelSweep.RegionBossLevelSweepRewards; import emu.nebula.net.HandlerId; + +import java.util.List; + import emu.nebula.data.GameData; +import emu.nebula.game.inventory.ItemParamMap; import emu.nebula.game.quest.QuestCondType; import emu.nebula.net.GameSession; @@ -42,17 +46,19 @@ public class HandlerRegionBossLevelSweepReq extends NetHandler { var rsp = RegionBossLevelSweepResp.newInstance() .setChange(change.toProto()); - // Cache reward list - var rewardList = data.getRewards().toItemTemplateStream().toList(); - - // Add rewards - for (int i = 0; i < req.getTimes(); i++) { - var reward = RegionBossLevelSweepRewards.newInstance() - .setExp(data.getEnergyConsume()); + // Add reward list to response + if (change.getExtraData() != null) { + @SuppressWarnings("unchecked") + var list = (List) change.getExtraData(); - rewardList.forEach(reward::addAwardItems); - - rsp.addRewards(reward); + for (var rewards : list) { + var reward = RegionBossLevelSweepRewards.newInstance() + .setExp(data.getEnergyConsume()); + + rewards.toItemTemplateStream().forEach(reward::addAwardItems); + + rsp.addRewards(reward); + } } // Send response diff --git a/src/main/java/emu/nebula/server/handlers/HandlerSkillInstanceSettleReq.java b/src/main/java/emu/nebula/server/handlers/HandlerSkillInstanceSettleReq.java index 5741470..5781224 100644 --- a/src/main/java/emu/nebula/server/handlers/HandlerSkillInstanceSettleReq.java +++ b/src/main/java/emu/nebula/server/handlers/HandlerSkillInstanceSettleReq.java @@ -45,12 +45,11 @@ public class HandlerSkillInstanceSettleReq extends NetHandler { .setChange(changes.toProto()); // Add reward items to proto - if (settleData.isWin()) { - data.getRewards().toItemTemplateStream().forEach(rsp::addAwardItems); - - if (settleData.isFirst()) { - data.getFirstRewards().toItemTemplateStream().forEach(rsp::addAwardItems); - } + if (settleData.getRewards() != null) { + settleData.getRewards().toItemTemplateStream().forEach(rsp::addAwardItems); + } + if (settleData.getFirstRewards() != null) { + settleData.getFirstRewards().toItemTemplateStream().forEach(rsp::addFirstItems); } // Send response diff --git a/src/main/java/emu/nebula/server/handlers/HandlerSkillInstanceSweepReq.java b/src/main/java/emu/nebula/server/handlers/HandlerSkillInstanceSweepReq.java index 0df8736..fe20dee 100644 --- a/src/main/java/emu/nebula/server/handlers/HandlerSkillInstanceSweepReq.java +++ b/src/main/java/emu/nebula/server/handlers/HandlerSkillInstanceSweepReq.java @@ -6,7 +6,11 @@ import emu.nebula.proto.SkillInstanceSweep.SkillInstanceSweepReq; import emu.nebula.proto.SkillInstanceSweep.SkillInstanceSweepResp; import emu.nebula.proto.SkillInstanceSweep.SkillInstanceSweepRewards; import emu.nebula.net.HandlerId; + +import java.util.List; + import emu.nebula.data.GameData; +import emu.nebula.game.inventory.ItemParamMap; import emu.nebula.game.quest.QuestCondType; import emu.nebula.net.GameSession; @@ -42,17 +46,19 @@ public class HandlerSkillInstanceSweepReq extends NetHandler { var rsp = SkillInstanceSweepResp.newInstance() .setChange(change.toProto()); - // Cache reward list - var rewardList = data.getRewards().toItemTemplateStream().toList(); - - // Add rewards - for (int i = 0; i < req.getTimes(); i++) { - var reward = SkillInstanceSweepRewards.newInstance() - .setExp(data.getEnergyConsume()); + // Add reward list to response + if (change.getExtraData() != null) { + @SuppressWarnings("unchecked") + var list = (List) change.getExtraData(); - rewardList.forEach(reward::addAwardItems); - - rsp.addRewards(reward); + for (var rewards : list) { + var reward = SkillInstanceSweepRewards.newInstance() + .setExp(data.getEnergyConsume()); + + rewards.toItemTemplateStream().forEach(reward::addAwardItems); + + rsp.addRewards(reward); + } } // Send response diff --git a/src/main/java/emu/nebula/server/handlers/HandlerWeekBossSettleReq.java b/src/main/java/emu/nebula/server/handlers/HandlerWeekBossSettleReq.java index a7f0170..6abccda 100644 --- a/src/main/java/emu/nebula/server/handlers/HandlerWeekBossSettleReq.java +++ b/src/main/java/emu/nebula/server/handlers/HandlerWeekBossSettleReq.java @@ -44,12 +44,11 @@ public class HandlerWeekBossSettleReq extends NetHandler { .setChange(changes.toProto()); // Add reward items - if (settleData.isWin()) { - data.getRewards().toItemTemplateStream().forEach(rsp::addAwardItems); - - if (settleData.isFirst()) { - data.getFirstRewards().toItemTemplateStream().forEach(rsp::addAwardItems); - } + if (settleData.getRewards() != null) { + settleData.getRewards().toItemTemplateStream().forEach(rsp::addAwardItems); + } + if (settleData.getFirstRewards() != null) { + settleData.getFirstRewards().toItemTemplateStream().forEach(rsp::addFirstItems); } // Send response