mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-02-27 14:09:42 +00:00
[Server] Make it possible to resend a received ObjectList of any kind
Additionally, make existing related functions less confusing.
This commit is contained in:
parent
494edbe5cb
commit
bacecc93e3
2 changed files with 49 additions and 19 deletions
|
@ -24,16 +24,25 @@ void ObjectFunctions::ReadLastObjectList() noexcept
|
|||
readObjectList = mwmp::Networking::getPtr()->getLastObjectList();
|
||||
}
|
||||
|
||||
void ObjectFunctions::InitializeObjectList(unsigned short pid) noexcept
|
||||
void ObjectFunctions::ClearObjectList() noexcept
|
||||
{
|
||||
writeObjectList.cell.blank();
|
||||
writeObjectList.baseObjects.clear();
|
||||
}
|
||||
|
||||
void ObjectFunctions::SetObjectListPid(unsigned short pid) noexcept
|
||||
{
|
||||
Player *player;
|
||||
GET_PLAYER(pid, player, );
|
||||
|
||||
writeObjectList.cell.blank();
|
||||
writeObjectList.baseObjects.clear();
|
||||
writeObjectList.guid = player->guid;
|
||||
}
|
||||
|
||||
void ObjectFunctions::CopyLastObjectListToStore() noexcept
|
||||
{
|
||||
writeObjectList = *readObjectList;
|
||||
}
|
||||
|
||||
unsigned int ObjectFunctions::GetObjectChangesSize() noexcept
|
||||
{
|
||||
return readObjectList->baseObjectCount;
|
||||
|
@ -315,9 +324,9 @@ void ObjectFunctions::SetContainerItemEnchantmentCharge(double enchantmentCharge
|
|||
tempContainerItem.enchantmentCharge = enchantmentCharge;
|
||||
}
|
||||
|
||||
void ObjectFunctions::SetReceivedContainerItemActionCount(unsigned int objectIndex, unsigned int itemIndex, int actionCount) noexcept
|
||||
void ObjectFunctions::SetContainerItemActionCountByIndex(unsigned int objectIndex, unsigned int itemIndex, int actionCount) noexcept
|
||||
{
|
||||
readObjectList->baseObjects.at(objectIndex).containerItems.at(itemIndex).actionCount = actionCount;
|
||||
writeObjectList.baseObjects.at(objectIndex).containerItems.at(itemIndex).actionCount = actionCount;
|
||||
}
|
||||
|
||||
void ObjectFunctions::AddObject() noexcept
|
||||
|
@ -425,15 +434,10 @@ void ObjectFunctions::SendDoorDestination(bool broadcast) noexcept
|
|||
packet->Send(true);
|
||||
}
|
||||
|
||||
void ObjectFunctions::SendContainer(bool broadcast, bool useLastReadObjectList) noexcept
|
||||
void ObjectFunctions::SendContainer(bool broadcast) noexcept
|
||||
{
|
||||
mwmp::ObjectPacket *packet = mwmp::Networking::get().getObjectPacketController()->GetPacket(ID_CONTAINER);
|
||||
|
||||
if (useLastReadObjectList)
|
||||
packet->setObjectList(readObjectList);
|
||||
else
|
||||
packet->setObjectList(&writeObjectList);
|
||||
|
||||
packet->setObjectList(&writeObjectList);
|
||||
packet->Send(false);
|
||||
|
||||
if (broadcast)
|
||||
|
@ -457,6 +461,12 @@ void ObjectFunctions::ReadLastEvent() noexcept
|
|||
ReadLastObjectList();
|
||||
}
|
||||
|
||||
void ObjectFunctions::InitializeObjectList(unsigned short pid) noexcept
|
||||
{
|
||||
ClearObjectList();
|
||||
SetObjectListPid(pid);
|
||||
}
|
||||
|
||||
void ObjectFunctions::InitializeEvent(unsigned short pid) noexcept
|
||||
{
|
||||
InitializeObjectList(pid);
|
||||
|
|
|
@ -3,7 +3,11 @@
|
|||
|
||||
#define OBJECTAPI \
|
||||
{"ReadLastObjectList", ObjectFunctions::ReadLastObjectList},\
|
||||
{"InitializeObjectList", ObjectFunctions::InitializeObjectList},\
|
||||
\
|
||||
{"ClearObjectList", ObjectFunctions::ClearObjectList},\
|
||||
{"SetObjectListPid", ObjectFunctions::SetObjectListPid},\
|
||||
\
|
||||
{"CopyLastObjectListToStore", ObjectFunctions::CopyLastObjectListToStore},\
|
||||
\
|
||||
{"GetObjectChangesSize", ObjectFunctions::GetObjectChangesSize},\
|
||||
{"GetObjectListAction", ObjectFunctions::GetObjectListAction},\
|
||||
|
@ -66,7 +70,7 @@
|
|||
{"SetContainerItemCharge", ObjectFunctions::SetContainerItemCharge},\
|
||||
{"SetContainerItemEnchantmentCharge", ObjectFunctions::SetContainerItemEnchantmentCharge},\
|
||||
\
|
||||
{"SetReceivedContainerItemActionCount", ObjectFunctions::SetReceivedContainerItemActionCount},\
|
||||
{"SetContainerItemActionCountByIndex", ObjectFunctions::SetContainerItemActionCountByIndex},\
|
||||
\
|
||||
{"AddObject", ObjectFunctions::AddObject},\
|
||||
{"AddContainerItem", ObjectFunctions::AddContainerItem},\
|
||||
|
@ -84,6 +88,7 @@
|
|||
{"SendConsoleCommand", ObjectFunctions::SendConsoleCommand},\
|
||||
\
|
||||
{"ReadLastEvent", ObjectFunctions::ReadLastEvent},\
|
||||
{"InitializeObjectList", ObjectFunctions::InitializeObjectList},\
|
||||
{"InitializeEvent", ObjectFunctions::InitializeEvent},\
|
||||
{"GetEventAction", ObjectFunctions::GetEventAction},\
|
||||
{"GetEventContainerSubAction", ObjectFunctions::GetEventContainerSubAction},\
|
||||
|
@ -106,12 +111,26 @@ public:
|
|||
/**
|
||||
* \brief Clear the data from the last object list sent by the server.
|
||||
*
|
||||
* This is used to initialize the sending of new Object packets.
|
||||
* \return void
|
||||
*/
|
||||
static void ClearObjectList() noexcept;
|
||||
|
||||
/**
|
||||
* \brief Set the pid attached to the ObjectList.
|
||||
*
|
||||
* \param pid The player ID to whom the object list should be attached.
|
||||
* \return void
|
||||
*/
|
||||
static void InitializeObjectList(unsigned short pid) noexcept;
|
||||
static void SetObjectListPid(unsigned short pid) noexcept;
|
||||
|
||||
/**
|
||||
* \brief Take the contents of the read-only object list last received by the
|
||||
* server from a player and move its contents to the stored object list
|
||||
* that can be sent by the server.
|
||||
*
|
||||
* \return void
|
||||
*/
|
||||
static void CopyLastObjectListToStore() noexcept;
|
||||
|
||||
/**
|
||||
* \brief Get the number of indexes in the read object list's object changes.
|
||||
|
@ -612,7 +631,7 @@ public:
|
|||
|
||||
/**
|
||||
* \brief Set the action count of the container item at a certain itemIndex in the container
|
||||
* changes of the object at a certain objectIndex in the read object list's object changes.
|
||||
* changes of the object at a certain objectIndex in the object list stored on the server.
|
||||
*
|
||||
* When resending a received Container packet, this allows you to correct the amount of items
|
||||
* removed from a container by a player when it conflicts with what other players have already
|
||||
|
@ -623,7 +642,7 @@ public:
|
|||
* \param actionCount The action count.
|
||||
* \return void
|
||||
*/
|
||||
static void SetReceivedContainerItemActionCount(unsigned int objectIndex, unsigned int itemIndex, int actionCount) noexcept;
|
||||
static void SetContainerItemActionCountByIndex(unsigned int objectIndex, unsigned int itemIndex, int actionCount) noexcept;
|
||||
|
||||
/**
|
||||
* \brief Add a copy of the server's temporary object to the server's temporary object list.
|
||||
|
@ -744,7 +763,7 @@ public:
|
|||
*
|
||||
* \return void
|
||||
*/
|
||||
static void SendContainer(bool broadcast = false, bool useLastReadObjectList = false) noexcept;
|
||||
static void SendContainer(bool broadcast = false) noexcept;
|
||||
|
||||
/**
|
||||
* \brief Send a ConsoleCommand packet.
|
||||
|
@ -760,6 +779,7 @@ public:
|
|||
// All methods below are deprecated versions of methods from above
|
||||
|
||||
static void ReadLastEvent() noexcept;
|
||||
static void InitializeObjectList(unsigned short pid) noexcept;
|
||||
static void InitializeEvent(unsigned short pid) noexcept;
|
||||
static unsigned char GetEventAction() noexcept;
|
||||
static unsigned char GetEventContainerSubAction() noexcept;
|
||||
|
|
Loading…
Reference in a new issue