mirror of
https://github.com/Melledy/Nebula.git
synced 2026-11-04 21:36:51 +01:00
Reimplement gacha (#32)
* Fix some grammar warning * Reimplement gacha * Update GachaResult#toSpinResp declaration --------- Co-authored-by: Yostarcc <lubenwei7758258@gmail.com>
This commit is contained in:
1 parent
c285c878f1
commit
1316654c15
32 files changed
+1992
-450
No files matched your search
@@ -1,14 +1,13 @@
|
||||
package emu.nebula.server.handlers;
|
||||
|
||||
import emu.nebula.Nebula;
|
||||
import emu.nebula.data.GameData;
|
||||
import emu.nebula.game.gacha.GachaMode;
|
||||
import emu.nebula.net.GameSession;
|
||||
import emu.nebula.net.HandlerId;
|
||||
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 {
|
||||
@@ -17,34 +16,24 @@ public class HandlerGachaSpinReq extends NetHandler {
|
||||
public byte[] handle(GameSession session, byte[] message) throws Exception {
|
||||
// Parse request
|
||||
var req = GachaSpinReq.parseFrom(message);
|
||||
Integer amount = GachaMode.getAmountByMode(req.getMode());
|
||||
if (amount == null) {
|
||||
return session.encodeMsg(NetMsgId.gacha_spin_failed_ack);
|
||||
}
|
||||
|
||||
// Do gacha
|
||||
var result = Nebula.getGameContext().getGachaModule().spin(
|
||||
session.getPlayer(),
|
||||
req.getId(),
|
||||
req.getMode()
|
||||
amount
|
||||
);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
var gachaData = GameData.getGachaDataTable().get(req.getId());
|
||||
var rsp = result.toSpinResp(gachaData);
|
||||
|
||||
// Encode and send response
|
||||
return session.encodeMsg(NetMsgId.gacha_spin_succeed_ack, rsp);
|
||||
|
||||
Reference in new issue
Block a user