Browse Source

Use position for break object network messages

pull/5071/head
ephphatha 4 years ago committed by Anders Jenbo
parent
commit
de83d9440e
  1. 11
      Source/msg.cpp
  2. 6
      Source/msg.h
  3. 2
      Source/objects.cpp

11
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<const TCmdParam1 *>(pCmd);
const auto &message = reinterpret_cast<const TCmdLoc &>(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);

6
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.
//

2
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<uint16_t>(barrel.GetId()));
NetSendCmdLoc(MyPlayerId, false, CMD_BREAKOBJ, barrel.position);
}
}

Loading…
Cancel
Save