Add and implement ClearInventory() script function

coverity_scan^2
David Cernat 8 years ago
parent 80b40bfb70
commit 456aee65d9

@ -69,6 +69,15 @@ void ItemFunctions::RemoveItem(unsigned short pid, const char* itemName, unsigne
player->inventorySendBuffer.action = Inventory::REMOVEITEM;
}
void ItemFunctions::ClearInventory(unsigned short pid) noexcept
{
Player *player;
GET_PLAYER(pid, player, );
player->inventorySendBuffer.items.clear();
player->inventorySendBuffer.action = Inventory::UPDATE;
}
bool ItemFunctions::HasItemEquipped(unsigned short pid, const char* itemName)
{
Player *player;

@ -12,8 +12,9 @@
{"EquipItem", ItemFunctions::EquipItem},\
{"UnequipItem", ItemFunctions::UnequipItem},\
\
{"AddItem", ItemFunctions::AddItem}, \
{"RemoveItem", ItemFunctions::RemoveItem}, \
{"AddItem", ItemFunctions::AddItem},\
{"RemoveItem", ItemFunctions::RemoveItem},\
{"ClearInventory", ItemFunctions::ClearInventory},\
\
{"HasItemEquipped", ItemFunctions::HasItemEquipped},\
\
@ -40,6 +41,7 @@ public:
static void AddItem(unsigned short pid, const char* itemName, unsigned int count, int health) noexcept;
static void RemoveItem(unsigned short pid, const char* itemName, unsigned short count) noexcept;
static void ClearInventory(unsigned short pid) noexcept;
static bool HasItemEquipped(unsigned short pid, const char* itemName);

@ -296,14 +296,15 @@ void Networking::processPlayerPacket(RakNet::Packet *packet)
else
{
myPacket->Packet(&bsIn, getLocalPlayer(), false);
MWWorld::Ptr ptr = MWBase::Environment::get().getWorld()->getPlayerPtr();
MWWorld::ContainerStore &conStore = ptr.getClass().getContainerStore(ptr);
MWWorld::Ptr ptrPlayer = MWBase::Environment::get().getWorld()->getPlayerPtr();
MWWorld::ContainerStore &conStore = ptrPlayer.getClass().getContainerStore(ptrPlayer);
if (getLocalPlayer()->inventory.action == Inventory::ADDITEM)
{
for (unsigned int i = 0; i < getLocalPlayer()->inventory.count; i++)
{
mwmp::Item item = getLocalPlayer()->inventory.items[i];
MWWorld::Ptr itemPtr = *conStore.add(item.refid, item.count, ptr);
MWWorld::Ptr itemPtr = *conStore.add(item.refid, item.count, ptrPlayer);
if (item.health != -1)
itemPtr.getCellRef().setCharge(item.health);
}
@ -313,21 +314,27 @@ void Networking::processPlayerPacket(RakNet::Packet *packet)
for (unsigned int i = 0; i < getLocalPlayer()->inventory.count; i++)
{
mwmp::Item item = getLocalPlayer()->inventory.items[i];
conStore.remove(item.refid, item.count, ptr);
conStore.remove(item.refid, item.count, ptrPlayer);
}
}
else // update
{
// Clear items in inventory
conStore.clear();
for (unsigned int i = 0; i < getLocalPlayer()->inventory.count; i++)
{
mwmp::Item item = getLocalPlayer()->inventory.items[i];
MWWorld::Ptr itemPtr = *conStore.add(item.refid, item.count, ptr);
MWWorld::Ptr itemPtr = *conStore.add(item.refid, item.count, ptrPlayer);
if (item.health != -1)
itemPtr.getCellRef().setCharge(item.health);
printf("%s %d %d\n", item.refid.c_str(), item.count, item.health);
}
getLocalPlayer()->setEquipment(); // restore equipped items
// Don't automatically setEquipment() here, or the player could end
// up getting a new set of their starting clothes, or other items
// supposed to no longer exist
//
// Instead, expect server scripts to do that manually
}
}
}

Loading…
Cancel
Save