mirror of
https://github.com/mangosfour/server.git
synced 2025-12-18 01:37:01 +00:00
[11456] Some ObejctGuid uses in Pet code.
This commit is contained in:
parent
51031c2d24
commit
7318bb0864
4 changed files with 21 additions and 19 deletions
|
|
@ -1281,7 +1281,7 @@ void Pet::_LoadAuras(uint32 timediff)
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
Field *fields = result->Fetch();
|
Field *fields = result->Fetch();
|
||||||
uint64 caster_guid = fields[0].GetUInt64();
|
ObjectGuid casterGuid = ObjectGuid(fields[0].GetUInt64());
|
||||||
uint32 item_lowguid = fields[1].GetUInt32();
|
uint32 item_lowguid = fields[1].GetUInt32();
|
||||||
uint32 spellid = fields[2].GetUInt32();
|
uint32 spellid = fields[2].GetUInt32();
|
||||||
uint32 stackcount = fields[3].GetUInt32();
|
uint32 stackcount = fields[3].GetUInt32();
|
||||||
|
|
@ -1307,7 +1307,7 @@ void Pet::_LoadAuras(uint32 timediff)
|
||||||
}
|
}
|
||||||
|
|
||||||
// do not load single target auras (unless they were cast by the player)
|
// do not load single target auras (unless they were cast by the player)
|
||||||
if (caster_guid != GetGUID() && IsSingleTargetSpell(spellproto))
|
if (casterGuid != GetObjectGuid() && IsSingleTargetSpell(spellproto))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (remaintime != -1 && !IsPositiveSpell(spellproto))
|
if (remaintime != -1 && !IsPositiveSpell(spellproto))
|
||||||
|
|
@ -1336,7 +1336,7 @@ void Pet::_LoadAuras(uint32 timediff)
|
||||||
stackcount = 1;
|
stackcount = 1;
|
||||||
|
|
||||||
SpellAuraHolder *holder = CreateSpellAuraHolder(spellproto, this, NULL);
|
SpellAuraHolder *holder = CreateSpellAuraHolder(spellproto, this, NULL);
|
||||||
holder->SetLoadedState(caster_guid, ObjectGuid(HIGHGUID_ITEM, item_lowguid), stackcount, remaincharges, maxduration, remaintime);
|
holder->SetLoadedState(casterGuid, ObjectGuid(HIGHGUID_ITEM, item_lowguid), stackcount, remaincharges, maxduration, remaintime);
|
||||||
|
|
||||||
for (int32 i = 0; i < MAX_EFFECT_INDEX; ++i)
|
for (int32 i = 0; i < MAX_EFFECT_INDEX; ++i)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -250,15 +250,15 @@ void PetAI::UpdateAI(const uint32 diff)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
bool spellUsed = false;
|
bool spellUsed = false;
|
||||||
for(std::set<uint64>::const_iterator tar = m_AllySet.begin(); tar != m_AllySet.end(); ++tar)
|
for (AllySet::const_iterator tar = m_AllySet.begin(); tar != m_AllySet.end(); ++tar)
|
||||||
{
|
{
|
||||||
Unit* Target = ObjectAccessor::GetUnit(*m_creature,*tar);
|
Unit* Target = ObjectAccessor::GetUnit(*m_creature,*tar);
|
||||||
|
|
||||||
//only buff targets that are in combat, unless the spell can only be cast while out of combat
|
//only buff targets that are in combat, unless the spell can only be cast while out of combat
|
||||||
if(!Target)
|
if (!Target)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if(spell->CanAutoCast(Target))
|
if (spell->CanAutoCast(Target))
|
||||||
{
|
{
|
||||||
targetSpellStore.push_back(std::make_pair<Unit*, Spell*>(Target, spell));
|
targetSpellStore.push_back(std::make_pair<Unit*, Spell*>(Target, spell));
|
||||||
spellUsed = true;
|
spellUsed = true;
|
||||||
|
|
@ -317,36 +317,36 @@ void PetAI::UpdateAllies()
|
||||||
|
|
||||||
m_updateAlliesTimer = 10*IN_MILLISECONDS; //update friendly targets every 10 seconds, lesser checks increase performance
|
m_updateAlliesTimer = 10*IN_MILLISECONDS; //update friendly targets every 10 seconds, lesser checks increase performance
|
||||||
|
|
||||||
if(!owner)
|
if (!owner)
|
||||||
return;
|
return;
|
||||||
else if(owner->GetTypeId() == TYPEID_PLAYER)
|
else if (owner->GetTypeId() == TYPEID_PLAYER)
|
||||||
pGroup = ((Player*)owner)->GetGroup();
|
pGroup = ((Player*)owner)->GetGroup();
|
||||||
|
|
||||||
//only pet and owner/not in group->ok
|
//only pet and owner/not in group->ok
|
||||||
if(m_AllySet.size() == 2 && !pGroup)
|
if (m_AllySet.size() == 2 && !pGroup)
|
||||||
return;
|
return;
|
||||||
//owner is in group; group members filled in already (no raid -> subgroupcount = whole count)
|
//owner is in group; group members filled in already (no raid -> subgroupcount = whole count)
|
||||||
if(pGroup && !pGroup->isRaidGroup() && m_AllySet.size() == (pGroup->GetMembersCount() + 2))
|
if (pGroup && !pGroup->isRaidGroup() && m_AllySet.size() == (pGroup->GetMembersCount() + 2))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_AllySet.clear();
|
m_AllySet.clear();
|
||||||
m_AllySet.insert(m_creature->GetGUID());
|
m_AllySet.insert(m_creature->GetObjectGuid());
|
||||||
if(pGroup) //add group
|
if (pGroup) //add group
|
||||||
{
|
{
|
||||||
for(GroupReference *itr = pGroup->GetFirstMember(); itr != NULL; itr = itr->next())
|
for (GroupReference *itr = pGroup->GetFirstMember(); itr != NULL; itr = itr->next())
|
||||||
{
|
{
|
||||||
Player* Target = itr->getSource();
|
Player* Target = itr->getSource();
|
||||||
if(!Target || !pGroup->SameSubGroup((Player*)owner, Target))
|
if (!Target || !pGroup->SameSubGroup((Player*)owner, Target))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if(Target->GetGUID() == owner->GetGUID())
|
if (Target->GetGUID() == owner->GetGUID())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
m_AllySet.insert(Target->GetGUID());
|
m_AllySet.insert(Target->GetObjectGuid());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else //remove group
|
else //remove group
|
||||||
m_AllySet.insert(owner->GetGUID());
|
m_AllySet.insert(owner->GetObjectGuid());
|
||||||
}
|
}
|
||||||
|
|
||||||
void PetAI::AttackedBy(Unit *attacker)
|
void PetAI::AttackedBy(Unit *attacker)
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,9 @@ class MANGOS_DLL_DECL PetAI : public CreatureAI
|
||||||
|
|
||||||
TimeTracker i_tracker;
|
TimeTracker i_tracker;
|
||||||
bool inCombat;
|
bool inCombat;
|
||||||
std::set<uint64> m_AllySet;
|
|
||||||
|
typedef std::set<ObjectGuid> AllySet;
|
||||||
|
AllySet m_AllySet;
|
||||||
uint32 m_updateAlliesTimer;
|
uint32 m_updateAlliesTimer;
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "11455"
|
#define REVISION_NR "11456"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue