From b5e9d3b94c1bc41de9bb211d20e59df296e3461d Mon Sep 17 00:00:00 2001 From: Aaron Kimbrell Date: Sat, 26 Sep 2026 18:49:54 -0500 Subject: [PATCH] fix: AG property guard camera and foot race starter group Two script TODOs with the live scripts shipped in the client to follow: - AgPropGuard: accepting mission 768 before touching the orb (flag 71 unset) plays the "MissionCam" cinematic, as L_AG_PROP_GUARD.lua does. Also no longer dereferences a missing Character. - BaseFootRaceManager: joins the "FootRaceStarter" group on startup like L_ACT_BASE_FOOT_RACE.lua, since other foot race objects look the starters up through that group. Co-Authored-By: Claude Opus 5.5 --- dScripts/ai/ACT/FootRace/BaseFootRaceManager.cpp | 3 ++- dScripts/ai/PROPERTY/AG/AgPropGuard.cpp | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/dScripts/ai/ACT/FootRace/BaseFootRaceManager.cpp b/dScripts/ai/ACT/FootRace/BaseFootRaceManager.cpp index c5954c4c4..1e2712f2b 100644 --- a/dScripts/ai/ACT/FootRace/BaseFootRaceManager.cpp +++ b/dScripts/ai/ACT/FootRace/BaseFootRaceManager.cpp @@ -4,7 +4,8 @@ #include "Entity.h" void BaseFootRaceManager::OnStartup(Entity* self) { - // TODO: Add to FootRaceStarter group + // Other foot race objects find the starters through this group (L_ACT_BASE_FOOT_RACE.lua). + self->AddToGroup("FootRaceStarter"); } void BaseFootRaceManager::OnFireEventServerSide(Entity* self, Entity* sender, std::string args, int32_t param1, int32_t param2, int32_t param3) { diff --git a/dScripts/ai/PROPERTY/AG/AgPropGuard.cpp b/dScripts/ai/PROPERTY/AG/AgPropGuard.cpp index 0670408d6..86c2c1599 100644 --- a/dScripts/ai/PROPERTY/AG/AgPropGuard.cpp +++ b/dScripts/ai/PROPERTY/AG/AgPropGuard.cpp @@ -1,4 +1,5 @@ #include "AgPropGuard.h" +#include "GameMessages.h" #include "Entity.h" #include "Character.h" #include "EntityManager.h" @@ -14,8 +15,9 @@ void AgPropGuard::OnMissionDialogueOK(Entity* self, Entity* target, int missionI const auto state = missionComponent->GetMissionState(320); if (missionID == 768 && missionState == eMissionState::AVAILABLE) { - if (!character->GetPlayerFlag(71)) { - // TODO: Cinematic "MissionCam" + // Players who have not touched the orb yet get a camera pan showing where it is. + if (character && !character->GetPlayerFlag(71)) { + GameMessages::SendPlayCinematic(target->GetObjectID(), u"MissionCam", target->GetSystemAddress()); } } else if (missionID == 768 && missionState >= eMissionState::READY_TO_COMPLETE) { //remove the inventory items