From b476fc73f2db7b3395af4e8f6783d885332acb59 Mon Sep 17 00:00:00 2001 From: Melledy <121644117+Melledy@users.noreply.github.com> Date: Fri, 29 Sep 2023 17:47:10 -0700 Subject: [PATCH] Implement character ascension material bosses --- .../java/emu/lunarcore/game/scene/Scene.java | 16 +++++++++++ .../recv/HandlerActivateFarmElementCsReq.java | 19 +++++++++++++ .../send/PacketActivateFarmElementScRsp.java | 27 +++++++++++++++++++ 3 files changed, 62 insertions(+) create mode 100644 src/main/java/emu/lunarcore/server/packet/recv/HandlerActivateFarmElementCsReq.java create mode 100644 src/main/java/emu/lunarcore/server/packet/send/PacketActivateFarmElementScRsp.java diff --git a/src/main/java/emu/lunarcore/game/scene/Scene.java b/src/main/java/emu/lunarcore/game/scene/Scene.java index 66df2e2..296bd7d 100644 --- a/src/main/java/emu/lunarcore/game/scene/Scene.java +++ b/src/main/java/emu/lunarcore/game/scene/Scene.java @@ -17,6 +17,7 @@ import emu.lunarcore.game.scene.entity.*; import emu.lunarcore.game.player.Player; import emu.lunarcore.proto.SceneEntityGroupInfoOuterClass.SceneEntityGroupInfo; import emu.lunarcore.proto.SceneInfoOuterClass.SceneInfo; +import emu.lunarcore.server.packet.send.PacketActivateFarmElementScRsp; import emu.lunarcore.server.packet.send.PacketSceneGroupRefreshScNotify; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; @@ -156,6 +157,10 @@ public class Scene { private int getNextEntityId() { return ++lastEntityId; } + + public GameEntity getEntityById(int id) { + return this.entities.get(id); + } public void syncLineup() { // Get current lineup @@ -197,6 +202,17 @@ public class Scene { // Sync packet getPlayer().sendPacket(new PacketSceneGroupRefreshScNotify(toAdd, toRemove)); } + + public boolean activateFarmElement(int entityId, int worldLevel) { + GameEntity entity = this.getEntityById(entityId); + if (entity == null) { + player.sendPacket(new PacketActivateFarmElementScRsp()); + return false; + } + + player.sendPacket(new PacketActivateFarmElementScRsp(entityId, worldLevel)); + return true; + } public synchronized void addEntity(GameEntity entity) { // Dont add if monster id already exists diff --git a/src/main/java/emu/lunarcore/server/packet/recv/HandlerActivateFarmElementCsReq.java b/src/main/java/emu/lunarcore/server/packet/recv/HandlerActivateFarmElementCsReq.java new file mode 100644 index 0000000..61e6493 --- /dev/null +++ b/src/main/java/emu/lunarcore/server/packet/recv/HandlerActivateFarmElementCsReq.java @@ -0,0 +1,19 @@ +package emu.lunarcore.server.packet.recv; + +import emu.lunarcore.proto.ActivateFarmElementCsReqOuterClass.ActivateFarmElementCsReq; +import emu.lunarcore.server.game.GameSession; +import emu.lunarcore.server.packet.CmdId; +import emu.lunarcore.server.packet.Opcodes; +import emu.lunarcore.server.packet.PacketHandler; + +@Opcodes(CmdId.ActivateFarmElementCsReq) +public class HandlerActivateFarmElementCsReq extends PacketHandler { + + @Override + public void handle(GameSession session, byte[] header, byte[] data) throws Exception { + var req = ActivateFarmElementCsReq.parseFrom(data); + + session.getPlayer().getScene().activateFarmElement(req.getEntityId(), req.getWorldLevel()); + } + +} diff --git a/src/main/java/emu/lunarcore/server/packet/send/PacketActivateFarmElementScRsp.java b/src/main/java/emu/lunarcore/server/packet/send/PacketActivateFarmElementScRsp.java new file mode 100644 index 0000000..567f277 --- /dev/null +++ b/src/main/java/emu/lunarcore/server/packet/send/PacketActivateFarmElementScRsp.java @@ -0,0 +1,27 @@ +package emu.lunarcore.server.packet.send; + +import emu.lunarcore.proto.ActivateFarmElementScRspOuterClass.ActivateFarmElementScRsp; +import emu.lunarcore.server.packet.BasePacket; +import emu.lunarcore.server.packet.CmdId; + +public class PacketActivateFarmElementScRsp extends BasePacket { + + public PacketActivateFarmElementScRsp() { + super(CmdId.ActivateFarmElementScRsp); + + var data = ActivateFarmElementScRsp.newInstance() + .setRetcode(1); + + this.setData(data); + } + + public PacketActivateFarmElementScRsp(int entityId, int worldLevel) { + super(CmdId.ActivateFarmElementScRsp); + + var data = ActivateFarmElementScRsp.newInstance() + .setEntityId(entityId) + .setWorldLevel(worldLevel); + + this.setData(data); + } +}