mirror of
https://github.com/mangosfour/server.git
synced 2025-12-15 10:37:02 +00:00
[7454] Support scripting for dummy spell effects.
Note: scripting calls specially added in end of function for allow calling only
if internal implementaion absent for dummy effect.
Signed-off-by: VladimirMangos <vladimir@getmangos.com>
This commit is contained in:
parent
bc57ab7c58
commit
f280c96770
6 changed files with 56 additions and 4 deletions
|
|
@ -274,6 +274,36 @@ InstanceData* CreateInstanceData(Map *map)
|
|||
return tmpscript->GetInstanceData(map);
|
||||
}
|
||||
|
||||
MANGOS_DLL_EXPORT
|
||||
bool EffectDummyGameObj(Unit *caster, uint32 spellId, uint32 effIndex, GameObject *gameObjTarget )
|
||||
{
|
||||
Script *tmpscript = m_scripts[gameObjTarget->GetGOInfo()->ScriptId];
|
||||
|
||||
if (!tmpscript || !tmpscript->pEffectDummyGameObj) return false;
|
||||
|
||||
return tmpscript->pEffectDummyGameObj(caster, spellId,effIndex,gameObjTarget);
|
||||
}
|
||||
|
||||
MANGOS_DLL_EXPORT
|
||||
bool EffectDummyCreature(Unit *caster, uint32 spellId, uint32 effIndex, Creature *crTarget )
|
||||
{
|
||||
Script *tmpscript = m_scripts[crTarget->GetScriptId()];
|
||||
|
||||
if (!tmpscript || !tmpscript->pEffectDummyCreature) return false;
|
||||
|
||||
return tmpscript->pEffectDummyCreature(caster, spellId,effIndex,crTarget);
|
||||
}
|
||||
|
||||
MANGOS_DLL_EXPORT
|
||||
bool EffectDummyItem(Unit *caster, uint32 spellId, uint32 effIndex, Item *itemTarget )
|
||||
{
|
||||
Script *tmpscript = m_scripts[itemTarget->GetProto()->ScriptId];
|
||||
|
||||
if (!tmpscript || !tmpscript->pEffectDummyItem) return false;
|
||||
|
||||
return tmpscript->pEffectDummyItem(caster, spellId,effIndex,itemTarget);
|
||||
}
|
||||
|
||||
void ScriptedAI::UpdateAI(const uint32)
|
||||
{
|
||||
//Check if we have a current target
|
||||
|
|
|
|||
|
|
@ -41,7 +41,8 @@ struct Script
|
|||
pGossipHello(NULL), pQuestAccept(NULL), pGossipSelect(NULL), pGossipSelectWithCode(NULL),
|
||||
pQuestSelect(NULL), pQuestComplete(NULL), pNPCDialogStatus(NULL), pGODialogStatus(NULL), pChooseReward(NULL),
|
||||
pItemHello(NULL), pGOHello(NULL), pAreaTrigger(NULL), pItemQuestAccept(NULL), pGOQuestAccept(NULL),
|
||||
pGOChooseReward(NULL), pReceiveEmote(NULL), pItemUse(NULL), GetAI(NULL)
|
||||
pGOChooseReward(NULL), pReceiveEmote(NULL), pItemUse(NULL), pEffectDummyGameObj(NULL), pEffectDummyCreature(NULL),
|
||||
pEffectDummyItem(NULL), GetAI(NULL)
|
||||
{}
|
||||
|
||||
std::string Name;
|
||||
|
|
@ -64,6 +65,9 @@ struct Script
|
|||
bool (*pGOChooseReward )(Player *player, GameObject *_GO, Quest const*_Quest, uint32 opt );
|
||||
bool (*pReceiveEmote )(Player *player, Creature *_Creature, uint32 emote );
|
||||
bool (*pItemUse )(Player *player, Item* _Item, SpellCastTargets const& targets);
|
||||
bool (*pEffectDummyGameObj )(Unit*, uint32, uint32, GameObject* );
|
||||
bool (*pEffectDummyCreature )(Unit*, uint32, uint32, Creature* );
|
||||
bool (*pEffectDummyItem )(Unit*, uint32, uint32, Item* );
|
||||
|
||||
CreatureAI* (*GetAI)(Creature *_Creature);
|
||||
InstanceData* (*GetInstanceData)(Map*);
|
||||
|
|
|
|||
|
|
@ -74,6 +74,9 @@ bool LoadScriptingModule(char const* libName)
|
|||
||!(testScript->GOQuestAccept =(scriptCallGOQuestAccept )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"GOQuestAccept" ))
|
||||
||!(testScript->ReceiveEmote =(scriptCallReceiveEmote )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"ReceiveEmote" ))
|
||||
||!(testScript->ItemUse =(scriptCallItemUse )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"ItemUse" ))
|
||||
||!(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->GetAI =(scriptCallGetAI )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"GetAI" ))
|
||||
||!(testScript->CreateInstanceData =(scriptCallCreateInstanceData )MANGOS_GET_PROC_ADDR(testScript->hScriptsLib,"CreateInstanceData" ))
|
||||
)
|
||||
|
|
|
|||
|
|
@ -56,6 +56,9 @@ typedef bool(MANGOS_IMPORT * scriptCallGOQuestAccept)(Player *player, GameObject
|
|||
typedef bool(MANGOS_IMPORT * scriptCallGOChooseReward)(Player *player, GameObject *, Quest const*, uint32 opt );
|
||||
typedef bool(MANGOS_IMPORT * scriptCallReceiveEmote) ( Player *player, Creature *_Creature, uint32 emote );
|
||||
typedef bool(MANGOS_IMPORT * scriptCallItemUse) (Player *player, Item *_Item, SpellCastTargets const& targets);
|
||||
typedef bool(MANGOS_IMPORT * scriptCallEffectDummyGameObj) (Unit *caster, uint32 spellId, uint32 effIndex, GameObject *gameObjTarget);
|
||||
typedef bool(MANGOS_IMPORT * scriptCallEffectDummyCreature) (Unit *caster, uint32 spellId, uint32 effIndex, Creature *crTarget);
|
||||
typedef bool(MANGOS_IMPORT * scriptCallEffectDummyItem) (Unit *caster, uint32 spellId, uint32 effIndex, Item *itemTarget);
|
||||
typedef CreatureAI* (MANGOS_IMPORT * scriptCallGetAI) ( Creature *_Creature );
|
||||
typedef InstanceData* (MANGOS_IMPORT * scriptCallCreateInstanceData) (Map *map);
|
||||
|
||||
|
|
@ -82,6 +85,9 @@ typedef struct
|
|||
scriptCallGOQuestAccept GOQuestAccept;
|
||||
scriptCallReceiveEmote ReceiveEmote;
|
||||
scriptCallItemUse ItemUse;
|
||||
scriptCallEffectDummyGameObj EffectDummyGameObj;
|
||||
scriptCallEffectDummyCreature EffectDummyCreature;
|
||||
scriptCallEffectDummyItem EffectDummyItem;
|
||||
scriptCallGetAI GetAI;
|
||||
scriptCallCreateInstanceData CreateInstanceData;
|
||||
|
||||
|
|
|
|||
|
|
@ -1116,7 +1116,7 @@ void Spell::EffectDummy(uint32 i)
|
|||
return;
|
||||
|
||||
unitTarget->CastSpell(unitTarget, 58419, true);
|
||||
break;
|
||||
return;
|
||||
}
|
||||
case 58420: // Portal to Stormwind
|
||||
{
|
||||
|
|
@ -1124,7 +1124,7 @@ void Spell::EffectDummy(uint32 i)
|
|||
return;
|
||||
|
||||
unitTarget->CastSpell(unitTarget, 58421, true);
|
||||
break;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1747,6 +1747,15 @@ void Spell::EffectDummy(uint32 i)
|
|||
m_caster->AddPetAura(petSpell);
|
||||
return;
|
||||
}
|
||||
|
||||
// Script based implementation. Must be used only for not good for implementation in core spell effects
|
||||
// So called only for not proccessed cases
|
||||
if(gameObjTarget)
|
||||
Script->EffectDummyGameObj(m_caster, m_spellInfo->Id, i, gameObjTarget);
|
||||
else if(unitTarget && unitTarget->GetTypeId()==TYPEID_UNIT)
|
||||
Script->EffectDummyCreature(m_caster, m_spellInfo->Id, i, (Creature*)unitTarget);
|
||||
else if(itemTarget)
|
||||
Script->EffectDummyItem(m_caster, m_spellInfo->Id, i, itemTarget);
|
||||
}
|
||||
|
||||
void Spell::EffectTriggerSpellWithValue(uint32 i)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#ifndef __REVISION_NR_H__
|
||||
#define __REVISION_NR_H__
|
||||
#define REVISION_NR "7453"
|
||||
#define REVISION_NR "7454"
|
||||
#endif // __REVISION_NR_H__
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue