diff --git a/dScripts/02_server/Map/AM/AmDropshipComputer.cpp b/dScripts/02_server/Map/AM/AmDropshipComputer.cpp index e88ec4687..40a83d571 100644 --- a/dScripts/02_server/Map/AM/AmDropshipComputer.cpp +++ b/dScripts/02_server/Map/AM/AmDropshipComputer.cpp @@ -19,7 +19,8 @@ void AmDropshipComputer::OnUse(Entity* self, Entity* user) { if (!missionComponent || !inventoryComponent) return; - if (inventoryComponent->GetLotCount(m_NexusTalonDataCard) != 0 || missionComponent->GetMission(979)->GetMissionState() == eMissionState::COMPLETE) { + // Only players on the mission get the data card, and only once. + if (missionComponent->GetMissionState(979) != eMissionState::ACTIVE || inventoryComponent->GetLotCount(m_NexusTalonDataCard) != 0) { return; } @@ -27,15 +28,10 @@ void AmDropshipComputer::OnUse(Entity* self, Entity* user) { } void AmDropshipComputer::OnDie(Entity* self, Entity* killer) { + // Reset this computer's spawner network and start the first one again, however it died. 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()) { @@ -44,22 +40,10 @@ void AmDropshipComputer::OnDie(Entity* self, Entity* killer) { samePipeSpawners[0]->Deactivate(); } - if (killer != nullptr && killer->IsPlayer()) { - const auto nextPipe = pipeGroup + std::to_string(nextPipeNum); + const auto firstPipeSpawners = Game::zoneManager->GetSpawnersByName(pipeGroup + "1"); - 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(); - } + if (!firstPipeSpawners.empty()) { + firstPipeSpawners[0]->Activate(); } } diff --git a/dScripts/02_server/Map/SS/SsModularBuildServer.cpp b/dScripts/02_server/Map/SS/SsModularBuildServer.cpp index dfb291682..0b2a52458 100644 --- a/dScripts/02_server/Map/SS/SsModularBuildServer.cpp +++ b/dScripts/02_server/Map/SS/SsModularBuildServer.cpp @@ -1,16 +1,14 @@ #include "SsModularBuildServer.h" #include "MissionComponent.h" #include "eMissionState.h" -#include "eReplicaComponentType.h" void SsModularBuildServer::OnModularBuildExit(Entity* self, Entity* player, bool bCompleted, std::vector modules) { int missionNum = 1732; if (bCompleted) { - MissionComponent* mission = static_cast(player->GetComponent(eReplicaComponentType::MISSION)); - Mission* rocketMission = mission->GetMission(missionNum); - - if (rocketMission->GetMissionState() == eMissionState::ACTIVE) { + auto* const mission = player->GetComponent(); + // The player may never have had this mission, so check the state instead of the mission itself. + if (mission && mission->GetMissionState(missionNum) == eMissionState::ACTIVE) { mission->ForceProgress(missionNum, 2478, 1); } }