mirror of
https://github.com/Melledy/Nebula.git
synced 2025-12-12 20:34:36 +01:00
feat(tower_defense): implement first clear rewards
This commit is contained in:
@@ -140,6 +140,9 @@ public class GameData {
|
|||||||
// Activity
|
// Activity
|
||||||
@Getter private static DataTable<ActivityDef> ActivityDataTable = new DataTable<>();
|
@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<TrialControlDef> TrialControlDataTable = new DataTable<>();
|
||||||
@Getter private static DataTable<TrialGroupDef> TrialGroupDataTable = 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 java.util.Map;
|
||||||
|
|
||||||
import dev.morphia.annotations.Entity;
|
import dev.morphia.annotations.Entity;
|
||||||
|
import emu.nebula.data.GameData;
|
||||||
import emu.nebula.data.resources.ActivityDef;
|
import emu.nebula.data.resources.ActivityDef;
|
||||||
import emu.nebula.game.activity.ActivityManager;
|
import emu.nebula.game.activity.ActivityManager;
|
||||||
import emu.nebula.game.activity.GameActivity;
|
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.ActivityDetail.ActivityMsg;
|
||||||
import emu.nebula.proto.Public.ActivityQuest;
|
import emu.nebula.proto.Public.ActivityQuest;
|
||||||
import emu.nebula.proto.Public.ActivityTowerDefenseLevel;
|
import emu.nebula.proto.Public.ActivityTowerDefenseLevel;
|
||||||
@@ -26,11 +29,21 @@ public class TowerDefenseActivity extends GameActivity {
|
|||||||
|
|
||||||
public TowerDefenseActivity(ActivityManager manager, ActivityDef data) {
|
public TowerDefenseActivity(ActivityManager manager, ActivityDef data) {
|
||||||
super(manager, data);
|
super(manager, data);
|
||||||
// fishiatee: Unsure if this is the correct way to do this
|
|
||||||
this.completedStages = new HashMap<Integer, Integer>();
|
this.completedStages = new HashMap<Integer, Integer>();
|
||||||
this.completedQuests = 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) {
|
// public PlayerChangeInfo claimReward(int groupId) {
|
||||||
// // Create change info
|
// // Create change info
|
||||||
// var change = new PlayerChangeInfo();
|
// var change = new PlayerChangeInfo();
|
||||||
|
|||||||
@@ -170,7 +170,14 @@ public class HttpServer {
|
|||||||
|
|
||||||
// https://nova-static.stellasora.global/
|
// https://nova-static.stellasora.global/
|
||||||
getApp().get("/meta/serverlist.html", new MetaServerlistHandler(this));
|
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() {
|
private void addGameServerRoutes() {
|
||||||
|
|||||||
@@ -2,8 +2,10 @@ package emu.nebula.server.handlers;
|
|||||||
|
|
||||||
import emu.nebula.net.NetHandler;
|
import emu.nebula.net.NetHandler;
|
||||||
import emu.nebula.net.NetMsgId;
|
import emu.nebula.net.NetMsgId;
|
||||||
|
import emu.nebula.proto.ActivityTowerDefenseLevelSettle.ActivityTowerDefenseLevelSettleReq;
|
||||||
import emu.nebula.net.HandlerId;
|
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;
|
import emu.nebula.net.GameSession;
|
||||||
|
|
||||||
@HandlerId(NetMsgId.activity_tower_defense_level_settle_req)
|
@HandlerId(NetMsgId.activity_tower_defense_level_settle_req)
|
||||||
@@ -11,12 +13,23 @@ public class HandlerActivityTowerDefenseLevelSettleReq extends NetHandler {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public byte[] handle(GameSession session, byte[] message) throws Exception {
|
public byte[] handle(GameSession session, byte[] message) throws Exception {
|
||||||
// Initialize change info
|
// Parse request proto
|
||||||
// TODO: Handle this properly
|
var req = ActivityTowerDefenseLevelSettleReq.parseFrom(message);
|
||||||
var changeInfo = new PlayerChangeInfo();
|
|
||||||
|
// 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
|
// 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