Implement cataclysm survivor (basic)

This commit is contained in:
Melledy
2025-11-08 05:57:44 -08:00
parent 2ecc0f28c5
commit c32df9e8aa
10 changed files with 356 additions and 0 deletions

View File

@@ -0,0 +1,35 @@
package emu.nebula.server.handlers;
import emu.nebula.net.NetHandler;
import emu.nebula.net.NetMsgId;
import emu.nebula.proto.VampireSurvivorApply.VampireSurvivorApplyReq;
import emu.nebula.proto.VampireSurvivorApply.VampireSurvivorApplyResp;
import emu.nebula.net.HandlerId;
import emu.nebula.net.GameSession;
@HandlerId(NetMsgId.vampire_survivor_apply_req)
public class HandlerVampireSurvivorApplyReq extends NetHandler {
@Override
public byte[] handle(GameSession session, byte[] message) throws Exception {
// Parse request
var req = VampireSurvivorApplyReq.parseFrom(message);
// Apply
var game = session.getPlayer().getVampireSurvivorManager().apply(req.getId());
if (game == null) {
return session.encodeMsg(NetMsgId.vampire_survivor_apply_failed_ack);
}
// Build response
var rsp = VampireSurvivorApplyResp.newInstance()
.setReward(game.getRewardProto());
rsp.getMutableSelect();
// Encode and send
return session.encodeMsg(NetMsgId.vampire_survivor_apply_succeed_ack, rsp);
}
}

View File

@@ -0,0 +1,43 @@
package emu.nebula.server.handlers;
import emu.nebula.net.NetHandler;
import emu.nebula.net.NetMsgId;
import emu.nebula.proto.VampireSurvivorRewardSelect.VampireSurvivorRewardSelectReq;
import emu.nebula.proto.VampireSurvivorRewardSelect.VampireSurvivorRewardSelectResp;
import emu.nebula.net.HandlerId;
import emu.nebula.net.GameSession;
@HandlerId(NetMsgId.vampire_survivor_reward_select_req)
public class HandlerVampireSurvivorRewardSelectReq extends NetHandler {
@Override
public byte[] handle(GameSession session, byte[] message) throws Exception {
// Parse
var req = VampireSurvivorRewardSelectReq.parseFrom(message);
// Get game
var game = session.getPlayer().getVampireSurvivorManager().getGame();
if (game == null) {
session.encodeMsg(NetMsgId.vampire_survivor_reward_select_failed_ack);
}
// Select
int cardId = game.selectReward(req.getIndex(), req.getReRoll());
if (cardId <= 0) {
session.encodeMsg(NetMsgId.vampire_survivor_reward_select_failed_ack);
}
// Build response
var rsp = VampireSurvivorRewardSelectResp.newInstance();
rsp.getMutableResp()
.setFateCardId(cardId)
.setReward(game.getRewardProto());
// Encode and send
return session.encodeMsg(NetMsgId.vampire_survivor_reward_select_succeed_ack, rsp);
}
}

View File

@@ -0,0 +1,58 @@
package emu.nebula.server.handlers;
import emu.nebula.net.NetHandler;
import emu.nebula.net.NetMsgId;
import emu.nebula.proto.VampireSurvivorSettle.VampireSurvivorAreaInfo;
import emu.nebula.proto.VampireSurvivorSettle.VampireSurvivorSettleReq;
import emu.nebula.proto.VampireSurvivorSettle.VampireSurvivorSettleResp;
import emu.nebula.net.HandlerId;
import emu.nebula.net.GameSession;
@HandlerId(NetMsgId.vampire_survivor_settle_req)
public class HandlerVampireSurvivorSettleReq extends NetHandler {
@Override
public byte[] handle(GameSession session, byte[] message) throws Exception {
// Parse request
var req = VampireSurvivorSettleReq.parseFrom(message);
// Sanity check
var game = session.getPlayer().getVampireSurvivorManager().getGame();
if (game == null) {
session.encodeMsg(NetMsgId.vampire_survivor_settle_failed_ack);
}
// Calculate victory + score
boolean victory = !req.getDefeat();
int score = 0;
// Settle
session.getPlayer().getVampireSurvivorManager().settle(victory, score);
// Build response
var rsp = VampireSurvivorSettleResp.newInstance();
if (victory) {
var areaInfo = VampireSurvivorAreaInfo.newInstance()
.setBossTime(1)
.setScore(score);
// TODO
for (int i : req.getKillCount()) {
areaInfo.addKillCount(i);
areaInfo.addKillScore(0);
}
rsp.getMutableVictory()
.setFinalScore(score)
.addInfos(areaInfo);
} else {
rsp.getMutableDefeat()
.setFinalScore(score);
}
// Encode and send
return session.encodeMsg(NetMsgId.vampire_survivor_settle_succeed_ack, rsp);
}
}

View File

@@ -0,0 +1,22 @@
package emu.nebula.server.handlers;
import emu.nebula.net.NetHandler;
import emu.nebula.net.NetMsgId;
import emu.nebula.proto.VampireTalentDetail.VampireTalentDetailResp;
import emu.nebula.net.HandlerId;
import emu.nebula.net.GameSession;
@HandlerId(NetMsgId.vampire_talent_detail_req)
public class HandlerVampireTalentDetailReq extends NetHandler {
@Override
public byte[] handle(GameSession session, byte[] message) throws Exception {
// Build response
var rsp = VampireTalentDetailResp.newInstance()
.setNodes(new byte[8]);
// Encode and send
return session.encodeMsg(NetMsgId.vampire_talent_detail_succeed_ack, rsp);
}
}