diff options
| author | megamage <none@none> | 2009-04-22 23:03:49 -0500 |
|---|---|---|
| committer | megamage <none@none> | 2009-04-22 23:03:49 -0500 |
| commit | f5fff5b186cffe7de4853897ba95cd8d08038d56 (patch) | |
| tree | 82147f72118f2ce6226f85e447fde701b698292e /src/bindings/scripts/include | |
| parent | 92d8abea9539402f382c7a9fc06bb7fd1e195fc4 (diff) | |
*Add a new class for event based scripts. Two examples are given.
--HG--
branch : trunk
Diffstat (limited to 'src/bindings/scripts/include')
| -rw-r--r-- | src/bindings/scripts/include/sc_creature.cpp | 45 | ||||
| -rw-r--r-- | src/bindings/scripts/include/sc_creature.h | 9 |
2 files changed, 26 insertions, 28 deletions
diff --git a/src/bindings/scripts/include/sc_creature.cpp b/src/bindings/scripts/include/sc_creature.cpp index d52e018275e..7c7e12ebe32 100644 --- a/src/bindings/scripts/include/sc_creature.cpp +++ b/src/bindings/scripts/include/sc_creature.cpp @@ -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) diff --git a/src/bindings/scripts/include/sc_creature.h b/src/bindings/scripts/include/sc_creature.h index 47850b0d417..72598a40617 100644 --- a/src/bindings/scripts/include/sc_creature.h +++ b/src/bindings/scripts/include/sc_creature.h @@ -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; }; |
