Files
Nebula/src/main/java/emu/nebula/server/handlers/HandlerGachaSpinReq.java
T

54 lines
1.8 KiB
Java

package emu.nebula.server.handlers;
import emu.nebula.net.NetHandler;
import emu.nebula.net.NetMsgId;
import emu.nebula.net.HandlerId;
import emu.nebula.Nebula;
import emu.nebula.net.GameSession;
import emu.nebula.proto.GachaSpin.GachaCard;
import emu.nebula.proto.GachaSpin.GachaSpinReq;
import emu.nebula.proto.GachaSpin.GachaSpinResp;
import emu.nebula.proto.Public.ItemTpl;
@HandlerId(NetMsgId.gacha_spin_req)
public class HandlerGachaSpinReq extends NetHandler {
@Override
public byte[] handle(GameSession session, byte[] message) throws Exception {
// Parse request
var req = GachaSpinReq.parseFrom(message);
// Do gacha
var result = Nebula.getGameContext().getGachaModule().spin(
session.getPlayer(),
req.getId(),
req.getMode()
);
if (result == null) {
return session.encodeMsg(NetMsgId.gacha_spin_failed_ack);
}
// Build response
var rsp = GachaSpinResp.newInstance()
.setTime(Nebula.getCurrentServerTime())
.setAMissTimes(result.getInfo().getMissTimesA())
.setAupMissTimes(result.getInfo().getMissTimesA())
.setTotalTimes(result.getInfo().getTotal())
.setGachaTotalTimes(result.getInfo().getTotal())
.setAupGuaranteeTimes(result.getInfo().isUsedGuarantee() ? 0 : 1)
.setChange(result.getChange().toProto());
for (int id : result.getCards()) {
var card = GachaCard.newInstance()
.setCard(ItemTpl.newInstance().setTid(id).setQty(1));
rsp.addCards(card);
}
// Encode and send response
return session.encodeMsg(NetMsgId.gacha_spin_succeed_ack, rsp);
}
}