aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsilver1ce <none@none>2010-03-07 18:17:37 +0200
committersilver1ce <none@none>2010-03-07 18:17:37 +0200
commit9a8f10fa3067ca65c2e69ac610d8950c3b384125 (patch)
tree32469e8f7ef525eb43ad7c8088d2aa695566b1c1 /src
parent91b8ee104eac7446f9b8cbea7ed9dce641740c8e (diff)
avoid send movement packet at death twice, cleanup
--HG-- branch : trunk
Diffstat (limited to 'src')
-rw-r--r--src/game/Creature.cpp8
-rw-r--r--src/game/Player.cpp5
-rw-r--r--src/game/Unit.cpp17
-rw-r--r--src/game/Unit.h2
4 files changed, 15 insertions, 17 deletions
diff --git a/src/game/Creature.cpp b/src/game/Creature.cpp
index 4e6891ba5b9..4b31668db62 100644
--- a/src/game/Creature.cpp
+++ b/src/game/Creature.cpp
@@ -1484,14 +1484,6 @@ void Creature::setDeathState(DeathState s)
if(m_formation && m_formation->getLeader() == this)
m_formation->FormationReset(true);
- SetHealth(0);
- SetPower(getPowerType(),0);
-
- // For some reason movement packet is always to be issued on death
- // send if not going to fall down
- if (!canFly() && !IsFlying())
- SendMonsterMove(GetPositionX(), GetPositionY(), GetPositionZ(), 0);
-
if ((canFly() || IsFlying()) && FallGround())
return;
diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index 5c12feccbe0..ccab083f599 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -1448,11 +1448,6 @@ void Player::setDeathState(DeathState s)
GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_DEATH_AT_MAP, 1);
GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_DEATH, 1);
GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_DEATH_IN_DUNGEON, 1);
-
- // For some reason movement packet is always to be issued on death
- // send if not going to fall down
- if (!IsFlying() || GetTransport())
- SendMonsterMove(GetPositionX(), GetPositionY(), GetPositionZ(), 0);
}
Unit::setDeathState(s);
diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp
index 392cb3ec3f9..99d01f983d8 100644
--- a/src/game/Unit.cpp
+++ b/src/game/Unit.cpp
@@ -311,14 +311,25 @@ void Unit::SendMonsterMoveWithSpeed(float x, float y, float z, uint32 transitTim
SendMonsterMove(x, y, z, transitTime, player);
}
-void Unit::SendMonsterStop()
+void Unit::SendMonsterStop(bool on_death)
{
WorldPacket data(SMSG_MONSTER_MOVE, (17 + GetPackGUID().size()));
data.append(GetPackGUID());
data << uint8(0); // new in 3.1
data << GetPositionX() << GetPositionY() << GetPositionZ();
data << getMSTime();
- data << uint8(1);
+
+ if (on_death == true)
+ {
+ data << uint8(1);
+ data << uint32((GetUnitMovementFlags() & MOVEMENTFLAG_LEVITATING) ? MOVEFLAG_FLY : MOVEFLAG_WALK);
+ data << uint32(0); // Time in between points
+ data << uint32(1); // 1 single waypoint
+ data << GetPositionX() << GetPositionY() << GetPositionZ();
+ }
+ else
+ data << uint8(0);
+
SendMessageToSet(&data, true);
clearUnitState(UNIT_STAT_MOVE);
@@ -12002,7 +12013,7 @@ void Unit::setDeathState(DeathState s)
GetMotionMaster()->MoveIdle();
if (m_vehicleKit)
m_vehicleKit->Die();
- StopMoving();
+ SendMonsterStop(true);
//without this when removing IncreaseMaxHealth aura player may stuck with 1 hp
//do not why since in IncreaseMaxHealth currenthealth is checked
SetHealth(0);
diff --git a/src/game/Unit.h b/src/game/Unit.h
index acb7c0fd68d..a35657890fa 100644
--- a/src/game/Unit.h
+++ b/src/game/Unit.h
@@ -1432,7 +1432,7 @@ class Unit : public WorldObject
void JumpTo(float speedXY, float speedZ, bool forward = true);
void JumpTo(WorldObject *obj, float speedZ);
- void SendMonsterStop();
+ void SendMonsterStop(bool on_death = false);
void SendMonsterMove(float NewPosX, float NewPosY, float NewPosZ, uint32 Time, Player* player = NULL);
void SendMonsterMove(float NewPosX, float NewPosY, float NewPosZ, uint32 MoveFlags, uint32 time, float speedZ, Player *player = NULL);
//void SendMonsterMove(float NewPosX, float NewPosY, float NewPosZ, uint8 type, uint32 MovementFlags, uint32 Time, Player* player = NULL);