mirror of
https://github.com/Melledy/Nebula.git
synced 2025-12-12 20:34:36 +01:00
Implement commissions
This commit is contained in:
@@ -43,6 +43,7 @@ public class GameData {
|
||||
@Getter private static DataTable<PlayerHeadDef> PlayerHeadDataTable = new DataTable<>();
|
||||
@Getter private static DataTable<TitleDef> titleDataTable = new DataTable<>();
|
||||
|
||||
// Shops
|
||||
@Getter private static DataTable<MallMonthlyCardDef> MallMonthlyCardDataTable = new DataTable<>();
|
||||
@Getter private static DataTable<MallPackageDef> MallPackageDataTable = new DataTable<>();
|
||||
@Getter private static DataTable<MallShopDef> MallShopDataTable = new DataTable<>();
|
||||
@@ -51,6 +52,9 @@ public class GameData {
|
||||
@Getter private static DataTable<ResidentShopDef> ResidentShopDataTable = new DataTable<>();
|
||||
@Getter private static DataTable<ResidentGoodsDef> ResidentGoodsDataTable = new DataTable<>();
|
||||
|
||||
// Commissions
|
||||
@Getter private static DataTable<AgentDef> AgentDataTable = new DataTable<>();
|
||||
|
||||
// Dictionary
|
||||
@Getter private static DataTable<DictionaryTabDef> DictionaryTabDataTable = new DataTable<>();
|
||||
@Getter private static DataTable<DictionaryEntryDef> DictionaryEntryDataTable = new DataTable<>();
|
||||
|
||||
84
src/main/java/emu/nebula/data/resources/AgentDef.java
Normal file
84
src/main/java/emu/nebula/data/resources/AgentDef.java
Normal file
@@ -0,0 +1,84 @@
|
||||
package emu.nebula.data.resources;
|
||||
|
||||
import emu.nebula.data.BaseDef;
|
||||
import emu.nebula.data.ResourceType;
|
||||
import emu.nebula.game.inventory.ItemRewardList;
|
||||
import emu.nebula.game.inventory.ItemRewardParam;
|
||||
import emu.nebula.util.JsonUtils;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
@ResourceType(name = "Agent.json")
|
||||
public class AgentDef extends BaseDef {
|
||||
private int Id;
|
||||
private int Level;
|
||||
private int MemberLimit;
|
||||
private int[] Tags;
|
||||
private int[] ExtraTags;
|
||||
|
||||
private int Time1;
|
||||
private String RewardPreview1;
|
||||
private String BonusPreview1;
|
||||
|
||||
private int Time2;
|
||||
private String RewardPreview2;
|
||||
private String BonusPreview2;
|
||||
|
||||
private int Time3;
|
||||
private String RewardPreview3;
|
||||
private String BonusPreview3;
|
||||
|
||||
private int Time4;
|
||||
private String RewardPreview4;
|
||||
private String BonusPreview4;
|
||||
|
||||
private transient Int2ObjectMap<AgentDurationDef> durations;
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return Id;
|
||||
}
|
||||
|
||||
private void addDuration(AgentDurationDef duration) {
|
||||
this.durations.put(duration.getTime(), duration);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoad() {
|
||||
this.durations = new Int2ObjectOpenHashMap<>();
|
||||
|
||||
this.addDuration(new AgentDurationDef(this.Time1, this.RewardPreview1, this.BonusPreview1));
|
||||
this.addDuration(new AgentDurationDef(this.Time2, this.RewardPreview2, this.BonusPreview2));
|
||||
this.addDuration(new AgentDurationDef(this.Time3, this.RewardPreview3, this.BonusPreview3));
|
||||
this.addDuration(new AgentDurationDef(this.Time4, this.RewardPreview4, this.BonusPreview4));
|
||||
}
|
||||
|
||||
@Getter
|
||||
public static class AgentDurationDef {
|
||||
private int time;
|
||||
private ItemRewardList rewards;
|
||||
private ItemRewardList bonus;
|
||||
|
||||
public AgentDurationDef(int time, String rewardPreview, String bonusPreview) {
|
||||
this.time = time;
|
||||
this.rewards = new ItemRewardList();
|
||||
this.bonus = new ItemRewardList();
|
||||
|
||||
var rewardArray = JsonUtils.decodeList(rewardPreview, int[].class);
|
||||
if (rewardArray != null) {
|
||||
for (int[] award : rewardArray) {
|
||||
this.rewards.add(new ItemRewardParam(award[0], award[1], award[2]));
|
||||
}
|
||||
}
|
||||
|
||||
var bonusArray = JsonUtils.decodeList(bonusPreview, int[].class);
|
||||
if (bonusArray != null) {
|
||||
for (int[] award : bonusArray) {
|
||||
this.bonus.add(new ItemRewardParam(award[0], award[1], award[2]));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,7 @@ import java.util.List;
|
||||
import emu.nebula.data.BaseDef;
|
||||
import emu.nebula.data.ResourceType;
|
||||
import emu.nebula.game.instance.InstanceData;
|
||||
import emu.nebula.game.instance.InstanceRewardParam;
|
||||
import emu.nebula.game.inventory.ItemRewardParam;
|
||||
import emu.nebula.util.JsonUtils;
|
||||
|
||||
import lombok.Getter;
|
||||
@@ -21,8 +21,8 @@ public class CharGemInstanceDef extends BaseDef implements InstanceData {
|
||||
private int EnergyConsume;
|
||||
private String BaseAwardPreview;
|
||||
|
||||
private transient List<InstanceRewardParam> firstRewards;
|
||||
private transient List<InstanceRewardParam> rewards;
|
||||
private transient List<ItemRewardParam> firstRewards;
|
||||
private transient List<ItemRewardParam> rewards;
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
@@ -52,7 +52,7 @@ public class CharGemInstanceDef extends BaseDef implements InstanceData {
|
||||
max = 1;
|
||||
}
|
||||
|
||||
var reward = new InstanceRewardParam(itemId, min, max);
|
||||
var reward = new ItemRewardParam(itemId, min, max);
|
||||
|
||||
if (isFirst) {
|
||||
this.firstRewards.add(reward);
|
||||
|
||||
@@ -6,8 +6,7 @@ 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.instance.InstanceRewardParam;
|
||||
|
||||
import emu.nebula.game.inventory.ItemRewardParam;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
@@ -37,18 +36,18 @@ public class DailyInstanceDef extends BaseDef implements InstanceData {
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
public List<InstanceRewardParam> getFirstRewards() {
|
||||
public List<ItemRewardParam> getFirstRewards() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
public List<InstanceRewardParam> getRewards() {
|
||||
public List<ItemRewardParam> getRewards() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<InstanceRewardParam> getFirstRewards(int rewardType) {
|
||||
public List<ItemRewardParam> getFirstRewards(int rewardType) {
|
||||
var data = this.getRewardGroup(rewardType);
|
||||
|
||||
if (data != null) {
|
||||
@@ -59,7 +58,7 @@ public class DailyInstanceDef extends BaseDef implements InstanceData {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<InstanceRewardParam> getRewards(int rewardType) {
|
||||
public List<ItemRewardParam> getRewards(int rewardType) {
|
||||
var data = this.getRewardGroup(rewardType);
|
||||
|
||||
if (data != null) {
|
||||
|
||||
@@ -5,7 +5,7 @@ import java.util.List;
|
||||
|
||||
import emu.nebula.data.BaseDef;
|
||||
import emu.nebula.data.ResourceType;
|
||||
import emu.nebula.game.instance.InstanceRewardParam;
|
||||
import emu.nebula.game.inventory.ItemRewardParam;
|
||||
import emu.nebula.util.JsonUtils;
|
||||
import lombok.Getter;
|
||||
|
||||
@@ -16,8 +16,8 @@ public class DailyInstanceRewardGroupDef extends BaseDef {
|
||||
private int DailyRewardType;
|
||||
private String BaseAwardPreview;
|
||||
|
||||
private transient List<InstanceRewardParam> firstRewards;
|
||||
private transient List<InstanceRewardParam> rewards;
|
||||
private transient List<ItemRewardParam> firstRewards;
|
||||
private transient List<ItemRewardParam> rewards;
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
@@ -47,7 +47,7 @@ public class DailyInstanceRewardGroupDef extends BaseDef {
|
||||
max = 1;
|
||||
}
|
||||
|
||||
var reward = new InstanceRewardParam(itemId, min, max);
|
||||
var reward = new ItemRewardParam(itemId, min, max);
|
||||
|
||||
if (isFirst) {
|
||||
this.firstRewards.add(reward);
|
||||
|
||||
@@ -5,8 +5,8 @@ import java.util.List;
|
||||
|
||||
import emu.nebula.data.BaseDef;
|
||||
import emu.nebula.data.ResourceType;
|
||||
import emu.nebula.game.instance.InstanceRewardParam;
|
||||
import emu.nebula.game.inventory.ItemParamMap;
|
||||
import emu.nebula.game.inventory.ItemRewardParam;
|
||||
import emu.nebula.util.JsonUtils;
|
||||
|
||||
import lombok.Getter;
|
||||
@@ -18,7 +18,7 @@ public class InfinityTowerLevelDef extends BaseDef {
|
||||
private int DifficultyId;
|
||||
private String BaseAwardPreview;
|
||||
|
||||
private transient List<InstanceRewardParam> rewards;
|
||||
private transient List<ItemRewardParam> rewards;
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
@@ -61,7 +61,7 @@ public class InfinityTowerLevelDef extends BaseDef {
|
||||
max = 1;
|
||||
}
|
||||
|
||||
var reward = new InstanceRewardParam(itemId, min, max);
|
||||
var reward = new ItemRewardParam(itemId, min, max);
|
||||
|
||||
if (isFirst) {
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ import java.util.List;
|
||||
import emu.nebula.data.BaseDef;
|
||||
import emu.nebula.data.ResourceType;
|
||||
import emu.nebula.game.instance.InstanceData;
|
||||
import emu.nebula.game.instance.InstanceRewardParam;
|
||||
import emu.nebula.game.inventory.ItemRewardParam;
|
||||
import emu.nebula.util.JsonUtils;
|
||||
|
||||
import lombok.Getter;
|
||||
@@ -21,8 +21,8 @@ public class RegionBossLevelDef extends BaseDef implements InstanceData {
|
||||
private int EnergyConsume;
|
||||
private String BaseAwardPreview;
|
||||
|
||||
private transient List<InstanceRewardParam> firstRewards;
|
||||
private transient List<InstanceRewardParam> rewards;
|
||||
private transient List<ItemRewardParam> firstRewards;
|
||||
private transient List<ItemRewardParam> rewards;
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
@@ -52,7 +52,7 @@ public class RegionBossLevelDef extends BaseDef implements InstanceData {
|
||||
max = 1;
|
||||
}
|
||||
|
||||
var reward = new InstanceRewardParam(itemId, min, max);
|
||||
var reward = new ItemRewardParam(itemId, min, max);
|
||||
|
||||
if (isFirst) {
|
||||
this.firstRewards.add(reward);
|
||||
|
||||
@@ -6,7 +6,7 @@ import java.util.List;
|
||||
import emu.nebula.data.BaseDef;
|
||||
import emu.nebula.data.ResourceType;
|
||||
import emu.nebula.game.instance.InstanceData;
|
||||
import emu.nebula.game.instance.InstanceRewardParam;
|
||||
import emu.nebula.game.inventory.ItemRewardParam;
|
||||
import emu.nebula.util.JsonUtils;
|
||||
import lombok.Getter;
|
||||
|
||||
@@ -20,8 +20,8 @@ public class SkillInstanceDef extends BaseDef implements InstanceData {
|
||||
private int EnergyConsume;
|
||||
private String BaseAwardPreview;
|
||||
|
||||
private transient List<InstanceRewardParam> firstRewards;
|
||||
private transient List<InstanceRewardParam> rewards;
|
||||
private transient List<ItemRewardParam> firstRewards;
|
||||
private transient List<ItemRewardParam> rewards;
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
@@ -51,7 +51,7 @@ public class SkillInstanceDef extends BaseDef implements InstanceData {
|
||||
max = 1;
|
||||
}
|
||||
|
||||
var reward = new InstanceRewardParam(itemId, min, max);
|
||||
var reward = new ItemRewardParam(itemId, min, max);
|
||||
|
||||
if (isFirst) {
|
||||
this.firstRewards.add(reward);
|
||||
|
||||
@@ -6,7 +6,7 @@ import java.util.List;
|
||||
import emu.nebula.data.BaseDef;
|
||||
import emu.nebula.data.ResourceType;
|
||||
import emu.nebula.game.instance.InstanceData;
|
||||
import emu.nebula.game.instance.InstanceRewardParam;
|
||||
import emu.nebula.game.inventory.ItemRewardParam;
|
||||
import emu.nebula.util.JsonUtils;
|
||||
|
||||
import lombok.Getter;
|
||||
@@ -19,8 +19,8 @@ public class WeekBossLevelDef extends BaseDef implements InstanceData {
|
||||
private int NeedWorldClass;
|
||||
private String BaseAwardPreview;
|
||||
|
||||
private transient List<InstanceRewardParam> firstRewards;
|
||||
private transient List<InstanceRewardParam> rewards;
|
||||
private transient List<ItemRewardParam> firstRewards;
|
||||
private transient List<ItemRewardParam> rewards;
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
@@ -54,7 +54,7 @@ public class WeekBossLevelDef extends BaseDef implements InstanceData {
|
||||
max = 1;
|
||||
}
|
||||
|
||||
var reward = new InstanceRewardParam(itemId, min, max);
|
||||
var reward = new ItemRewardParam(itemId, min, max);
|
||||
|
||||
if (isFirst) {
|
||||
this.firstRewards.add(reward);
|
||||
|
||||
48
src/main/java/emu/nebula/game/agent/Agent.java
Normal file
48
src/main/java/emu/nebula/game/agent/Agent.java
Normal file
@@ -0,0 +1,48 @@
|
||||
package emu.nebula.game.agent;
|
||||
|
||||
import dev.morphia.annotations.Entity;
|
||||
import emu.nebula.Nebula;
|
||||
import emu.nebula.data.resources.AgentDef;
|
||||
import emu.nebula.proto.Public.AgentInfo;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
@Entity(useDiscriminator = false)
|
||||
public class Agent {
|
||||
private int id;
|
||||
private int duration; // Minutes
|
||||
private long start; // Seconds
|
||||
private int[] charIds;
|
||||
|
||||
private long end; // Milliseconds
|
||||
|
||||
@Deprecated // Morphia only
|
||||
public Agent() {
|
||||
|
||||
}
|
||||
|
||||
public Agent(AgentDef data, int duration, int[] charIds) {
|
||||
this.id = data.getId();
|
||||
this.start = Nebula.getCurrentTime();
|
||||
this.duration = duration;
|
||||
this.charIds = charIds;
|
||||
|
||||
this.end = (this.start + (duration * 60)) * 1000;
|
||||
}
|
||||
|
||||
public boolean isCompleted() {
|
||||
return System.currentTimeMillis() >= this.getEnd();
|
||||
}
|
||||
|
||||
// Proto
|
||||
|
||||
public AgentInfo toProto() {
|
||||
var proto = AgentInfo.newInstance()
|
||||
.setId(this.getId())
|
||||
.setProcessTime(this.getDuration())
|
||||
.setStartTime(this.getStart())
|
||||
.addAllCharIds(this.getCharIds());
|
||||
|
||||
return proto;
|
||||
}
|
||||
}
|
||||
159
src/main/java/emu/nebula/game/agent/AgentManager.java
Normal file
159
src/main/java/emu/nebula/game/agent/AgentManager.java
Normal file
@@ -0,0 +1,159 @@
|
||||
package emu.nebula.game.agent;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import dev.morphia.annotations.Entity;
|
||||
import dev.morphia.annotations.Id;
|
||||
import emu.nebula.data.GameData;
|
||||
import emu.nebula.database.GameDatabaseObject;
|
||||
import emu.nebula.game.player.Player;
|
||||
import emu.nebula.game.player.PlayerChangeInfo;
|
||||
import emu.nebula.game.player.PlayerManager;
|
||||
import emu.nebula.game.quest.QuestCondType;
|
||||
import lombok.Getter;
|
||||
import us.hebi.quickbuf.RepeatedInt;
|
||||
|
||||
@Getter
|
||||
@Entity(value = "agents", useDiscriminator = false)
|
||||
public class AgentManager extends PlayerManager implements GameDatabaseObject {
|
||||
@Id
|
||||
private int uid;
|
||||
|
||||
private Map<Integer, Agent> agents;
|
||||
|
||||
@Deprecated // Morhpia only
|
||||
public AgentManager() {
|
||||
|
||||
}
|
||||
|
||||
public AgentManager(Player player) {
|
||||
super(player);
|
||||
this.uid = player.getUid();
|
||||
this.agents = new HashMap<>();
|
||||
|
||||
this.save();
|
||||
}
|
||||
|
||||
public int getMax() {
|
||||
return 4;
|
||||
}
|
||||
|
||||
public Agent apply(int id, int processTime, RepeatedInt charIds) {
|
||||
// Check if we already have the maximum amount of commissions
|
||||
if (this.getAgents().size() >= this.getMax()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Get agent data
|
||||
var data = GameData.getAgentDataTable().get(id);
|
||||
if (data == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Sanity check char ids
|
||||
if (charIds.length() <= 0 || charIds.length() > data.getMemberLimit()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Make sure we own the characters
|
||||
for (int charId : charIds) {
|
||||
if (!getPlayer().getCharacters().hasCharacter(charId)) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// TODO verify char tags for rewards
|
||||
|
||||
// Create agent
|
||||
var agent = new Agent(data, processTime, charIds.toArray());
|
||||
|
||||
// Add
|
||||
this.getAgents().put(agent.getId(), agent);
|
||||
|
||||
// Quest
|
||||
this.getPlayer().getQuestManager().triggerQuest(QuestCondType.AgentApplyTotal, 1);
|
||||
|
||||
// Success
|
||||
return agent;
|
||||
}
|
||||
|
||||
public Agent giveUp(int id) {
|
||||
var agent = this.getAgents().remove(id);
|
||||
|
||||
if (agent != null) {
|
||||
this.save();
|
||||
}
|
||||
|
||||
return agent;
|
||||
}
|
||||
|
||||
public PlayerChangeInfo claim(int id) {
|
||||
// Create list of claimed agents
|
||||
var list = new ArrayList<Agent>();
|
||||
|
||||
if (id > 0) {
|
||||
var agent = this.getAgents().get(id);
|
||||
|
||||
if (agent != null && agent.isCompleted()) {
|
||||
list.add(agent);
|
||||
}
|
||||
} else {
|
||||
for (var agent : this.getAgents().values()) {
|
||||
if (agent != null && agent.isCompleted()) {
|
||||
list.add(agent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Sanity check
|
||||
if (list.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Create results
|
||||
var change = new PlayerChangeInfo();
|
||||
var results = new ArrayList<AgentResult>();
|
||||
|
||||
// Claim
|
||||
for (var agent : list) {
|
||||
// Remove agent
|
||||
this.getAgents().remove(agent.getId());
|
||||
|
||||
// Get result
|
||||
var result = new AgentResult(agent);
|
||||
|
||||
// Add to result list
|
||||
results.add(result);
|
||||
|
||||
// Get agent data
|
||||
var data = GameData.getAgentDataTable().get(agent.getId());
|
||||
if (data == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Calculate rewards
|
||||
var duration = data.getDurations().get(agent.getDuration());
|
||||
if (duration == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Create rewards
|
||||
var rewards = duration.getRewards().generateRewards();
|
||||
result.setRewards(rewards);
|
||||
|
||||
// Add to inventory
|
||||
this.getPlayer().getInventory().addItems(rewards, change);
|
||||
}
|
||||
|
||||
// Set results in change info
|
||||
change.setExtraData(results);
|
||||
|
||||
// Save to database
|
||||
this.save();
|
||||
|
||||
// Success
|
||||
return change.setSuccess(true);
|
||||
}
|
||||
}
|
||||
41
src/main/java/emu/nebula/game/agent/AgentResult.java
Normal file
41
src/main/java/emu/nebula/game/agent/AgentResult.java
Normal file
@@ -0,0 +1,41 @@
|
||||
package emu.nebula.game.agent;
|
||||
|
||||
import emu.nebula.game.inventory.ItemParamMap;
|
||||
|
||||
public class AgentResult {
|
||||
private Agent agent;
|
||||
private ItemParamMap rewards;
|
||||
private ItemParamMap bonus;
|
||||
|
||||
public AgentResult(Agent agent) {
|
||||
this.agent = agent;
|
||||
}
|
||||
|
||||
public Agent getAgent() {
|
||||
return this.agent;
|
||||
}
|
||||
|
||||
public ItemParamMap getRewards() {
|
||||
if (this.rewards == null) {
|
||||
return ItemParamMap.EMPTY;
|
||||
}
|
||||
|
||||
return this.rewards;
|
||||
}
|
||||
|
||||
public ItemParamMap getBonus() {
|
||||
if (this.bonus == null) {
|
||||
return ItemParamMap.EMPTY;
|
||||
}
|
||||
|
||||
return this.bonus;
|
||||
}
|
||||
|
||||
public void setRewards(ItemParamMap rewards) {
|
||||
this.rewards = rewards;
|
||||
}
|
||||
|
||||
public void setBonus(ItemParamMap bonus) {
|
||||
this.bonus = bonus;
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@ package emu.nebula.game.instance;
|
||||
import java.util.List;
|
||||
|
||||
import emu.nebula.game.inventory.ItemParamMap;
|
||||
import emu.nebula.game.inventory.ItemRewardParam;
|
||||
import emu.nebula.game.player.Player;
|
||||
|
||||
public interface InstanceData {
|
||||
@@ -15,9 +16,9 @@ public interface InstanceData {
|
||||
|
||||
// Handle reward generation
|
||||
|
||||
public List<InstanceRewardParam> getFirstRewards();
|
||||
public List<ItemRewardParam> getFirstRewards();
|
||||
|
||||
public default List<InstanceRewardParam> getFirstRewards(int rewardType) {
|
||||
public default List<ItemRewardParam> getFirstRewards(int rewardType) {
|
||||
return getFirstRewards();
|
||||
}
|
||||
|
||||
@@ -25,9 +26,9 @@ public interface InstanceData {
|
||||
return this.generateRewards(this.getFirstRewards());
|
||||
}
|
||||
|
||||
public List<InstanceRewardParam> getRewards();
|
||||
public List<ItemRewardParam> getRewards();
|
||||
|
||||
public default List<InstanceRewardParam> getRewards(int rewardType) {
|
||||
public default List<ItemRewardParam> getRewards(int rewardType) {
|
||||
return getRewards();
|
||||
}
|
||||
|
||||
@@ -35,7 +36,7 @@ public interface InstanceData {
|
||||
return this.generateRewards(this.getRewards());
|
||||
}
|
||||
|
||||
public default ItemParamMap generateRewards(List<InstanceRewardParam> params) {
|
||||
public default ItemParamMap generateRewards(List<ItemRewardParam> params) {
|
||||
var map = new ItemParamMap();
|
||||
|
||||
for (var param : params) {
|
||||
|
||||
21
src/main/java/emu/nebula/game/inventory/ItemRewardList.java
Normal file
21
src/main/java/emu/nebula/game/inventory/ItemRewardList.java
Normal file
@@ -0,0 +1,21 @@
|
||||
package emu.nebula.game.inventory;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class ItemRewardList extends ArrayList<ItemRewardParam> {
|
||||
private static final long serialVersionUID = -4317949564663392685L;
|
||||
|
||||
public ItemRewardList() {
|
||||
super();
|
||||
}
|
||||
|
||||
public ItemParamMap generateRewards() {
|
||||
var map = new ItemParamMap();
|
||||
|
||||
for (var param : this) {
|
||||
map.add(param.getId(), param.getRandomCount());
|
||||
}
|
||||
|
||||
return map;
|
||||
}
|
||||
}
|
||||
@@ -1,15 +1,15 @@
|
||||
package emu.nebula.game.instance;
|
||||
package emu.nebula.game.inventory;
|
||||
|
||||
import emu.nebula.util.Utils;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
public class InstanceRewardParam {
|
||||
public class ItemRewardParam {
|
||||
public int id;
|
||||
public int min;
|
||||
public int max;
|
||||
|
||||
public InstanceRewardParam(int id, int min, int max) {
|
||||
public ItemRewardParam(int id, int min, int max) {
|
||||
this.id = id;
|
||||
this.min = min;
|
||||
this.max = max;
|
||||
@@ -11,6 +11,7 @@ import emu.nebula.Nebula;
|
||||
import emu.nebula.data.GameData;
|
||||
import emu.nebula.database.GameDatabaseObject;
|
||||
import emu.nebula.game.account.Account;
|
||||
import emu.nebula.game.agent.AgentManager;
|
||||
import emu.nebula.game.character.CharacterStorage;
|
||||
import emu.nebula.game.formation.FormationManager;
|
||||
import emu.nebula.game.gacha.GachaManager;
|
||||
@@ -87,6 +88,7 @@ public class Player implements GameDatabaseObject {
|
||||
private transient PlayerProgress progress;
|
||||
private transient StoryManager storyManager;
|
||||
private transient QuestManager questManager;
|
||||
private transient AgentManager agentManager;
|
||||
|
||||
// Next packages
|
||||
private transient Stack<NetMsgPacket> nextPackages;
|
||||
@@ -532,6 +534,7 @@ public class Player implements GameDatabaseObject {
|
||||
this.progress = this.loadManagerFromDatabase(PlayerProgress.class);
|
||||
this.storyManager = this.loadManagerFromDatabase(StoryManager.class);
|
||||
this.questManager = this.loadManagerFromDatabase(QuestManager.class);
|
||||
this.agentManager = this.loadManagerFromDatabase(AgentManager.class);
|
||||
|
||||
// Database fixes
|
||||
if (this.showChars == null) {
|
||||
@@ -714,9 +717,14 @@ public class Player implements GameDatabaseObject {
|
||||
var phone = proto.getMutablePhone();
|
||||
phone.setNewMessage(this.getCharacters().getNewPhoneMessageCount());
|
||||
|
||||
// Extra
|
||||
proto.getMutableAgent();
|
||||
// Agent
|
||||
var agentProto = proto.getMutableAgent();
|
||||
|
||||
for (var agent : getAgentManager().getAgents().values()) {
|
||||
agentProto.addInfos(agent.toProto());
|
||||
}
|
||||
|
||||
// Complete
|
||||
return proto;
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,9 @@ package emu.nebula.server.handlers;
|
||||
|
||||
import emu.nebula.net.NetHandler;
|
||||
import emu.nebula.net.NetMsgId;
|
||||
import emu.nebula.proto.AgentApply.AgentApplyReq;
|
||||
import emu.nebula.proto.AgentApply.AgentApplyResp;
|
||||
import emu.nebula.proto.AgentApply.AgentRespInfo;
|
||||
import emu.nebula.net.HandlerId;
|
||||
import emu.nebula.net.GameSession;
|
||||
|
||||
@@ -10,7 +13,36 @@ public class HandlerAgentApplyReq extends NetHandler {
|
||||
|
||||
@Override
|
||||
public byte[] handle(GameSession session, byte[] message) throws Exception {
|
||||
return session.encodeMsg(NetMsgId.agent_apply_failed_ack);
|
||||
// Parse request
|
||||
var req = AgentApplyReq.parseFrom(message);
|
||||
|
||||
// Build response
|
||||
var rsp = AgentApplyResp.newInstance();
|
||||
|
||||
// Apply for commissions
|
||||
for (var apply : req.getApply()) {
|
||||
// Apply
|
||||
var agent = session.getPlayer().getAgentManager().apply(
|
||||
apply.getId(),
|
||||
apply.getProcessTime(),
|
||||
apply.getCharIds()
|
||||
);
|
||||
|
||||
// Serialize to proto
|
||||
var info = AgentRespInfo.newInstance()
|
||||
.setId(agent.getId())
|
||||
.setBeginTime(agent.getStart());
|
||||
|
||||
rsp.addInfos(info);
|
||||
}
|
||||
|
||||
// Save
|
||||
if (rsp.getInfos().length() > 0) {
|
||||
session.getPlayer().getAgentManager().save();
|
||||
}
|
||||
|
||||
// Encode and send
|
||||
return session.encodeMsg(NetMsgId.agent_apply_succeed_ack, rsp);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
package emu.nebula.server.handlers;
|
||||
|
||||
import emu.nebula.net.NetHandler;
|
||||
import emu.nebula.net.NetMsgId;
|
||||
import emu.nebula.proto.AgentGiveUp.AgentGiveUpReq;
|
||||
import emu.nebula.proto.AgentGiveUp.AgentGiveUpResp;
|
||||
import emu.nebula.net.HandlerId;
|
||||
import emu.nebula.net.GameSession;
|
||||
|
||||
@HandlerId(NetMsgId.agent_give_up_req)
|
||||
public class HandlerAgentGiveUpReq extends NetHandler {
|
||||
|
||||
@Override
|
||||
public byte[] handle(GameSession session, byte[] message) throws Exception {
|
||||
// Parse request
|
||||
var req = AgentGiveUpReq.parseFrom(message);
|
||||
|
||||
// Give up
|
||||
var agent = session.getPlayer().getAgentManager().giveUp(req.getId());
|
||||
|
||||
if (agent == null) {
|
||||
return session.encodeMsg(NetMsgId.agent_give_up_failed_ack);
|
||||
}
|
||||
|
||||
// Build response
|
||||
var rsp = AgentGiveUpResp.newInstance()
|
||||
.addAllCharIds(agent.getCharIds());
|
||||
|
||||
// Encode and send
|
||||
return session.encodeMsg(NetMsgId.agent_give_up_succeed_ack, rsp);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
package emu.nebula.server.handlers;
|
||||
|
||||
import emu.nebula.net.NetHandler;
|
||||
import emu.nebula.net.NetMsgId;
|
||||
import emu.nebula.proto.AgentRewardReceive.AgentRewardReceiveReq;
|
||||
import emu.nebula.proto.AgentRewardReceive.AgentRewardReceiveResp;
|
||||
import emu.nebula.proto.AgentRewardReceive.AgentRewardShow;
|
||||
import emu.nebula.net.HandlerId;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import emu.nebula.game.agent.AgentResult;
|
||||
import emu.nebula.net.GameSession;
|
||||
|
||||
@HandlerId(NetMsgId.agent_reward_receive_req)
|
||||
public class HandlerAgentRewardReceiveReq extends NetHandler {
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public byte[] handle(GameSession session, byte[] message) throws Exception {
|
||||
// Parse request
|
||||
var req = AgentRewardReceiveReq.parseFrom(message);
|
||||
|
||||
// Claim
|
||||
var change = session.getPlayer().getAgentManager().claim(req.getId());
|
||||
|
||||
if (change == null) {
|
||||
return session.encodeMsg(NetMsgId.agent_reward_receive_failed_ack);
|
||||
}
|
||||
|
||||
// Build response
|
||||
var rsp = AgentRewardReceiveResp.newInstance()
|
||||
.setChange(change.toProto());
|
||||
|
||||
// Handle results
|
||||
var results = (ArrayList<AgentResult>) change.getExtraData();
|
||||
|
||||
for (var result : results) {
|
||||
// Add char ids
|
||||
rsp.addAllCharIds(result.getAgent().getCharIds());
|
||||
|
||||
// Agent rewards proto
|
||||
var show = AgentRewardShow.newInstance()
|
||||
.setId(result.getAgent().getId());
|
||||
|
||||
result.getRewards().toItemTemplateStream().forEach(show::addRewards);
|
||||
result.getBonus().toItemTemplateStream().forEach(show::addBonus);
|
||||
|
||||
rsp.addRewardShows(show);
|
||||
}
|
||||
|
||||
// Encode and send
|
||||
return session.encodeMsg(NetMsgId.agent_reward_receive_succeed_ack, rsp);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user