From 533517baabdfeec322caa096afc344c6fe71769e Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 7 Aug 2012 13:27:33 +0200 Subject: Core/Entities: * Corrected create object type after changing updateflags * Updated MovementFlags2 * Minor cleanup in spline flag methods --- src/server/game/Entities/Object/Object.cpp | 35 ++++++++++++++++--------- src/server/game/Entities/Object/Object.h | 19 +++++++++----- src/server/game/Entities/Object/ObjectDefines.h | 4 +-- 3 files changed, 36 insertions(+), 22 deletions(-) (limited to 'src/server/game/Entities/Object') diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 1f859a585e6..ec1cb8d7728 100755 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -180,7 +180,7 @@ void Object::BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) c if (!target) return; - uint8 updatetype = UPDATETYPE_CREATE_OBJECT; + uint8 updateType = UPDATETYPE_CREATE_OBJECT; uint16 flags = m_updateFlag; uint32 valCount = m_valuesCount; @@ -191,16 +191,26 @@ void Object::BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) c else if (GetTypeId() == TYPEID_PLAYER) valCount = PLAYER_END_NOT_SELF; - if (flags & UPDATEFLAG_STATIONARY_POSITION) + switch (GetGUIDHigh()) { - // UPDATETYPE_CREATE_OBJECT2 dynamic objects, corpses... - if (isType(TYPEMASK_DYNAMICOBJECT) || isType(TYPEMASK_CORPSE) || isType(TYPEMASK_PLAYER)) - updatetype = UPDATETYPE_CREATE_OBJECT2; - - // UPDATETYPE_CREATE_OBJECT2 for pets... - if (target->GetPetGUID() == GetGUID()) - updatetype = UPDATETYPE_CREATE_OBJECT2; + case HIGHGUID_PLAYER: + case HIGHGUID_PET: + case HIGHGUID_CORPSE: + case HIGHGUID_DYNAMICOBJECT: + updateType = UPDATETYPE_CREATE_OBJECT2; + break; + case HIGHGUID_UNIT: + if (ToUnit()->ToTempSummon() && IS_PLAYER_GUID(ToUnit()->ToTempSummon()->GetSummonerGUID())) + updateType = UPDATETYPE_CREATE_OBJECT2; + break; + case HIGHGUID_GAMEOBJECT: + if (IS_PLAYER_GUID(ToGameObject()->GetOwnerGUID())) + updateType = UPDATETYPE_CREATE_OBJECT2; + break; + } + if (flags & UPDATEFLAG_STATIONARY_POSITION) + { // UPDATETYPE_CREATE_OBJECT2 for some gameobject types... if (isType(TYPEMASK_GAMEOBJECT)) { @@ -210,7 +220,7 @@ void Object::BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) c case GAMEOBJECT_TYPE_DUEL_ARBITER: case GAMEOBJECT_TYPE_FLAGSTAND: case GAMEOBJECT_TYPE_FLAGDROP: - updatetype = UPDATETYPE_CREATE_OBJECT2; + updateType = UPDATETYPE_CREATE_OBJECT2; break; case GAMEOBJECT_TYPE_TRANSPORT: flags |= UPDATEFLAG_TRANSPORT; @@ -219,14 +229,13 @@ void Object::BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) c break; } } - } if (ToUnit() && ToUnit()->getVictim()) flags |= UPDATEFLAG_HAS_TARGET; ByteBuffer buf(500); - buf << uint8(updatetype); + buf << uint8(updateType); buf.append(GetPackGUID()); buf << uint8(m_objectTypeId); @@ -235,7 +244,7 @@ void Object::BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) c UpdateMask updateMask; updateMask.SetCount(valCount); _SetCreateBits(&updateMask, target); - _BuildValuesUpdate(updatetype, &buf, &updateMask, target); + _BuildValuesUpdate(updateType, &buf, &updateMask, target); data->AddUpdateBlock(buf); } diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index 3e00e775b4b..3829e2f75f2 100755 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -362,19 +362,24 @@ class Object void ForceValuesUpdateAtIndex(uint32); Player* ToPlayer() { if (GetTypeId() == TYPEID_PLAYER) return reinterpret_cast(this); else return NULL; } - Player const* ToPlayer() const { if (GetTypeId() == TYPEID_PLAYER) return (Player const*)((Player*)this); else return NULL; } + Player const* ToPlayer() const { if (GetTypeId() == TYPEID_PLAYER) return reinterpret_cast(this); else return NULL; } + Creature* ToCreature() { if (GetTypeId() == TYPEID_UNIT) return reinterpret_cast(this); else return NULL; } - Creature const* ToCreature() const { if (GetTypeId() == TYPEID_UNIT) return (Creature const*)((Creature*)this); else return NULL; } + Creature const* ToCreature() const { if (GetTypeId() == TYPEID_UNIT) return reinterpret_cast(this); else return NULL; } + + Unit* ToUnit() { if (isType(TYPEMASK_UNIT)) return reinterpret_cast(this); else return NULL; } + Unit const* ToUnit() const { if (isType(TYPEMASK_UNIT)) return reinterpret_cast(this); else return NULL; } - Unit* ToUnit() { if (GetTypeId() == TYPEID_UNIT || GetTypeId() == TYPEID_PLAYER) return reinterpret_cast(this); else return NULL; } - Unit const* ToUnit() const { if (GetTypeId() == TYPEID_UNIT || GetTypeId() == TYPEID_PLAYER) return (const Unit*)((Unit*)this); else return NULL; } GameObject* ToGameObject() { if (GetTypeId() == TYPEID_GAMEOBJECT) return reinterpret_cast(this); else return NULL; } - GameObject const* ToGameObject() const { if (GetTypeId() == TYPEID_GAMEOBJECT) return (const GameObject*)((GameObject*)this); else return NULL; } + GameObject const* ToGameObject() const { if (GetTypeId() == TYPEID_GAMEOBJECT) return reinterpret_cast(this); else return NULL; } Corpse* ToCorpse() { if (GetTypeId() == TYPEID_CORPSE) return reinterpret_cast(this); else return NULL; } - Corpse const* ToCorpse() const { if (GetTypeId() == TYPEID_CORPSE) return (const Corpse*)((Corpse*)this); else return NULL; } - protected: + Corpse const* ToCorpse() const { if (GetTypeId() == TYPEID_CORPSE) return reinterpret_cast(this); else return NULL; } + DynamicObject* ToDynObject() { if (GetTypeId() == TYPEID_DYNAMICOBJECT) return reinterpret_cast(this); else return NULL; } + DynamicObject const* ToDynObject() const { if (GetTypeId() == TYPEID_DYNAMICOBJECT) return reinterpret_cast(this); else return NULL; } + + protected: Object(); void _InitValues(); diff --git a/src/server/game/Entities/Object/ObjectDefines.h b/src/server/game/Entities/Object/ObjectDefines.h index 2e74a3b4ee4..9fd4279a79c 100755 --- a/src/server/game/Entities/Object/ObjectDefines.h +++ b/src/server/game/Entities/Object/ObjectDefines.h @@ -42,10 +42,10 @@ enum HighGuid HIGHGUID_PET = 0xF14, // blizz F140 HIGHGUID_VEHICLE = 0xF15, // blizz F550 HIGHGUID_DYNAMICOBJECT = 0xF10, // blizz F100 - HIGHGUID_CORPSE = 0xF101, // blizz F100 + HIGHGUID_CORPSE = 0xF101, // blizz F100 HIGHGUID_MO_TRANSPORT = 0x1FC, // blizz 1FC0 (for GAMEOBJECT_TYPE_MO_TRANSPORT) HIGHGUID_GROUP = 0x1F5, - HIGHGUID_GUILD = 0x1FF5, // new 4.x + HIGHGUID_GUILD = 0x1FF5, // new 4.x }; #define IS_EMPTY_GUID(Guid) (Guid == 0) -- cgit v1.2.3