[8297] Partly revert "[8291] Now allow auto-casting pet spells out of combat by PetAI, related code cleanups."

Use less stricted limitations for pet out-of-combat autoucasts.
This commit is contained in:
VladimirMangos 2009-08-03 00:05:22 +04:00
parent 97a8114e44
commit aa56961f94
2 changed files with 32 additions and 6 deletions

View file

@ -194,8 +194,8 @@ void PetAI::UpdateAI(const uint32 diff)
} }
} }
//Autocast (casted only in combat) // Autocast (casted only in combat or persistent spells in any state)
if (inCombat && m_creature->GetGlobalCooldown() == 0 && !m_creature->IsNonMeleeSpellCasted(false)) if (m_creature->GetGlobalCooldown() == 0 && !m_creature->IsNonMeleeSpellCasted(false))
{ {
typedef std::vector<std::pair<Unit*, Spell*> > TargetSpellList; typedef std::vector<std::pair<Unit*, Spell*> > TargetSpellList;
TargetSpellList targetSpellStore; TargetSpellList targetSpellStore;
@ -211,12 +211,38 @@ void PetAI::UpdateAI(const uint32 diff)
continue; continue;
// ignore some combinations of combat state and combat/noncombat spells // ignore some combinations of combat state and combat/noncombat spells
if (!inCombat)
{
// ignore attacking spells, and allow only self/around spells
if (!IsPositiveSpell(spellInfo->Id))
continue;
// non combat spells allowed
// only pet spells have IsNonCombatSpell and not fit this reqs:
// Consume Shadows, Lesser Invisibility, so ignore checks for its
if (!IsNonCombatSpell(spellInfo))
{
// allow only spell without spell cost or with spell cost but not duration limit
int32 duration = GetSpellDuration(spellInfo);
if ((spellInfo->manaCost || spellInfo->ManaCostPercentage || spellInfo->manaPerSecond) && duration > 0)
continue;
// allow only spell without cooldown > duration
int32 cooldown = GetSpellRecoveryTime(spellInfo);
if (cooldown >= 0 && duration >= 0 && cooldown > duration)
continue;
}
}
else
{
// just ignore non-combat spells
if (IsNonCombatSpell(spellInfo)) if (IsNonCombatSpell(spellInfo))
continue; continue;
}
Spell *spell = new Spell(m_creature, spellInfo, false, 0); Spell *spell = new Spell(m_creature, spellInfo, false, 0);
if (!m_creature->hasUnitState(UNIT_STAT_FOLLOW) && spell->CanAutoCast(m_creature->getVictim())) if (inCombat && !m_creature->hasUnitState(UNIT_STAT_FOLLOW) && spell->CanAutoCast(m_creature->getVictim()))
{ {
targetSpellStore.push_back(std::make_pair<Unit*, Spell*>(m_creature->getVictim(), spell)); targetSpellStore.push_back(std::make_pair<Unit*, Spell*>(m_creature->getVictim(), spell));
continue; continue;

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__ #ifndef __REVISION_NR_H__
#define __REVISION_NR_H__ #define __REVISION_NR_H__
#define REVISION_NR "8296" #define REVISION_NR "8297"
#endif // __REVISION_NR_H__ #endif // __REVISION_NR_H__