summaryrefslogtreecommitdiffstats
path: root/sigencore/TeamMember.cpp
diff options
context:
space:
mode:
authorBen Boeckel <MathStuf@gmail.com>2009-02-22 20:15:04 -0500
committerBen Boeckel <MathStuf@gmail.com>2009-02-22 20:15:04 -0500
commitde3f4a4a015f716a3ac91d794a6e8a5fd43ae37a (patch)
treecacd9541f4df738db834fb65026723002f11fbf2 /sigencore/TeamMember.cpp
parent7f7b620f2618011c1eb705fb40840acb13f59d9d (diff)
downloadsigen-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.cpp38
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)