aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Object
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Entities/Object')
-rw-r--r--src/server/game/Entities/Object/Object.cpp20
-rw-r--r--src/server/game/Entities/Object/Object.h48
2 files changed, 50 insertions, 18 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index 9d77e144c0b..2eb0fd65149 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -219,9 +219,6 @@ void Object::BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) c
case GAMEOBJECT_TYPE_FLAGDROP:
updateType = UPDATETYPE_CREATE_OBJECT2;
break;
- case GAMEOBJECT_TYPE_TRANSPORT:
- flags |= UPDATEFLAG_TRANSPORT;
- break;
default:
break;
}
@@ -414,13 +411,10 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint16 flags) const
// 0x40
if (flags & UPDATEFLAG_STATIONARY_POSITION)
{
- *data << object->GetPositionX();
- *data << object->GetPositionY();
- if (isType(TYPEMASK_UNIT))
- *data << unit->GetPositionZMinusOffset();
- else
- *data << object->GetPositionZ();
- *data << object->GetOrientation();
+ *data << object->GetStationaryX();
+ *data << object->GetStationaryY();
+ *data << object->GetStationaryZ();
+ *data << object->GetStationaryO();
}
}
}
@@ -473,7 +467,11 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint16 flags) const
// 0x2
if (flags & UPDATEFLAG_TRANSPORT)
{
- *data << uint32(getMSTime()); // Unknown - getMSTime is wrong.
+ GameObject const* go = ToGameObject();
+ if (go && go->IsTransport())
+ *data << uint32(go->GetGOValue()->Transport.PathProgress);
+ else
+ *data << uint32(getMSTime());
}
// 0x80
diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h
index 66b3a737e0c..3e010fa98a2 100644
--- a/src/server/game/Entities/Object/Object.h
+++ b/src/server/game/Entities/Object/Object.h
@@ -523,6 +523,35 @@ class FlaggedValuesArray32
T_FLAGS m_flags;
};
+enum MapObjectCellMoveState
+{
+ MAP_OBJECT_CELL_MOVE_NONE, //not in move list
+ MAP_OBJECT_CELL_MOVE_ACTIVE, //in move list
+ MAP_OBJECT_CELL_MOVE_INACTIVE, //in move list but should not move
+};
+
+class MapObject
+{
+ friend class Map; //map for moving creatures
+ friend class ObjectGridLoader; //grid loader for loading creatures
+
+ protected:
+ MapObject() : _moveState(MAP_OBJECT_CELL_MOVE_NONE) {}
+
+ private:
+ Cell _currentCell;
+ Cell const& GetCurrentCell() const { return _currentCell; }
+ void SetCurrentCell(Cell const& cell) { _currentCell = cell; }
+
+ MapObjectCellMoveState _moveState;
+ Position _newPosition;
+ void SetNewCellPosition(float x, float y, float z, float o)
+ {
+ _moveState = MAP_OBJECT_CELL_MOVE_ACTIVE;
+ _newPosition.Relocate(x, y, z, o);
+ }
+};
+
class WorldObject : public Object, public WorldLocation
{
protected:
@@ -700,16 +729,22 @@ class WorldObject : public Object, public WorldLocation
// Transports
Transport* GetTransport() const { return m_transport; }
- virtual float GetTransOffsetX() const { return 0; }
- virtual float GetTransOffsetY() const { return 0; }
- virtual float GetTransOffsetZ() const { return 0; }
- virtual float GetTransOffsetO() const { return 0; }
- virtual uint32 GetTransTime() const { return 0; }
- virtual int8 GetTransSeat() const { return -1; }
+ float GetTransOffsetX() const { return m_movementInfo.transport.pos.GetPositionX(); }
+ float GetTransOffsetY() const { return m_movementInfo.transport.pos.GetPositionY(); }
+ float GetTransOffsetZ() const { return m_movementInfo.transport.pos.GetPositionZ(); }
+ float GetTransOffsetO() const { return m_movementInfo.transport.pos.GetOrientation(); }
+ uint32 GetTransTime() const { return m_movementInfo.transport.time; }
+ int8 GetTransSeat() const { return m_movementInfo.transport.seat; }
virtual uint64 GetTransGUID() const;
void SetTransport(Transport* t) { m_transport = t; }
MovementInfo m_movementInfo;
+
+ virtual float GetStationaryX() const { return GetPositionX(); }
+ virtual float GetStationaryY() const { return GetPositionY(); }
+ virtual float GetStationaryZ() const { return GetPositionZ(); }
+ virtual float GetStationaryO() const { return GetOrientation(); }
+
protected:
std::string m_name;
bool m_isActive;
@@ -739,7 +774,6 @@ class WorldObject : public Object, public WorldLocation
uint16 m_notifyflags;
uint16 m_executed_notifies;
-
virtual bool _IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D) const;
bool CanNeverSee(WorldObject const* obj) const;