diff --git a/Source/msg.cpp b/Source/msg.cpp index ea0e10775..e8f660424 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -1702,18 +1702,19 @@ size_t OnPlayerOperateObject(const TCmd *pCmd, int pnum) return sizeof(message); } -size_t OnBreakObject(const TCmd *pCmd, int pnum) +size_t OnBreakObject(const TCmd &pCmd, int pnum) { - const auto &message = *reinterpret_cast(pCmd); + const auto &message = reinterpret_cast(pCmd); + Object *breakable = ObjectAtPosition({ message.x, message.y }); if (gbBufferMsgs == 1) { SendPacket(pnum, &message, sizeof(message)); - } else if (message.wParam1 < MAXOBJECTS) { + } else if (breakable != nullptr) { Player &player = Players[pnum]; if (player.isOnActiveLevel()) { - SyncBreakObj(player, Objects[message.wParam1]); + SyncBreakObj(player, *breakable); } - DeltaSyncObject(Objects[message.wParam1], CMD_BREAKOBJ, player); + DeltaSyncObject(*breakable, CMD_BREAKOBJ, player); } return sizeof(message); diff --git a/Source/msg.h b/Source/msg.h index ad144deaa..c230c8c6f 100644 --- a/Source/msg.h +++ b/Source/msg.h @@ -271,9 +271,9 @@ enum _cmd_id : uint8_t { CMD_PLROPOBJ, // Break object. // - // body (TCmdParam2): - // int16_t player_num - // int16_t object_num + // body (TCmdLoc): + // int8_t x + // int8_t y CMD_BREAKOBJ, // Equip item for player. // diff --git a/Source/objects.cpp b/Source/objects.cpp index 66a92bd8b..c673e3bd9 100644 --- a/Source/objects.cpp +++ b/Source/objects.cpp @@ -3858,7 +3858,7 @@ void BreakBarrel(const Player &player, Object &barrel, bool forcebreak, bool sen SpawnSkeleton(&Monsters[barrel._oVar4], barrel.position); } if (&player == MyPlayer) { - NetSendCmdParam1(false, CMD_BREAKOBJ, static_cast(barrel.GetId())); + NetSendCmdLoc(MyPlayerId, false, CMD_BREAKOBJ, barrel.position); } }