mirror of
https://github.com/Melledy/LunarCore.git
synced 2025-12-13 13:54:37 +01:00
Implement rerolling rogue buffs
This commit is contained in:
@@ -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<>();
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user