mirror of
https://github.com/Melledy/Nebula.git
synced 2025-12-12 20:34:36 +01:00
feat: tower defense activity
Bare minimum work done.
This commit is contained in:
@@ -111,6 +111,7 @@ public class ActivityManager extends PlayerManager implements GameDatabaseObject
|
|||||||
|
|
||||||
GameActivity activity = switch (data.getType()) {
|
GameActivity activity = switch (data.getType()) {
|
||||||
case Trial -> new TrialActivity(this, data);
|
case Trial -> new TrialActivity(this, data);
|
||||||
|
case TowerDefense -> new TowerDefenseActivity(this, data);
|
||||||
default -> null;
|
default -> null;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,8 @@ public class ActivityModule extends GameContextModule {
|
|||||||
this.activities.add(700103);
|
this.activities.add(700103);
|
||||||
this.activities.add(700104);
|
this.activities.add(700104);
|
||||||
this.activities.add(700107);
|
this.activities.add(700107);
|
||||||
|
|
||||||
|
this.activities.add(102001); // Tower defense activity
|
||||||
|
|
||||||
//this.activities.add(101002);
|
//this.activities.add(101002);
|
||||||
//this.activities.add(101003);
|
//this.activities.add(101003);
|
||||||
|
|||||||
@@ -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<Integer, Integer> completedStages;
|
||||||
|
private Map<Integer, Integer> 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<Integer, Integer>();
|
||||||
|
this.completedQuests = new HashMap<Integer, Integer>();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user