From eb793eb1649d3a83d179556dc54cd0ea4e217856 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Sun, 22 Feb 2009 20:12:52 -0500 Subject: Fixed Ability script handling in TeamMember --- sigencore/TeamMember.cpp | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) (limited to 'sigencore/TeamMember.cpp') 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(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]); -- cgit