mirror of
https://github.com/Melledy/Nebula.git
synced 2026-11-04 21:36:51 +01:00
Fix mall, shop, mall/shop refresh logic and battle pass flows
This commit is contained in:
1 parent
c1c09c6594
commit
57c05c8e32
45 files changed
+2171
-232
No files matched your search
@@ -0,0 +1,47 @@
|
||||
package emu.nebula.server.handlers;
|
||||
|
||||
import emu.nebula.Nebula;
|
||||
import emu.nebula.data.GameData;
|
||||
import emu.nebula.net.GameSession;
|
||||
import emu.nebula.net.HandlerId;
|
||||
import emu.nebula.net.NetHandler;
|
||||
import emu.nebula.net.NetMsgId;
|
||||
import emu.nebula.proto.BattlePassOrder.BattlePassOrderReq;
|
||||
import emu.nebula.proto.MallGemOrder.OrderInfo;
|
||||
|
||||
@HandlerId(NetMsgId.battle_pass_order_req)
|
||||
public class HandlerBattlePassOrderReq extends NetHandler {
|
||||
|
||||
@Override
|
||||
public byte[] handle(GameSession session, byte[] message) throws Exception {
|
||||
// Parse request
|
||||
var req = BattlePassOrderReq.parseFrom(message);
|
||||
// Validate mode (1 = Premium, 2 = Luxury)
|
||||
int requestedMode = req.getMode();
|
||||
if (!session.getPlayer().isBattlePassUnlocked() || requestedMode < 1 || requestedMode > 2) {
|
||||
return session.encodeMsg(NetMsgId.battle_pass_order_failed_ack);
|
||||
}
|
||||
|
||||
// Get battle pass
|
||||
var battlePass = session.getPlayer().getBattlePassManager().getBattlePass();
|
||||
|
||||
// Allow: 0->1 (free to premium), 0->2 (free to luxury), 1->2 (premium to luxury)
|
||||
int currentMode = battlePass.getMode();
|
||||
if (requestedMode <= currentMode) {
|
||||
return session.encodeMsg(NetMsgId.battle_pass_order_failed_ack);
|
||||
}
|
||||
|
||||
var data = GameData.getBattlePassDataTable().get(battlePass.getBattlePassId());
|
||||
if (data == null) {
|
||||
return session.encodeMsg(NetMsgId.battle_pass_order_failed_ack);
|
||||
}
|
||||
|
||||
// Follow the same fake-payment lifecycle as mall orders:
|
||||
// order ack -> paid notify -> order collect -> rewards popup.
|
||||
return session.encodeMsg(
|
||||
NetMsgId.battle_pass_order_succeed_ack,
|
||||
Nebula.getGameContext().getPayModule().createBattlePassOrder(session, data, requestedMode)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user