From aa7b3ed60a519865721b5e883f9873c5c14d7172 Mon Sep 17 00:00:00 2001 From: Melledy <121644117+Melledy@users.noreply.github.com> Date: Sun, 5 Nov 2023 15:51:25 -0800 Subject: [PATCH] Implement rerolling rogue buffs --- .../game/rogue/RogueBuffSelectMenu.java | 16 ++++++++++++- .../lunarcore/game/rogue/RogueInstance.java | 9 +++++++ .../recv/HandlerRollRogueBuffCsReq.java | 24 +++++++++++++++++++ .../packet/send/PacketRollRogueBuffScRsp.java | 23 ++++++++++++++++++ 4 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 src/main/java/emu/lunarcore/server/packet/recv/HandlerRollRogueBuffCsReq.java create mode 100644 src/main/java/emu/lunarcore/server/packet/send/PacketRollRogueBuffScRsp.java diff --git a/src/main/java/emu/lunarcore/game/rogue/RogueBuffSelectMenu.java b/src/main/java/emu/lunarcore/game/rogue/RogueBuffSelectMenu.java index 2d9ce68..765fad7 100644 --- a/src/main/java/emu/lunarcore/game/rogue/RogueBuffSelectMenu.java +++ b/src/main/java/emu/lunarcore/game/rogue/RogueBuffSelectMenu.java @@ -27,12 +27,26 @@ public class RogueBuffSelectMenu { public RogueBuffSelectMenu(RogueInstance rogue) { this.rogue = rogue; this.maxBuffs = 3; + this.maxRerolls = 1; this.buffs = new ArrayList<>(); this.generateRandomBuffs(); } - public void generateRandomBuffs() { + public void setMaxRerolls(int i) { + this.maxBuffs = i; + } + + public void reroll() { + this.generateRandomBuffs(); + this.rerolls++; + } + + public boolean hasRerolls() { + return this.maxRerolls > this.rerolls; + } + + private void generateRandomBuffs() { if (this.randomBuffs == null) { this.randomBuffs = new WeightedList<>(); diff --git a/src/main/java/emu/lunarcore/game/rogue/RogueInstance.java b/src/main/java/emu/lunarcore/game/rogue/RogueInstance.java index 7076827..09d8fbc 100644 --- a/src/main/java/emu/lunarcore/game/rogue/RogueInstance.java +++ b/src/main/java/emu/lunarcore/game/rogue/RogueInstance.java @@ -112,6 +112,15 @@ public class RogueInstance { return null; } + public synchronized RogueBuffSelectMenu rollBuffSelect() { + if (getBuffSelect() != null && getBuffSelect().hasRerolls()) { + this.getBuffSelect().reroll(); + return this.getBuffSelect(); + } + + return null; + } + public synchronized RogueBuffData selectBuff(int buffId) { if (this.getBuffSelect() == null) return null; diff --git a/src/main/java/emu/lunarcore/server/packet/recv/HandlerRollRogueBuffCsReq.java b/src/main/java/emu/lunarcore/server/packet/recv/HandlerRollRogueBuffCsReq.java new file mode 100644 index 0000000..3dc999c --- /dev/null +++ b/src/main/java/emu/lunarcore/server/packet/recv/HandlerRollRogueBuffCsReq.java @@ -0,0 +1,24 @@ +package emu.lunarcore.server.packet.recv; + +import emu.lunarcore.game.rogue.RogueBuffSelectMenu; +import emu.lunarcore.server.game.GameSession; +import emu.lunarcore.server.packet.CmdId; +import emu.lunarcore.server.packet.Opcodes; +import emu.lunarcore.server.packet.PacketHandler; +import emu.lunarcore.server.packet.send.PacketRollRogueBuffScRsp; + +@Opcodes(CmdId.RollRogueBuffCsReq) +public class HandlerRollRogueBuffCsReq extends PacketHandler { + + @Override + public void handle(GameSession session, byte[] header, byte[] data) throws Exception { + RogueBuffSelectMenu selectMenu = null; + + if (session.getPlayer().getRogueInstance() != null) { + selectMenu = session.getPlayer().getRogueInstance().rollBuffSelect(); + } + + session.send(new PacketRollRogueBuffScRsp(selectMenu)); + } + +} diff --git a/src/main/java/emu/lunarcore/server/packet/send/PacketRollRogueBuffScRsp.java b/src/main/java/emu/lunarcore/server/packet/send/PacketRollRogueBuffScRsp.java new file mode 100644 index 0000000..6f40d1e --- /dev/null +++ b/src/main/java/emu/lunarcore/server/packet/send/PacketRollRogueBuffScRsp.java @@ -0,0 +1,23 @@ +package emu.lunarcore.server.packet.send; + +import emu.lunarcore.game.rogue.RogueBuffSelectMenu; +import emu.lunarcore.proto.RollRogueBuffScRspOuterClass.RollRogueBuffScRsp; +import emu.lunarcore.server.packet.BasePacket; +import emu.lunarcore.server.packet.CmdId; + +public class PacketRollRogueBuffScRsp extends BasePacket { + + public PacketRollRogueBuffScRsp(RogueBuffSelectMenu selectMenu) { + super(CmdId.RollRogueBuffScRsp); + + var data = RollRogueBuffScRsp.newInstance(); + + if (selectMenu != null) { + data.setRogueBuffSelectInfo(selectMenu.toProto()); + } else { + data.setRetcode(1); + } + + this.setData(data); + } +}