diff --git a/dGame/Entity.cpp b/dGame/Entity.cpp index d4ca9a0df..99218896c 100644 --- a/dGame/Entity.cpp +++ b/dGame/Entity.cpp @@ -1935,6 +1935,10 @@ void Entity::AddToGroup(const std::string& group) { } } +void Entity::RemoveFromGroup(const std::string& group) { + std::erase(m_Groups, group); +} + void Entity::RetroactiveVaultSize() const { auto* const inventoryComponent = GetComponent(); if (!inventoryComponent) return; diff --git a/dGame/Entity.h b/dGame/Entity.h index 275aea2ce..946bc335a 100644 --- a/dGame/Entity.h +++ b/dGame/Entity.h @@ -212,6 +212,7 @@ public: void CancelTimer(const std::string& name); void AddToGroup(const std::string& group); + void RemoveFromGroup(const std::string& group); bool IsPlayer() const; std::unordered_map& GetComponents() { return m_Components; } // TODO: Remove diff --git a/dScripts/ai/FV/FvPandaServer.cpp b/dScripts/ai/FV/FvPandaServer.cpp index f29f7f2ee..59b294fa1 100644 --- a/dScripts/ai/FV/FvPandaServer.cpp +++ b/dScripts/ai/FV/FvPandaServer.cpp @@ -17,7 +17,9 @@ void FvPandaServer::OnNotifyPetTamingMinigame(Entity* self, Entity* tamer, ePetT } else if (type == ePetTamingNotifyType::QUIT || type == ePetTamingNotifyType::FAILED) { self->Smash(); } else if (type == ePetTamingNotifyType::SUCCESS) { - // TODO: Remove from groups + // A tamed panda no longer counts against the spawner's limit or the tamer's one panda (live script) + self->RemoveFromGroup("pandas"); + self->RemoveFromGroup("panda" + std::to_string(tamer->GetObjectID())); auto* character = tamer->GetCharacter(); if (character != nullptr) { diff --git a/dScripts/client/ai/PR/CrabServer.cpp b/dScripts/client/ai/PR/CrabServer.cpp index 6cdc2de8c..450d9bb4f 100644 --- a/dScripts/client/ai/PR/CrabServer.cpp +++ b/dScripts/client/ai/PR/CrabServer.cpp @@ -37,7 +37,8 @@ void CrabServer::OnNotifyPetTamingMinigame(Entity* self, Entity* tamer, ePetTami auto* petComponent = self->GetComponent(); if (petComponent == nullptr) return; - // TODO: Remove custom group? + // The live script takes the tamed crab out of its tamer's group + self->RemoveFromGroup("crab" + std::to_string(tamer->GetObjectID())); // Command the pet to the player as it may otherwise go to its spawn point which is non existant // petComponent->Command(NiPoint3Constant::ZERO, LWOOBJID_EMPTY, 6, 202, true); }