Implement rerolling rogue buffs

This commit is contained in:
Melledy
2023-11-05 15:51:25 -08:00
parent 4a11e06169
commit aa7b3ed60a
4 changed files with 71 additions and 1 deletions

View File

@@ -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<>();

View File

@@ -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;

View File

@@ -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));
}
}

View File

@@ -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);
}
}