diff options
-rw-r--r-- | sigencore/TeamMember.cpp | 38 | ||||
-rw-r--r-- | sigencore/TeamMember.h | 8 | ||||
-rw-r--r-- | sigmod/Ability.h | 2 |
3 files changed, 41 insertions, 7 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]); diff --git a/sigencore/TeamMember.h b/sigencore/TeamMember.h index b31785a9..bee3dd17 100644 --- a/sigencore/TeamMember.h +++ b/sigencore/TeamMember.h @@ -40,6 +40,7 @@ namespace Kross { class Action; +class ActionCollection; } namespace Sigcore { @@ -222,11 +223,14 @@ class SIGENCORE_EXPORT TeamMember : public Sigscript::Config QList<Sigscript::NatureWrapper*> m_natures; QList<Sigscript::StatusWrapper*> m_status; - QList<Kross::Action*> m_abilityBattleScripts; - QList<Kross::Action*> m_abilityWorldScripts; + Kross::ActionCollection* m_abilityBattleScripts; + Kross::ActionCollection* m_abilityWorldScripts; QList<Kross::Action*> m_statusBattleScripts; QList<Kross::Action*> m_statusWorldScripts; + QMap<Sigscript::AbilityWrapper*, Kross::Action*> m_abilityBattleScriptsMap; + QMap<Sigscript::AbilityWrapper*, Kross::Action*> m_abilityWorldScriptsMap; + typedef QPair<Sigmod::Species::Style, int> StyleLevel; static QMap<StyleLevel, long long> m_expCache; protected slots: diff --git a/sigmod/Ability.h b/sigmod/Ability.h index 52c2fa75..91cbffc2 100644 --- a/sigmod/Ability.h +++ b/sigmod/Ability.h @@ -130,6 +130,7 @@ class SIGMOD_EXPORT Ability : public Object * Set the script for the ability when in battle. This script defines the behavior of the ability when in a battle. * The following objects are available to the script: * + * - \b ability -- The \link Sigscript::AbilityWrapper ability \endlink which the script is using. * - \b owner -- The \link Sigencore::TeamMember team member \endlink which owns the instance of the ability. * - \b client -- The \link Sigencore::Client client \endlink which owns \b owner. * - \b sigmod -- The \link Sigscript::SigmodWrapper wrapper \endlink for the \link Sigmod sigmod \endlink in use. @@ -142,6 +143,7 @@ class SIGMOD_EXPORT Ability : public Object * Set the script for the ability when on the world map. This script defines the behavior of the ability when on the world map. * The following objects are available to the script: * + * - \b ability -- The \link Sigscript::AbilityWrapper ability \endlink which the script is using. * - \b owner -- The \link Sigencore::TeamMember team member \endlink which owns the instance of the ability. * - \b client -- The \link Sigencore::Client client \endlink which owns \b owner. * - \b sigmod -- The \link Sigscript::SigmodWrapper wrapper \endlink for the \link Sigmod sigmod \endlink in use. |