From 4988b1b33626dd59960778f30f16ca1ce36c3284 Mon Sep 17 00:00:00 2001 From: Eduardo Dantas Date: Sat, 18 Jan 2025 22:38:57 -0300 Subject: [PATCH] fix: house transfer --- src/map/house/house.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/map/house/house.cpp b/src/map/house/house.cpp index b3054616bff..7bac1dd0b39 100644 --- a/src/map/house/house.cpp +++ b/src/map/house/house.cpp @@ -315,21 +315,25 @@ bool House::transferToDepot(const std::shared_ptr &player, const std::sh std::unordered_set> playersToSave = { player }; for (const auto &item : moveItemList) { - g_logger().debug("[{}] moving item '{}' to depot", __FUNCTION__, item->getName()); - auto targetPlayer = player; + std::shared_ptr targetPlayer = player; + if (item->hasOwner() && !item->isOwner(targetPlayer)) { - targetPlayer = g_game().getPlayerByGUID(item->getOwnerId()); - if (!targetPlayer) { - g_game().internalRemoveItem(item, item->getItemCount()); + const auto &itemOwner = g_game().getPlayerByGUID(item->getOwnerId(), true); + if (itemOwner) { + targetPlayer = itemOwner; + playersToSave.insert(targetPlayer); + } else { + g_logger().warn("[{}] owner of item '{}' (GUID: {}) not found, skipping transfer", __FUNCTION__, item->getName(), item->getOwnerId()); continue; } - playersToSave.insert(targetPlayer); } + g_game().internalMoveItem(item->getParent(), targetPlayer->getInbox(), INDEX_WHEREEVER, item, item->getItemCount(), nullptr, FLAG_NOLIMIT); } for (const auto &playerToSave : playersToSave) { g_saveManager().savePlayer(playerToSave); } + return true; }