#include "FvPandaSpawnerServer.h" #include "Character.h" #include "EntityManager.h" #include "GameMessages.h" #include "EntityInfo.h" #include "ScriptedActivityComponent.h" void FvPandaSpawnerServer::OnCollisionPhantom(Entity* self, Entity* target) { auto* character = target->GetCharacter(); if (character != nullptr && character->GetPlayerFlag(81)) { auto raceObjects = EntityManager::Instance()->GetEntitiesInGroup("PandaRaceObject"); if (raceObjects.empty()) return; // Check if the player is currently in a footrace auto scriptedActivityComponent = raceObjects.at(0)->GetComponent(); if (scriptedActivityComponent == nullptr || !scriptedActivityComponent->IsPlayedBy(target)) return; // If the player already spawned a panda auto playerPandas = EntityManager::Instance()->GetEntitiesInGroup("panda" + std::to_string(target->GetObjectID())); if (!playerPandas.empty()) { GameMessages::SendFireEventClientSide(self->GetObjectID(), target->GetSystemAddress(), u"playerPanda", target->GetObjectID(), 0, 0, target->GetObjectID()); return; } // If there's already too many spawned pandas auto pandas = EntityManager::Instance()->GetEntitiesInGroup("pandas"); if (pandas.size() > 4) { GameMessages::SendFireEventClientSide(self->GetObjectID(), target->GetSystemAddress(), u"tooManyPandas", target->GetObjectID(), 0, 0, target->GetObjectID()); return; } EntityInfo info{}; info.spawnerID = target->GetObjectID(); info.pos = self->GetPosition(); info.lot = 5643; info.settings = { new LDFData(u"tamer", target->GetObjectID()), new LDFData(u"groupID", u"panda" + (GeneralUtils::to_u16string(target->GetObjectID())) + u";pandas") }; auto* panda = EntityManager::Instance()->CreateEntity(info); EntityManager::Instance()->ConstructEntity(panda); } }