diff --git a/src/bindings/universal/ScriptMgr.cpp b/src/bindings/universal/ScriptMgr.cpp index 99ca88a3c..ab8f5ed18 100644 --- a/src/bindings/universal/ScriptMgr.cpp +++ b/src/bindings/universal/ScriptMgr.cpp @@ -23,6 +23,7 @@ #include "../../game/Player.h" #include "../../game/Map.h" #include "../../game/ObjectMgr.h" +#include "../../game/SpellAuras.h" //uint8 loglevel = 0; int nrscripts; @@ -310,6 +311,16 @@ bool EffectDummyItem(Unit *caster, uint32 spellId, SpellEffectIndex effIndex, It return tmpscript->pEffectDummyItem(caster, spellId, effIndex, itemTarget); } +MANGOS_DLL_EXPORT +bool EffectAuraDummy(const Aura* pAura, bool apply) +{ + Script *tmpscript = m_scripts[((Creature*)pAura->GetTarget())->GetScriptId()]; + if (!tmpscript || !tmpscript->pEffectAuraDummy) + return false; + + return tmpscript->pEffectAuraDummy(pAura, apply); +} + void ScriptedAI::UpdateAI(const uint32) { //Check if we have a current target diff --git a/src/bindings/universal/ScriptMgr.h b/src/bindings/universal/ScriptMgr.h index ee9419121..c18bc5265 100644 --- a/src/bindings/universal/ScriptMgr.h +++ b/src/bindings/universal/ScriptMgr.h @@ -31,6 +31,7 @@ class Item; class GameObject; class SpellCastTargets; class Map; +class Aura; #define MAX_SCRIPTS 1000 #define MAX_INSTANCE_SCRIPTS 1000 @@ -42,7 +43,7 @@ struct Script pQuestSelect(NULL), pQuestComplete(NULL), pNPCDialogStatus(NULL), pGODialogStatus(NULL), pChooseReward(NULL), pItemHello(NULL), pGOHello(NULL), pAreaTrigger(NULL), pItemQuestAccept(NULL), pGOQuestAccept(NULL), pGOChooseReward(NULL), pItemUse(NULL), pEffectDummyGameObj(NULL), pEffectDummyCreature(NULL), - pEffectDummyItem(NULL), GetAI(NULL) + pEffectDummyItem(NULL), pEffectAuraDummy(NULL), GetAI(NULL) {} std::string Name; @@ -67,6 +68,7 @@ struct Script bool (*pEffectDummyGameObj )(Unit*, uint32, SpellEffectIndex, GameObject* ); bool (*pEffectDummyCreature )(Unit*, uint32, SpellEffectIndex, Creature* ); bool (*pEffectDummyItem )(Unit*, uint32, SpellEffectIndex, Item* ); + bool (*pEffectAuraDummy )(const Aura*, bool); CreatureAI* (*GetAI)(Creature *_Creature); InstanceData* (*GetInstanceData)(Map*); diff --git a/src/game/ScriptCalls.cpp b/src/game/ScriptCalls.cpp index 96f14ae97..0040a1617 100644 --- a/src/game/ScriptCalls.cpp +++ b/src/game/ScriptCalls.cpp @@ -76,6 +76,7 @@ bool LoadScriptingModule(char const* libName) ||!(testScript->EffectDummyGameObj =(scriptCallEffectDummyGameObj )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"EffectDummyGameObj" )) ||!(testScript->EffectDummyCreature =(scriptCallEffectDummyCreature )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"EffectDummyCreature" )) ||!(testScript->EffectDummyItem =(scriptCallEffectDummyItem )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"EffectDummyItem" )) + ||!(testScript->EffectAuraDummy =(scriptCallEffectAuraDummy )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"EffectAuraDummy" )) ||!(testScript->GetAI =(scriptCallGetAI )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"GetAI" )) ||!(testScript->CreateInstanceData =(scriptCallCreateInstanceData )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"CreateInstanceData" )) ) diff --git a/src/game/ScriptCalls.h b/src/game/ScriptCalls.h index 6a4c75298..281deb113 100644 --- a/src/game/ScriptCalls.h +++ b/src/game/ScriptCalls.h @@ -59,6 +59,7 @@ typedef bool(MANGOS_IMPORT * scriptCallItemUse) (Player *player, Item *_Item, Sp typedef bool(MANGOS_IMPORT * scriptCallEffectDummyGameObj) (Unit *caster, uint32 spellId, SpellEffectIndex effIndex, GameObject *gameObjTarget); typedef bool(MANGOS_IMPORT * scriptCallEffectDummyCreature) (Unit *caster, uint32 spellId, SpellEffectIndex effIndex, Creature *crTarget); typedef bool(MANGOS_IMPORT * scriptCallEffectDummyItem) (Unit *caster, uint32 spellId, SpellEffectIndex effIndex, Item *itemTarget); +typedef bool(MANGOS_IMPORT * scriptCallEffectAuraDummy) (const Aura* pAura, bool apply); typedef CreatureAI* (MANGOS_IMPORT * scriptCallGetAI) ( Creature *_Creature ); typedef InstanceData* (MANGOS_IMPORT * scriptCallCreateInstanceData) (Map *map); @@ -87,6 +88,7 @@ typedef struct scriptCallEffectDummyGameObj EffectDummyGameObj; scriptCallEffectDummyCreature EffectDummyCreature; scriptCallEffectDummyItem EffectDummyItem; + scriptCallEffectAuraDummy EffectAuraDummy; scriptCallGetAI GetAI; scriptCallCreateInstanceData CreateInstanceData; diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index e8164ecc0..f24ae9a60 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -2859,6 +2859,10 @@ void Aura::HandleAuraDummy(bool apply, bool Real) } } } + + // script has to "handle with care", only use where data are not ok to use in the above code. + if (m_target->GetTypeId() == TYPEID_UNIT) + Script->EffectAuraDummy(this, apply); } void Aura::HandleAuraMounted(bool apply, bool Real) diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 0a4a60534..2d8ba8a72 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "9443" + #define REVISION_NR "9444" #endif // __REVISION_NR_H__