diff --git a/src/main/java/emu/nebula/data/GameData.java b/src/main/java/emu/nebula/data/GameData.java index dbca835..018eaf4 100644 --- a/src/main/java/emu/nebula/data/GameData.java +++ b/src/main/java/emu/nebula/data/GameData.java @@ -139,6 +139,9 @@ public class GameData { // Activity @Getter private static DataTable ActivityDataTable = new DataTable<>(); + + // Tower defense + @Getter private static DataTable TowerDefenseLevelDataTable = new DataTable<>(); @Getter private static DataTable TrialControlDataTable = new DataTable<>(); @Getter private static DataTable TrialGroupDataTable = new DataTable<>(); diff --git a/src/main/java/emu/nebula/data/resources/TowerDefenseLevelDef.java b/src/main/java/emu/nebula/data/resources/TowerDefenseLevelDef.java new file mode 100644 index 0000000..48d2cb0 --- /dev/null +++ b/src/main/java/emu/nebula/data/resources/TowerDefenseLevelDef.java @@ -0,0 +1,33 @@ +package emu.nebula.data.resources; + +import emu.nebula.data.BaseDef; +import emu.nebula.data.ResourceType; +import emu.nebula.game.inventory.ItemParamMap; +import lombok.Getter; + +@Getter +@ResourceType(name = "TowerDefenseLevel.json") +public class TowerDefenseLevelDef extends BaseDef { + private int Id; + private int Condition2; + private int Condition3; + private int Item1; + private int Qty1; + private int Item2; + private int Qty2; + + private transient ItemParamMap rewards; + + @Override + public int getId() { + return Id; + } + + @Override + public void onLoad() { + // Parse rewards + this.rewards = new ItemParamMap(); + this.rewards.add(this.Item1, this.Qty1); + this.rewards.add(this.Item2, this.Qty2); + } +} diff --git a/src/main/java/emu/nebula/game/activity/type/TowerDefenseActivity.java b/src/main/java/emu/nebula/game/activity/type/TowerDefenseActivity.java index 86f088e..ffd71a0 100644 --- a/src/main/java/emu/nebula/game/activity/type/TowerDefenseActivity.java +++ b/src/main/java/emu/nebula/game/activity/type/TowerDefenseActivity.java @@ -5,9 +5,12 @@ import java.util.HashMap; import java.util.Map; 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.inventory.ItemParamMap; +import emu.nebula.game.player.PlayerChangeInfo; import emu.nebula.proto.ActivityDetail.ActivityMsg; import emu.nebula.proto.Public.ActivityQuest; import emu.nebula.proto.Public.ActivityTowerDefenseLevel; @@ -26,10 +29,20 @@ public class TowerDefenseActivity extends GameActivity { 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 level) { + // Initialize change info + var change = new PlayerChangeInfo(); + + // Get rewards + var rewards = GameData.getTowerDefenseLevelDataTable().get(level).getRewards(); + + // Add rewards + return getPlayer().getInventory().addItems(rewards, change); + } // public PlayerChangeInfo claimReward(int groupId) { // // Create change info diff --git a/src/main/java/emu/nebula/server/HttpServer.java b/src/main/java/emu/nebula/server/HttpServer.java index 17abb1f..acb1eb7 100644 --- a/src/main/java/emu/nebula/server/HttpServer.java +++ b/src/main/java/emu/nebula/server/HttpServer.java @@ -170,7 +170,14 @@ public class HttpServer { // https://nova-static.stellasora.global/ getApp().get("/meta/serverlist.html", new MetaServerlistHandler(this)); - getApp().get("/meta/*.html", new MetaPatchListHandler(this)); + + /* + fishiatee: Maybe this should be handled better. + + For example, if raw meta is detected in say ./web/meta, serve that instead. + Otherwise, detect and serve from custom patchlist definition. + */ + //getApp().get("/meta/*.html", new MetaPatchListHandler(this)); } private void addGameServerRoutes() { diff --git a/src/main/java/emu/nebula/server/handlers/HandlerActivityTowerDefenseLevelSettleReq.java b/src/main/java/emu/nebula/server/handlers/HandlerActivityTowerDefenseLevelSettleReq.java index 4a73e3b..41d25b2 100644 --- a/src/main/java/emu/nebula/server/handlers/HandlerActivityTowerDefenseLevelSettleReq.java +++ b/src/main/java/emu/nebula/server/handlers/HandlerActivityTowerDefenseLevelSettleReq.java @@ -2,8 +2,10 @@ package emu.nebula.server.handlers; import emu.nebula.net.NetHandler; import emu.nebula.net.NetMsgId; +import emu.nebula.proto.ActivityTowerDefenseLevelSettle.ActivityTowerDefenseLevelSettleReq; import emu.nebula.net.HandlerId; -import emu.nebula.game.player.PlayerChangeInfo; +import emu.nebula.Nebula; +import emu.nebula.game.activity.type.TowerDefenseActivity; import emu.nebula.net.GameSession; @HandlerId(NetMsgId.activity_tower_defense_level_settle_req) @@ -11,12 +13,23 @@ 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(); + // Parse request proto + var req = ActivityTowerDefenseLevelSettleReq.parseFrom(message); + + // Get activity + var activity = session.getPlayer().getActivityManager().getActivity(TowerDefenseActivity.class, 102001); + + // Claim rewards + var change = activity.claimReward((int)req.getLevelId()); + + // Update completed stages + activity.getCompletedStages().put(req.getLevelId(), req.getStar()); + + // Save changes + session.getPlayer().save(); // Encode and send - return session.encodeMsg(NetMsgId.activity_tower_defense_level_settle_succeed_ack, changeInfo.toProto()); + return session.encodeMsg(NetMsgId.activity_tower_defense_level_settle_succeed_ack, change.toProto()); } }