Fix problem with max pet distance from owner. by VladimirMangos
--HG-- branch : trunk
This commit is contained in:
+2
-2
@@ -514,8 +514,8 @@ void Pet::Update(uint32 diff)
|
|||||||
{
|
{
|
||||||
// unsummon pet that lost owner
|
// unsummon pet that lost owner
|
||||||
Player* owner = GetOwner();
|
Player* owner = GetOwner();
|
||||||
if(!owner || (!IsWithinDistInMap(owner, OWNER_MAX_DISTANCE) && !isPossessed()) || isControlled() && !owner->GetPetGUID())
|
if(!owner || (!IsWithinDistInMap(owner, GetMap()->GetVisibilityDistance()) && !isPossessed()) || isControlled() && !owner->GetPetGUID())
|
||||||
//if(!owner || (!IsWithinDistInMap(owner, OWNER_MAX_DISTANCE) && (owner->GetCharmGUID() && (owner->GetCharmGUID() != GetGUID()))) || (isControlled() && !owner->GetPetGUID()))
|
//if(!owner || (!IsWithinDistInMap(owner, GetMap()->GetVisibilityDistance()) && (owner->GetCharmGUID() && (owner->GetCharmGUID() != GetGUID()))) || (isControlled() && !owner->GetPetGUID()))
|
||||||
{
|
{
|
||||||
Remove(PET_SAVE_NOT_IN_SLOT, true);
|
Remove(PET_SAVE_NOT_IN_SLOT, true);
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -116,8 +116,6 @@ typedef std::vector<uint32> AutoSpellList;
|
|||||||
|
|
||||||
#define ACTIVE_SPELLS_MAX 4
|
#define ACTIVE_SPELLS_MAX 4
|
||||||
|
|
||||||
#define OWNER_MAX_DISTANCE 100.0f
|
|
||||||
|
|
||||||
#define PET_FOLLOW_DIST 1
|
#define PET_FOLLOW_DIST 1
|
||||||
#define PET_FOLLOW_ANGLE (M_PI/2)
|
#define PET_FOLLOW_ANGLE (M_PI/2)
|
||||||
|
|
||||||
|
|||||||
+20
-3
@@ -1394,8 +1394,8 @@ void Player::Update( uint32 p_time )
|
|||||||
SendUpdateToOutOfRangeGroupMembers();
|
SendUpdateToOutOfRangeGroupMembers();
|
||||||
|
|
||||||
Pet* pet = GetPet();
|
Pet* pet = GetPet();
|
||||||
if (pet && !IsWithinDistInMap(pet, OWNER_MAX_DISTANCE) && !pet->isPossessed())
|
if (pet && !pet->IsWithinDistInMap(this, GetMap()->GetVisibilityDistance()) && !pet->isPossessed())
|
||||||
//if(pet && !IsWithinDistInMap(pet, OWNER_MAX_DISTANCE) && (GetCharmGUID() && (pet->GetGUID() != GetCharmGUID())))
|
//if(pet && !pet->IsWithinDistInMap(this, GetMap()->GetVisibilityDistance()) && (GetCharmGUID() && (pet->GetGUID() != GetCharmGUID())))
|
||||||
RemovePet(pet, PET_SAVE_NOT_IN_SLOT, true);
|
RemovePet(pet, PET_SAVE_NOT_IN_SLOT, true);
|
||||||
|
|
||||||
//we should execute delayed teleports only for alive(!) players
|
//we should execute delayed teleports only for alive(!) players
|
||||||
@@ -1748,7 +1748,7 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati
|
|||||||
if (!(options & TELE_TO_NOT_UNSUMMON_PET))
|
if (!(options & TELE_TO_NOT_UNSUMMON_PET))
|
||||||
{
|
{
|
||||||
//same map, only remove pet if out of range for new position
|
//same map, only remove pet if out of range for new position
|
||||||
if(pet && !pet->IsWithinDist3d(x,y,z, OWNER_MAX_DISTANCE))
|
if(pet && !pet->IsWithinDist3d(x,y,z, GetMap()->GetVisibilityDistance()))
|
||||||
UnsummonPetTemporaryIfAny();
|
UnsummonPetTemporaryIfAny();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -19302,12 +19302,27 @@ inline void UpdateVisibilityOf_helper(std::set<uint64>& s64, Player* target, std
|
|||||||
v.insert(target);
|
v.insert(target);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
inline void BeforeVisibilityDestroy(T* /*t*/, Player* /*p*/)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
template<>
|
||||||
|
inline void BeforeVisibilityDestroy<Creature>(Creature* t, Player* p)
|
||||||
|
{
|
||||||
|
if (p->GetPetGUID()==t->GetGUID() && ((Creature*)t)->isPet())
|
||||||
|
((Pet*)t)->Remove(PET_SAVE_NOT_IN_SLOT, true);
|
||||||
|
}
|
||||||
|
|
||||||
void Player::UpdateVisibilityOf(WorldObject* target)
|
void Player::UpdateVisibilityOf(WorldObject* target)
|
||||||
{
|
{
|
||||||
if(HaveAtClient(target))
|
if(HaveAtClient(target))
|
||||||
{
|
{
|
||||||
if(!target->isVisibleForInState(this, true))
|
if(!target->isVisibleForInState(this, true))
|
||||||
{
|
{
|
||||||
|
if (target->GetTypeId()==TYPEID_UNIT)
|
||||||
|
BeforeVisibilityDestroy<Creature>((Creature*)target,this);
|
||||||
|
|
||||||
target->DestroyForPlayer(this);
|
target->DestroyForPlayer(this);
|
||||||
m_clientGUIDs.erase(target->GetGUID());
|
m_clientGUIDs.erase(target->GetGUID());
|
||||||
|
|
||||||
@@ -19359,6 +19374,8 @@ void Player::UpdateVisibilityOf(T* target, UpdateData& data, std::set<Unit*>& vi
|
|||||||
{
|
{
|
||||||
if(!target->isVisibleForInState(this,true))
|
if(!target->isVisibleForInState(this,true))
|
||||||
{
|
{
|
||||||
|
BeforeVisibilityDestroy<T>(target,this);
|
||||||
|
|
||||||
target->BuildOutOfRangeUpdateBlock(&data);
|
target->BuildOutOfRangeUpdateBlock(&data);
|
||||||
m_clientGUIDs.erase(target->GetGUID());
|
m_clientGUIDs.erase(target->GetGUID());
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user