fix(destroyable): resurrect only a dead player that isn't already resurrecting

RequestResurrect resurrected whoever sent it, so a living player could reset
their health and imagination, and repeated requests stacked respawns. The
client's destroyable resurrects only when smashed and not resurrecting
(LWODestroyableComponent::SendMessage 0x00d29e40); live, all 17 requests in
the captures came after the player's Die and before its Resurrect.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Aaron Kimbrell
2026-10-02 09:17:28 -05:00
parent cf1e8a54c6
commit 4b84677cba
4 changed files with 25 additions and 0 deletions

View File

@@ -1391,10 +1391,12 @@ void DestroyableComponent::Resurrect(Entity& entityRef) {
// Add a half second in case someone decides to cheat and move during the death animation
// and just make sure the client has time to be ready.
constexpr float respawnTime = 3.66700005531311f + 0.5f;
if (auto* const destroyable = entity->GetComponent<DestroyableComponent>()) destroyable->m_IsResurrecting = true;
entity->AddCallbackTimer(respawnTime, [=]() {
GameMessages::PlayerResurrectionFinished msg;
entity->NotifyPlayerResurrectionFinished(msg);
auto* destroyableComponent = entity->GetComponent<DestroyableComponent>();
if (destroyableComponent) destroyableComponent->m_IsResurrecting = false;
if (destroyableComponent != nullptr && entity->GetLOT() == 1) {
destroyableComponent->SetIsDead(false);