From d2ba4a12d9dc0cdeba2d9652c79a264c244b76b3 Mon Sep 17 00:00:00 2001 From: David Cernat Date: Thu, 16 Jan 2020 14:00:30 +0200 Subject: [PATCH] [Client] Simplify container sending with new addContainerItem() methods --- apps/openmw/mwgui/container.cpp | 14 ++--------- apps/openmw/mwmp/ObjectList.cpp | 25 ++++++++++++++++---- apps/openmw/mwmp/ObjectList.hpp | 3 ++- apps/openmw/mwscript/containerextensions.cpp | 20 ++-------------- 4 files changed, 27 insertions(+), 35 deletions(-) diff --git a/apps/openmw/mwgui/container.cpp b/apps/openmw/mwgui/container.cpp index 540e2b544..3233797d0 100644 --- a/apps/openmw/mwgui/container.cpp +++ b/apps/openmw/mwgui/container.cpp @@ -125,7 +125,7 @@ namespace MWGui mwmp::BaseObject baseObject = objectList->getBaseObject(mPtr); MWWorld::Ptr itemPtr = mModel->getItem(mSelectedItem).mBase; - objectList->addContainerItem(baseObject, itemPtr, count); + objectList->addContainerItem(baseObject, itemPtr, itemPtr.getRefData().getCount(), count); objectList->addObject(baseObject); objectList->sendContainer(); /* @@ -169,17 +169,7 @@ namespace MWGui mwmp::BaseObject baseObject = objectList->getBaseObject(mPtr); MWWorld::Ptr itemPtr = mDragAndDrop->mItem.mBase; - mwmp::ContainerItem containerItem; - containerItem.refId = itemPtr.getCellRef().getRefId(); - - // Make sure we get the drag and drop count, not the count of the original item - containerItem.count = mDragAndDrop->mDraggedCount; - - containerItem.charge = itemPtr.getCellRef().getCharge(); - containerItem.enchantmentCharge = itemPtr.getCellRef().getEnchantmentCharge(); - containerItem.soul = itemPtr.getCellRef().getSoul(); - - baseObject.containerItems.push_back(containerItem); + objectList->addContainerItem(baseObject, itemPtr, mDragAndDrop->mDraggedCount, 0); objectList->addObject(baseObject); objectList->sendContainer(); } diff --git a/apps/openmw/mwmp/ObjectList.cpp b/apps/openmw/mwmp/ObjectList.cpp index 8ba18ee8f..3ea63317f 100644 --- a/apps/openmw/mwmp/ObjectList.cpp +++ b/apps/openmw/mwmp/ObjectList.cpp @@ -78,17 +78,34 @@ BaseObject ObjectList::getBaseObject(const MWWorld::Ptr& ptr) return baseObject; } -void ObjectList::addContainerItem(mwmp::BaseObject& baseObject, const MWWorld::Ptr& itemPtr, int actionCount) +void ObjectList::addContainerItem(mwmp::BaseObject& baseObject, const MWWorld::Ptr& itemPtr, int itemCount, int actionCount) { mwmp::ContainerItem containerItem; containerItem.refId = itemPtr.getCellRef().getRefId(); - containerItem.count = itemPtr.getRefData().getCount(); + containerItem.count = itemCount; containerItem.charge = itemPtr.getCellRef().getCharge(); containerItem.enchantmentCharge = itemPtr.getCellRef().getEnchantmentCharge(); containerItem.soul = itemPtr.getCellRef().getSoul(); containerItem.actionCount = actionCount; - LOG_APPEND(TimedLog::LOG_VERBOSE, "--- Adding container item %s", containerItem.refId.c_str()); + LOG_APPEND(TimedLog::LOG_VERBOSE, "--- Adding container item %s to packet with count %i and actionCount %i", + containerItem.refId.c_str(), itemCount, actionCount); + + baseObject.containerItems.push_back(containerItem); +} + +void ObjectList::addContainerItem(mwmp::BaseObject& baseObject, const std::string itemId, int itemCount, int actionCount) +{ + mwmp::ContainerItem containerItem; + containerItem.refId = itemId; + containerItem.count = itemCount; + containerItem.charge = -1; + containerItem.enchantmentCharge = -1; + containerItem.soul = ""; + containerItem.actionCount = actionCount; + + LOG_APPEND(TimedLog::LOG_VERBOSE, "--- Adding container item %s to packet with count %i and actionCount %i", + containerItem.refId.c_str(), itemCount, actionCount); baseObject.containerItems.push_back(containerItem); } @@ -104,7 +121,7 @@ void ObjectList::addEntireContainer(const MWWorld::Ptr& ptr) for (const auto itemPtr : containerStore) { - addContainerItem(baseObject, itemPtr, itemPtr.getRefData().getCount()); + addContainerItem(baseObject, itemPtr, itemPtr.getRefData().getCount(), itemPtr.getRefData().getCount()); } addObject(baseObject); diff --git a/apps/openmw/mwmp/ObjectList.hpp b/apps/openmw/mwmp/ObjectList.hpp index 5d4c61e78..25328a042 100644 --- a/apps/openmw/mwmp/ObjectList.hpp +++ b/apps/openmw/mwmp/ObjectList.hpp @@ -19,7 +19,8 @@ namespace mwmp void addObject(BaseObject baseObject); BaseObject getBaseObject(const MWWorld::Ptr& ptr); - void addContainerItem(mwmp::BaseObject& baseObject, const MWWorld::Ptr& itemPtr, int actionCount); + void addContainerItem(mwmp::BaseObject& baseObject, const MWWorld::Ptr& itemPtr, int itemCount, int actionCount); + void addContainerItem(mwmp::BaseObject& baseObject, const std::string itemId, int itemCount, int actionCount); void addEntireContainer(const MWWorld::Ptr& ptr); void editContainers(MWWorld::CellStore* cellStore); diff --git a/apps/openmw/mwscript/containerextensions.cpp b/apps/openmw/mwscript/containerextensions.cpp index 4aac46948..846265374 100644 --- a/apps/openmw/mwscript/containerextensions.cpp +++ b/apps/openmw/mwscript/containerextensions.cpp @@ -143,16 +143,8 @@ namespace MWScript objectList->cell = *ptr.getCell()->getCell(); objectList->action = mwmp::BaseObjectList::ADD; objectList->containerSubAction = mwmp::BaseObjectList::NONE; - mwmp::BaseObject baseObject = objectList->getBaseObject(ptr); - mwmp::ContainerItem containerItem; - containerItem.refId = item; - containerItem.count = count; - containerItem.charge = -1; - containerItem.enchantmentCharge = -1; - containerItem.soul = ""; - - baseObject.containerItems.push_back(containerItem); + objectList->addContainerItem(baseObject, item, count, 0); objectList->addObject(baseObject); objectList->sendContainer(); } @@ -280,15 +272,7 @@ namespace MWScript objectList->containerSubAction = mwmp::BaseObjectList::NONE; mwmp::BaseObject baseObject = objectList->getBaseObject(ptr); - mwmp::ContainerItem containerItem; - containerItem.refId = item; - containerItem.count = 0; - containerItem.actionCount = count; - containerItem.charge = -1; - containerItem.enchantmentCharge = -1; - containerItem.soul = ""; - - baseObject.containerItems.push_back(containerItem); + objectList->addContainerItem(baseObject, item, 0, count); objectList->addObject(baseObject); objectList->sendContainer(); }