private async Task <bool> HandleDeath() { if (Poi.Current.Type != PoiType.Death) { // We are not dead, continue return(false); } var returnStrategy = Behaviors.GetReturnStrategy(); await Coroutine.Wait(3000, () => ClientGameUiRevive.ReviveState == ReviveState.Dead); var ticks = 0; while (ClientGameUiRevive.ReviveState == ReviveState.Dead && ticks++ < 5) { ClientGameUiRevive.Revive(); await Coroutine.Wait(5000, () => ClientGameUiRevive.ReviveState != ReviveState.Dead); } await Coroutine.Wait(15000, () => ClientGameUiRevive.ReviveState == ReviveState.None); Poi.Clear("We live!, now to get back to where we were. Using return strategy -> " + returnStrategy); await returnStrategy.ReturnToZone(); if (EnableFlightSettings.Instance.ReturnToLocationOnDeath) { await returnStrategy.ReturnToLocation(); } return(false); }