aboutsummaryrefslogtreecommitdiff
path: root/src/bindings/scripts/include
diff options
context:
space:
mode:
authormegamage <none@none>2009-04-22 23:03:49 -0500
committermegamage <none@none>2009-04-22 23:03:49 -0500
commitf5fff5b186cffe7de4853897ba95cd8d08038d56 (patch)
tree82147f72118f2ce6226f85e447fde701b698292e /src/bindings/scripts/include
parent92d8abea9539402f382c7a9fc06bb7fd1e195fc4 (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.cpp45
-rw-r--r--src/bindings/scripts/include/sc_creature.h9
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;
};