diff --git a/src/main/java/emu/nebula/game/activity/ActivityManager.java b/src/main/java/emu/nebula/game/activity/ActivityManager.java index b32c8ce..da3243e 100644 --- a/src/main/java/emu/nebula/game/activity/ActivityManager.java +++ b/src/main/java/emu/nebula/game/activity/ActivityManager.java @@ -111,6 +111,7 @@ public class ActivityManager extends PlayerManager implements GameDatabaseObject GameActivity activity = switch (data.getType()) { case Trial -> new TrialActivity(this, data); + case TowerDefense -> new TowerDefenseActivity(this, data); default -> null; }; diff --git a/src/main/java/emu/nebula/game/activity/ActivityModule.java b/src/main/java/emu/nebula/game/activity/ActivityModule.java index e9c8b4a..ab54cbc 100644 --- a/src/main/java/emu/nebula/game/activity/ActivityModule.java +++ b/src/main/java/emu/nebula/game/activity/ActivityModule.java @@ -19,6 +19,8 @@ public class ActivityModule extends GameContextModule { this.activities.add(700103); this.activities.add(700104); this.activities.add(700107); + + this.activities.add(102001); // Tower defense activity //this.activities.add(101002); //this.activities.add(101003); diff --git a/src/main/java/emu/nebula/game/activity/type/TowerDefenseActivity.java b/src/main/java/emu/nebula/game/activity/type/TowerDefenseActivity.java new file mode 100644 index 0000000..a59826b --- /dev/null +++ b/src/main/java/emu/nebula/game/activity/type/TowerDefenseActivity.java @@ -0,0 +1,95 @@ +package emu.nebula.game.activity.type; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import dev.morphia.annotations.Entity; +import emu.nebula.data.resources.ActivityDef; +import emu.nebula.game.activity.ActivityManager; +import emu.nebula.game.activity.GameActivity; +import emu.nebula.proto.ActivityDetail.ActivityMsg; +import emu.nebula.proto.Public.ActivityQuest; +import emu.nebula.proto.Public.ActivityTowerDefenseLevel; +import lombok.Getter; + +@Getter +@Entity +public class TowerDefenseActivity extends GameActivity { + private Map completedStages; + private Map completedQuests; + + @Deprecated // Morphia only + public TowerDefenseActivity() { + + } + + public TowerDefenseActivity(ActivityManager manager, ActivityDef data) { + super(manager, data); + // fishiatee: Unsure if this is the correct way to do this + this.completedStages = new HashMap(); + this.completedQuests = new HashMap(); + } + + // public PlayerChangeInfo claimReward(int groupId) { + // // Create change info + // var change = new PlayerChangeInfo(); + + // // Make sure we haven't completed this group yet + // if (this.getCompleted().contains(groupId)) { + // return change; + // } + + // // Get trial control + // var control = GameData.getTrialControlDataTable().get(this.getId()); + // if (control == null) return change; + + // // Get group + // var group = GameData.getTrialGroupDataTable().get(groupId); + // if (group == null) return change; + + // // Set as completed + // this.getCompleted().add(groupId); + + // // Save to database + // this.save(); + + // // Add rewards + // return getPlayer().getInventory().addItems(group.getRewards(), change); + // } + + // Proto + + @Override + public void encodeActivityMsg(ActivityMsg msg) { + var proto = msg.getMutableTowerDefense(); + + // Add completed stages + for (int id : this.completedStages.values()) { + // Create proto + var level = ActivityTowerDefenseLevel.newInstance(); + + // Set proto params + level.setId(id); + level.setStar(this.completedStages.get(id)); + + // Add to final msg proto + proto.addLevels(level); + } + + // Add completed quests + for (int id : this.completedStages.values()) { + // Create proto + var quest = ActivityQuest.newInstance(); + + // Set proto params + quest.setActivityId(this.getId()); + quest.setId(id); + quest.setStatus(2); // TODO: properly handle event quests + + // Add to final msg proto + proto.addQuests(quest); + } + } + +} diff --git a/src/main/java/emu/nebula/server/handlers/HandlerActivityTowerDefenseLevelApplyReq.java b/src/main/java/emu/nebula/server/handlers/HandlerActivityTowerDefenseLevelApplyReq.java new file mode 100644 index 0000000..e864659 --- /dev/null +++ b/src/main/java/emu/nebula/server/handlers/HandlerActivityTowerDefenseLevelApplyReq.java @@ -0,0 +1,17 @@ +package emu.nebula.server.handlers; + +import emu.nebula.net.NetHandler; +import emu.nebula.net.NetMsgId; +import emu.nebula.net.HandlerId; +import emu.nebula.net.GameSession; + +@HandlerId(NetMsgId.activity_tower_defense_level_apply_req) +public class HandlerActivityTowerDefenseLevelApplyReq extends NetHandler { + + @Override + public byte[] handle(GameSession session, byte[] message) throws Exception { + // Encode and send + return session.encodeMsg(NetMsgId.activity_tower_defense_level_apply_succeed_ack); + } + +} diff --git a/src/main/java/emu/nebula/server/handlers/HandlerActivityTowerDefenseLevelSettleReq.java b/src/main/java/emu/nebula/server/handlers/HandlerActivityTowerDefenseLevelSettleReq.java new file mode 100644 index 0000000..4a73e3b --- /dev/null +++ b/src/main/java/emu/nebula/server/handlers/HandlerActivityTowerDefenseLevelSettleReq.java @@ -0,0 +1,22 @@ +package emu.nebula.server.handlers; + +import emu.nebula.net.NetHandler; +import emu.nebula.net.NetMsgId; +import emu.nebula.net.HandlerId; +import emu.nebula.game.player.PlayerChangeInfo; +import emu.nebula.net.GameSession; + +@HandlerId(NetMsgId.activity_tower_defense_level_settle_req) +public class HandlerActivityTowerDefenseLevelSettleReq extends NetHandler { + + @Override + public byte[] handle(GameSession session, byte[] message) throws Exception { + // Initialize change info + // TODO: Handle this properly + var changeInfo = new PlayerChangeInfo(); + + // Encode and send + return session.encodeMsg(NetMsgId.activity_tower_defense_level_settle_succeed_ack, changeInfo.toProto()); + } + +}