summaryrefslogtreecommitdiffstats
path: root/sigencore/TeamMember.cpp
diff options
context:
space:
mode:
authorBen Boeckel <MathStuf@gmail.com>2009-02-22 20:12:52 -0500
committerBen Boeckel <MathStuf@gmail.com>2009-02-22 20:12:52 -0500
commiteb793eb1649d3a83d179556dc54cd0ea4e217856 (patch)
tree8ed3692156ee80040d37e534eea5bad2e9961ef3 /sigencore/TeamMember.cpp
parent8a33071b4ad5e160e0e94a3cbc108aa11aa5fd13 (diff)
downloadsigen-eb793eb1649d3a83d179556dc54cd0ea4e217856.tar.gz
sigen-eb793eb1649d3a83d179556dc54cd0ea4e217856.tar.xz
sigen-eb793eb1649d3a83d179556dc54cd0ea4e217856.zip
Fixed Ability script handling in TeamMember
Diffstat (limited to 'sigencore/TeamMember.cpp')
-rw-r--r--sigencore/TeamMember.cpp38
1 files changed, 33 insertions, 5 deletions
diff --git a/sigencore/TeamMember.cpp b/sigencore/TeamMember.cpp
index 1007adf0..13368eb1 100644
--- a/sigencore/TeamMember.cpp
+++ b/sigencore/TeamMember.cpp
@@ -21,6 +21,7 @@
// Sigencore includes
#include "Arena.h"
#include "Containment.h"
+#include "Overworld.h"
#include "Player.h"
#include "RunScript.h"
#include "Team.h"
@@ -475,7 +476,31 @@ bool Sigencore::TeamMember::addAbility(Sigscript::AbilityWrapper* ability)
{
if ((m_abilities.size() < m_sigmod->rules()->maxAbilities()) && !m_abilities.contains(ability))
{
- // TODO: Update scripts
+ Team* team = qobject_cast<Team*>(m_containment);
+ if (team)
+ {
+ ObjectMap worldObjects;
+ worldObjects["ability"] = ability;
+ worldObjects["owner"] = this;
+ worldObjects["client"] = team->player();
+ worldObjects["sigmod"] = m_sigmod;
+ worldObjects["world"] = team->player()->world();
+ Kross::Action* worldAction = runScript(QUuid::createUuid(), ability->worldScript(), worldObjects, m_abilityWorldScripts);
+ m_abilityWorldScriptsMap[ability] = worldAction;
+ worldAction->trigger();
+ if (m_arena)
+ {
+ ObjectMap arenaObjects;
+ arenaObjects["ability"] = ability;
+ arenaObjects["owner"] = this;
+ arenaObjects["client"] = team->player();
+ arenaObjects["sigmod"] = m_sigmod;
+ arenaObjects["arena"] = m_arena;
+ Kross::Action* battleAction = runScript(QUuid::createUuid(), ability->battleScript(), arenaObjects, m_abilityBattleScripts);
+ m_abilityWorldScriptsMap[ability] = battleAction;
+ battleAction->trigger();
+ }
+ }
m_abilities.append(ability);
emit(abilityAdded(ability));
return true;
@@ -487,7 +512,10 @@ bool Sigencore::TeamMember::removeAbility(Sigscript::AbilityWrapper* ability)
{
if (m_abilities.contains(ability))
{
- // TODO: Update scripts
+ delete m_abilityBattleScriptsMap[ability];
+ m_abilityBattleScriptsMap.remove(ability);
+ delete m_abilityWorldScriptsMap[ability];
+ m_abilityWorldScriptsMap.remove(ability);
m_abilities.removeOne(ability);
emit(abilityRemoved(ability));
return true;
@@ -652,8 +680,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("ability"));
+ m_abilityBattleScriptsMap[ability] = action;
action->trigger();
- m_abilityBattleScripts.append(action);
}
}
m_arena = arena;
@@ -664,8 +692,8 @@ void Sigencore::TeamMember::exitArena()
// TODO
qDeleteAll(m_statusBattleScripts);
m_statusBattleScripts.clear();
- qDeleteAll(m_abilityBattleScripts);
- m_abilityBattleScripts.clear();
+ qDeleteAll(m_abilityBattleScriptsMap.values());
+ m_abilityBattleScriptsMap.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]);