mirror of
https://github.com/Melledy/Nebula.git
synced 2025-12-15 05:44:36 +01:00
Handle randomized daily instance rewards
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user