Remove return value from OnDummyEffect to fix bug in spell procs - thanks to Vincent

This commit is contained in:
Rochet2
2020-02-03 00:10:08 +02:00
parent 32f7351d30
commit 570a45b703
6 changed files with 51 additions and 43 deletions

View File

@@ -33,14 +33,14 @@ using namespace Hooks;
return RETVAL;\ return RETVAL;\
LOCK_ELUNA LOCK_ELUNA
bool Eluna::OnDummyEffect(WorldObject* pCaster, uint32 spellId, SpellEffIndex effIndex, Creature* pTarget) void Eluna::OnDummyEffect(WorldObject* pCaster, uint32 spellId, SpellEffIndex effIndex, Creature* pTarget)
{ {
START_HOOK_WITH_RETVAL(CREATURE_EVENT_ON_DUMMY_EFFECT, pTarget, false); START_HOOK(CREATURE_EVENT_ON_DUMMY_EFFECT, pTarget);
Push(pCaster); Push(pCaster);
Push(spellId); Push(spellId);
Push(effIndex); Push(effIndex);
Push(pTarget); Push(pTarget);
return CallAllFunctionsBool(CreatureEventBindings, CreatureUniqueBindings, entry_key, unique_key); CallAllFunctions(CreatureEventBindings, CreatureUniqueBindings, entry_key, unique_key);
} }
bool Eluna::OnQuestAccept(Player* pPlayer, Creature* pCreature, Quest const* pQuest) bool Eluna::OnQuestAccept(Player* pPlayer, Creature* pCreature, Quest const* pQuest)

View File

@@ -30,14 +30,14 @@ using namespace Hooks;
return RETVAL;\ return RETVAL;\
LOCK_ELUNA LOCK_ELUNA
bool Eluna::OnDummyEffect(WorldObject* pCaster, uint32 spellId, SpellEffIndex effIndex, GameObject* pTarget) void Eluna::OnDummyEffect(WorldObject* pCaster, uint32 spellId, SpellEffIndex effIndex, GameObject* pTarget)
{ {
START_HOOK_WITH_RETVAL(GAMEOBJECT_EVENT_ON_DUMMY_EFFECT, pTarget->GetEntry(), false); START_HOOK(GAMEOBJECT_EVENT_ON_DUMMY_EFFECT, pTarget->GetEntry());
Push(pCaster); Push(pCaster);
Push(spellId); Push(spellId);
Push(effIndex); Push(effIndex);
Push(pTarget); Push(pTarget);
return CallAllFunctionsBool(GameObjectEventBindings, key); CallAllFunctions(GameObjectEventBindings, key);
} }
void Eluna::UpdateAI(GameObject* pGameObject, uint32 diff) void Eluna::UpdateAI(GameObject* pGameObject, uint32 diff)

View File

