diff --git a/Source/Game/Entities/Player/Player.DB.cs b/Source/Game/Entities/Player/Player.DB.cs index 2657b31a2..c8c92da3c 100644 --- a/Source/Game/Entities/Player/Player.DB.cs +++ b/Source/Game/Entities/Player/Player.DB.cs @@ -1045,7 +1045,9 @@ namespace Game.Entities if (!IsAlive()) { - if (!result.IsEmpty() && !HasAtLoginFlag(AtLoginFlags.Resurrect)) + if (HasAtLoginFlag(AtLoginFlags.Resurrect)) + ResurrectPlayer(0.5f); + else if (!result.IsEmpty()) { _corpseLocation = new WorldLocation(result.Read(0), result.Read(1), result.Read(2), result.Read(3), result.Read(4)); if (!CliDB.MapStorage.LookupByKey(_corpseLocation.GetMapId()).Instanceable()) @@ -1053,8 +1055,6 @@ namespace Game.Entities else RemovePlayerLocalFlag(PlayerLocalFlags.ReleaseTimer); } - else - ResurrectPlayer(0.5f); } RemoveAtLoginFlag(AtLoginFlags.Resurrect); @@ -3188,6 +3188,10 @@ namespace Game.Entities GetSpellHistory().LoadFromDB(holder.GetResult(PlayerLoginQueryLoad.SpellCooldowns), holder.GetResult(PlayerLoginQueryLoad.SpellCharges)); + uint savedHealth = health; + if (savedHealth == 0) + m_deathState = DeathState.Corpse; + // Spell code allow apply any auras to dead character in load time in aura/spell/item loading // Do now before stats re-calculation cleanup for ghost state unexpected auras if (!IsAlive()) @@ -3200,7 +3204,7 @@ namespace Game.Entities UpdateAllStats(); // restore remembered power/health values (but not more max values) - SetHealth(health > GetMaxHealth() ? GetMaxHealth() : health); + SetHealth(savedHealth > GetMaxHealth() ? GetMaxHealth() : savedHealth); int loadedPowers = 0; for (PowerType i = 0; i < PowerType.Max; ++i) { diff --git a/Source/Game/Entities/Player/Player.cs b/Source/Game/Entities/Player/Player.cs index 6964ba8e2..f7da15b6a 100644 --- a/Source/Game/Entities/Player/Player.cs +++ b/Source/Game/Entities/Player/Player.cs @@ -4100,6 +4100,7 @@ namespace Game.Entities GetMap().AddToMap(corpse); // convert player body to ghost + SetDeathState(DeathState.Dead); SetHealth(1); SetWaterWalking(true); diff --git a/Source/Game/Handlers/CharacterHandler.cs b/Source/Game/Handlers/CharacterHandler.cs index 69ea02584..5dcb82e4a 100644 --- a/Source/Game/Handlers/CharacterHandler.cs +++ b/Source/Game/Handlers/CharacterHandler.cs @@ -899,7 +899,7 @@ namespace Game }); // setting Ghost+speed if dead - if (pCurrChar.GetDeathState() != DeathState.Alive) + if (pCurrChar.GetDeathState() == DeathState.Dead) { // not blizz like, we must correctly save and load player instead... if (pCurrChar.GetRace() == Race.NightElf && !pCurrChar.HasAura(20584))