mirror of
https://github.com/Melledy/Nebula.git
synced 2025-12-12 12:24:35 +01:00
feat(tower_defense): implement first clear rewards
This commit is contained in:
@@ -140,6 +140,9 @@ public class GameData {
|
||||
// Activity
|
||||
@Getter private static DataTable<ActivityDef> ActivityDataTable = new DataTable<>();
|
||||
|
||||
// Tower defense
|
||||
@Getter private static DataTable<TowerDefenseLevelDef> TowerDefenseLevelDataTable = new DataTable<>();
|
||||
|
||||
@Getter private static DataTable<TrialControlDef> TrialControlDataTable = new DataTable<>();
|
||||
@Getter private static DataTable<TrialGroupDef> TrialGroupDataTable = new DataTable<>();
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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,11 +29,21 @@ 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<Integer, Integer>();
|
||||
this.completedQuests = new HashMap<Integer, Integer>();
|
||||
}
|
||||
|
||||
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
|
||||
// var change = new PlayerChangeInfo();
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user