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 /sigencore/TeamMember.cpp | |
| parent | 7f7b620f2618011c1eb705fb40840acb13f59d9d (diff) | |
| download | sigen-de3f4a4a015f716a3ac91d794a6e8a5fd43ae37a.tar.gz sigen-de3f4a4a015f716a3ac91d794a6e8a5fd43ae37a.tar.xz sigen-de3f4a4a015f716a3ac91d794a6e8a5fd43ae37a.zip | |
Fixed up status script handling in TeamMember
Diffstat (limited to 'sigencore/TeamMember.cpp')
| -rw-r--r-- | sigencore/TeamMember.cpp | 38 |
1 files changed, 32 insertions, 6 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) |