@@ -881,7 +881,7 @@ namespace LuaGlobalFunctions
* <pre> * <pre>
* enum ItemEvents * enum ItemEvents
* { * {
* ITEM_EVENT_ON_DUMMY_EFFECT = 1, // (event, caster, spellid, effindex, item) - Can return true * ITEM_EVENT_ON_DUMMY_EFFECT = 1, // (event, caster, spellid, effindex, item)
* ITEM_EVENT_ON_USE = 2, // (event, player, item, target) - Can return false to stop the spell casting * ITEM_EVENT_ON_USE = 2, // (event, player, item, target) - Can return false to stop the spell casting
* ITEM_EVENT_ON_QUEST_ACCEPT = 3, // (event, player, item, quest) - Can return true * ITEM_EVENT_ON_QUEST_ACCEPT = 3, // (event, player, item, quest) - Can return true
* ITEM_EVENT_ON_EXPIRE = 4, // (event, player, itemid) - Can return true * ITEM_EVENT_ON_EXPIRE = 4, // (event, player, itemid) - Can return true
@@ -1050,7 +1050,7 @@ namespace LuaGlobalFunctions
* CREATURE_EVENT_ON_MOVE_IN_LOS = 27, // (event, creature, unit) - Can return true to stop normal action. Does not actually check LOS, just uses the sight range * CREATURE_EVENT_ON_MOVE_IN_LOS = 27, // (event, creature, unit) - Can return true to stop normal action. Does not actually check LOS, just uses the sight range
* // UNUSED = 28, // (event, creature) * // UNUSED = 28, // (event, creature)
* // UNUSED = 29, // (event, creature) * // UNUSED = 29, // (event, creature)
* CREATURE_EVENT_ON_DUMMY_EFFECT = 30, // (event, caster, spellid, effindex, creature) - Can return true * CREATURE_EVENT_ON_DUMMY_EFFECT = 30, // (event, caster, spellid, effindex, creature)
* CREATURE_EVENT_ON_QUEST_ACCEPT = 31, // (event, player, creature, quest) - Can return true * CREATURE_EVENT_ON_QUEST_ACCEPT = 31, // (event, player, creature, quest) - Can return true
* // UNUSED = 32, // (event, creature) * // UNUSED = 32, // (event, creature)
* // UNUSED = 33, // (event, creature) * // UNUSED = 33, // (event, creature)
@@ -1083,40 +1083,40 @@ namespace LuaGlobalFunctions
* <pre> * <pre>
* enum CreatureEvents * enum CreatureEvents
* { * {
* CREATURE_EVENT_ON_ENTER_COMBAT = 1, // (event, creature, target) * CREATURE_EVENT_ON_ENTER_COMBAT = 1, // (event, creature, target) - Can return true to stop normal action
* CREATURE_EVENT_ON_LEAVE_COMBAT = 2, // (event, creature) * CREATURE_EVENT_ON_LEAVE_COMBAT = 2, // (event, creature) - Can return true to stop normal action
* CREATURE_EVENT_ON_TARGET_DIED = 3, // (event, creature, victim) * CREATURE_EVENT_ON_TARGET_DIED = 3, // (event, creature, victim) - Can return true to stop normal action
* CREATURE_EVENT_ON_DIED = 4, // (event, creature, killer) * CREATURE_EVENT_ON_DIED = 4, // (event, creature, killer) - Can return true to stop normal action
* CREATURE_EVENT_ON_SPAWN = 5, // (event, creature) * CREATURE_EVENT_ON_SPAWN = 5, // (event, creature) - Can return true to stop normal action
* CREATURE_EVENT_ON_REACH_WP = 6, // (event, creature, type, id) * CREATURE_EVENT_ON_REACH_WP = 6, // (event, creature, type, id) - Can return true to stop normal action
* CREATURE_EVENT_ON_AIUPDATE = 7, // (event, creature, diff) * CREATURE_EVENT_ON_AIUPDATE = 7, // (event, creature, diff) - Can return true to stop normal action
* CREATURE_EVENT_ON_RECEIVE_EMOTE = 8, // (event, creature, player, emoteid) * CREATURE_EVENT_ON_RECEIVE_EMOTE = 8, // (event, creature, player, emoteid) - Can return true to stop normal action
* CREATURE_EVENT_ON_DAMAGE_TAKEN = 9, // (event, creature, attacker, damage) - Can return new damage * CREATURE_EVENT_ON_DAMAGE_TAKEN = 9, // (event, creature, attacker, damage) - Can return new damage
* CREATURE_EVENT_ON_PRE_COMBAT = 10, // (event, creature, target) * CREATURE_EVENT_ON_PRE_COMBAT = 10, // (event, creature, target) - Can return true to stop normal action
* CREATURE_EVENT_ON_ATTACKED_AT = 11, // (event, creature, attacker) * // UNUSED
* CREATURE_EVENT_ON_OWNER_ATTACKED = 12, // (event, creature, target) // Not on mangos * CREATURE_EVENT_ON_OWNER_ATTACKED = 12, // (event, creature, target) - Can return true to stop normal action // Not on mangos
* CREATURE_EVENT_ON_OWNER_ATTACKED_AT = 13, // (event, creature, attacker) // Not on mangos * CREATURE_EVENT_ON_OWNER_ATTACKED_AT = 13, // (event, creature, attacker) - Can return true to stop normal action // Not on mangos
* CREATURE_EVENT_ON_HIT_BY_SPELL = 14, // (event, creature, caster, spellid) * CREATURE_EVENT_ON_HIT_BY_SPELL = 14, // (event, creature, caster, spellid) - Can return true to stop normal action
* CREATURE_EVENT_ON_SPELL_HIT_TARGET = 15, // (event, creature, target, spellid) * CREATURE_EVENT_ON_SPELL_HIT_TARGET = 15, // (event, creature, target, spellid) - Can return true to stop normal action
* // UNUSED = 16, // (event, creature) * // UNUSED = 16, // (event, creature)
* // UNUSED = 17, // (event, creature) * // UNUSED = 17, // (event, creature)
* // UNUSED = 18, // (event, creature) * // UNUSED = 18, // (event, creature)
* CREATURE_EVENT_ON_JUST_SUMMONED_CREATURE = 19, // (event, creature, summon) * CREATURE_EVENT_ON_JUST_SUMMONED_CREATURE = 19, // (event, creature, summon) - Can return true to stop normal action
* CREATURE_EVENT_ON_SUMMONED_CREATURE_DESPAWN = 20, // (event, creature, summon) * CREATURE_EVENT_ON_SUMMONED_CREATURE_DESPAWN = 20, // (event, creature, summon) - Can return true to stop normal action
* CREATURE_EVENT_ON_SUMMONED_CREATURE_DIED = 21, // (event, creature, summon, killer) // Not on mangos * CREATURE_EVENT_ON_SUMMONED_CREATURE_DIED = 21, // (event, creature, summon, killer) - Can return true to stop normal action // Not on mangos
* CREATURE_EVENT_ON_SUMMONED = 22, // (event, creature, summoner) * CREATURE_EVENT_ON_SUMMONED = 22, // (event, creature, summoner) - Can return true to stop normal action
* CREATURE_EVENT_ON_RESET = 23, // (event, creature) * CREATURE_EVENT_ON_RESET = 23, // (event, creature)
* CREATURE_EVENT_ON_REACH_HOME = 24, // (event, creature) * CREATURE_EVENT_ON_REACH_HOME = 24, // (event, creature) - Can return true to stop normal action
* // UNUSED = 25, // (event, creature) * // UNUSED = 25, // (event, creature)
* CREATURE_EVENT_ON_CORPSE_REMOVED = 26, // (event, creature, respawndelay) - Can return new respawndelay * CREATURE_EVENT_ON_CORPSE_REMOVED = 26, // (event, creature, respawndelay) - Can return true, newRespawnDelay
* CREATURE_EVENT_ON_MOVE_IN_LOS = 27, // (event, creature, unit) - Does not actually check LOS. Just uses the sight range * CREATURE_EVENT_ON_MOVE_IN_LOS = 27, // (event, creature, unit) - Can return true to stop normal action. Does not actually check LOS, just uses the sight range
* // UNUSED = 28, // (event, creature) * // UNUSED = 28, // (event, creature)
* // UNUSED = 29, // (event, creature) * // UNUSED = 29, // (event, creature)
* CREATURE_EVENT_ON_DUMMY_EFFECT = 30, // (event, caster, spellid, effindex, creature) * CREATURE_EVENT_ON_DUMMY_EFFECT = 30, // (event, caster, spellid, effindex, creature)
* CREATURE_EVENT_ON_QUEST_ACCEPT = 31, // (event, player, creature, quest) * CREATURE_EVENT_ON_QUEST_ACCEPT = 31, // (event, player, creature, quest) - Can return true
* // UNUSED = 32, // (event, creature) * // UNUSED = 32, // (event, creature)
* // UNUSED = 33, // (event, creature) * // UNUSED = 33, // (event, creature)
* CREATURE_EVENT_ON_QUEST_REWARD = 34, // (event, player, creature, quest, opt) * CREATURE_EVENT_ON_QUEST_REWARD = 34, // (event, player, creature, quest, opt) - Can return true
* CREATURE_EVENT_ON_DIALOG_STATUS = 35, // (event, player, creature) * CREATURE_EVENT_ON_DIALOG_STATUS = 35, // (event, player, creature)
* CREATURE_EVENT_ON_ADD = 36, // (event, creature) * CREATURE_EVENT_ON_ADD = 36, // (event, creature)
* CREATURE_EVENT_ON_REMOVE = 37, // (event, creature) * CREATURE_EVENT_ON_REMOVE = 37, // (event, creature)
@@ -1148,12 +1148,12 @@ namespace LuaGlobalFunctions
* { * {
* GAMEOBJECT_EVENT_ON_AIUPDATE = 1, // (event, go, diff) * GAMEOBJECT_EVENT_ON_AIUPDATE = 1, // (event, go, diff)
* GAMEOBJECT_EVENT_ON_SPAWN = 2, // (event, go) * GAMEOBJECT_EVENT_ON_SPAWN = 2, // (event, go)
* GAMEOBJECT_EVENT_ON_DUMMY_EFFECT = 3, // (event, caster, spellid, effindex, go) - Can return true * GAMEOBJECT_EVENT_ON_DUMMY_EFFECT = 3, // (event, caster, spellid, effindex, go)
* GAMEOBJECT_EVENT_ON_QUEST_ACCEPT = 4, // (event, player, go, quest) - Can return true * GAMEOBJECT_EVENT_ON_QUEST_ACCEPT = 4, // (event, player, go, quest) - Can return true
* GAMEOBJECT_EVENT_ON_QUEST_REWARD = 5, // (event, player, go, quest, opt) - Can return true * GAMEOBJECT_EVENT_ON_QUEST_REWARD = 5, // (event, player, go, quest, opt) - Can return true
* GAMEOBJECT_EVENT_ON_DIALOG_STATUS = 6, // (event, player, go) * GAMEOBJECT_EVENT_ON_DIALOG_STATUS = 6, // (event, player, go)
* GAMEOBJECT_EVENT_ON_DESTROYED = 7, // (event, go, player) * GAMEOBJECT_EVENT_ON_DESTROYED = 7, // (event, go, attacker)
* GAMEOBJECT_EVENT_ON_DAMAGED = 8, // (event, go, player) * GAMEOBJECT_EVENT_ON_DAMAGED = 8, // (event, go, attacker)
* GAMEOBJECT_EVENT_ON_LOOT_STATE_CHANGE = 9, // (event, go, state) * GAMEOBJECT_EVENT_ON_LOOT_STATE_CHANGE = 9, // (event, go, state)
* GAMEOBJECT_EVENT_ON_GO_STATE_CHANGED = 10, // (event, go, state) * GAMEOBJECT_EVENT_ON_GO_STATE_CHANGED = 10, // (event, go, state)
* // UNUSED = 11, // (event, gameobject) * // UNUSED = 11, // (event, gameobject)

View File

@@ -282,7 +282,7 @@ namespace Hooks
CREATURE_EVENT_ON_MOVE_IN_LOS = 27, // (event, creature, unit) - Can return true to stop normal action. Does not actually check LOS, just uses the sight range CREATURE_EVENT_ON_MOVE_IN_LOS = 27, // (event, creature, unit) - Can return true to stop normal action. Does not actually check LOS, just uses the sight range
// UNUSED = 28, // (event, creature) // UNUSED = 28, // (event, creature)
// UNUSED = 29, // (event, creature) // UNUSED = 29, // (event, creature)
CREATURE_EVENT_ON_DUMMY_EFFECT = 30, // (event, caster, spellid, effindex, creature) - Can return true CREATURE_EVENT_ON_DUMMY_EFFECT = 30, // (event, caster, spellid, effindex, creature)
CREATURE_EVENT_ON_QUEST_ACCEPT = 31, // (event, player, creature, quest) - Can return true CREATURE_EVENT_ON_QUEST_ACCEPT = 31, // (event, player, creature, quest) - Can return true
// UNUSED = 32, // (event, creature) // UNUSED = 32, // (event, creature)
// UNUSED = 33, // (event, creature) // UNUSED = 33, // (event, creature)
@@ -297,7 +297,7 @@ namespace Hooks
{ {
GAMEOBJECT_EVENT_ON_AIUPDATE = 1, // (event, go, diff) GAMEOBJECT_EVENT_ON_AIUPDATE = 1, // (event, go, diff)
GAMEOBJECT_EVENT_ON_SPAWN = 2, // (event, go) GAMEOBJECT_EVENT_ON_SPAWN = 2, // (event, go)
GAMEOBJECT_EVENT_ON_DUMMY_EFFECT = 3, // (event, caster, spellid, effindex, go) - Can return true GAMEOBJECT_EVENT_ON_DUMMY_EFFECT = 3, // (event, caster, spellid, effindex, go)
GAMEOBJECT_EVENT_ON_QUEST_ACCEPT = 4, // (event, player, go, quest) - Can return true GAMEOBJECT_EVENT_ON_QUEST_ACCEPT = 4, // (event, player, go, quest) - Can return true
GAMEOBJECT_EVENT_ON_QUEST_REWARD = 5, // (event, player, go, quest, opt) - Can return true GAMEOBJECT_EVENT_ON_QUEST_REWARD = 5, // (event, player, go, quest, opt) - Can return true
GAMEOBJECT_EVENT_ON_DIALOG_STATUS = 6, // (event, player, go) GAMEOBJECT_EVENT_ON_DIALOG_STATUS = 6, // (event, player, go)
@@ -314,7 +314,7 @@ namespace Hooks
enum ItemEvents enum ItemEvents
{ {
ITEM_EVENT_ON_DUMMY_EFFECT = 1, // (event, caster, spellid, effindex, item) - Can return true ITEM_EVENT_ON_DUMMY_EFFECT = 1, // (event, caster, spellid, effindex, item)
ITEM_EVENT_ON_USE = 2, // (event, player, item, target) - Can return false to stop the spell casting ITEM_EVENT_ON_USE = 2, // (event, player, item, target) - Can return false to stop the spell casting
ITEM_EVENT_ON_QUEST_ACCEPT = 3, // (event, player, item, quest) - Can return true ITEM_EVENT_ON_QUEST_ACCEPT = 3, // (event, player, item, quest) - Can return true
ITEM_EVENT_ON_EXPIRE = 4, // (event, player, itemid) - Can return true ITEM_EVENT_ON_EXPIRE = 4, // (event, player, itemid) - Can return true

View File

@@ -13,6 +13,14 @@
using namespace Hooks; using namespace Hooks;
#define START_HOOK(EVENT, ENTRY) \
if (!IsEnabled())\
return;\
auto key = EntryKey<ItemEvents>(EVENT, ENTRY);\
if (!ItemEventBindings->HasBindingsFor(key))\
return;\
LOCK_ELUNA
#define START_HOOK_WITH_RETVAL(EVENT, ENTRY, RETVAL) \ #define START_HOOK_WITH_RETVAL(EVENT, ENTRY, RETVAL) \
if (!IsEnabled())\ if (!IsEnabled())\
return RETVAL;\ return RETVAL;\
@@ -21,14 +29,14 @@ using namespace Hooks;
return RETVAL;\ return RETVAL;\
LOCK_ELUNA LOCK_ELUNA
bool Eluna::OnDummyEffect(WorldObject* pCaster, uint32 spellId, SpellEffIndex effIndex, Item* pTarget) void Eluna::OnDummyEffect(WorldObject* pCaster, uint32 spellId, SpellEffIndex effIndex, Item* pTarget)
{ {
START_HOOK_WITH_RETVAL(ITEM_EVENT_ON_DUMMY_EFFECT, pTarget->GetEntry(), false); START_HOOK(ITEM_EVENT_ON_DUMMY_EFFECT, pTarget->GetEntry());
Push(pCaster); Push(pCaster);
Push(spellId); Push(spellId);
Push(effIndex); Push(effIndex);
Push(pTarget); Push(pTarget);
return CallAllFunctionsBool(ItemEventBindings, key); CallAllFunctions(ItemEventBindings, key);
} }
bool Eluna::OnQuestAccept(Player* pPlayer, Item* pItem, Quest const* pQuest) bool Eluna::OnQuestAccept(Player* pPlayer, Item* pItem, Quest const* pQuest)

View File

@@ -359,7 +359,7 @@ public:
bool OnAddonMessage(Player* sender, uint32 type, std::string& msg, Player* receiver, Guild* guild, Group* group, Channel* channel); bool OnAddonMessage(Player* sender, uint32 type, std::string& msg, Player* receiver, Guild* guild, Group* group, Channel* channel);
/* Item */ /* Item */
bool OnDummyEffect(WorldObject* pCaster, uint32 spellId, SpellEffIndex effIndex, Item* pTarget); void OnDummyEffect(WorldObject* pCaster, uint32 spellId, SpellEffIndex effIndex, Item* pTarget);
bool OnQuestAccept(Player* pPlayer, Item* pItem, Quest const* pQuest); bool OnQuestAccept(Player* pPlayer, Item* pItem, Quest const* pQuest);
bool OnUse(Player* pPlayer, Item* pItem, SpellCastTargets const& targets); bool OnUse(Player* pPlayer, Item* pItem, SpellCastTargets const& targets);
bool OnItemUse(Player* pPlayer, Item* pItem, SpellCastTargets const& targets); bool OnItemUse(Player* pPlayer, Item* pItem, SpellCastTargets const& targets);
@@ -369,7 +369,7 @@ public:
void HandleGossipSelectOption(Player* pPlayer, Item* item, uint32 sender, uint32 action, const std::string& code); void HandleGossipSelectOption(Player* pPlayer, Item* item, uint32 sender, uint32 action, const std::string& code);
/* Creature */ /* Creature */
bool OnDummyEffect(WorldObject* pCaster, uint32 spellId, SpellEffIndex effIndex, Creature* pTarget); void OnDummyEffect(WorldObject* pCaster, uint32 spellId, SpellEffIndex effIndex, Creature* pTarget);
bool OnGossipHello(Player* pPlayer, Creature* pCreature); bool OnGossipHello(Player* pPlayer, Creature* pCreature);
bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 sender, uint32 action); bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 sender, uint32 action);
bool OnGossipSelectCode(Player* pPlayer, Creature* pCreature, uint32 sender, uint32 action, const char* code); bool OnGossipSelectCode(Player* pPlayer, Creature* pCreature, uint32 sender, uint32 action, const char* code);
@@ -401,7 +401,7 @@ public:
void On_Reset(Creature* me); void On_Reset(Creature* me);
/* GameObject */ /* GameObject */
bool OnDummyEffect(WorldObject* pCaster, uint32 spellId, SpellEffIndex effIndex, GameObject* pTarget); void OnDummyEffect(WorldObject* pCaster, uint32 spellId, SpellEffIndex effIndex, GameObject* pTarget);
bool OnGameObjectUse(Player* pPlayer, GameObject* pGameObject); bool OnGameObjectUse(Player* pPlayer, GameObject* pGameObject);
bool OnGossipHello(Player* pPlayer, GameObject* pGameObject); bool OnGossipHello(Player* pPlayer, GameObject* pGameObject);
bool OnGossipSelect(Player* pPlayer, GameObject* pGameObject, uint32 sender, uint32 action); bool OnGossipSelect(Player* pPlayer, GameObject* pGameObject, uint32 sender, uint32 action);