Browse Source

Sync dropped items if another player triggers an action on the current level

pull/3994/head
ephphatha 4 years ago committed by Anders Jenbo
parent
commit
eeb9ac3303
  1. 5
      Source/inv.cpp
  2. 1
      Source/inv.h
  3. 13
      Source/msg.cpp

5
Source/inv.cpp

@ -1870,6 +1870,11 @@ int SyncPutItem(Player &player, Point position, int idx, uint16_t icreateinfo, i
assert(CanPut(position));
return SyncDropItem(position, idx, icreateinfo, iseed, id, dur, mdur, ch, mch, ivalue, ibuff, toHit, maxDam, minStr, minMag, minDex, ac);
}
int SyncDropItem(Point position, int idx, uint16_t icreateinfo, int iseed, int id, int dur, int mdur, int ch, int mch, int ivalue, uint32_t ibuff, int toHit, int maxDam, int minStr, int minMag, int minDex, int ac)
{
int ii = AllocateItem();
auto &item = Items[ii];

1
Source/inv.h

@ -175,6 +175,7 @@ bool CanPut(Point position);
bool TryInvPut();
int InvPutItem(Player &player, Point position);
int SyncPutItem(Player &player, Point position, int idx, uint16_t icreateinfo, int iseed, int Id, int dur, int mdur, int ch, int mch, int ivalue, uint32_t ibuff, int toHit, int maxDam, int minStr, int minMag, int minDex, int ac);
int SyncDropItem(Point position, int idx, uint16_t icreateinfo, int iseed, int id, int dur, int mdur, int ch, int mch, int ivalue, uint32_t ibuff, int toHit, int maxDam, int minStr, int minMag, int minDex, int ac);
int8_t CheckInvHLight();
void RemoveScroll(Player &player);
bool UseScroll();

13
Source/msg.cpp

@ -1614,10 +1614,17 @@ DWORD OnDropItem(const TCmd *pCmd, int pnum)
{
const auto &message = *reinterpret_cast<const TCmdPItem *>(pCmd);
if (gbBufferMsgs == 1)
if (gbBufferMsgs == 1) {
SendPacket(pnum, &message, sizeof(message));
else if (IsPItemValid(message))
DeltaPutItem(message, { message.x, message.y }, Players[pnum].plrlevel);
} else if (IsPItemValid(message)) {
int playerLevel = Players[pnum].plrlevel;
Point position = { message.x, message.y };
if (currlevel == playerLevel && pnum != MyPlayerId) {
SyncDropItem(position, message.wIndx, message.wCI, message.dwSeed, message.bId, message.bDur, message.bMDur, message.bCh, message.bMCh, message.wValue, message.dwBuff, message.wToHit, message.wMaxDam, message.bMinStr, message.bMinMag, message.bMinDex, message.bAC);
}
PutItemRecord(message.dwSeed, message.wCI, message.wIndx);
DeltaPutItem(message, position, playerLevel);
}
return sizeof(message);
}

Loading…
Cancel
Save