mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2026-10-02 02:43:44 +00:00
fix(pets): tamed pandas and crabs leave their spawn groups
The live server scripts (l_fv_panda_server.lua, l_crab_server.lua, in the client's res/scripts) take a tamed pet out of the groups it was spawned into: the panda leaves "pandas" and "panda<tamer>", the crab "crab<tamer>". The panda spawner counts "pandas" (at most five) and "panda<player>" (one per player), so tamed pandas used to keep counting against both. Entity gets RemoveFromGroup for it. The dig and object pet scripts keep their TODO: their live server scripts are not shipped with the client. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -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<InventoryComponent>();
|
||||
if (!inventoryComponent) return;
|
||||
|
||||
@@ -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<eReplicaComponentType, Component*>& GetComponents() { return m_Components; } // TODO: Remove
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -37,7 +37,8 @@ void CrabServer::OnNotifyPetTamingMinigame(Entity* self, Entity* tamer, ePetTami
|
||||
auto* petComponent = self->GetComponent<PetComponent>();
|
||||
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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user