Browse Source

Combine SyncDropItem and SyncPutItem

pull/5434/head
obligaron 3 years ago committed by Anders Jenbo
parent
commit
d59a7e2794
  1. 19
      Source/inv.cpp
  2. 2
      Source/inv.h
  3. 88
      Source/msg.cpp

19
Source/inv.cpp

@ -1808,9 +1808,9 @@ int InvPutItem(const Player &player, Point position, const Item &item)
return ii;
}
int SyncPutItem(const Player &player, Point position, _item_indexes 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, _item_indexes 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)
{
if (player.isOnLevel(0)) {
if (MyPlayer->isOnLevel(0)) {
if (idx == IDI_RUNEBOMB && OpensHive(position))
return -1;
if (idx == IDI_MAPOFDOOM && OpensGrave(position))
@ -1820,11 +1820,6 @@ int SyncPutItem(const Player &player, Point position, _item_indexes idx, uint16_
if (ActiveItemCount >= MAXITEMS)
return -1;
return SyncDropItem(position, idx, icreateinfo, iseed, id, dur, mdur, ch, mch, ivalue, ibuff, toHit, maxDam, minStr, minMag, minDex, ac);
}
int SyncDropItem(Point position, _item_indexes 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];
@ -1856,17 +1851,11 @@ int SyncDropItem(Point position, _item_indexes idx, uint16_t icreateinfo, int is
return ii;
}
int SyncPutEar(const Player &player, Point position, uint16_t icreateinfo, int iseed, uint8_t cursval, string_view heroname)
int SyncDropEar(Point position, uint16_t icreateinfo, int iseed, uint8_t cursval, string_view heroname)
{
std::optional<Point> itemTile = FindAdjacentPositionForItem(player.position.tile, GetDirection(player.position.tile, position));
if (!itemTile)
if (ActiveItemCount >= MAXITEMS)
return -1;
return SyncDropEar(*itemTile, icreateinfo, iseed, cursval, heroname);
}
int SyncDropEar(Point position, uint16_t icreateinfo, int iseed, uint8_t cursval, string_view heroname)
{
int ii = AllocateItem();
auto &item = Items[ii];

2
Source/inv.h

@ -224,9 +224,7 @@ void SyncGetItem(Point position, int32_t iseed, _item_indexes idx, uint16_t ci);
bool CanPut(Point position);
int InvPutItem(const Player &player, Point position, const Item &item);
int SyncPutItem(const Player &player, Point position, _item_indexes 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, _item_indexes 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 SyncPutEar(const Player &player, Point position, uint16_t icreateinfo, int iseed, uint8_t cursval, string_view heroname);
int SyncDropEar(Point position, uint16_t icreateinfo, int iseed, uint8_t cursval, string_view heroname);
int8_t CheckInvHLight();
bool CanUseScroll(Player &player, spell_id spell);

88
Source/msg.cpp

@ -972,21 +972,9 @@ void RecreateItem(const Player &player, const TCmdChItem &message, Item &item)
RecreateItem(player, message.item, item);
}
int SyncPutEar(const TEar &ear)
int SyncDropItem(Point position, const TItem &item)
{
return SyncPutEar(
*MyPlayer,
MyPlayer->position.tile,
ear.wCI,
ear.dwSeed,
ear.bCursval,
ear.heroname);
}
int SyncPutItem(const Player &player, Point position, const TItem &item)
{
return SyncPutItem(
player,
return SyncDropItem(
position,
item.wIndx,
item.wCI,
@ -1006,49 +994,42 @@ int SyncPutItem(const Player &player, Point position, const TItem &item)
item.bAC);
}
int SyncPutItem(const Player &player, const TCmdGItem &message)
int SyncDropEar(Point position, const TEar &ear)
{
if (message.def.wIndx == IDI_EAR)
return SyncPutEar(message.ear);
return SyncPutItem(player, GetItemPosition({ message.x, message.y }), message.item);
return SyncDropEar(
position,
ear.wCI,
ear.dwSeed,
ear.bCursval,
ear.heroname);
}
int SyncPutItem(const Player &player, const TCmdPItem &message)
int SyncDropItem(const TCmdGItem &message)
{
if (message.def.wIndx == IDI_EAR)
return SyncPutEar(message.ear);
return SyncPutItem(player, GetItemPosition({ message.x, message.y }), message.item);
Point position = GetItemPosition({ message.x, message.y });
if (message.def.wIndx == IDI_EAR) {
return SyncDropEar(
position,
message.ear);
}
return SyncDropItem(
position,
message.item);
}
int SyncDropItem(Point position, const TCmdPItem message)
int SyncDropItem(const TCmdPItem &message)
{
Point position = GetItemPosition({ message.x, message.y });
if (message.def.wIndx == IDI_EAR) {
return SyncDropEar(
position,
message.ear.wCI,
message.ear.dwSeed,
message.ear.bCursval,
message.ear.heroname);
message.ear);
}
return SyncDropItem(
position,
message.item.wIndx,
message.item.wCI,
message.item.dwSeed,
message.item.bId,
message.item.bDur,
message.item.bMDur,
message.item.bCh,
message.item.bMCh,
message.item.wValue,
message.item.dwBuff,
message.item.wToHit,
message.item.wMaxDam,
message.item.bMinStr,
message.item.bMinMag,
message.item.bMinDex,
message.item.bAC);
message.item);
}
size_t OnRequestGetItem(const TCmd *pCmd, Player &player)
@ -1103,7 +1084,7 @@ size_t OnGetItem(const TCmd *pCmd, size_t pnum)
if ((isOnActiveLevel || message.bPnum == MyPlayerId) && message.bMaster != MyPlayerId) {
if (message.bPnum == MyPlayerId) {
if (!isOnActiveLevel) {
int ii = SyncPutItem(*MyPlayer, message);
int ii = SyncDropItem(message);
if (ii != -1)
InvGetItem(*MyPlayer, ii);
} else {
@ -1173,7 +1154,7 @@ size_t OnAutoGetItem(const TCmd *pCmd, size_t pnum)
if (message.bPnum == MyPlayerId) {
if (localLevel != message.bLevel) {
Player &player = *MyPlayer;
int ii = SyncPutItem(player, message);
int ii = SyncDropItem(message);
if (ii != -1)
AutoGetItem(*MyPlayer, &Items[ii], ii);
} else {
@ -1223,7 +1204,7 @@ size_t OnPutItem(const TCmd *pCmd, size_t pnum)
if (isSelf)
ii = InvPutItem(player, position, ItemLimbo);
else
ii = SyncPutItem(player, message);
ii = SyncDropItem(message);
if (ii != -1) {
PutItemRecord(message.def.dwSeed, message.def.wCI, message.def.wIndx);
DeltaPutItem(message, Items[ii].position, player);
@ -1249,10 +1230,9 @@ size_t OnSyncPutItem(const TCmd *pCmd, size_t pnum)
if (gbBufferMsgs == 1)
SendPacket(pnum, &message, sizeof(message));
else if (IsPItemValid(message)) {
const Point position { message.x, message.y };
Player &player = Players[pnum];
if (player.isOnActiveLevel()) {
int ii = SyncPutItem(player, message);
int ii = SyncDropItem(message);
if (ii != -1) {
PutItemRecord(message.def.dwSeed, message.def.wCI, message.def.wIndx);
DeltaPutItem(message, Items[ii].position, player);
@ -1262,7 +1242,7 @@ size_t OnSyncPutItem(const TCmd *pCmd, size_t pnum)
return sizeof(message);
} else {
PutItemRecord(message.def.dwSeed, message.def.wCI, message.def.wIndx);
DeltaPutItem(message, position, player);
DeltaPutItem(message, { message.x, message.y }, player);
if (&player == MyPlayer)
pfile_update(true);
}
@ -1278,13 +1258,12 @@ size_t OnRespawnItem(const TCmd *pCmd, size_t pnum)
if (gbBufferMsgs == 1) {
SendPacket(pnum, &message, sizeof(message));
} else if (IsPItemValid(message)) {
const Point position { message.x, message.y };
Player &player = Players[pnum];
if (player.isOnActiveLevel() && &player != MyPlayer) {
SyncPutItem(player, message);
SyncDropItem(message);
}
PutItemRecord(message.def.dwSeed, message.def.wCI, message.def.wIndx);
DeltaPutItem(message, position, player);
DeltaPutItem(message, { message.x, message.y }, player);
}
return sizeof(message);
@ -2050,12 +2029,11 @@ size_t OnSpawnItem(const TCmd *pCmd, size_t pnum)
SendPacket(pnum, &message, sizeof(message));
} else if (IsPItemValid(message)) {
Player &player = Players[pnum];
Point position = { message.x, message.y };
if (player.isOnActiveLevel() && &player != MyPlayer) {
SyncDropItem(position, message);
SyncDropItem(message);
}
PutItemRecord(message.def.dwSeed, message.def.wCI, message.def.wIndx);
DeltaPutItem(message, position, player);
DeltaPutItem(message, { message.x, message.y }, player);
}
return sizeof(message);

Loading…
Cancel
Save