fix: construct a player in jetpack mode with its jetpack

LWOControllablePhysComponent::Deserialize (0x00c45770) reads the jetpack
mode, effect, flying and bypass checks bits on construction, and
LWOControllablePhysComponent::SendMessage (0x00d2f020) keeps the same
from SetJetPackMode. DLU sent the message but never kept it, so a player
who came into range of someone flying was told they had no jetpack.

Live player constructions in jetpack mode carried effect 167, flying 0
and bypass checks 1, and a 0 after the pickup radius (the client reads
that bit into the flying flag). DLU wrote the jetpack mode there.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Aaron Kimbrell
2026-11-10 13:07:28 -06:00
parent 102abc32f5
commit f4d3d794fd
7 changed files with 64 additions and 4 deletions

View File

@@ -3,6 +3,7 @@
*/
#include "RacingControlComponent.h"
#include "ControllablePhysicsComponent.h"
#include "CharacterComponent.h"
#include "DestroyableComponent.h"
@@ -276,6 +277,7 @@ void RacingControlComponent::LoadPlayerVehicle(Entity* player,
jetPackMode.target = player->GetObjectID();
jetPackMode.bUse = false;
jetPackMode.Send(UNASSIGNED_SYSTEM_ADDRESS);
if (auto* const physics = player->GetComponent<ControllablePhysicsComponent>()) physics->SetJetPackMode(jetPackMode.bUse, jetPackMode.effectID, jetPackMode.bBypassChecks);
// Set the vehicle's state.
GameMessages::NotifyVehicleOfRacingObject notifyVehicle;