From f96fc6bcf280c561f5d1a77ed32682e639163d5d Mon Sep 17 00:00:00 2001 From: Leonid Pospelov Date: Fri, 3 Nov 2023 16:06:18 +0600 Subject: [PATCH] feat(skymp5-server): enable reloot for scripted item removal (#1706) --- .../cpp/server_guest_lib/MpObjectReference.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/skymp5-server/cpp/server_guest_lib/MpObjectReference.cpp b/skymp5-server/cpp/server_guest_lib/MpObjectReference.cpp index 933b99caba..8b781372a3 100644 --- a/skymp5-server/cpp/server_guest_lib/MpObjectReference.cpp +++ b/skymp5-server/cpp/server_guest_lib/MpObjectReference.cpp @@ -203,11 +203,13 @@ const bool& MpObjectReference::IsDisabled() const std::chrono::system_clock::duration MpObjectReference::GetRelootTime() const { - if (relootTimeOverride) + if (relootTimeOverride) { return *relootTimeOverride; + } - if (auto time = GetParent()->GetRelootTime(baseType)) + if (auto time = GetParent()->GetRelootTime(baseType)) { return *time; + } if (!std::strcmp(baseType.data(), "FLOR") || !std::strcmp(baseType.data(), "TREE")) { @@ -462,10 +464,6 @@ void MpObjectReference::TakeItem(MpActor& ac, const Inventory::Entry& e) throw std::runtime_error(err.str()); } RemoveItems({ e }, &ac); - - if (GetInventory().IsEmpty()) { - RequestReloot(); - } } void MpObjectReference::SetRelootTime( @@ -663,6 +661,14 @@ void MpObjectReference::RemoveItems( target->AddItems(entries); SendInventoryUpdate(); + + if (GetBaseType() == "CONT") { + if (GetInventory().IsEmpty()) { + spdlog::info("MpObjectReference::RemoveItems - {:x} requesting reloot", + this->GetFormId()); + RequestReloot(); + } + } } void MpObjectReference::RemoveAllItems(MpObjectReference* target)