From: <ko...@us...> - 2009-07-16 23:51:59
|
Revision: 4037 http://planeshift.svn.sourceforge.net/planeshift/?rev=4037&view=rev Author: kougaro Date: 2009-07-16 23:51:55 +0000 (Thu, 16 Jul 2009) Log Message: ----------- Fix to PS#2443 - Wrong Stacking Behavior Modified Paths: -------------- trunk/src/server/bulkobjects/pscharacter.cpp trunk/src/server/bulkobjects/psitem.cpp Modified: trunk/src/server/bulkobjects/pscharacter.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharacter.cpp 2009-07-16 22:34:38 UTC (rev 4036) +++ trunk/src/server/bulkobjects/pscharacter.cpp 2009-07-16 23:51:55 UTC (rev 4037) @@ -1247,6 +1247,9 @@ // already have a pointer. Plus, well get NULL and crash if it isn't... inventory.RemoveItemID(item->GetUID()); + if(guarded) //if we want to guard the item assign the guarding pid + item->SetGuardingCharacterID(pid); + gemObject* obj = EntityManager::GetSingleton().MoveItemToWorld(item, location.worldInstance, location.loc_sector, suggestedPos.x, suggestedPos.y, suggestedPos.z, @@ -1256,8 +1259,6 @@ { // Assign new object to replace the original object item = obj->GetItem(); - if(guarded) //if we want to guard the item assign the guarding pid - item->SetGuardingCharacterID(pid); } psMoney money; Modified: trunk/src/server/bulkobjects/psitem.cpp =================================================================== --- trunk/src/server/bulkobjects/psitem.cpp 2009-07-16 22:34:38 UTC (rev 4036) +++ trunk/src/server/bulkobjects/psitem.cpp 2009-07-16 23:51:55 UTC (rev 4037) @@ -1325,7 +1325,9 @@ return false; } - if (GetGuardingCharacterID() != otheritem->GetGuardingCharacterID()) + // if both are non null and different + if (GetGuardingCharacterID() != otheritem->GetGuardingCharacterID() && + GetGuardingCharacterID() != 0 && otheritem->GetGuardingCharacterID() != 0) return false; // TODO: Check effects @@ -1476,6 +1478,10 @@ if (owning_character) owning_character->Inventory().UpdateEncumbrance(); + // if this item has no guarding character, and the other has one, keep it + if(GetGuardingCharacterID() == 0) + SetGuardingCharacterID(stackme->GetGuardingCharacterID()); + // Average charges int newCharges = (GetCharges()*GetStackCount() + stackme->GetCharges()*stackme->GetStackCount())/newStackCount; SetCharges(newCharges); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |