Implement new event

This commit is contained in:
Melledy
2025-12-08 22:28:47 -08:00
parent 80a181680b
commit c5f339c8be
20 changed files with 1020 additions and 8 deletions
@@ -10,7 +10,7 @@ public class Handler extends NetHandler {
@Override
public byte[] handle(GameSession session, byte[] message) throws Exception {
// Template hanlder
// Template handler
// Encode and send
return session.encodeMsg(NetMsgId.none);
@@ -0,0 +1,36 @@
package emu.nebula.server.handlers;
import emu.nebula.net.NetHandler;
import emu.nebula.net.NetMsgId;
import emu.nebula.proto.ActivityLevelsApply.ActivityLevelsApplyReq;
import emu.nebula.net.HandlerId;
import emu.nebula.game.activity.type.LevelsActivity;
import emu.nebula.net.GameSession;
@HandlerId(NetMsgId.activity_levels_apply_req)
public class HandlerActivityLevelsApplyReq extends NetHandler {
@Override
public byte[] handle(GameSession session, byte[] message) throws Exception {
// Parse req
var req = ActivityLevelsApplyReq.parseFrom(message);
// Get activity
var activity = session.getPlayer().getActivityManager().getActivity(LevelsActivity.class, req.getActivityId());
if (activity == null) {
return session.encodeMsg(NetMsgId.activity_levels_apply_failed_ack);
}
// Apply
boolean success = activity.apply(req.getLevelId(), req.getBuildId());
if (success == false) {
return session.encodeMsg(NetMsgId.activity_levels_apply_failed_ack);
}
// Encode and send
return session.encodeMsg(NetMsgId.activity_levels_apply_succeed_ack);
}
}
@@ -0,0 +1,56 @@
package emu.nebula.server.handlers;
import emu.nebula.net.NetHandler;
import emu.nebula.net.NetMsgId;
import emu.nebula.proto.ActivityLevelsSettle.ActivityLevelsSettleReq;
import emu.nebula.proto.ActivityLevelsSettle.ActivityLevelsSettleResp;
import emu.nebula.net.HandlerId;
import emu.nebula.game.activity.type.LevelsActivity;
import emu.nebula.game.instance.InstanceSettleData;
import emu.nebula.net.GameSession;
@HandlerId(NetMsgId.activity_levels_settle_req)
public class HandlerActivityLevelsSettleReq extends NetHandler {
@Override
public byte[] handle(GameSession session, byte[] message) throws Exception {
// Parse request
var req = ActivityLevelsSettleReq.parseFrom(message);
// Get activity
var activity = session.getPlayer().getActivityManager().getActivity(LevelsActivity.class, req.getActivityId());
if (activity == null || activity.getLevel() == null) {
return session.encodeMsg(NetMsgId.activity_levels_settle_failed_ack);
}
// Settle
var change = activity.settle(req.getStar());
if (change == null) {
return session.encodeMsg(NetMsgId.activity_levels_settle_failed_ack);
}
var settleData = (InstanceSettleData) change.getExtraData();
// Handle client events for achievements
session.getPlayer().getAchievementManager().handleClientEvents(req.getEvents());
// Build response
var rsp = ActivityLevelsSettleResp.newInstance()
.setExp(settleData.getExp())
.setChangeInfo(change.toProto());
// Add reward items
if (settleData.getRewards() != null) {
settleData.getRewards().toItemTemplateStream().forEach(rsp::addFixed);
}
if (settleData.getFirstRewards() != null) {
settleData.getFirstRewards().toItemTemplateStream().forEach(rsp::addFirst);
}
// Encode and send
return session.encodeMsg(NetMsgId.activity_levels_settle_succeed_ack, rsp);
}
}
@@ -0,0 +1,70 @@
package emu.nebula.server.handlers;
import emu.nebula.net.NetHandler;
import emu.nebula.net.NetMsgId;
import emu.nebula.proto.ActivityLevelsSweep.ActivityLevelsSweepReq;
import emu.nebula.proto.ActivityLevelsSweep.ActivityLevelsSweepResp;
import emu.nebula.proto.ActivityLevelsSweep.ActivityLevelsSweepReward;
import emu.nebula.net.HandlerId;
import emu.nebula.data.GameData;
import emu.nebula.game.activity.type.LevelsActivity;
import emu.nebula.game.inventory.ItemParamMap;
import emu.nebula.net.GameSession;
import java.util.List;
@HandlerId(NetMsgId.activity_levels_sweep_req)
public class HandlerActivityLevelsSweepReq extends NetHandler {
@Override
public byte[] handle(GameSession session, byte[] message) throws Exception {
// Parse request
var req = ActivityLevelsSweepReq.parseFrom(message);
// Get activity
var activity = session.getPlayer().getActivityManager().getActivity(LevelsActivity.class, req.getActivityId());
if (activity == null) {
return session.encodeMsg(NetMsgId.activity_levels_sweep_failed_ack);
}
// Get level data
var data = GameData.getActivityLevelsLevelDataTable().get(req.getLevelId());
if (data == null) {
return session.encodeMsg(NetMsgId.activity_levels_sweep_failed_ack);
}
// Settle
var change = activity.sweep(data, req.getTimes());
if (change == null) {
return session.encodeMsg(NetMsgId.activity_levels_sweep_failed_ack);
}
// Handle client events for achievements
session.getPlayer().getAchievementManager().handleClientEvents(req.getEvents());
// Build response
var rsp = ActivityLevelsSweepResp.newInstance()
.setChangeInfo(change.toProto());
// Add reward list to response
if (change.getExtraData() != null) {
@SuppressWarnings("unchecked")
var list = (List<ItemParamMap>) change.getExtraData();
for (var rewards : list) {
var reward = ActivityLevelsSweepReward.newInstance()
.setExp(data.getEnergyConsume());
rewards.toItemTemplateStream().forEach(reward::addAwardItems);
rsp.addRewards(reward);
}
}
// Encode and send
return session.encodeMsg(NetMsgId.activity_levels_sweep_succeed_ack, rsp);
}
}
@@ -0,0 +1,50 @@
package emu.nebula.server.handlers;
import emu.nebula.net.NetHandler;
import emu.nebula.net.NetMsgId;
import emu.nebula.proto.ActivityShopPurchase.ActivityShopPurchaseReq;
import emu.nebula.proto.ActivityShopPurchase.ActivityShopPurchaseResp;
import emu.nebula.net.HandlerId;
import emu.nebula.game.activity.type.ShopActivity;
import emu.nebula.game.activity.type.ShopActivity.ActivityShopInfo;
import emu.nebula.net.GameSession;
@HandlerId(NetMsgId.activity_shop_purchase_req)
public class HandlerActivityShopPurchaseReq extends NetHandler {
@Override
public byte[] handle(GameSession session, byte[] message) throws Exception {
// Parse request
var req = ActivityShopPurchaseReq.parseFrom(message);
// Get activity
var activity = session.getPlayer().getActivityManager().getActivity(ShopActivity.class, req.getActivityId());
if (activity == null) {
return session.encodeMsg(NetMsgId.activity_shop_purchase_failed_ack);
}
// Buy
var change = activity.buy(req.getShopId(), req.getGoodsId(), req.getNumber());
if (change == null) {
return session.encodeMsg(NetMsgId.activity_shop_purchase_failed_ack);
}
// Build response
var rsp = ActivityShopPurchaseResp.newInstance()
.setChange(change.toProto())
.setPurchasedNumber(req.getNumber());
// Set shop info
var shop = (ActivityShopInfo) change.getExtraData();
var shopInfo = shop.toProto()
.setId(req.getShopId());
rsp.setShop(shopInfo);
// Encode and send
return session.encodeMsg(NetMsgId.activity_shop_purchase_succeed_ack, rsp);
}
}
@@ -28,7 +28,7 @@ public class HandlerCharGemInstanceSettleReq extends NetHandler {
var req = CharGemInstanceSettleReq.parseFrom(message);
// Settle instance
var changes = player.getInstanceManager().settleInstance(
var change = player.getInstanceManager().settleInstance(
data,
QuestCondition.CharGemInstanceClearTotal,
player.getProgress().getCharGemLog(),
@@ -36,7 +36,7 @@ public class HandlerCharGemInstanceSettleReq extends NetHandler {
req.getStar()
);
var settleData = (InstanceSettleData) changes.getExtraData();
var settleData = (InstanceSettleData) change.getExtraData();
// Handle client events for achievements
session.getPlayer().getAchievementManager().handleClientEvents(req.getEvents());
@@ -45,7 +45,7 @@ public class HandlerCharGemInstanceSettleReq extends NetHandler {
var rsp = CharGemInstanceSettleResp.newInstance()
.setExp(settleData.getExp())
.setThreeStar(req.getStar() == 7)
.setChange(changes.toProto());
.setChange(change.toProto());
// Add reward items
if (settleData.getRewards() != null) {