From 6a0cb2732c55e21b465b6e95face1c3b133713f4 Mon Sep 17 00:00:00 2001 From: KingRainbow44 Date: Wed, 17 May 2023 00:24:40 -0400 Subject: [PATCH] Fix logic of `SetPlayerPropReq` --- .../packet/recv/HandlerSetPlayerPropReq.java | 24 ++++++++++--------- .../packet/send/PacketSetPlayerPropRsp.java | 7 +++--- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/main/java/emu/grasscutter/server/packet/recv/HandlerSetPlayerPropReq.java b/src/main/java/emu/grasscutter/server/packet/recv/HandlerSetPlayerPropReq.java index 6753c3e6e..08c88abd9 100644 --- a/src/main/java/emu/grasscutter/server/packet/recv/HandlerSetPlayerPropReq.java +++ b/src/main/java/emu/grasscutter/server/packet/recv/HandlerSetPlayerPropReq.java @@ -1,11 +1,9 @@ package emu.grasscutter.server.packet.recv; -import emu.grasscutter.game.player.Player; import emu.grasscutter.game.props.PlayerProperty; import emu.grasscutter.net.packet.Opcodes; import emu.grasscutter.net.packet.PacketHandler; import emu.grasscutter.net.packet.PacketOpcodes; -import emu.grasscutter.net.proto.PropValueOuterClass.PropValue; import emu.grasscutter.net.proto.SetPlayerPropReqOuterClass.SetPlayerPropReq; import emu.grasscutter.server.game.GameSession; import emu.grasscutter.server.packet.send.PacketSetPlayerPropRsp; @@ -15,18 +13,22 @@ public class HandlerSetPlayerPropReq extends PacketHandler { @Override public void handle(GameSession session, byte[] header, byte[] payload) throws Exception { - // Auto template - SetPlayerPropReq req = SetPlayerPropReq.parseFrom(payload); - Player player = session.getPlayer(); - for (PropValue p : req.getPropListList()) { - PlayerProperty prop = PlayerProperty.getPropById(p.getType()); - if (prop == PlayerProperty.PROP_IS_MP_MODE_AVAILABLE) { - if (!player.setProperty(prop, (int) p.getVal(), false)) { - session.send(new PacketSetPlayerPropRsp(1)); - return; + var req = SetPlayerPropReq.parseFrom(payload); + var player = session.getPlayer(); + + for (var p : req.getPropListList()) { + var prop = PlayerProperty.getPropById(p.getType()); + switch (prop) { + default -> player.setProperty(prop, (int) p.getVal(), true); + case PROP_IS_MP_MODE_AVAILABLE -> { + if (!player.setProperty(prop, (int) p.getVal(), false)) { + session.send(new PacketSetPlayerPropRsp(1)); + return; + } } } } + player.save(); session.send(new PacketSetPlayerPropRsp(0)); } diff --git a/src/main/java/emu/grasscutter/server/packet/send/PacketSetPlayerPropRsp.java b/src/main/java/emu/grasscutter/server/packet/send/PacketSetPlayerPropRsp.java index 21a58a090..050d7d470 100644 --- a/src/main/java/emu/grasscutter/server/packet/send/PacketSetPlayerPropRsp.java +++ b/src/main/java/emu/grasscutter/server/packet/send/PacketSetPlayerPropRsp.java @@ -2,17 +2,18 @@ package emu.grasscutter.server.packet.send; import emu.grasscutter.net.packet.BasePacket; import emu.grasscutter.net.packet.PacketOpcodes; -import emu.grasscutter.net.proto.SetPlayerPropRspOuterClass; +import emu.grasscutter.net.proto.SetPlayerPropRspOuterClass.SetPlayerPropRsp; public class PacketSetPlayerPropRsp extends BasePacket { public PacketSetPlayerPropRsp(int retCode) { super(PacketOpcodes.SetPlayerPropRsp); - SetPlayerPropRspOuterClass.SetPlayerPropRsp.Builder proto = - SetPlayerPropRspOuterClass.SetPlayerPropRsp.newBuilder(); + + var proto = SetPlayerPropRsp.newBuilder(); if (retCode != 0) { proto.setRetcode(retCode); } + this.setData(proto.build()); } }