Handle randomized daily instance rewards

This commit is contained in:
Melledy
2025-11-08 18:03:53 -08:00
parent 34e4b1c3f8
commit b9e8be97d1
20 changed files with 313 additions and 146 deletions

View File

@@ -1,10 +1,14 @@
package emu.nebula.data.resources; package emu.nebula.data.resources;
import java.util.ArrayList;
import java.util.List;
import emu.nebula.data.BaseDef; import emu.nebula.data.BaseDef;
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.instance.InstanceRewardParam;
import emu.nebula.util.JsonUtils; import emu.nebula.util.JsonUtils;
import lombok.Getter; import lombok.Getter;
@Getter @Getter
@@ -17,8 +21,8 @@ public class CharGemInstanceDef extends BaseDef implements InstanceData {
private int EnergyConsume; private int EnergyConsume;
private String BaseAwardPreview; private String BaseAwardPreview;
private transient ItemParamMap firstRewards; private transient List<InstanceRewardParam> firstRewards;
private transient ItemParamMap rewards; private transient List<InstanceRewardParam> rewards;
@Override @Override
public int getId() { public int getId() {
@@ -27,9 +31,9 @@ public class CharGemInstanceDef extends BaseDef implements InstanceData {
@Override @Override
public void onLoad() { public void onLoad() {
// Init reward maps // Init reward lists
this.firstRewards = new ItemParamMap(); this.firstRewards = new ArrayList<>();
this.rewards = new ItemParamMap(); this.rewards = new ArrayList<>();
// Parse rewards // Parse rewards
var awards = JsonUtils.decodeList(this.BaseAwardPreview, int[].class); var awards = JsonUtils.decodeList(this.BaseAwardPreview, int[].class);
@@ -39,13 +43,21 @@ public class CharGemInstanceDef extends BaseDef implements InstanceData {
for (int[] award : awards) { for (int[] award : awards) {
int itemId = award[0]; int itemId = award[0];
int count = award[1]; int min = award[1];
boolean isFirst = award[2] == 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) { if (isFirst) {
this.firstRewards.put(itemId, count); this.firstRewards.add(reward);
} else { } else {
this.rewards.put(itemId, count); this.rewards.add(reward);
} }
} }
} }

View File

@@ -1,10 +1,13 @@
package emu.nebula.data.resources; package emu.nebula.data.resources;
import java.util.List;
import emu.nebula.data.BaseDef; import emu.nebula.data.BaseDef;
import emu.nebula.data.GameData; 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.instance.InstanceRewardParam;
import lombok.Getter; import lombok.Getter;
@Getter @Getter
@@ -33,17 +36,19 @@ public class DailyInstanceDef extends BaseDef implements InstanceData {
} }
@Override @Override
public ItemParamMap getFirstRewards() { @Deprecated
public List<InstanceRewardParam> getFirstRewards() {
return null; return null;
} }
@Override @Override
public ItemParamMap getRewards() { @Deprecated
public List<InstanceRewardParam> getRewards() {
return null; return null;
} }
@Override @Override
public ItemParamMap getFirstRewards(int rewardType) { public List<InstanceRewardParam> getFirstRewards(int rewardType) {
var data = this.getRewardGroup(rewardType); var data = this.getRewardGroup(rewardType);
if (data != null) { if (data != null) {
@@ -54,7 +59,7 @@ public class DailyInstanceDef extends BaseDef implements InstanceData {
} }
@Override @Override
public ItemParamMap getRewards(int rewardType) { public List<InstanceRewardParam> getRewards(int rewardType) {
var data = this.getRewardGroup(rewardType); var data = this.getRewardGroup(rewardType);
if (data != null) { if (data != null) {

View File

@@ -1,8 +1,11 @@
package emu.nebula.data.resources; package emu.nebula.data.resources;
import java.util.ArrayList;
import java.util.List;
import emu.nebula.data.BaseDef; import emu.nebula.data.BaseDef;
import emu.nebula.data.ResourceType; import emu.nebula.data.ResourceType;
import emu.nebula.game.inventory.ItemParamMap; import emu.nebula.game.instance.InstanceRewardParam;
import emu.nebula.util.JsonUtils; import emu.nebula.util.JsonUtils;
import lombok.Getter; import lombok.Getter;
@@ -13,8 +16,8 @@ public class DailyInstanceRewardGroupDef extends BaseDef {
private int DailyRewardType; private int DailyRewardType;
private String BaseAwardPreview; private String BaseAwardPreview;
private transient ItemParamMap firstRewards; private transient List<InstanceRewardParam> firstRewards;
private transient ItemParamMap rewards; private transient List<InstanceRewardParam> rewards;
@Override @Override
public int getId() { public int getId() {
@@ -23,9 +26,9 @@ public class DailyInstanceRewardGroupDef extends BaseDef {
@Override @Override
public void onLoad() { public void onLoad() {
// Init reward maps // Init reward lists
this.firstRewards = new ItemParamMap(); this.firstRewards = new ArrayList<>();
this.rewards = new ItemParamMap(); this.rewards = new ArrayList<>();
// Parse rewards // Parse rewards
var awards = JsonUtils.decodeList(this.BaseAwardPreview, int[].class); var awards = JsonUtils.decodeList(this.BaseAwardPreview, int[].class);
@@ -35,13 +38,21 @@ public class DailyInstanceRewardGroupDef extends BaseDef {
for (int[] award : awards) { for (int[] award : awards) {
int itemId = award[0]; int itemId = award[0];
int count = award[1]; int min = award[1];
boolean isFirst = award[2] == 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) { if (isFirst) {
this.firstRewards.put(itemId, count); this.firstRewards.add(reward);
} else { } else {
this.rewards.put(itemId, count); this.rewards.add(reward);
} }
} }
} }

View File

@@ -1,10 +1,14 @@
package emu.nebula.data.resources; package emu.nebula.data.resources;
import java.util.ArrayList;
import java.util.List;
import emu.nebula.data.BaseDef; import emu.nebula.data.BaseDef;
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.instance.InstanceRewardParam;
import emu.nebula.util.JsonUtils; import emu.nebula.util.JsonUtils;
import lombok.Getter; import lombok.Getter;
@Getter @Getter
@@ -17,8 +21,8 @@ public class RegionBossLevelDef extends BaseDef implements InstanceData {
private int EnergyConsume; private int EnergyConsume;
private String BaseAwardPreview; private String BaseAwardPreview;
private transient ItemParamMap firstRewards; private transient List<InstanceRewardParam> firstRewards;
private transient ItemParamMap rewards; private transient List<InstanceRewardParam> rewards;
@Override @Override
public int getId() { public int getId() {
@@ -27,9 +31,9 @@ public class RegionBossLevelDef extends BaseDef implements InstanceData {
@Override @Override
public void onLoad() { public void onLoad() {
// Init reward maps // Init reward lists
this.firstRewards = new ItemParamMap(); this.firstRewards = new ArrayList<>();
this.rewards = new ItemParamMap(); this.rewards = new ArrayList<>();
// Parse rewards // Parse rewards
var awards = JsonUtils.decodeList(this.BaseAwardPreview, int[].class); var awards = JsonUtils.decodeList(this.BaseAwardPreview, int[].class);
@@ -39,13 +43,21 @@ public class RegionBossLevelDef extends BaseDef implements InstanceData {
for (int[] award : awards) { for (int[] award : awards) {
int itemId = award[0]; int itemId = award[0];
int count = award[1]; int min = award[1];
boolean isFirst = award[2] == 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) { if (isFirst) {
this.firstRewards.put(itemId, count); this.firstRewards.add(reward);
} else { } else {
this.rewards.put(itemId, count); this.rewards.add(reward);
} }
} }
} }

View File

@@ -1,9 +1,12 @@
package emu.nebula.data.resources; package emu.nebula.data.resources;
import java.util.ArrayList;
import java.util.List;
import emu.nebula.data.BaseDef; import emu.nebula.data.BaseDef;
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.instance.InstanceRewardParam;
import emu.nebula.util.JsonUtils; import emu.nebula.util.JsonUtils;
import lombok.Getter; import lombok.Getter;
@@ -17,8 +20,8 @@ public class SkillInstanceDef extends BaseDef implements InstanceData {
private int EnergyConsume; private int EnergyConsume;
private String BaseAwardPreview; private String BaseAwardPreview;
private transient ItemParamMap firstRewards; private transient List<InstanceRewardParam> firstRewards;
private transient ItemParamMap rewards; private transient List<InstanceRewardParam> rewards;
@Override @Override
public int getId() { public int getId() {
@@ -27,9 +30,9 @@ public class SkillInstanceDef extends BaseDef implements InstanceData {
@Override @Override
public void onLoad() { public void onLoad() {
// Init reward maps // Init reward lists
this.firstRewards = new ItemParamMap(); this.firstRewards = new ArrayList<>();
this.rewards = new ItemParamMap(); this.rewards = new ArrayList<>();
// Parse rewards // Parse rewards
var awards = JsonUtils.decodeList(this.BaseAwardPreview, int[].class); var awards = JsonUtils.decodeList(this.BaseAwardPreview, int[].class);
@@ -39,13 +42,21 @@ public class SkillInstanceDef extends BaseDef implements InstanceData {
for (int[] award : awards) { for (int[] award : awards) {
int itemId = award[0]; int itemId = award[0];
int count = award[1]; int min = award[1];
boolean isFirst = award[2] == 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) { if (isFirst) {
this.firstRewards.put(itemId, count); this.firstRewards.add(reward);
} else { } else {
this.rewards.put(itemId, count); this.rewards.add(reward);
} }
} }
} }

View File

@@ -1,10 +1,14 @@
package emu.nebula.data.resources; package emu.nebula.data.resources;
import java.util.ArrayList;
import java.util.List;
import emu.nebula.data.BaseDef; import emu.nebula.data.BaseDef;
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.instance.InstanceRewardParam;
import emu.nebula.util.JsonUtils; import emu.nebula.util.JsonUtils;
import lombok.Getter; import lombok.Getter;
@Getter @Getter
@@ -15,8 +19,8 @@ public class WeekBossLevelDef extends BaseDef implements InstanceData {
private int NeedWorldClass; private int NeedWorldClass;
private String BaseAwardPreview; private String BaseAwardPreview;
private transient ItemParamMap firstRewards; private transient List<InstanceRewardParam> firstRewards;
private transient ItemParamMap rewards; private transient List<InstanceRewardParam> rewards;
@Override @Override
public int getId() { public int getId() {
@@ -29,9 +33,9 @@ public class WeekBossLevelDef extends BaseDef implements InstanceData {
@Override @Override
public void onLoad() { public void onLoad() {
// Init reward maps // Init reward lists
this.firstRewards = new ItemParamMap(); this.firstRewards = new ArrayList<>();
this.rewards = new ItemParamMap(); this.rewards = new ArrayList<>();
// Parse rewards // Parse rewards
var awards = JsonUtils.decodeList(this.BaseAwardPreview, int[].class); var awards = JsonUtils.decodeList(this.BaseAwardPreview, int[].class);
@@ -41,13 +45,21 @@ public class WeekBossLevelDef extends BaseDef implements InstanceData {
for (int[] award : awards) { for (int[] award : awards) {
int itemId = award[0]; int itemId = award[0];
int count = award[1]; int min = award[1];
boolean isFirst = award[2] == 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) { if (isFirst) {
this.firstRewards.put(itemId, count); this.firstRewards.add(reward);
} else { } else {
this.rewards.put(itemId, count); this.rewards.add(reward);
} }
} }
} }

View File

@@ -1,5 +1,7 @@
package emu.nebula.game.instance; package emu.nebula.game.instance;
import java.util.List;
import emu.nebula.game.inventory.ItemParamMap; import emu.nebula.game.inventory.ItemParamMap;
import emu.nebula.game.player.Player; import emu.nebula.game.player.Player;
@@ -11,16 +13,36 @@ public interface InstanceData {
public int getEnergyConsume(); public int getEnergyConsume();
public ItemParamMap getFirstRewards(); // Handle reward generation
public ItemParamMap getRewards(); public List<InstanceRewardParam> getFirstRewards();
public default ItemParamMap getFirstRewards(int rewardType) { public default List<InstanceRewardParam> getFirstRewards(int rewardType) {
return this.getFirstRewards(); return getFirstRewards();
} }
public default ItemParamMap getRewards(int rewardType) { public default ItemParamMap generateFirstRewards(int rewardType) {
return this.getRewards(); return this.generateRewards(this.getFirstRewards());
}
public List<InstanceRewardParam> getRewards();
public default List<InstanceRewardParam> getRewards(int rewardType) {
return getRewards();
}
public default ItemParamMap generateRewards(int rewardType) {
return this.generateRewards(this.getRewards());
}
public default ItemParamMap generateRewards(List<InstanceRewardParam> params) {
var map = new ItemParamMap();
for (var param : params) {
map.add(param.getId(), param.getRandomCount());
}
return map;
} }
/** /**

View File

@@ -1,11 +1,14 @@
package emu.nebula.game.instance; package emu.nebula.game.instance;
import java.util.ArrayList;
import dev.morphia.annotations.Entity; import dev.morphia.annotations.Entity;
import dev.morphia.annotations.Id; import dev.morphia.annotations.Id;
import emu.nebula.GameConstants; import emu.nebula.GameConstants;
import emu.nebula.Nebula; import emu.nebula.Nebula;
import emu.nebula.data.GameData; import emu.nebula.data.GameData;
import emu.nebula.database.GameDatabaseObject; import emu.nebula.database.GameDatabaseObject;
import emu.nebula.game.inventory.ItemParamMap;
import emu.nebula.game.player.Player; import emu.nebula.game.player.Player;
import emu.nebula.game.player.PlayerChangeInfo; import emu.nebula.game.player.PlayerChangeInfo;
import emu.nebula.game.player.PlayerManager; import emu.nebula.game.player.PlayerManager;
@@ -88,20 +91,17 @@ public class InstanceManager extends PlayerManager implements GameDatabaseObject
// Handle win // Handle win
if (settleData.isWin()) { if (settleData.isWin()) {
// Reward type
int rewardType = this.getRewardType();
// Calculate energy and exp // Calculate energy and exp
settleData.setExp(data.getEnergyConsume()); settleData.setExp(data.getEnergyConsume());
getPlayer().consumeEnergy(settleData.getExp(), change); getPlayer().consumeEnergy(settleData.getExp(), change);
// Awards // Calculate rewards
getPlayer().getInventory().addItem(GameConstants.EXP_ITEM_ID, settleData.getExp(), change); settleData.generateRewards(data, this.getRewardType());
getPlayer().getInventory().addItems(data.getRewards(rewardType), change);
if (settleData.isFirst()) { // Add to inventory
getPlayer().getInventory().addItems(data.getFirstRewards(rewardType), change); getPlayer().getInventory().addItem(GameConstants.EXP_ITEM_ID, settleData.getExp(), change);
} getPlayer().getInventory().addItems(settleData.getRewards(), change);
getPlayer().getInventory().addItems(settleData.getFirstRewards(), change);
// Log // Log
this.saveInstanceLog(log, logName, data.getId(), star); this.saveInstanceLog(log, logName, data.getId(), star);
@@ -146,15 +146,33 @@ public class InstanceManager extends PlayerManager implements GameDatabaseObject
return null; return null;
} }
// Init player change info // Init variables
var change = new PlayerChangeInfo(); var change = new PlayerChangeInfo();
var list = new ArrayList<ItemParamMap>();
// Consume exp // Consume exp
getPlayer().consumeEnergy(energyCost, change); getPlayer().consumeEnergy(energyCost, change);
// Awards
getPlayer().getInventory().addItem(GameConstants.EXP_ITEM_ID, energyCost, change); 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 // Quest triggers
this.getPlayer().getQuestManager().triggerQuest(questCondition, count); this.getPlayer().getQuestManager().triggerQuest(questCondition, count);

View File

@@ -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);
}
}

View File

@@ -1,5 +1,6 @@
package emu.nebula.game.instance; package emu.nebula.game.instance;
import emu.nebula.game.inventory.ItemParamMap;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
@@ -9,7 +10,18 @@ public class InstanceSettleData {
private boolean isFirst; private boolean isFirst;
private int exp; private int exp;
private ItemParamMap firstRewards;
private ItemParamMap rewards;
public InstanceSettleData() { public InstanceSettleData() {
} }
public void generateRewards(InstanceData data, int rewardType) {
if (this.isFirst) {
this.firstRewards = data.generateFirstRewards(rewardType);
}
this.rewards = data.generateRewards(rewardType);
}
} }

View File

@@ -19,6 +19,16 @@ import us.hebi.quickbuf.RepeatedMessage;
public class ItemParamMap extends Int2IntLinkedOpenHashMap implements ObjectBidirectionalIterable<Int2IntMap.Entry> { public class ItemParamMap extends Int2IntLinkedOpenHashMap implements ObjectBidirectionalIterable<Int2IntMap.Entry> {
private static final long serialVersionUID = -4186524272780523459L; 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 @Override @Deprecated
public int addTo(int itemId, int count) { public int addTo(int itemId, int count) {
return this.add(itemId, count); return this.add(itemId, count);

View File

@@ -45,12 +45,11 @@ public class HandlerCharGemInstanceSettleReq extends NetHandler {
.setChange(changes.toProto()); .setChange(changes.toProto());
// Add reward items // Add reward items
if (settleData.isWin()) { if (settleData.getRewards() != null) {
data.getRewards().toItemTemplateStream().forEach(rsp::addAwardItems); settleData.getRewards().toItemTemplateStream().forEach(rsp::addAwardItems);
}
if (settleData.isFirst()) { if (settleData.getFirstRewards() != null) {
data.getFirstRewards().toItemTemplateStream().forEach(rsp::addAwardItems); settleData.getFirstRewards().toItemTemplateStream().forEach(rsp::addFirstItems);
}
} }
// Send response // Send response

View File

@@ -6,7 +6,11 @@ import emu.nebula.proto.CharGemInstanceSweep.CharGemInstanceSweepReq;
import emu.nebula.proto.CharGemInstanceSweep.CharGemInstanceSweepResp; import emu.nebula.proto.CharGemInstanceSweep.CharGemInstanceSweepResp;
import emu.nebula.proto.CharGemInstanceSweep.CharGemInstanceSweepReward; import emu.nebula.proto.CharGemInstanceSweep.CharGemInstanceSweepReward;
import emu.nebula.net.HandlerId; import emu.nebula.net.HandlerId;
import java.util.List;
import emu.nebula.data.GameData; import emu.nebula.data.GameData;
import emu.nebula.game.inventory.ItemParamMap;
import emu.nebula.game.quest.QuestCondType; import emu.nebula.game.quest.QuestCondType;
import emu.nebula.net.GameSession; import emu.nebula.net.GameSession;
@@ -42,17 +46,19 @@ public class HandlerCharGemInstanceSweepReq extends NetHandler {
var rsp = CharGemInstanceSweepResp.newInstance() var rsp = CharGemInstanceSweepResp.newInstance()
.setChange(change.toProto()); .setChange(change.toProto());
// Cache reward list // Add reward list to response
var rewardList = data.getRewards().toItemTemplateStream().toList(); if (change.getExtraData() != null) {
@SuppressWarnings("unchecked")
// Add rewards var list = (List<ItemParamMap>) change.getExtraData();
for (int i = 0; i < req.getTimes(); i++) {
var reward = CharGemInstanceSweepReward.newInstance()
.setExp(data.getEnergyConsume());
rewardList.forEach(reward::addAwardItems); for (var rewards : list) {
var reward = CharGemInstanceSweepReward.newInstance()
rsp.addRewards(reward); .setExp(data.getEnergyConsume());
rewards.toItemTemplateStream().forEach(reward::addAwardItems);
rsp.addRewards(reward);
}
} }
// Send response // Send response

View File

@@ -6,7 +6,11 @@ import emu.nebula.proto.DailyInstanceRaid.DailyInstanceRaidReq;
import emu.nebula.proto.DailyInstanceRaid.DailyInstanceRaidResp; import emu.nebula.proto.DailyInstanceRaid.DailyInstanceRaidResp;
import emu.nebula.proto.DailyInstanceRaid.DailyInstanceReward; import emu.nebula.proto.DailyInstanceRaid.DailyInstanceReward;
import emu.nebula.net.HandlerId; import emu.nebula.net.HandlerId;
import java.util.List;
import emu.nebula.data.GameData; import emu.nebula.data.GameData;
import emu.nebula.game.inventory.ItemParamMap;
import emu.nebula.game.quest.QuestCondType; import emu.nebula.game.quest.QuestCondType;
import emu.nebula.net.GameSession; import emu.nebula.net.GameSession;
@@ -47,17 +51,19 @@ public class HandlerDailyInstanceRaidReq extends NetHandler {
var rsp = DailyInstanceRaidResp.newInstance() var rsp = DailyInstanceRaidResp.newInstance()
.setChange(change.toProto()); .setChange(change.toProto());
// Cache reward list // Add reward list to response
var rewardList = data.getRewards(req.getRewardType()).toItemProtoStream().toList(); if (change.getExtraData() != null) {
@SuppressWarnings("unchecked")
// Add rewards var list = (List<ItemParamMap>) change.getExtraData();
for (int i = 0; i < req.getTimes(); i++) {
var reward = DailyInstanceReward.newInstance()
.setExp(data.getEnergyConsume());
rewardList.forEach(reward::addSelect); for (var rewards : list) {
var reward = DailyInstanceReward.newInstance()
rsp.addRewards(reward); .setExp(data.getEnergyConsume());
rewards.toItemProtoStream().forEach(reward::addSelect);
rsp.addRewards(reward);
}
} }
// Send response // Send response

View File

@@ -44,14 +44,11 @@ public class HandlerDailyInstanceSettleReq extends NetHandler {
.setChange(changes.toProto()); .setChange(changes.toProto());
// Add reward items // Add reward items
if (settleData.isWin()) { if (settleData.getRewards() != null) {
int rewardType = player.getInstanceManager().getRewardType(); settleData.getRewards().toItemProtoStream().forEach(rsp::addSelect);
}
data.getRewards(rewardType).toItemProtoStream().forEach(rsp::addSelect); if (settleData.getFirstRewards() != null) {
settleData.getFirstRewards().toItemProtoStream().forEach(rsp::addFirst);
if (settleData.isFirst()) {
data.getFirstRewards(rewardType).toItemProtoStream().forEach(rsp::addFirst);
}
} }
// Send response // Send response

View File

@@ -45,12 +45,11 @@ public class HandlerRegionBossLevelSettleReq extends NetHandler {
.setChange(changes.toProto()); .setChange(changes.toProto());
// Add reward items // Add reward items
if (settleData.isWin()) { if (settleData.getRewards() != null) {
data.getRewards().toItemTemplateStream().forEach(rsp::addAwardItems); settleData.getRewards().toItemTemplateStream().forEach(rsp::addAwardItems);
}
if (settleData.isFirst()) { if (settleData.getFirstRewards() != null) {
data.getFirstRewards().toItemTemplateStream().forEach(rsp::addAwardItems); settleData.getFirstRewards().toItemTemplateStream().forEach(rsp::addFirstItems);
}
} }
// Send response // Send response

View File

@@ -6,7 +6,11 @@ import emu.nebula.proto.RegionBossLevelSweep.RegionBossLevelSweepReq;
import emu.nebula.proto.RegionBossLevelSweep.RegionBossLevelSweepResp; import emu.nebula.proto.RegionBossLevelSweep.RegionBossLevelSweepResp;
import emu.nebula.proto.RegionBossLevelSweep.RegionBossLevelSweepRewards; import emu.nebula.proto.RegionBossLevelSweep.RegionBossLevelSweepRewards;
import emu.nebula.net.HandlerId; import emu.nebula.net.HandlerId;
import java.util.List;
import emu.nebula.data.GameData; import emu.nebula.data.GameData;
import emu.nebula.game.inventory.ItemParamMap;
import emu.nebula.game.quest.QuestCondType; import emu.nebula.game.quest.QuestCondType;
import emu.nebula.net.GameSession; import emu.nebula.net.GameSession;
@@ -42,17 +46,19 @@ public class HandlerRegionBossLevelSweepReq extends NetHandler {
var rsp = RegionBossLevelSweepResp.newInstance() var rsp = RegionBossLevelSweepResp.newInstance()
.setChange(change.toProto()); .setChange(change.toProto());
// Cache reward list // Add reward list to response
var rewardList = data.getRewards().toItemTemplateStream().toList(); if (change.getExtraData() != null) {
@SuppressWarnings("unchecked")
// Add rewards var list = (List<ItemParamMap>) change.getExtraData();
for (int i = 0; i < req.getTimes(); i++) {
var reward = RegionBossLevelSweepRewards.newInstance()
.setExp(data.getEnergyConsume());
rewardList.forEach(reward::addAwardItems); for (var rewards : list) {
var reward = RegionBossLevelSweepRewards.newInstance()
rsp.addRewards(reward); .setExp(data.getEnergyConsume());
rewards.toItemTemplateStream().forEach(reward::addAwardItems);
rsp.addRewards(reward);
}
} }
// Send response // Send response

View File

@@ -45,12 +45,11 @@ public class HandlerSkillInstanceSettleReq extends NetHandler {
.setChange(changes.toProto()); .setChange(changes.toProto());
// Add reward items to proto // Add reward items to proto
if (settleData.isWin()) { if (settleData.getRewards() != null) {
data.getRewards().toItemTemplateStream().forEach(rsp::addAwardItems); settleData.getRewards().toItemTemplateStream().forEach(rsp::addAwardItems);
}
if (settleData.isFirst()) { if (settleData.getFirstRewards() != null) {
data.getFirstRewards().toItemTemplateStream().forEach(rsp::addAwardItems); settleData.getFirstRewards().toItemTemplateStream().forEach(rsp::addFirstItems);
}
} }
// Send response // Send response

View File

@@ -6,7 +6,11 @@ import emu.nebula.proto.SkillInstanceSweep.SkillInstanceSweepReq;
import emu.nebula.proto.SkillInstanceSweep.SkillInstanceSweepResp; import emu.nebula.proto.SkillInstanceSweep.SkillInstanceSweepResp;
import emu.nebula.proto.SkillInstanceSweep.SkillInstanceSweepRewards; import emu.nebula.proto.SkillInstanceSweep.SkillInstanceSweepRewards;
import emu.nebula.net.HandlerId; import emu.nebula.net.HandlerId;
import java.util.List;
import emu.nebula.data.GameData; import emu.nebula.data.GameData;
import emu.nebula.game.inventory.ItemParamMap;
import emu.nebula.game.quest.QuestCondType; import emu.nebula.game.quest.QuestCondType;
import emu.nebula.net.GameSession; import emu.nebula.net.GameSession;
@@ -42,17 +46,19 @@ public class HandlerSkillInstanceSweepReq extends NetHandler {
var rsp = SkillInstanceSweepResp.newInstance() var rsp = SkillInstanceSweepResp.newInstance()
.setChange(change.toProto()); .setChange(change.toProto());
// Cache reward list // Add reward list to response
var rewardList = data.getRewards().toItemTemplateStream().toList(); if (change.getExtraData() != null) {
@SuppressWarnings("unchecked")
// Add rewards var list = (List<ItemParamMap>) change.getExtraData();
for (int i = 0; i < req.getTimes(); i++) {
var reward = SkillInstanceSweepRewards.newInstance()
.setExp(data.getEnergyConsume());
rewardList.forEach(reward::addAwardItems); for (var rewards : list) {
var reward = SkillInstanceSweepRewards.newInstance()
rsp.addRewards(reward); .setExp(data.getEnergyConsume());
rewards.toItemTemplateStream().forEach(reward::addAwardItems);
rsp.addRewards(reward);
}
} }
// Send response // Send response

View File

@@ -44,12 +44,11 @@ public class HandlerWeekBossSettleReq extends NetHandler {
.setChange(changes.toProto()); .setChange(changes.toProto());
// Add reward items // Add reward items
if (settleData.isWin()) { if (settleData.getRewards() != null) {
data.getRewards().toItemTemplateStream().forEach(rsp::addAwardItems); settleData.getRewards().toItemTemplateStream().forEach(rsp::addAwardItems);
}
if (settleData.isFirst()) { if (settleData.getFirstRewards() != null) {
data.getFirstRewards().toItemTemplateStream().forEach(rsp::addAwardItems); settleData.getFirstRewards().toItemTemplateStream().forEach(rsp::addFirstItems);
}
} }
// Send response // Send response