diff options
| author | Ben Boeckel <MathStuf@gmail.com> | 2009-02-22 20:15:04 -0500 |
|---|---|---|
| committer | Ben Boeckel <MathStuf@gmail.com> | 2009-02-22 20:15:04 -0500 |
| commit | de3f4a4a015f716a3ac91d794a6e8a5fd43ae37a (patch) | |
| tree | cacd9541f4df738db834fb65026723002f11fbf2 | |
| parent | 7f7b620f2618011c1eb705fb40840acb13f59d9d (diff) | |
| download | sigen-de3f4a4a015f716a3ac91d794a6e8a5fd43ae37a.tar.gz sigen-de3f4a4a015f716a3ac91d794a6e8a5fd43ae37a.tar.xz sigen-de3f4a4a015f716a3ac91d794a6e8a5fd43ae37a.zip | |
Fixed up status script handling in TeamMember
| -rw-r--r-- | sigencore/TeamMember.cpp | 38 | ||||
| -rw-r--r-- | sigencore/TeamMember.h | 6 |
2 files changed, 36 insertions, 8 deletions
diff --git a/sigencore/TeamMember.cpp b/sigencore/TeamMember.cpp index c9bfe7e0..2fa7ad98 100644 --- a/sigencore/TeamMember.cpp +++ b/sigencore/TeamMember.cpp @@ -620,9 +620,33 @@ bool Sigencore::TeamMember::hasNature(Sigscript::NatureWrapper* nature) const bool Sigencore::TeamMember::addStatus(Sigscript::StatusWrapper* status) { - // TODO: Update scripts if (!m_status.contains(status)) { + Team* team = qobject_cast<Team*>(m_containment); + if (team) + { + ObjectMap worldObjects; + worldObjects["status"] = status; + worldObjects["owner"] = this; + worldObjects["client"] = team->player(); + worldObjects["sigmod"] = m_sigmod; + worldObjects["world"] = team->player()->world(); + Kross::Action* worldAction = runScript(QUuid::createUuid(), status->worldScript(), worldObjects, m_statusWorldScripts); + m_statusWorldScriptsMap[status] = worldAction; + worldAction->trigger(); + if (m_arena) + { + ObjectMap arenaObjects; + arenaObjects["status"] = status; + arenaObjects["owner"] = this; + arenaObjects["client"] = team->player(); + arenaObjects["sigmod"] = m_sigmod; + arenaObjects["arena"] = m_arena; + Kross::Action* battleAction = runScript(QUuid::createUuid(), status->battleScript(), arenaObjects, m_statusBattleScripts); + m_statusWorldScriptsMap[status] = battleAction; + battleAction->trigger(); + } + } m_status.append(status); emit(statusAdded(status)); return true; @@ -634,7 +658,10 @@ bool Sigencore::TeamMember::removeStatus(Sigscript::StatusWrapper* status) { if (m_status.contains(status)) { - // TODO: Update scripts + delete m_statusBattleScriptsMap[status]; + m_statusBattleScriptsMap.remove(status); + delete m_statusWorldScriptsMap[status]; + m_statusWorldScriptsMap.remove(status); m_status.removeOne(status); emit(statusRemoved(status)); return true; @@ -668,8 +695,8 @@ void Sigencore::TeamMember::makeActive(Arena* arena) objects["client"] = team->player(); objects["owner"] = this; Kross::Action* action = runScript(QUuid::createUuid().toString(), script, objects, Kross::Manager::self().actionCollection()->collection("status")); + m_statusBattleScriptsMap[status] = action; action->trigger(); - m_statusBattleScripts.append(action); } } foreach (Sigscript::AbilityWrapper* ability, m_abilities) @@ -693,9 +720,8 @@ void Sigencore::TeamMember::makeActive(Arena* arena) void Sigencore::TeamMember::exitArena() { - // TODO - qDeleteAll(m_statusBattleScripts); - m_statusBattleScripts.clear(); + qDeleteAll(m_statusBattleScriptsMap.values()); + m_statusBattleScriptsMap.clear(); qDeleteAll(m_abilityBattleScriptsMap.values()); m_abilityBattleScriptsMap.clear(); for (int i = Sigmod::ST_Attack; i <= Sigmod::ST_Evasion; ++i) diff --git a/sigencore/TeamMember.h b/sigencore/TeamMember.h index bee3dd17..b0088873 100644 --- a/sigencore/TeamMember.h +++ b/sigencore/TeamMember.h @@ -225,11 +225,13 @@ class SIGENCORE_EXPORT TeamMember : public Sigscript::Config Kross::ActionCollection* m_abilityBattleScripts; Kross::ActionCollection* m_abilityWorldScripts; - QList<Kross::Action*> m_statusBattleScripts; - QList<Kross::Action*> m_statusWorldScripts; + Kross::ActionCollection* m_statusBattleScripts; + Kross::ActionCollection* m_statusWorldScripts; QMap<Sigscript::AbilityWrapper*, Kross::Action*> m_abilityBattleScriptsMap; QMap<Sigscript::AbilityWrapper*, Kross::Action*> m_abilityWorldScriptsMap; + QMap<Sigscript::StatusWrapper*, Kross::Action*> m_statusBattleScriptsMap; + QMap<Sigscript::StatusWrapper*, Kross::Action*> m_statusWorldScriptsMap; typedef QPair<Sigmod::Species::Style, int> StyleLevel; static QMap<StyleLevel, long long> m_expCache; |
