summaryrefslogtreecommitdiffstats
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
parent7f7b620f2618011c1eb705fb40840acb13f59d9d (diff)
downloadsigen-de3f4a4a015f716a3ac91d794a6e8a5fd43ae37a.tar.gz
sigen-de3f4a4a015f716a3ac91d794a6e8a5fd43ae37a.tar.xz
sigen-de3f4a4a015f716a3ac91d794a6e8a5fd43ae37a.zip
Fixed up status script handling in TeamMember
-rw-r--r--sigencore/TeamMember.cpp38
-rw-r--r--sigencore/TeamMember.h6
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;