summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sigencore/TeamMember.cpp38
-rw-r--r--sigencore/TeamMember.h8
-rw-r--r--sigmod/Ability.h2
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.