diff --git a/src/main/java/emu/nebula/game/activity/ActivityManager.java b/src/main/java/emu/nebula/game/activity/ActivityManager.java index 1410e62..451f25f 100644 --- a/src/main/java/emu/nebula/game/activity/ActivityManager.java +++ b/src/main/java/emu/nebula/game/activity/ActivityManager.java @@ -137,6 +137,7 @@ public class ActivityManager extends PlayerManager implements GameDatabaseObject case Task -> new TaskActivity(this, data); case Shop -> new ShopActivity(this, data); case TrekkerVersus -> new TrekkerVersusActivity(this, data); + case PenguinCard -> new PenguinCardActivity(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 b4ec4b3..2cae76e 100644 --- a/src/main/java/emu/nebula/game/activity/ActivityModule.java +++ b/src/main/java/emu/nebula/game/activity/ActivityModule.java @@ -64,6 +64,9 @@ public class ActivityModule extends GameContextModule { // Christmas 2025 login events this.activities.add(301011); this.activities.add(301012); + + // Fatebound Stellar Deck + this.activities.add(800001); // Trekker versus (broken) //this.activities.add(600001); diff --git a/src/main/java/emu/nebula/game/activity/type/PenguinCardActivity.java b/src/main/java/emu/nebula/game/activity/type/PenguinCardActivity.java new file mode 100644 index 0000000..83a463c --- /dev/null +++ b/src/main/java/emu/nebula/game/activity/type/PenguinCardActivity.java @@ -0,0 +1,77 @@ +package emu.nebula.game.activity.type; + +import dev.morphia.annotations.Entity; + +import emu.nebula.data.GameData; +import emu.nebula.data.resources.ActivityDef; +import emu.nebula.game.activity.ActivityManager; +import emu.nebula.game.activity.GameActivity; +import emu.nebula.game.player.PlayerChangeInfo; +import emu.nebula.proto.ActivityDetail.ActivityMsg; +import emu.nebula.proto.Public.ActivityQuest; +import emu.nebula.proto.Public.ActivityTowerDefenseLevel; + +import it.unimi.dsi.fastutil.ints.Int2IntMap; +import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap; +import lombok.Getter; + +@Getter +@Entity +public class PenguinCardActivity extends GameActivity { + private Int2IntMap completedStages; + private Int2IntMap completedQuests; + + @Deprecated // Morphia only + public PenguinCardActivity() { + + } + + public PenguinCardActivity(ActivityManager manager, ActivityDef data) { + super(manager, data); + this.completedStages = new Int2IntOpenHashMap(); + this.completedQuests = new Int2IntOpenHashMap(); + } + + public PlayerChangeInfo claimReward(int level) { + // Get rewards + var rewards = GameData.getTowerDefenseLevelDataTable().get(level).getRewards(); + + // Add rewards + return getPlayer().getInventory().addItems(rewards); + } + + // 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) { + msg.getMutablePenguinCard(); + } + +} diff --git a/src/main/java/emu/nebula/server/handlers/HandlerActivityPenguinCardSettleReq.java b/src/main/java/emu/nebula/server/handlers/HandlerActivityPenguinCardSettleReq.java new file mode 100644 index 0000000..440c75a --- /dev/null +++ b/src/main/java/emu/nebula/server/handlers/HandlerActivityPenguinCardSettleReq.java @@ -0,0 +1,23 @@ +package emu.nebula.server.handlers; + +import emu.nebula.net.NetHandler; +import emu.nebula.net.NetMsgId; +import emu.nebula.proto.ActivityPenguinCardLevelSettle.ActivityPenguinCardSettleReq; +import emu.nebula.net.HandlerId; +import emu.nebula.net.GameSession; + +@HandlerId(NetMsgId.activity_penguin_card_level_settle_req) +public class HandlerActivityPenguinCardSettleReq extends NetHandler { + + @Override + public byte[] handle(GameSession session, byte[] message) throws Exception { + // Parse request proto + var req = ActivityPenguinCardSettleReq.parseFrom(message); + + // Get activity + + // Encode and send + return session.encodeMsg(NetMsgId.activity_penguin_card_level_settle_succeed_ack); + } + +}