#include "FvBrickPuzzleServer.h" #include "GeneralUtils.h" #include "dZoneManager.h" #include "Spawner.h" #include "QuickBuildComponent.h" void FvBrickPuzzleServer::OnStartup(Entity* self) { const auto myGroup = GeneralUtils::UTF16ToWTF8(self->GetVar(u"spawner_name")); const auto pipeNum = GeneralUtils::TryParse(myGroup.substr(10, 1)); if (!pipeNum) return; if (pipeNum != 1) { self->AddTimer("reset", 30); } } void FvBrickPuzzleServer::OnDie(Entity* self, Entity* killer) { const auto myGroup = GeneralUtils::UTF16ToWTF8(self->GetVar(u"spawner_name")); const auto pipeNum = GeneralUtils::TryParse(myGroup.substr(10, 1)); if (!pipeNum) return; const auto pipeGroup = myGroup.substr(0, 10); const auto nextPipeNum = pipeNum.value() + 1; const auto samePipeSpawners = Game::zoneManager->GetSpawnersByName(myGroup); if (!samePipeSpawners.empty()) { samePipeSpawners[0]->SoftReset(); samePipeSpawners[0]->Deactivate(); } if (killer && killer->IsPlayer()) { const auto nextPipe = pipeGroup + std::to_string(nextPipeNum); const auto nextPipeSpawners = Game::zoneManager->GetSpawnersByName(nextPipe); if (!nextPipeSpawners.empty()) { nextPipeSpawners[0]->Activate(); } } else { const auto nextPipe = pipeGroup + "1"; const auto firstPipeSpawners = Game::zoneManager->GetSpawnersByName(nextPipe); if (!firstPipeSpawners.empty()) { firstPipeSpawners[0]->Activate(); } } } void FvBrickPuzzleServer::OnTimerDone(Entity* self, std::string timerName) { if (timerName == "reset") { auto* quickBuildComponent = self->GetComponent(); if (quickBuildComponent != nullptr && quickBuildComponent->GetState() == eQuickBuildState::OPEN) { self->Smash(self->GetObjectID(), eKillType::SILENT); } } }