[General] Send charge and goldValue in ID_CONTAINER

pull/163/head
David Cernat 8 years ago
parent e703dd42aa
commit 3614b21e10

@ -110,9 +110,14 @@ namespace MWGui
worldObject.refNumIndex = mPtr.getCellRef().getRefNum().mIndex; worldObject.refNumIndex = mPtr.getCellRef().getRefNum().mIndex;
event->addObject(worldObject); event->addObject(worldObject);
MWWorld::Ptr itemPtr = mModel->getItem(mSelectedItem).mBase;
mwmp::ContainerItem containerItem; mwmp::ContainerItem containerItem;
containerItem.refId = mModel->getItem(mSelectedItem).mBase.getCellRef().getRefId(); containerItem.refId =itemPtr.getCellRef().getRefId();
containerItem.count = count; containerItem.count = itemPtr.getRefData().getCount();
containerItem.charge = itemPtr.getCellRef().getCharge();
containerItem.goldValue = itemPtr.getCellRef().getGoldValue();
containerItem.actionCount = count;
event->addContainerItem(containerItem); event->addContainerItem(containerItem);
event->containerChanges.action = mwmp::ContainerChanges::REMOVE; event->containerChanges.action = mwmp::ContainerChanges::REMOVE;
@ -166,6 +171,8 @@ namespace MWGui
mwmp::ContainerItem containerItem; mwmp::ContainerItem containerItem;
containerItem.refId = mDragAndDrop->mItem.mBase.getCellRef().getRefId(); containerItem.refId = mDragAndDrop->mItem.mBase.getCellRef().getRefId();
containerItem.count = mDragAndDrop->mItem.mBase.getRefData().getCount(); containerItem.count = mDragAndDrop->mItem.mBase.getRefData().getCount();
containerItem.charge = mDragAndDrop->mItem.mBase.getCellRef().getCharge();
containerItem.goldValue = mDragAndDrop->mItem.mBase.getCellRef().getGoldValue();
event->addContainerItem(containerItem); event->addContainerItem(containerItem);
event->containerChanges.action = mwmp::ContainerChanges::ADD; event->containerChanges.action = mwmp::ContainerChanges::ADD;

@ -75,15 +75,40 @@ void WorldEvent::editContainer(MWWorld::CellStore* cellStore)
for (unsigned int i = 0; i < containerChanges.count; i++) for (unsigned int i = 0; i < containerChanges.count; i++)
{ {
ContainerItem item = containerChanges.items.at(i); ContainerItem containerItem = containerChanges.items.at(i);
if (action == ContainerChanges::ADD || action == ContainerChanges::SET) if (action == ContainerChanges::ADD || action == ContainerChanges::SET)
{ {
containerStore.add(item.refId, item.count, mwmp::Players::getPlayer(guid)->getPtr()); // Create a ManualRef to be able to set item charge
MWWorld::ManualRef ref(MWBase::Environment::get().getWorld()->getStore(), containerItem.refId, 1);
MWWorld::Ptr newPtr = ref.getPtr();
if (containerItem.count > 1)
newPtr.getRefData().setCount(containerItem.count);
if (containerItem.charge > -1)
newPtr.getCellRef().setCharge(containerItem.charge);
newPtr.getCellRef().setGoldValue(containerItem.goldValue);
containerStore.add(newPtr, containerItem.count, mwmp::Players::getPlayer(guid)->getPtr(), true);
} }
else if (action == ContainerChanges::REMOVE) else if (action == ContainerChanges::REMOVE)
{ {
containerStore.remove(item.refId, item.count, mwmp::Players::getPlayer(guid)->getPtr()); // We have to find the right item ourselves because ContainerStore has no method
// accounting for charge
for (MWWorld::ContainerStoreIterator iter(containerStore.begin()); iter != containerStore.end(); ++iter)
{
if (Misc::StringUtils::ciEqual(iter->getCellRef().getRefId(), containerItem.refId))
{
if (iter->getCellRef().getCharge() == containerItem.charge &&
iter->getCellRef().getGoldValue() == containerItem.goldValue &&
iter->getRefData().getCount() == containerItem.count)
{
containerStore.remove(*iter, containerItem.actionCount, mwmp::Players::getPlayer(guid)->getPtr());
}
}
}
} }
} }
@ -119,7 +144,6 @@ void WorldEvent::placeObjects(MWWorld::CellStore* cellStore)
worldObject.count); worldObject.count);
MWWorld::ManualRef ref(MWBase::Environment::get().getWorld()->getStore(), worldObject.refId, 1); MWWorld::ManualRef ref(MWBase::Environment::get().getWorld()->getStore(), worldObject.refId, 1);
MWWorld::Ptr newPtr = ref.getPtr(); MWWorld::Ptr newPtr = ref.getPtr();
if (worldObject.charge > -1) if (worldObject.charge > -1)

@ -11,8 +11,8 @@ namespace mwmp
{ {
std::string refId; std::string refId;
int refNumIndex; int refNumIndex;
int charge;
int count; int count;
int charge;
int goldValue; int goldValue;
ESM::Position pos; ESM::Position pos;
@ -36,11 +36,14 @@ namespace mwmp
{ {
std::string refId; std::string refId;
int count; int count;
int health; int charge;
int goldValue;
int actionCount;
inline bool operator==(const ContainerItem& rhs) inline bool operator==(const ContainerItem& rhs)
{ {
return refId == rhs.refId && count == rhs.count && health == rhs.health; return refId == rhs.refId && count == rhs.count && charge == rhs.charge && goldValue && rhs.goldValue;
} }
}; };

@ -62,6 +62,9 @@ void PacketContainer::Packet(RakNet::BitStream *bs, BaseEvent *event, bool send)
RW(containerItem.refId, send); RW(containerItem.refId, send);
RW(containerItem.count, send); RW(containerItem.count, send);
RW(containerItem.charge, send);
RW(containerItem.goldValue, send);
RW(containerItem.actionCount, send);
if (!send) if (!send)
{ {

Loading…
Cancel
Save