*Add a new class for event based scripts. Two examples are given.

--HG--
branch : trunk
This commit is contained in:
megamage
2009-04-22 23:03:49 -05:00
parent 92d8abea95
commit f5fff5b186
5 changed files with 253 additions and 217 deletions

View File

@@ -16,52 +16,49 @@ struct TSpellSummary {
uint8 Effects; // set of enum SelectEffect
} *SpellSummary;
void SummonList::Despawn(Creature *summon)
void SummonList::DoAction(uint32 entry, uint32 info)
{
uint64 guid = summon->GetGUID();
for(iterator i = begin(); i != end(); ++i)
for(iterator i = begin(); i != end();)
{
if(*i == guid)
{
erase(i);
return;
}
Creature *summon = Unit::GetCreature(*m_creature, *i);
++i;
if(summon && summon->IsAIEnabled)
summon->AI()->DoAction(info);
}
}
void SummonList::DespawnEntry(uint32 entry)
{
for(iterator i = begin(); i != end(); ++i)
for(iterator i = begin(); i != end();)
{
if(Creature *summon = Unit::GetCreature(*m_creature, *i))
Creature *summon = Unit::GetCreature(*m_creature, *i);
if(!summon)
erase(i++);
else if(summon->GetEntry() == entry)
{
if(summon->GetEntry() == entry)
{
summon->setDeathState(JUST_DIED);
summon->RemoveCorpse();
i = erase(i);
--i;
}
erase(i++);
summon->setDeathState(JUST_DIED);
summon->RemoveCorpse();
}
else
{
i = erase(i);
--i;
}
++i;
}
}
void SummonList::DespawnAll()
{
for(iterator i = begin(); i != end(); ++i)
while(!empty())
{
if(Creature *summon = Unit::GetCreature(*m_creature, *i))
Creature *summon = Unit::GetCreature(*m_creature, *begin());
if(!summon)
erase(begin());
else
{
erase(begin());
summon->setDeathState(JUST_DIED);
summon->RemoveCorpse();
}
}
clear();
}
void ScriptedAI::AttackStart(Unit* who, bool melee)

View File

@@ -13,14 +13,15 @@
float GetSpellMaxRangeForHostile(uint32 id);
class SummonList : std::list<uint64>
class SummonList : private std::list<uint64>
{
public:
SummonList(Creature* creature) : m_creature(creature) {}
void Summon(Creature *summon) {push_back(summon->GetGUID());}
void Despawn(Creature *summon);
explicit SummonList(Creature* creature) : m_creature(creature) {}
void Summon(Creature *summon) { push_back(summon->GetGUID()); }
void Despawn(Creature *summon) { remove(summon->GetGUID()); }
void DespawnEntry(uint32 entry);
void DespawnAll();
void DoAction(uint32 entry, uint32 info);
private:
Creature *m_creature;
};