From 571148d7d43447f2eddaa92da05f549bbf1feb09 Mon Sep 17 00:00:00 2001 From: Melledy <121644117+Melledy@users.noreply.github.com> Date: Sat, 7 Oct 2023 05:42:54 -0700 Subject: [PATCH] Chests can now be opened --- .../emu/lunarcore/game/player/Player.java | 37 +++++++++++++++++-- .../packet/recv/HandlerInteractPropCsReq.java | 10 ++++- .../packet/send/PacketInteractPropScRsp.java | 22 +++++++++++ 3 files changed, 63 insertions(+), 6 deletions(-) create mode 100644 src/main/java/emu/lunarcore/server/packet/send/PacketInteractPropScRsp.java diff --git a/src/main/java/emu/lunarcore/game/player/Player.java b/src/main/java/emu/lunarcore/game/player/Player.java index 9929725..1443914 100644 --- a/src/main/java/emu/lunarcore/game/player/Player.java +++ b/src/main/java/emu/lunarcore/game/player/Player.java @@ -22,10 +22,12 @@ import emu.lunarcore.game.avatar.HeroPath; import emu.lunarcore.game.battle.Battle; import emu.lunarcore.game.chat.ChatManager; import emu.lunarcore.game.chat.ChatMessage; +import emu.lunarcore.game.enums.PropState; import emu.lunarcore.game.gacha.PlayerGachaInfo; import emu.lunarcore.game.inventory.Inventory; import emu.lunarcore.game.scene.Scene; import emu.lunarcore.game.scene.entity.EntityProp; +import emu.lunarcore.game.scene.entity.GameEntity; import emu.lunarcore.proto.BoardDataSyncOuterClass.BoardDataSync; import emu.lunarcore.proto.HeadIconOuterClass.HeadIcon; import emu.lunarcore.proto.PlayerBasicInfoOuterClass.PlayerBasicInfo; @@ -35,7 +37,6 @@ import emu.lunarcore.server.packet.BasePacket; import emu.lunarcore.server.packet.SessionState; import emu.lunarcore.server.packet.send.PacketEnterSceneByServerScNotify; import emu.lunarcore.server.packet.send.PacketPlayerSyncScNotify; -import emu.lunarcore.server.packet.send.PacketRevcMsgScNotify; import emu.lunarcore.server.packet.send.PacketSceneEntityMoveScNotify; import emu.lunarcore.util.Position; @@ -321,11 +322,39 @@ public class Player { this.battle = battle; } + public EntityProp interactWithProp(int propEntityId) { + // Sanity + if (this.getScene() == null) return null; + + // Get entity so we can cast it to a prop + GameEntity entity = getScene().getEntityById(propEntityId); + + EntityProp prop = null; + if (entity instanceof EntityProp) { + prop = (EntityProp) entity; + } + + // Handle prop interaction action + switch (prop.getExcel().getPropType()) { + case PROP_TREASURE_CHEST -> { + if (prop.getState() == PropState.ChestClosed) { + // Open chest + prop.setState(PropState.ChestUsed); + // TODO handle drops + return prop; + } else { + return null; + } + } + default -> { + return null; + } + } + } + public void onMove() { // Sanity - if (this.getScene() == null) { - return; - } + if (this.getScene() == null) return; boolean anchorRange = false; diff --git a/src/main/java/emu/lunarcore/server/packet/recv/HandlerInteractPropCsReq.java b/src/main/java/emu/lunarcore/server/packet/recv/HandlerInteractPropCsReq.java index 97a5079..e23c6f8 100644 --- a/src/main/java/emu/lunarcore/server/packet/recv/HandlerInteractPropCsReq.java +++ b/src/main/java/emu/lunarcore/server/packet/recv/HandlerInteractPropCsReq.java @@ -1,17 +1,23 @@ package emu.lunarcore.server.packet.recv; +import emu.lunarcore.game.scene.entity.EntityProp; +import emu.lunarcore.proto.InteractPropCsReqOuterClass.InteractPropCsReq; 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.PacketInteractPropScRsp; @Opcodes(CmdId.InteractPropCsReq) public class HandlerInteractPropCsReq extends PacketHandler { @Override public void handle(GameSession session, byte[] header, byte[] data) throws Exception { - // TODO implement properly - session.send(CmdId.InteractPropScRsp); + var req = InteractPropCsReq.parseFrom(data); + + EntityProp prop = session.getPlayer().interactWithProp(req.getPropEntityId()); + + session.send(new PacketInteractPropScRsp(prop)); } } diff --git a/src/main/java/emu/lunarcore/server/packet/send/PacketInteractPropScRsp.java b/src/main/java/emu/lunarcore/server/packet/send/PacketInteractPropScRsp.java new file mode 100644 index 0000000..4851819 --- /dev/null +++ b/src/main/java/emu/lunarcore/server/packet/send/PacketInteractPropScRsp.java @@ -0,0 +1,22 @@ +package emu.lunarcore.server.packet.send; + +import emu.lunarcore.game.scene.entity.EntityProp; +import emu.lunarcore.proto.InteractPropScRspOuterClass.InteractPropScRsp; +import emu.lunarcore.server.packet.BasePacket; +import emu.lunarcore.server.packet.CmdId; + +public class PacketInteractPropScRsp extends BasePacket { + + public PacketInteractPropScRsp(EntityProp prop) { + super(CmdId.InteractPropScRsp); + + var data = InteractPropScRsp.newInstance(); + + if (prop != null) { + data.setPropEntityId(prop.getEntityId()); + data.setPropState(prop.getState().getVal()); + } + + this.setData(data); + } +}