[11818] update creature's unit part(update spell events, auras, movement) while in death. thanks to rsa for making tests

this allows us update creature's death persistent auras, fall died creatures in natural, non hacky way

also fix the bug that creature starts waypoint movement not from begining at respawning. thanks to Grz3s for reporting
This commit is contained in:
SilverIce 2011-10-13 15:44:12 +03:00
parent 9c70637333
commit 012be82c86
3 changed files with 6 additions and 12 deletions

View file

@ -511,6 +511,8 @@ void Creature::Update(uint32 update_diff, uint32 diff)
} }
case CORPSE: case CORPSE:
{ {
Unit::Update(update_diff, diff);
if (m_isDeadByDefault) if (m_isDeadByDefault)
break; break;
@ -1495,7 +1497,7 @@ void Creature::SetDeathState(DeathState s)
Unit::SetDeathState(ALIVE); Unit::SetDeathState(ALIVE);
clearUnitState(UNIT_STAT_ALL_STATE); clearUnitState(UNIT_STAT_ALL_STATE);
i_motionMaster.Clear(); i_motionMaster.Initialize();
SetMeleeDamageSchool(SpellSchools(cinfo->dmgschool)); SetMeleeDamageSchool(SpellSchools(cinfo->dmgschool));
@ -1533,19 +1535,10 @@ bool Creature::FallGround()
Unit::SetDeathState(CORPSE_FALLING); Unit::SetDeathState(CORPSE_FALLING);
// For creatures that are moving towards target and dies, the visual effect is not nice.
// It is possibly caused by a xyz mismatch in DestinationHolder's GetLocationNow and the location
// of the mob in client. For mob that are already reached target or dies while not moving
// the visual appear to be fairly close to the expected.
Movement::MoveSplineInit init(*this); Movement::MoveSplineInit init(*this);
init.MoveTo(GetPositionX(),GetPositionY(),tz); init.MoveTo(GetPositionX(),GetPositionY(),tz);
init.SetFall(); init.SetFall();
init.Launch(); init.Launch();
// hacky solution: by some reason died creatures not updated, that's why need finalize movement state
GetMap()->CreatureRelocation(this, GetPositionX(), GetPositionY(), tz, GetOrientation());
DisableSpline();
return true; return true;
} }

View file

@ -8350,8 +8350,9 @@ void Unit::SetDeathState(DeathState s)
RemoveMiniPet(); RemoveMiniPet();
UnsummonAllTotems(); UnsummonAllTotems();
i_motionMaster.Clear(false,true);
i_motionMaster.MoveIdle();
StopMoving(); StopMoving();
DisableSpline();
ModifyAuraState(AURA_STATE_HEALTHLESS_20_PERCENT, false); ModifyAuraState(AURA_STATE_HEALTHLESS_20_PERCENT, false);
ModifyAuraState(AURA_STATE_HEALTHLESS_35_PERCENT, false); ModifyAuraState(AURA_STATE_HEALTHLESS_35_PERCENT, false);

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__ #ifndef __REVISION_NR_H__
#define __REVISION_NR_H__ #define __REVISION_NR_H__
#define REVISION_NR "11817" #define REVISION_NR "11818"
#endif // __REVISION_NR_H__ #endif // __REVISION_NR_H__