summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Boeckel <MathStuf@gmail.com>2009-02-12 19:01:01 -0500
committerBen Boeckel <MathStuf@gmail.com>2009-02-12 19:01:01 -0500
commit4f4612afd67cd71ad765142a36d7a9a2adf4d255 (patch)
tree035eb2b301ba28b82cd124a544d07582894919ef
parent19a1ad995c89f1e664278c94f7405cdd065a491b (diff)
Fix Arena handling
-rw-r--r--sigencore/TeamMember.cpp50
-rw-r--r--sigencore/TeamMember.h5
2 files changed, 34 insertions, 21 deletions
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<Sigscript::StatusWrapper*> statuses = m_status.uniqueKeys();
+ // TODO
+ Team* team = qobject_cast<Team*>(this->containment());
+ QList<Sigscript::StatusWrapper*> 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()
diff --git a/sigencore/TeamMember.h b/sigencore/TeamMember.h
index 8e13a55c..1723ce93 100644
--- a/sigencore/TeamMember.h
+++ b/sigencore/TeamMember.h
@@ -139,8 +139,6 @@ class SIGENCORE_EXPORT TeamMember : public Sigscript::Config
bool setCurrentHp(const int hp);
bool changeCurrentHp(const int hp);
- void makeActive(Arena* arena);
- void leaveArena();
bool setDv(const Sigmod::Stat stat, const int dv);
bool setStatExperience(const Sigmod::Stat stat, const long long statExp);
bool giveStatExperience(const Sigmod::Stat stat, const long long statExp);
@@ -151,6 +149,8 @@ class SIGENCORE_EXPORT TeamMember : public Sigscript::Config
bool removeNature(Sigscript::NatureWrapper* nature);
virtual void writeBack();
+ virtual void makeActive(Arena* arena);
+ virtual void exitArena();
signals:
void nameChanged(const QString& newName);
@@ -188,6 +188,7 @@ class SIGENCORE_EXPORT TeamMember : public Sigscript::Config
Sigscript::SigmodWrapper* m_sigmod;
Containment* m_containment;
+ Arena* m_arena;
Sigscript::SpeciesWrapper* m_species;