From 4f4612afd67cd71ad765142a36d7a9a2adf4d255 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Thu, 12 Feb 2009 19:01:01 -0500 Subject: Fix Arena handling --- sigencore/TeamMember.cpp | 50 ++++++++++++++++++++++++++++++------------------ 1 file changed, 31 insertions(+), 19 deletions(-) (limited to 'sigencore/TeamMember.cpp') diff --git a/sigencore/TeamMember.cpp b/sigencore/TeamMember.cpp index 3f093b7e..ef8538ba 100644 --- a/sigencore/TeamMember.cpp +++ b/sigencore/TeamMember.cpp @@ -532,18 +532,21 @@ void Sigencore::TeamMember::teachMove(Sigscript::MoveWrapper* move) void Sigencore::TeamMember::makeActive(Arena* arena) { - m_timer = 0; - QList statuses = m_status.uniqueKeys(); + // TODO + Team* team = qobject_cast(this->containment()); + QList statuses = m_status.keys(); foreach (Sigscript::StatusWrapper* status, statuses) { const Sigcore::Script script = status->battleScript(); if (!script.script().isEmpty()) { - Kross::Action* action = new Kross::Action(Kross::Manager::self().actionCollection()->collection("status"), QUuid::createUuid().toString()); - action->setInterpreter(script.interpreter()); - action->setCode(script.script().toUtf8()); - action->addObject(arena, "arena"); - action->addObject(this, "owner"); + ObjectMap objects; + objects["arena"] = arena; + objects["sigmod"] = m_sigmod; + if (team) + objects["client"] = team->player(); + objects["owner"] = this; + Kross::Action* action = runScript(QUuid::createUuid().toString(), script, objects, Kross::Manager::self().actionCollection()->collection("status")); action->trigger(); m_statusBattleScripts.append(action); } @@ -554,25 +557,34 @@ void Sigencore::TeamMember::makeActive(Arena* arena) const Sigcore::Script script = ability->battleScript(); if (!script.script().isEmpty()) { - Kross::Action* action = new Kross::Action(Kross::Manager::self().actionCollection()->collection("ability"), QUuid::createUuid().toString()); - action->setInterpreter(script.interpreter()); - action->setCode(script.script().toUtf8()); - action->addObject(arena, "arena"); - action->addObject(this, "owner"); + ObjectMap objects; + objects["arena"] = arena; + objects["sigmod"] = m_sigmod; + if (team) + objects["client"] = team->player(); + objects["owner"] = this; + Kross::Action* action = runScript(QUuid::createUuid().toString(), script, objects, Kross::Manager::self().actionCollection()->collection("ability")); action->trigger(); m_abilityBattleScripts.append(action); } } + m_arena = arena; } -void Sigencore::TeamMember::leaveArena() +void Sigencore::TeamMember::exitArena() { - Kross::ActionCollection* collection = Kross::Manager::self().actionCollection()->collection("status"); - foreach (Kross::Action* action, m_statusBattleScripts) - collection->removeAction(action); - collection = Kross::Manager::self().actionCollection()->collection("ability"); - foreach (Kross::Action* action, m_abilityBattleScripts) - collection->removeAction(action); + // TODO + qDeleteAll(m_statusBattleScripts); + m_statusBattleScripts.clear(); + qDeleteAll(m_abilityBattleScripts); + m_abilityBattleScripts.clear(); + for (int i = Sigmod::ST_Attack; i <= Sigmod::ST_Evasion; ++i) + { + const QString entry = QString("stat-stages-%1").arg((m_sigmod->rules()->specialSplit() ? Sigmod::StatGSCStr : Sigmod::StatRBYStr)[i]); + if (options(entry) & Temporary) + removeValue(entry, false); + } + m_arena = NULL; } void Sigencore::TeamMember::writeBack() -- cgit