diff --git a/src/ALE_SC.cpp b/src/ALE_SC.cpp index 18e1cab..2c60dda 100644 --- a/src/ALE_SC.cpp +++ b/src/ALE_SC.cpp @@ -1216,7 +1216,24 @@ public: sALE->OnPlayerAuraApply(unit->ToPlayer(), aura); if (unit->IsCreature()) + { sALE->OnCreatureAuraApply(unit->ToCreature(), aura); + sALE->OnAllCreatureAuraApply(unit->ToCreature(), aura); + } + } + + void OnAuraRemove(Unit* unit, AuraApplication* aurApp, AuraRemoveMode mode) override + { + if (!unit || !aurApp->GetBase()) return; + + if (unit->IsPlayer()) + sALE->OnPlayerAuraRemove(unit->ToPlayer(), aurApp->GetBase(), mode); + + if (unit->IsCreature()) + { + sALE->OnCreatureAuraRemove(unit->ToCreature(), aurApp->GetBase(), mode); + sALE->OnAllCreatureAuraRemove(unit->ToCreature(), aurApp->GetBase(), mode); + } } void OnHeal(Unit* healer, Unit* receiver, uint32& gain) override @@ -1227,7 +1244,10 @@ public: sALE->OnPlayerHeal(healer->ToPlayer(), receiver, gain); if (healer->IsCreature()) + { sALE->OnCreatureHeal(healer->ToCreature(), receiver, gain); + sALE->OnAllCreatureHeal(healer->ToCreature(), receiver, gain); + } } void OnDamage(Unit* attacker, Unit* receiver, uint32& damage) override @@ -1238,7 +1258,79 @@ public: sALE->OnPlayerDamage(attacker->ToPlayer(), receiver, damage); if (attacker->IsCreature()) + { sALE->OnCreatureDamage(attacker->ToCreature(), receiver, damage); + sALE->OnAllCreatureDamage(attacker->ToCreature(), receiver, damage); + } + } + + void ModifyPeriodicDamageAurasTick(Unit* target, Unit* attacker, uint32& damage, SpellInfo const* spellInfo) override + { + if (!target || !attacker) return; + + if (attacker->IsPlayer()) + sALE->OnPlayerModifyPeriodicDamageAurasTick(attacker->ToPlayer(), target, damage, spellInfo); + + if (attacker->IsCreature()) + { + sALE->OnCreatureModifyPeriodicDamageAurasTick(attacker->ToCreature(), target, damage, spellInfo); + sALE->OnAllCreatureModifyPeriodicDamageAurasTick(attacker->ToCreature(), target, damage, spellInfo); + } + } + + void ModifyMeleeDamage(Unit* target, Unit* attacker, uint32& damage) override + { + if (!target || !attacker) return; + + if (attacker->IsPlayer()) + sALE->OnPlayerModifyMeleeDamage(attacker->ToPlayer(), target, damage); + + if (attacker->IsCreature()) + { + sALE->OnCreatureModifyMeleeDamage(attacker->ToCreature(), target, damage); + sALE->OnAllCreatureModifyMeleeDamage(attacker->ToCreature(), target, damage); + } + } + + void ModifySpellDamageTaken(Unit* target, Unit* attacker, int32& damage, SpellInfo const* spellInfo) override + { + if (!target || !attacker) return; + + if (attacker->IsPlayer()) + sALE->OnPlayerModifySpellDamageTaken(attacker->ToPlayer(), target, damage, spellInfo); + + if (attacker->IsCreature()) + { + sALE->OnCreatureModifySpellDamageTaken(attacker->ToCreature(), target, damage, spellInfo); + sALE->OnAllCreatureModifySpellDamageTaken(attacker->ToCreature(), target, damage, spellInfo); + } + } + + void ModifyHealReceived(Unit* target, Unit* healer, uint32& heal, SpellInfo const* spellInfo) override + { + if (!target || !healer) return; + + if (healer->IsPlayer()) + sALE->OnPlayerModifyHealReceived(healer->ToPlayer(), target, heal, spellInfo); + + if (healer->IsCreature()) + { + sALE->OnCreatureModifyHealReceived(healer->ToCreature(), target, heal, spellInfo); + sALE->OnAllCreatureModifyHealReceived(healer->ToCreature(), target, heal, spellInfo); + } + } + + uint32 DealDamage(Unit* AttackerUnit, Unit* pVictim, uint32 damage, DamageEffectType damagetype) override + { + if (!AttackerUnit || !pVictim) return damage; + + if (AttackerUnit->IsPlayer()) + return sALE->OnPlayerDealDamage(AttackerUnit->ToPlayer(), pVictim, damage, damagetype); + + if (AttackerUnit->IsCreature()) + return sALE->OnCreatureDealDamage(AttackerUnit->ToCreature(), pVictim, damage, damagetype); + + return damage; } }; diff --git a/src/LuaEngine/Hooks.h b/src/LuaEngine/Hooks.h index 44272d1..f871986 100644 --- a/src/LuaEngine/Hooks.h +++ b/src/LuaEngine/Hooks.h @@ -163,74 +163,80 @@ namespace Hooks enum PlayerEvents { - PLAYER_EVENT_ON_CHARACTER_CREATE = 1, // (event, player) - PLAYER_EVENT_ON_CHARACTER_DELETE = 2, // (event, guid) - PLAYER_EVENT_ON_LOGIN = 3, // (event, player) - PLAYER_EVENT_ON_LOGOUT = 4, // (event, player) - PLAYER_EVENT_ON_SPELL_CAST = 5, // (event, player, spell, skipCheck) - PLAYER_EVENT_ON_KILL_PLAYER = 6, // (event, killer, killed) - PLAYER_EVENT_ON_KILL_CREATURE = 7, // (event, killer, killed) - PLAYER_EVENT_ON_KILLED_BY_CREATURE = 8, // (event, killer, killed) - PLAYER_EVENT_ON_DUEL_REQUEST = 9, // (event, target, challenger) - PLAYER_EVENT_ON_DUEL_START = 10, // (event, player1, player2) - PLAYER_EVENT_ON_DUEL_END = 11, // (event, winner, loser, type) - PLAYER_EVENT_ON_GIVE_XP = 12, // (event, player, amount, victim, source) - Can return new XP amount - PLAYER_EVENT_ON_LEVEL_CHANGE = 13, // (event, player, oldLevel) - PLAYER_EVENT_ON_MONEY_CHANGE = 14, // (event, player, amount) - Can return new money amount - PLAYER_EVENT_ON_REPUTATION_CHANGE = 15, // (event, player, factionId, standing, incremental) - Can return new standing -> if standing == -1, it will prevent default action (rep gain) - PLAYER_EVENT_ON_TALENTS_CHANGE = 16, // (event, player, points) - PLAYER_EVENT_ON_TALENTS_RESET = 17, // (event, player, noCost) - PLAYER_EVENT_ON_CHAT = 18, // (event, player, msg, Type, lang) - Can return false, newMessage - PLAYER_EVENT_ON_WHISPER = 19, // (event, player, msg, Type, lang, receiver) - Can return false, newMessage - PLAYER_EVENT_ON_GROUP_CHAT = 20, // (event, player, msg, Type, lang, group) - Can return false, newMessage - PLAYER_EVENT_ON_GUILD_CHAT = 21, // (event, player, msg, Type, lang, guild) - Can return false, newMessage - PLAYER_EVENT_ON_CHANNEL_CHAT = 22, // (event, player, msg, Type, lang, channel) - channel is negative for custom channels. Can return false, newMessage - PLAYER_EVENT_ON_EMOTE = 23, // (event, player, emote) - Not triggered on any known emote - PLAYER_EVENT_ON_TEXT_EMOTE = 24, // (event, player, textEmote, emoteNum, guid) - PLAYER_EVENT_ON_SAVE = 25, // (event, player) - PLAYER_EVENT_ON_BIND_TO_INSTANCE = 26, // (event, player, difficulty, mapid, permanent) - PLAYER_EVENT_ON_UPDATE_ZONE = 27, // (event, player, newZone, newArea) - PLAYER_EVENT_ON_MAP_CHANGE = 28, // (event, player) + PLAYER_EVENT_ON_CHARACTER_CREATE = 1, // (event, player) + PLAYER_EVENT_ON_CHARACTER_DELETE = 2, // (event, guid) + PLAYER_EVENT_ON_LOGIN = 3, // (event, player) + PLAYER_EVENT_ON_LOGOUT = 4, // (event, player) + PLAYER_EVENT_ON_SPELL_CAST = 5, // (event, player, spell, skipCheck) + PLAYER_EVENT_ON_KILL_PLAYER = 6, // (event, killer, killed) + PLAYER_EVENT_ON_KILL_CREATURE = 7, // (event, killer, killed) + PLAYER_EVENT_ON_KILLED_BY_CREATURE = 8, // (event, killer, killed) + PLAYER_EVENT_ON_DUEL_REQUEST = 9, // (event, target, challenger) + PLAYER_EVENT_ON_DUEL_START = 10, // (event, player1, player2) + PLAYER_EVENT_ON_DUEL_END = 11, // (event, winner, loser, type) + PLAYER_EVENT_ON_GIVE_XP = 12, // (event, player, amount, victim, source) - Can return new XP amount + PLAYER_EVENT_ON_LEVEL_CHANGE = 13, // (event, player, oldLevel) + PLAYER_EVENT_ON_MONEY_CHANGE = 14, // (event, player, amount) - Can return new money amount + PLAYER_EVENT_ON_REPUTATION_CHANGE = 15, // (event, player, factionId, standing, incremental) - Can return new standing -> if standing == -1, it will prevent default action (rep gain) + PLAYER_EVENT_ON_TALENTS_CHANGE = 16, // (event, player, points) + PLAYER_EVENT_ON_TALENTS_RESET = 17, // (event, player, noCost) + PLAYER_EVENT_ON_CHAT = 18, // (event, player, msg, Type, lang) - Can return false, newMessage + PLAYER_EVENT_ON_WHISPER = 19, // (event, player, msg, Type, lang, receiver) - Can return false, newMessage + PLAYER_EVENT_ON_GROUP_CHAT = 20, // (event, player, msg, Type, lang, group) - Can return false, newMessage + PLAYER_EVENT_ON_GUILD_CHAT = 21, // (event, player, msg, Type, lang, guild) - Can return false, newMessage + PLAYER_EVENT_ON_CHANNEL_CHAT = 22, // (event, player, msg, Type, lang, channel) - channel is negative for custom channels. Can return false, newMessage + PLAYER_EVENT_ON_EMOTE = 23, // (event, player, emote) - Not triggered on any known emote + PLAYER_EVENT_ON_TEXT_EMOTE = 24, // (event, player, textEmote, emoteNum, guid) + PLAYER_EVENT_ON_SAVE = 25, // (event, player) + PLAYER_EVENT_ON_BIND_TO_INSTANCE = 26, // (event, player, difficulty, mapid, permanent) + PLAYER_EVENT_ON_UPDATE_ZONE = 27, // (event, player, newZone, newArea) + PLAYER_EVENT_ON_MAP_CHANGE = 28, // (event, player) // Custom - PLAYER_EVENT_ON_EQUIP = 29, // (event, player, item, bag, slot) - PLAYER_EVENT_ON_FIRST_LOGIN = 30, // (event, player) - PLAYER_EVENT_ON_CAN_USE_ITEM = 31, // (event, player, itemEntry) - Can return InventoryResult enum value - PLAYER_EVENT_ON_LOOT_ITEM = 32, // (event, player, item, count) - PLAYER_EVENT_ON_ENTER_COMBAT = 33, // (event, player, enemy) - PLAYER_EVENT_ON_LEAVE_COMBAT = 34, // (event, player) - PLAYER_EVENT_ON_REPOP = 35, // (event, player) - PLAYER_EVENT_ON_RESURRECT = 36, // (event, player) - PLAYER_EVENT_ON_LOOT_MONEY = 37, // (event, player, amount) - PLAYER_EVENT_ON_QUEST_ABANDON = 38, // (event, player, questId) - PLAYER_EVENT_ON_LEARN_TALENTS = 39, // (event, player, talentId, talentRank, spellid) - // UNUSED = 40, // (event, player) - // UNUSED = 41, // (event, player) - PLAYER_EVENT_ON_COMMAND = 42, // (event, player, command, chatHandler) - player is nil if command used from console. Can return false - PLAYER_EVENT_ON_PET_ADDED_TO_WORLD = 43, // (event, player, pet) - PLAYER_EVENT_ON_LEARN_SPELL = 44, // (event, player, spellId) - PLAYER_EVENT_ON_ACHIEVEMENT_COMPLETE = 45, // (event, player, achievement) - PLAYER_EVENT_ON_FFAPVP_CHANGE = 46, // (event, player, hasFfaPvp) - PLAYER_EVENT_ON_UPDATE_AREA = 47, // (event, player, oldArea, newArea) - PLAYER_EVENT_ON_CAN_INIT_TRADE = 48, // (event, player, target) - Can return false to prevent the trade - PLAYER_EVENT_ON_CAN_SEND_MAIL = 49, // (event, player, receiverGuid, mailbox, subject, body, money, cod, item) - Can return false to prevent sending the mail - PLAYER_EVENT_ON_CAN_JOIN_LFG = 50, // (event, player, roles, dungeons, comment) - Can return false to prevent queueing - PLAYER_EVENT_ON_QUEST_REWARD_ITEM = 51, // (event, player, item, count) - PLAYER_EVENT_ON_CREATE_ITEM = 52, // (event, player, item, count) - PLAYER_EVENT_ON_STORE_NEW_ITEM = 53, // (event, player, item, count) - PLAYER_EVENT_ON_COMPLETE_QUEST = 54, // (event, player, quest) - PLAYER_EVENT_ON_CAN_GROUP_INVITE = 55, // (event, player, memberName) - Can return false to prevent inviting - PLAYER_EVENT_ON_GROUP_ROLL_REWARD_ITEM = 56, // (event, player, item, count, voteType, roll) - PLAYER_EVENT_ON_BG_DESERTION = 57, // (event, player, type) - PLAYER_EVENT_ON_PET_KILL = 58, // (event, player, killer) - PLAYER_EVENT_ON_CAN_RESURRECT = 59, // (event, player) - PLAYER_EVENT_ON_CAN_UPDATE_SKILL = 60, // (event, player, skill_id) - Can return true or false - PLAYER_EVENT_ON_BEFORE_UPDATE_SKILL = 61, // (event, player, skill_id, value, max, step) -- Can return new amount - PLAYER_EVENT_ON_UPDATE_SKILL = 62, // (event, player, skill_id, value, max, step, new_value) - PLAYER_EVENT_ON_QUEST_ACCEPT = 63, // (event, player, quest) - PLAYER_EVENT_ON_AURA_APPLY = 64, // (event, player, aura) - PLAYER_EVENT_ON_HEAL = 65, // (event, player, target, gain) - Can return new heal amount - PLAYER_EVENT_ON_DAMAGE = 66, // (event, player, target, damage) - Can return new damage amount + PLAYER_EVENT_ON_EQUIP = 29, // (event, player, item, bag, slot) + PLAYER_EVENT_ON_FIRST_LOGIN = 30, // (event, player) + PLAYER_EVENT_ON_CAN_USE_ITEM = 31, // (event, player, itemEntry) - Can return InventoryResult enum value + PLAYER_EVENT_ON_LOOT_ITEM = 32, // (event, player, item, count) + PLAYER_EVENT_ON_ENTER_COMBAT = 33, // (event, player, enemy) + PLAYER_EVENT_ON_LEAVE_COMBAT = 34, // (event, player) + PLAYER_EVENT_ON_REPOP = 35, // (event, player) + PLAYER_EVENT_ON_RESURRECT = 36, // (event, player) + PLAYER_EVENT_ON_LOOT_MONEY = 37, // (event, player, amount) + PLAYER_EVENT_ON_QUEST_ABANDON = 38, // (event, player, questId) + PLAYER_EVENT_ON_LEARN_TALENTS = 39, // (event, player, talentId, talentRank, spellid) + // UNUSED = 40, // (event, player) + // UNUSED = 41, // (event, player) + PLAYER_EVENT_ON_COMMAND = 42, // (event, player, command, chatHandler) - player is nil if command used from console. Can return false + PLAYER_EVENT_ON_PET_ADDED_TO_WORLD = 43, // (event, player, pet) + PLAYER_EVENT_ON_LEARN_SPELL = 44, // (event, player, spellId) + PLAYER_EVENT_ON_ACHIEVEMENT_COMPLETE = 45, // (event, player, achievement) + PLAYER_EVENT_ON_FFAPVP_CHANGE = 46, // (event, player, hasFfaPvp) + PLAYER_EVENT_ON_UPDATE_AREA = 47, // (event, player, oldArea, newArea) + PLAYER_EVENT_ON_CAN_INIT_TRADE = 48, // (event, player, target) - Can return false to prevent the trade + PLAYER_EVENT_ON_CAN_SEND_MAIL = 49, // (event, player, receiverGuid, mailbox, subject, body, money, cod, item) - Can return false to prevent sending the mail + PLAYER_EVENT_ON_CAN_JOIN_LFG = 50, // (event, player, roles, dungeons, comment) - Can return false to prevent queueing + PLAYER_EVENT_ON_QUEST_REWARD_ITEM = 51, // (event, player, item, count) + PLAYER_EVENT_ON_CREATE_ITEM = 52, // (event, player, item, count) + PLAYER_EVENT_ON_STORE_NEW_ITEM = 53, // (event, player, item, count) + PLAYER_EVENT_ON_COMPLETE_QUEST = 54, // (event, player, quest) + PLAYER_EVENT_ON_CAN_GROUP_INVITE = 55, // (event, player, memberName) - Can return false to prevent inviting + PLAYER_EVENT_ON_GROUP_ROLL_REWARD_ITEM = 56, // (event, player, item, count, voteType, roll) + PLAYER_EVENT_ON_BG_DESERTION = 57, // (event, player, type) + PLAYER_EVENT_ON_PET_KILL = 58, // (event, player, killer) + PLAYER_EVENT_ON_CAN_RESURRECT = 59, // (event, player) + PLAYER_EVENT_ON_CAN_UPDATE_SKILL = 60, // (event, player, skill_id) - Can return true or false + PLAYER_EVENT_ON_BEFORE_UPDATE_SKILL = 61, // (event, player, skill_id, value, max, step) -- Can return new amount + PLAYER_EVENT_ON_UPDATE_SKILL = 62, // (event, player, skill_id, value, max, step, new_value) + PLAYER_EVENT_ON_QUEST_ACCEPT = 63, // (event, player, quest) + PLAYER_EVENT_ON_AURA_APPLY = 64, // (event, player, aura) + PLAYER_EVENT_ON_HEAL = 65, // (event, player, target, gain) - Can return new heal amount + PLAYER_EVENT_ON_DAMAGE = 66, // (event, player, target, damage) - Can return new damage amount + PLAYER_EVENT_ON_AURA_REMOVE = 67, // (event, player, aura, remove_mode) + PLAYER_EVENT_ON_MODIFY_PERIODIC_DAMAGE_AURAS_TICK = 68, // (event, player, target, damage, spellInfo) - Can return new damage amount + PLAYER_EVENT_ON_MODIFY_MELEE_DAMAGE = 69, // (event, player, target, damage) - Can return new damage amount + PLAYER_EVENT_ON_MODIFY_SPELL_DAMAGE_TAKEN = 70, // (event, player, target, damage, spellInfo) - Can return new damage amount + PLAYER_EVENT_ON_MODIFY_HEAL_RECEIVED = 71, // (event, player, target, heal, spellInfo) - Can return new heal amount + PLAYER_EVENT_ON_DEAL_DAMAGE = 72, // (event, player, target, damage, damagetype) - Can return new damage amount PLAYER_EVENT_COUNT }; @@ -280,46 +286,52 @@ namespace Hooks enum CreatureEvents { - CREATURE_EVENT_ON_ENTER_COMBAT = 1, // (event, creature, target) - Can return true to stop normal action - CREATURE_EVENT_ON_LEAVE_COMBAT = 2, // (event, creature) - Can return true to stop normal action - CREATURE_EVENT_ON_TARGET_DIED = 3, // (event, creature, victim) - Can return true to stop normal action - CREATURE_EVENT_ON_DIED = 4, // (event, creature, killer) - Can return true to stop normal action - CREATURE_EVENT_ON_SPAWN = 5, // (event, creature) - Can return true to stop normal action - 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) - Can return true to stop normal action - 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 true to stop normal action, can return new damage as second return value. - CREATURE_EVENT_ON_PRE_COMBAT = 10, // (event, creature, target) - Can return true to stop normal action + CREATURE_EVENT_ON_ENTER_COMBAT = 1, // (event, creature, target) - Can return true to stop normal action + CREATURE_EVENT_ON_LEAVE_COMBAT = 2, // (event, creature) - Can return true to stop normal action + CREATURE_EVENT_ON_TARGET_DIED = 3, // (event, creature, victim) - Can return true to stop normal action + CREATURE_EVENT_ON_DIED = 4, // (event, creature, killer) - Can return true to stop normal action + CREATURE_EVENT_ON_SPAWN = 5, // (event, creature) - Can return true to stop normal action + 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) - Can return true to stop normal action + 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 true to stop normal action, can return new damage as second return value. + CREATURE_EVENT_ON_PRE_COMBAT = 10, // (event, creature, target) - Can return true to stop normal action // UNUSED - 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) - Can return true to stop normal action // Not on mangos - 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) - Can return true to stop normal action - // UNUSED = 16, // (event, creature) - // UNUSED = 17, // (event, creature) - // UNUSED = 18, // (event, creature) - 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) - Can return true to stop normal action - 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) - Can return true to stop normal action - CREATURE_EVENT_ON_RESET = 23, // (event, creature) - CREATURE_EVENT_ON_REACH_HOME = 24, // (event, creature) - Can return true to stop normal action - // UNUSED = 25, // (event, creature) - CREATURE_EVENT_ON_CORPSE_REMOVED = 26, // (event, creature, respawndelay) - Can return true to stop normal action, can return new respawndelay as second return value - 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 = 29, // (event, creature) - CREATURE_EVENT_ON_DUMMY_EFFECT = 30, // (event, caster, spellid, effindex, creature) - CREATURE_EVENT_ON_QUEST_ACCEPT = 31, // (event, player, creature, quest) - Can return true - // UNUSED = 32, // (event, creature) - // UNUSED = 33, // (event, creature) - 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_ADD = 36, // (event, creature) - CREATURE_EVENT_ON_REMOVE = 37, // (event, creature) - CREATURE_EVENT_ON_AURA_APPLY = 38, // (event, creature, aura) - CREATURE_EVENT_ON_HEAL = 39, // (event, creature, target, gain) - Can return new heal amount - CREATURE_EVENT_ON_DAMAGE = 40, // (event, creature, target, damage) - Can return new damage amount + 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) - Can return true to stop normal action // Not on mangos + 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) - Can return true to stop normal action + // UNUSED = 16, // (event, creature) + // UNUSED = 17, // (event, creature) + // UNUSED = 18, // (event, creature) + 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) - Can return true to stop normal action + 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) - Can return true to stop normal action + CREATURE_EVENT_ON_RESET = 23, // (event, creature) + CREATURE_EVENT_ON_REACH_HOME = 24, // (event, creature) - Can return true to stop normal action + // UNUSED = 25, // (event, creature) + CREATURE_EVENT_ON_CORPSE_REMOVED = 26, // (event, creature, respawndelay) - Can return true to stop normal action, can return new respawndelay as second return value + 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 = 29, // (event, creature) + CREATURE_EVENT_ON_DUMMY_EFFECT = 30, // (event, caster, spellid, effindex, creature) + CREATURE_EVENT_ON_QUEST_ACCEPT = 31, // (event, player, creature, quest) - Can return true + // UNUSED = 32, // (event, creature) + // UNUSED = 33, // (event, creature) + 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_ADD = 36, // (event, creature) + CREATURE_EVENT_ON_REMOVE = 37, // (event, creature) + CREATURE_EVENT_ON_AURA_APPLY = 38, // (event, creature, aura) + CREATURE_EVENT_ON_HEAL = 39, // (event, creature, target, gain) - Can return new heal amount + CREATURE_EVENT_ON_DAMAGE = 40, // (event, creature, target, damage) - Can return new damage amount + CREATURE_EVENT_ON_AURA_REMOVE = 41, // (event, creature, aura, remove_mode) + CREATURE_EVENT_ON_MODIFY_PERIODIC_DAMAGE_AURAS_TICK = 42, // (event, creature, target, damage, spellInfo) - Can return new damage amount + CREATURE_EVENT_ON_MODIFY_MELEE_DAMAGE = 43, // (event, creature, target, damage) - Can return new damage amount + CREATURE_EVENT_ON_MODIFY_SPELL_DAMAGE_TAKEN = 44, // (event, creature, target, damage, spellInfo) - Can return new damage amount + CREATURE_EVENT_ON_MODIFY_HEAL_RECEIVED = 45, // (event, creature, target, heal, spellInfo) - Can return new heal amount + CREATURE_EVENT_ON_DEAL_DAMAGE = 46, // (event, creature, target, damage, damagetype) - Can return new damage amount CREATURE_EVENT_COUNT }; @@ -399,10 +411,19 @@ namespace Hooks enum AllCreatureEvents { - ALL_CREATURE_EVENT_ON_ADD = 1, // (event, creature) - ALL_CREATURE_EVENT_ON_REMOVE = 2, // (event, creature) - ALL_CREATURE_EVENT_ON_SELECT_LEVEL = 3, // (event, creature_template, creature) - ALL_CREATURE_EVENT_ON_BEFORE_SELECT_LEVEL = 4, // (event, creature_template, creature, level) - Can return the new level + ALL_CREATURE_EVENT_ON_ADD = 1, // (event, creature) + ALL_CREATURE_EVENT_ON_REMOVE = 2, // (event, creature) + ALL_CREATURE_EVENT_ON_SELECT_LEVEL = 3, // (event, creature_template, creature) + ALL_CREATURE_EVENT_ON_BEFORE_SELECT_LEVEL = 4, // (event, creature_template, creature, level) - Can return the new level + ALL_CREATURE_EVENT_ON_AURA_APPLY = 5, // (event, creature, aura) + ALL_CREATURE_EVENT_ON_HEAL = 6, // (event, creature, target, gain) - Can return new heal amount + ALL_CREATURE_EVENT_ON_DAMAGE = 7, // (event, creature, target, damage) - Can return new damage amount + ALL_CREATURE_EVENT_ON_AURA_REMOVE = 8, // (event, creature, aura, remove_mode) + ALL_CREATURE_EVENT_ON_MODIFY_PERIODIC_DAMAGE_AURAS_TICK = 9, // (event, creature, target, damage, spellInfo) - Can return new damage amount + ALL_CREATURE_EVENT_ON_MODIFY_MELEE_DAMAGE = 10, // (event, creature, target, damage) - Can return new damage amount + ALL_CREATURE_EVENT_ON_MODIFY_SPELL_DAMAGE_TAKEN = 11, // (event, creature, target, damage, spellInfo) - Can return new damage amount + ALL_CREATURE_EVENT_ON_MODIFY_HEAL_RECEIVED = 12, // (event, creature, target, heal, spellInfo) - Can return new heal amount + ALL_CREATURE_EVENT_ON_DEAL_DAMAGE = 13, // (event, creature, target, damage, damagetype) - Can return new damage amount ALL_CREATURE_EVENT_COUNT }; }; diff --git a/src/LuaEngine/LuaEngine.h b/src/LuaEngine/LuaEngine.h index 46fe62c..3db6bb4 100644 --- a/src/LuaEngine/LuaEngine.h +++ b/src/LuaEngine/LuaEngine.h @@ -424,6 +424,12 @@ public: void OnCreatureAuraApply(Creature* me, Aura* aura); void OnCreatureHeal(Creature* me, Unit* target, uint32& gain); void OnCreatureDamage(Creature* me, Unit* target, uint32& gain); + void OnCreatureAuraRemove(Creature* me, Aura* aura, AuraRemoveMode mode); + void OnCreatureModifyPeriodicDamageAurasTick(Creature* me, Unit* target, uint32& damage, SpellInfo const* spellInfo); + void OnCreatureModifyMeleeDamage(Creature* me, Unit* target, uint32& damage); + void OnCreatureModifySpellDamageTaken(Creature* me, Unit* target, int32& damage, SpellInfo const* spellInfo); + void OnCreatureModifyHealReceived(Creature* me, Unit* target, uint32& heal, SpellInfo const* spellInfo); + uint32 OnCreatureDealDamage(Creature* me, Unit* pVictim, uint32 damage, DamageEffectType damagetype); /* GameObject */ void OnDummyEffect(WorldObject* pCaster, uint32 spellId, SpellEffIndex effIndex, GameObject* pTarget); @@ -498,8 +504,14 @@ public: bool CanPlayerResurrect(Player* player); void OnPlayerQuestAccept(Player* player, Quest const* quest); void OnPlayerAuraApply(Player* player, Aura* aura); + void OnPlayerAuraRemove(Player* player, Aura* aura, AuraRemoveMode mode); void OnPlayerHeal(Player* player, Unit* target, uint32& gain); - void OnPlayerDamage(Player* player, Unit* target, uint32& gain); + void OnPlayerDamage(Player* player, Unit* target, uint32& damage); + void OnPlayerModifyPeriodicDamageAurasTick(Player* player, Unit* target, uint32& damage, SpellInfo const* spellInfo); + void OnPlayerModifyMeleeDamage(Player* player, Unit* target, uint32& damage); + void OnPlayerModifySpellDamageTaken(Player* player, Unit* target, int32& damage, SpellInfo const* spellInfo); + void OnPlayerModifyHealReceived(Player* player, Unit* target, uint32& heal, SpellInfo const* spellInfo); + uint32 OnPlayerDealDamage(Player* player, Unit* pVictim, uint32 damage, DamageEffectType damagetype); /* Vehicle */ void OnInstall(Vehicle* vehicle); @@ -595,6 +607,15 @@ public: void OnAllCreatureRemoveFromWorld(Creature* creature); void OnAllCreatureSelectLevel(const CreatureTemplate* cinfo, Creature* creature); void OnAllCreatureBeforeSelectLevel(const CreatureTemplate* cinfo, Creature* creature, uint8& level); + void OnAllCreatureAuraApply(Creature* me, Aura* aura); + void OnAllCreatureHeal(Creature* me, Unit* target, uint32& gain); + void OnAllCreatureDamage(Creature* me, Unit* target, uint32& gain); + void OnAllCreatureAuraRemove(Creature* me, Aura* aura, AuraRemoveMode mode); + void OnAllCreatureModifyPeriodicDamageAurasTick(Creature* me, Unit* target, uint32& damage, SpellInfo const* spellInfo); + void OnAllCreatureModifyMeleeDamage(Creature* me, Unit* target, uint32& damage); + void OnAllCreatureModifySpellDamageTaken(Creature* me, Unit* target, int32& damage, SpellInfo const* spellInfo); + void OnAllCreatureModifyHealReceived(Creature* me, Unit* target, uint32& heal, SpellInfo const* spellInfo); + uint32 OnAllCreatureDealDamage(Creature* me, Unit* pVictim, uint32 damage, DamageEffectType damagetype); }; template<> Unit* ALE::CHECKOBJ(lua_State* L, int narg, bool error); template<> Object* ALE::CHECKOBJ(lua_State* L, int narg, bool error); diff --git a/src/LuaEngine/hooks/AllCreatureHooks.cpp b/src/LuaEngine/hooks/AllCreatureHooks.cpp index 7c58b3a..f32fe11 100644 --- a/src/LuaEngine/hooks/AllCreatureHooks.cpp +++ b/src/LuaEngine/hooks/AllCreatureHooks.cpp @@ -75,4 +75,203 @@ void ALE::OnAllCreatureBeforeSelectLevel(const CreatureTemplate* cinfo, Creature } CleanUpStack(3); -} \ No newline at end of file +} + +void ALE::OnAllCreatureAuraApply(Creature* me, Aura* aura) +{ + START_HOOK(ALL_CREATURE_EVENT_ON_AURA_APPLY); + Push(me); + Push(aura); + CallAllFunctions(AllCreatureEventBindings, key); +} + +void ALE::OnAllCreatureAuraRemove(Creature* me, Aura* aura, AuraRemoveMode mode) +{ + START_HOOK(ALL_CREATURE_EVENT_ON_AURA_REMOVE); + Push(me); + Push(aura); + Push(mode); + CallAllFunctions(AllCreatureEventBindings, key); +} + +void ALE::OnAllCreatureHeal(Creature* me, Unit* target, uint32& gain) +{ + START_HOOK(ALL_CREATURE_EVENT_ON_HEAL); + Push(me); + Push(target); + Push(gain); + + int gainIndex = lua_gettop(L); + int n = SetupStack(AllCreatureEventBindings, key, 3); + while (n > 0) + { + int r = CallOneFunction(n--, 3, 1); + if (lua_isnumber(L, r)) + { + gain = CHECKVAL(L, r); + // Update the stack for subsequent calls. + ReplaceArgument(gain, gainIndex); + } + + lua_pop(L, 1); + } + + CleanUpStack(3); +} + +void ALE::OnAllCreatureDamage(Creature* me, Unit* target, uint32& damage) +{ + START_HOOK(ALL_CREATURE_EVENT_ON_DAMAGE); + Push(me); + Push(target); + Push(damage); + + int damageIndex = lua_gettop(L); + int n = SetupStack(AllCreatureEventBindings, key, 3); + while (n > 0) + { + int r = CallOneFunction(n--, 3, 1); + if (lua_isnumber(L, r)) + { + damage = CHECKVAL(L, r); + // Update the stack for subsequent calls. + ReplaceArgument(damage, damageIndex); + } + + lua_pop(L, 1); + } + + CleanUpStack(3); +} + +void ALE::OnAllCreatureModifyPeriodicDamageAurasTick(Creature* me, Unit* target, uint32& damage, SpellInfo const* spellInfo) +{ + START_HOOK(ALL_CREATURE_EVENT_ON_MODIFY_PERIODIC_DAMAGE_AURAS_TICK); + Push(me); + Push(target); + Push(damage); + Push(spellInfo); + + int damageIndex = lua_gettop(L) - 1; + int n = SetupStack(AllCreatureEventBindings, key, 4); + while (n > 0) + { + int r = CallOneFunction(n--, 4, 1); + if (lua_isnumber(L, r)) + { + damage = CHECKVAL(L, r); + // Update the stack for subsequent calls. + ReplaceArgument(damage, damageIndex); + } + + lua_pop(L, 1); + } + + CleanUpStack(4); +} + +void ALE::OnAllCreatureModifyMeleeDamage(Creature* me, Unit* target, uint32& damage) +{ + START_HOOK(ALL_CREATURE_EVENT_ON_MODIFY_MELEE_DAMAGE); + Push(me); + Push(target); + Push(damage); + + int damageIndex = lua_gettop(L); + int n = SetupStack(AllCreatureEventBindings, key, 3); + while (n > 0) + { + int r = CallOneFunction(n--, 3, 1); + if (lua_isnumber(L, r)) + { + damage = CHECKVAL(L, r); + // Update the stack for subsequent calls. + ReplaceArgument(damage, damageIndex); + } + + lua_pop(L, 1); + } + + CleanUpStack(3); +} + +void ALE::OnAllCreatureModifySpellDamageTaken(Creature* me, Unit* target, int32& damage, SpellInfo const* spellInfo) +{ + START_HOOK(ALL_CREATURE_EVENT_ON_MODIFY_SPELL_DAMAGE_TAKEN); + Push(me); + Push(target); + Push(damage); + Push(spellInfo); + + int damageIndex = lua_gettop(L) - 1; + int n = SetupStack(AllCreatureEventBindings, key, 4); + while (n > 0) + { + int r = CallOneFunction(n--, 4, 1); + if (lua_isnumber(L, r)) + { + damage = CHECKVAL(L, r); + // Update the stack for subsequent calls. + ReplaceArgument(damage, damageIndex); + } + + lua_pop(L, 1); + } + + CleanUpStack(4); +} + +void ALE::OnAllCreatureModifyHealReceived(Creature* me, Unit* target, uint32& heal, SpellInfo const* spellInfo) +{ + START_HOOK(ALL_CREATURE_EVENT_ON_MODIFY_HEAL_RECEIVED); + Push(me); + Push(target); + Push(heal); + Push(spellInfo); + + int healIndex = lua_gettop(L) - 1; + int n = SetupStack(AllCreatureEventBindings, key, 4); + while (n > 0) + { + int r = CallOneFunction(n--, 4, 1); + if (lua_isnumber(L, r)) + { + heal = CHECKVAL(L, r); + // Update the stack for subsequent calls. + ReplaceArgument(heal, healIndex); + } + + lua_pop(L, 1); + } + + CleanUpStack(4); +} + +uint32 ALE::OnAllCreatureDealDamage(Creature* me, Unit* target, uint32 damage, DamageEffectType damagetype) +{ + START_HOOK_WITH_RETVAL(ALL_CREATURE_EVENT_ON_DEAL_DAMAGE, damage); + uint32 result = damage; + Push(me); + Push(target); + Push(damage); + Push(damagetype); + int damageIndex = lua_gettop(L) - 1; + int n = SetupStack(AllCreatureEventBindings, key, 4); + + while (n > 0) + { + int r = CallOneFunction(n--, 4, 1); + + if (lua_isnumber(L, r)) + { + result = CHECKVAL(L, r); + // Update the stack for subsequent calls. + ReplaceArgument(result, damageIndex); + } + + lua_pop(L, 1); + } + + CleanUpStack(4); + return result; +} diff --git a/src/LuaEngine/hooks/CreatureHooks.cpp b/src/LuaEngine/hooks/CreatureHooks.cpp index 5a0248b..9fca834 100644 --- a/src/LuaEngine/hooks/CreatureHooks.cpp +++ b/src/LuaEngine/hooks/CreatureHooks.cpp @@ -336,6 +336,15 @@ void ALE::OnCreatureAuraApply(Creature* me, Aura* aura) CallAllFunctions(CreatureEventBindings, CreatureUniqueBindings, entry_key, unique_key); } +void ALE::OnCreatureAuraRemove(Creature* me, Aura* aura, AuraRemoveMode mode) +{ + START_HOOK(CREATURE_EVENT_ON_AURA_REMOVE, me); + Push(me); + Push(aura); + Push(mode); + CallAllFunctions(CreatureEventBindings, CreatureUniqueBindings, entry_key, unique_key); +} + void ALE::OnCreatureHeal(Creature* me, Unit* target, uint32& gain) { START_HOOK(CREATURE_EVENT_ON_HEAL, me); @@ -384,4 +393,136 @@ void ALE::OnCreatureDamage(Creature* me, Unit* target, uint32& damage) } CleanUpStack(3); -} \ No newline at end of file +} + +void ALE::OnCreatureModifyPeriodicDamageAurasTick(Creature* me, Unit* target, uint32& damage, SpellInfo const* spellInfo) +{ + START_HOOK(CREATURE_EVENT_ON_MODIFY_PERIODIC_DAMAGE_AURAS_TICK, me); + Push(me); + Push(target); + Push(damage); + Push(spellInfo); + + int damageIndex = lua_gettop(L) - 1; + int n = SetupStack(CreatureEventBindings, CreatureUniqueBindings, entry_key, unique_key, 4); + while (n > 0) + { + int r = CallOneFunction(n--, 4, 1); + if (lua_isnumber(L, r)) + { + damage = CHECKVAL(L, r); + // Update the stack for subsequent calls. + ReplaceArgument(damage, damageIndex); + } + + lua_pop(L, 1); + } + + CleanUpStack(4); +} + +void ALE::OnCreatureModifyMeleeDamage(Creature* me, Unit* target, uint32& damage) +{ + START_HOOK(CREATURE_EVENT_ON_MODIFY_MELEE_DAMAGE, me); + Push(me); + Push(target); + Push(damage); + + int damageIndex = lua_gettop(L); + int n = SetupStack(CreatureEventBindings, CreatureUniqueBindings, entry_key, unique_key, 3); + while (n > 0) + { + int r = CallOneFunction(n--, 3, 1); + if (lua_isnumber(L, r)) + { + damage = CHECKVAL(L, r); + // Update the stack for subsequent calls. + ReplaceArgument(damage, damageIndex); + } + + lua_pop(L, 1); + } + + CleanUpStack(3); +} + +void ALE::OnCreatureModifySpellDamageTaken(Creature* me, Unit* target, int32& damage, SpellInfo const* spellInfo) +{ + START_HOOK(CREATURE_EVENT_ON_MODIFY_SPELL_DAMAGE_TAKEN, me); + Push(me); + Push(target); + Push(damage); + Push(spellInfo); + + int damageIndex = lua_gettop(L) - 1; + int n = SetupStack(CreatureEventBindings, CreatureUniqueBindings, entry_key, unique_key, 4); + while (n > 0) + { + int r = CallOneFunction(n--, 4, 1); + if (lua_isnumber(L, r)) + { + damage = CHECKVAL(L, r); + // Update the stack for subsequent calls. + ReplaceArgument(damage, damageIndex); + } + + lua_pop(L, 1); + } + + CleanUpStack(4); +} + +void ALE::OnCreatureModifyHealReceived(Creature* me, Unit* target, uint32& heal, SpellInfo const* spellInfo) +{ + START_HOOK(CREATURE_EVENT_ON_MODIFY_HEAL_RECEIVED, me); + Push(me); + Push(target); + Push(heal); + Push(spellInfo); + + int healIndex = lua_gettop(L) - 1; + int n = SetupStack(CreatureEventBindings, CreatureUniqueBindings, entry_key, unique_key, 4); + while (n > 0) + { + int r = CallOneFunction(n--, 4, 1); + if (lua_isnumber(L, r)) + { + heal = CHECKVAL(L, r); + // Update the stack for subsequent calls. + ReplaceArgument(heal, healIndex); + } + + lua_pop(L, 1); + } + + CleanUpStack(4); +} + +uint32 ALE::OnCreatureDealDamage(Creature* me, Unit* target, uint32 damage, DamageEffectType damagetype) +{ + START_HOOK_WITH_RETVAL(CREATURE_EVENT_ON_DEAL_DAMAGE, me, damage); + uint32 result = damage; + Push(me); + Push(target); + Push(damage); + Push(damagetype); + int damageIndex = lua_gettop(L) - 1; + int n = SetupStack(CreatureEventBindings, CreatureUniqueBindings, entry_key, unique_key, 4); + + while (n > 0) + { + int r = CallOneFunction(n--, 4, 1); + + if (lua_isnumber(L, r)) + { + result = CHECKVAL(L, r); + // Update the stack for subsequent calls. + ReplaceArgument(result, damageIndex); + } + + lua_pop(L, 1); + } + + CleanUpStack(4); + return result; +} diff --git a/src/LuaEngine/hooks/PlayerHooks.cpp b/src/LuaEngine/hooks/PlayerHooks.cpp index 6bfb5cf..5ad27f8 100644 --- a/src/LuaEngine/hooks/PlayerHooks.cpp +++ b/src/LuaEngine/hooks/PlayerHooks.cpp @@ -826,3 +826,144 @@ void ALE::OnPlayerDamage(Player* player, Unit* target, uint32& damage) CleanUpStack(3); } + +void ALE::OnPlayerAuraRemove(Player* player, Aura* aura, AuraRemoveMode mode) +{ + START_HOOK(PLAYER_EVENT_ON_AURA_REMOVE); + Push(player); + Push(aura); + Push(mode); + CallAllFunctions(PlayerEventBindings, key); +} + +void ALE::OnPlayerModifyPeriodicDamageAurasTick(Player* player, Unit* target, uint32& damage, SpellInfo const* spellInfo) +{ + START_HOOK(PLAYER_EVENT_ON_MODIFY_PERIODIC_DAMAGE_AURAS_TICK); + Push(player); + Push(target); + Push(damage); + Push(spellInfo); + + int damageIndex = lua_gettop(L) - 1; + int n = SetupStack(PlayerEventBindings, key, 4); + while (n > 0) + { + int r = CallOneFunction(n--, 4, 1); + if (lua_isnumber(L, r)) + { + damage = CHECKVAL(L, r); + // Update the stack for subsequent calls. + ReplaceArgument(damage, damageIndex); + } + + lua_pop(L, 1); + } + + CleanUpStack(4); +} + +void ALE::OnPlayerModifyMeleeDamage(Player* player, Unit* target, uint32& damage) +{ + START_HOOK(PLAYER_EVENT_ON_MODIFY_MELEE_DAMAGE); + Push(player); + Push(target); + Push(damage); + + int damageIndex = lua_gettop(L); + int n = SetupStack(PlayerEventBindings, key, 3); + while (n > 0) + { + int r = CallOneFunction(n--, 3, 1); + if (lua_isnumber(L, r)) + { + damage = CHECKVAL(L, r); + // Update the stack for subsequent calls. + ReplaceArgument(damage, damageIndex); + } + + lua_pop(L, 1); + } + + CleanUpStack(3); +} + +void ALE::OnPlayerModifySpellDamageTaken(Player* player, Unit* target, int32& damage, SpellInfo const* spellInfo) +{ + START_HOOK(PLAYER_EVENT_ON_MODIFY_SPELL_DAMAGE_TAKEN); + Push(player); + Push(target); + Push(damage); + Push(spellInfo); + + int damageIndex = lua_gettop(L) - 1; + int n = SetupStack(PlayerEventBindings, key, 4); + while (n > 0) + { + int r = CallOneFunction(n--, 4, 1); + if (lua_isnumber(L, r)) + { + damage = CHECKVAL(L, r); + // Update the stack for subsequent calls. + ReplaceArgument(damage, damageIndex); + } + + lua_pop(L, 1); + } + + CleanUpStack(4); +} + +void ALE::OnPlayerModifyHealReceived(Player* player, Unit* target, uint32& heal, SpellInfo const* spellInfo) +{ + START_HOOK(PLAYER_EVENT_ON_MODIFY_HEAL_RECEIVED); + Push(player); + Push(target); + Push(heal); + Push(spellInfo); + + int healIndex = lua_gettop(L) - 1; + int n = SetupStack(PlayerEventBindings, key, 4); + while (n > 0) + { + int r = CallOneFunction(n--, 4, 1); + if (lua_isnumber(L, r)) + { + heal = CHECKVAL(L, r); + // Update the stack for subsequent calls. + ReplaceArgument(heal, healIndex); + } + + lua_pop(L, 1); + } + + CleanUpStack(4); +} + +uint32 ALE::OnPlayerDealDamage(Player* player, Unit* target, uint32 damage, DamageEffectType damagetype) +{ + START_HOOK_WITH_RETVAL(PLAYER_EVENT_ON_DEAL_DAMAGE, damage); + Push(player); + Push(target); + Push(damage); + Push(damagetype); + int damageIndex = lua_gettop(L) - 1; + int n = SetupStack(PlayerEventBindings, key, 4); + + uint32 result = damage; + while (n > 0) + { + int r = CallOneFunction(n--, 4, 1); + + if (lua_isnumber(L, r)) + { + result = CHECKVAL(L, r); + // Update the stack for subsequent calls. + ReplaceArgument(result, damageIndex); + } + + lua_pop(L, 1); + } + + CleanUpStack(4); + return result; +} diff --git a/src/LuaEngine/methods/GlobalMethods.h b/src/LuaEngine/methods/GlobalMethods.h index 40bf84c..367f6b3 100644 --- a/src/LuaEngine/methods/GlobalMethods.h +++ b/src/LuaEngine/methods/GlobalMethods.h @@ -719,74 +719,80 @@ namespace LuaGlobalFunctions *
      * enum PlayerEvents
      * {
-     *     PLAYER_EVENT_ON_CHARACTER_CREATE        =     1,        // (event, player)
-     *     PLAYER_EVENT_ON_CHARACTER_DELETE        =     2,        // (event, guid)
-     *     PLAYER_EVENT_ON_LOGIN                   =     3,        // (event, player)
-     *     PLAYER_EVENT_ON_LOGOUT                  =     4,        // (event, player)
-     *     PLAYER_EVENT_ON_SPELL_CAST              =     5,        // (event, player, spell, skipCheck)
-     *     PLAYER_EVENT_ON_KILL_PLAYER             =     6,        // (event, killer, killed)
-     *     PLAYER_EVENT_ON_KILL_CREATURE           =     7,        // (event, killer, killed)
-     *     PLAYER_EVENT_ON_KILLED_BY_CREATURE      =     8,        // (event, killer, killed)
-     *     PLAYER_EVENT_ON_DUEL_REQUEST            =     9,        // (event, target, challenger)
-     *     PLAYER_EVENT_ON_DUEL_START              =     10,       // (event, player1, player2)
-     *     PLAYER_EVENT_ON_DUEL_END                =     11,       // (event, winner, loser, type)
-     *     PLAYER_EVENT_ON_GIVE_XP                 =     12,       // (event, player, amount, victim, source) - Can return new XP amount
-     *     PLAYER_EVENT_ON_LEVEL_CHANGE            =     13,       // (event, player, oldLevel)
-     *     PLAYER_EVENT_ON_MONEY_CHANGE            =     14,       // (event, player, amount) - Can return new money amount
-     *     PLAYER_EVENT_ON_REPUTATION_CHANGE       =     15,       // (event, player, factionId, standing, incremental) - Can return new standing -> if standing == -1, it will prevent default action (rep gain)
-     *     PLAYER_EVENT_ON_TALENTS_CHANGE          =     16,       // (event, player, points)
-     *     PLAYER_EVENT_ON_TALENTS_RESET           =     17,       // (event, player, noCost)
-     *     PLAYER_EVENT_ON_CHAT                    =     18,       // (event, player, msg, Type, lang) - Can return false, newMessage
-     *     PLAYER_EVENT_ON_WHISPER                 =     19,       // (event, player, msg, Type, lang, receiver) - Can return false, newMessage
-     *     PLAYER_EVENT_ON_GROUP_CHAT              =     20,       // (event, player, msg, Type, lang, group) - Can return false, newMessage
-     *     PLAYER_EVENT_ON_GUILD_CHAT              =     21,       // (event, player, msg, Type, lang, guild) - Can return false, newMessage
-     *     PLAYER_EVENT_ON_CHANNEL_CHAT            =     22,       // (event, player, msg, Type, lang, channel) - channel is negative for custom channels. Can return false, newMessage
-     *     PLAYER_EVENT_ON_EMOTE                   =     23,       // (event, player, emote) - Not triggered on any known emote
-     *     PLAYER_EVENT_ON_TEXT_EMOTE              =     24,       // (event, player, textEmote, emoteNum, guid)
-     *     PLAYER_EVENT_ON_SAVE                    =     25,       // (event, player)
-     *     PLAYER_EVENT_ON_BIND_TO_INSTANCE        =     26,       // (event, player, difficulty, mapid, permanent)
-     *     PLAYER_EVENT_ON_UPDATE_ZONE             =     27,       // (event, player, newZone, newArea)
-     *     PLAYER_EVENT_ON_MAP_CHANGE              =     28,       // (event, player)
+     *     PLAYER_EVENT_ON_CHARACTER_CREATE                     =     1,        // (event, player)
+     *     PLAYER_EVENT_ON_CHARACTER_DELETE                     =     2,        // (event, guid)
+     *     PLAYER_EVENT_ON_LOGIN                                =     3,        // (event, player)
+     *     PLAYER_EVENT_ON_LOGOUT                               =     4,        // (event, player)
+     *     PLAYER_EVENT_ON_SPELL_CAST                           =     5,        // (event, player, spell, skipCheck)
+     *     PLAYER_EVENT_ON_KILL_PLAYER                          =     6,        // (event, killer, killed)
+     *     PLAYER_EVENT_ON_KILL_CREATURE                        =     7,        // (event, killer, killed)
+     *     PLAYER_EVENT_ON_KILLED_BY_CREATURE                   =     8,        // (event, killer, killed)
+     *     PLAYER_EVENT_ON_DUEL_REQUEST                         =     9,        // (event, target, challenger)
+     *     PLAYER_EVENT_ON_DUEL_START                           =     10,       // (event, player1, player2)
+     *     PLAYER_EVENT_ON_DUEL_END                             =     11,       // (event, winner, loser, type)
+     *     PLAYER_EVENT_ON_GIVE_XP                              =     12,       // (event, player, amount, victim, source) - Can return new XP amount
+     *     PLAYER_EVENT_ON_LEVEL_CHANGE                         =     13,       // (event, player, oldLevel)
+     *     PLAYER_EVENT_ON_MONEY_CHANGE                         =     14,       // (event, player, amount) - Can return new money amount
+     *     PLAYER_EVENT_ON_REPUTATION_CHANGE                    =     15,       // (event, player, factionId, standing, incremental) - Can return new standing -> if standing == -1, it will prevent default action (rep gain)
+     *     PLAYER_EVENT_ON_TALENTS_CHANGE                       =     16,       // (event, player, points)
+     *     PLAYER_EVENT_ON_TALENTS_RESET                        =     17,       // (event, player, noCost)
+     *     PLAYER_EVENT_ON_CHAT                                 =     18,       // (event, player, msg, Type, lang) - Can return false, newMessage
+     *     PLAYER_EVENT_ON_WHISPER                              =     19,       // (event, player, msg, Type, lang, receiver) - Can return false, newMessage
+     *     PLAYER_EVENT_ON_GROUP_CHAT                           =     20,       // (event, player, msg, Type, lang, group) - Can return false, newMessage
+     *     PLAYER_EVENT_ON_GUILD_CHAT                           =     21,       // (event, player, msg, Type, lang, guild) - Can return false, newMessage
+     *     PLAYER_EVENT_ON_CHANNEL_CHAT                         =     22,       // (event, player, msg, Type, lang, channel) - channel is negative for custom channels. Can return false, newMessage
+     *     PLAYER_EVENT_ON_EMOTE                                =     23,       // (event, player, emote) - Not triggered on any known emote
+     *     PLAYER_EVENT_ON_TEXT_EMOTE                           =     24,       // (event, player, textEmote, emoteNum, guid)
+     *     PLAYER_EVENT_ON_SAVE                                 =     25,       // (event, player)
+     *     PLAYER_EVENT_ON_BIND_TO_INSTANCE                     =     26,       // (event, player, difficulty, mapid, permanent)
+     *     PLAYER_EVENT_ON_UPDATE_ZONE                          =     27,       // (event, player, newZone, newArea)
+     *     PLAYER_EVENT_ON_MAP_CHANGE                           =     28,       // (event, player)
      *
      *     // Custom
-     *     PLAYER_EVENT_ON_EQUIP                   =     29,       // (event, player, item, bag, slot)
-     *     PLAYER_EVENT_ON_FIRST_LOGIN             =     30,       // (event, player)
-     *     PLAYER_EVENT_ON_CAN_USE_ITEM            =     31,       // (event, player, itemEntry) - Can return InventoryResult enum value
-     *     PLAYER_EVENT_ON_LOOT_ITEM               =     32,       // (event, player, item, count)
-     *     PLAYER_EVENT_ON_ENTER_COMBAT            =     33,       // (event, player, enemy)
-     *     PLAYER_EVENT_ON_LEAVE_COMBAT            =     34,       // (event, player)
-     *     PLAYER_EVENT_ON_REPOP                   =     35,       // (event, player)
-     *     PLAYER_EVENT_ON_RESURRECT               =     36,       // (event, player)
-     *     PLAYER_EVENT_ON_LOOT_MONEY              =     37,       // (event, player, amount)
-     *     PLAYER_EVENT_ON_QUEST_ABANDON           =     38,       // (event, player, questId)
-     *     PLAYER_EVENT_ON_LEARN_TALENTS           =     39,       // (event, player, talentId, talentRank, spellid)
-     *     // UNUSED                               =     40,       // (event, player)
-     *     // UNUSED                               =     41,       // (event, player)
-     *     PLAYER_EVENT_ON_COMMAND                 =     42,       // (event, player, command, chatHandler) - player is nil if command used from console. Can return false
-     *     PLAYER_EVENT_ON_PET_ADDED_TO_WORLD      =     43,       // (event, player, pet)
-     *     PLAYER_EVENT_ON_LEARN_SPELL             =     44,       // (event, player, spellId)
-     *     PLAYER_EVENT_ON_ACHIEVEMENT_COMPLETE    =     45,       // (event, player, achievement)
-     *     PLAYER_EVENT_ON_FFAPVP_CHANGE           =     46,       // (event, player, hasFfaPvp)
-     *     PLAYER_EVENT_ON_UPDATE_AREA             =     47,       // (event, player, oldArea, newArea)
-     *     PLAYER_EVENT_ON_CAN_INIT_TRADE          =     48,       // (event, player, target) - Can return false to prevent the trade
-     *     PLAYER_EVENT_ON_CAN_SEND_MAIL           =     49,       // (event, player, receiverGuid, mailbox, subject, body, money, cod, item) - Can return false to prevent sending the mail
-     *     PLAYER_EVENT_ON_CAN_JOIN_LFG            =     50,       // (event, player, roles, dungeons, comment) - Can return false to prevent queueing
-     *     PLAYER_EVENT_ON_QUEST_REWARD_ITEM       =     51,       //  (event, player, item, count)
-     *     PLAYER_EVENT_ON_CREATE_ITEM             =     52,       //  (event, player, item, count)
-     *     PLAYER_EVENT_ON_STORE_NEW_ITEM          =     53,       //  (event, player, item, count)
-     *     PLAYER_EVENT_ON_COMPLETE_QUEST          =     54,       // (event, player, quest)
-     *     PLAYER_EVENT_ON_CAN_GROUP_INVITE        =     55,       // (event, player, memberName) - Can return false to prevent inviting
-     *     PLAYER_EVENT_ON_GROUP_ROLL_REWARD_ITEM  =     56,       // (event, player, item, count, voteType, roll)
-     *     PLAYER_EVENT_ON_BG_DESERTION            =     57,       // (event, player, type)
-     *     PLAYER_EVENT_ON_PET_KILL                =     58,       // (event, player, killer)
-     *     PLAYER_EVENT_ON_CAN_RESURRECT           =     59,       // (event, player)
-     *     PLAYER_EVENT_ON_CAN_UPDATE_SKILL        =     60,       // (event, player, skill_id) -- Can return true or false
-     *     PLAYER_EVENT_ON_BEFORE_UPDATE_SKILL     =     61,       // (event, player, skill_id, value, max, step) -- Can return new amount
-     *     PLAYER_EVENT_ON_UPDATE_SKILL            =     62,       // (event, player, skill_id, value, max, step, new_value)
-     *     PLAYER_EVENT_ON_QUEST_ACCEPT            =     63,       // (event, player, quest)
-     *     PLAYER_EVENT_ON_AURA_APPLY              =     64,       // (event, player, aura)
-     *     PLAYER_EVENT_ON_HEAL                    =     65,       // (event, player, target, heal) - Can return new heal amount
-     *     PLAYER_EVENT_ON_DAMAGE                  =     66,       // (event, player, target, damage) - Can return new damage amount
+     *     PLAYER_EVENT_ON_EQUIP                                =     29,       // (event, player, item, bag, slot)
+     *     PLAYER_EVENT_ON_FIRST_LOGIN                          =     30,       // (event, player)
+     *     PLAYER_EVENT_ON_CAN_USE_ITEM                         =     31,       // (event, player, itemEntry) - Can return InventoryResult enum value
+     *     PLAYER_EVENT_ON_LOOT_ITEM                            =     32,       // (event, player, item, count)
+     *     PLAYER_EVENT_ON_ENTER_COMBAT                         =     33,       // (event, player, enemy)
+     *     PLAYER_EVENT_ON_LEAVE_COMBAT                         =     34,       // (event, player)
+     *     PLAYER_EVENT_ON_REPOP                                =     35,       // (event, player)
+     *     PLAYER_EVENT_ON_RESURRECT                            =     36,       // (event, player)
+     *     PLAYER_EVENT_ON_LOOT_MONEY                           =     37,       // (event, player, amount)
+     *     PLAYER_EVENT_ON_QUEST_ABANDON                        =     38,       // (event, player, questId)
+     *     PLAYER_EVENT_ON_LEARN_TALENTS                        =     39,       // (event, player, talentId, talentRank, spellid)
+     *     // UNUSED                                            =     40,       // (event, player)
+     *     // UNUSED                                            =     41,       // (event, player)
+     *     PLAYER_EVENT_ON_COMMAND                              =     42,       // (event, player, command, chatHandler) - player is nil if command used from console. Can return false
+     *     PLAYER_EVENT_ON_PET_ADDED_TO_WORLD                   =     43,       // (event, player, pet)
+     *     PLAYER_EVENT_ON_LEARN_SPELL                          =     44,       // (event, player, spellId)
+     *     PLAYER_EVENT_ON_ACHIEVEMENT_COMPLETE                 =     45,       // (event, player, achievement)
+     *     PLAYER_EVENT_ON_FFAPVP_CHANGE                        =     46,       // (event, player, hasFfaPvp)
+     *     PLAYER_EVENT_ON_UPDATE_AREA                          =     47,       // (event, player, oldArea, newArea)
+     *     PLAYER_EVENT_ON_CAN_INIT_TRADE                       =     48,       // (event, player, target) - Can return false to prevent the trade
+     *     PLAYER_EVENT_ON_CAN_SEND_MAIL                        =     49,       // (event, player, receiverGuid, mailbox, subject, body, money, cod, item) - Can return false to prevent sending the mail
+     *     PLAYER_EVENT_ON_CAN_JOIN_LFG                         =     50,       // (event, player, roles, dungeons, comment) - Can return false to prevent queueing
+     *     PLAYER_EVENT_ON_QUEST_REWARD_ITEM                    =     51,       //  (event, player, item, count)
+     *     PLAYER_EVENT_ON_CREATE_ITEM                          =     52,       //  (event, player, item, count)
+     *     PLAYER_EVENT_ON_STORE_NEW_ITEM                       =     53,       //  (event, player, item, count)
+     *     PLAYER_EVENT_ON_COMPLETE_QUEST                       =     54,       // (event, player, quest)
+     *     PLAYER_EVENT_ON_CAN_GROUP_INVITE                     =     55,       // (event, player, memberName) - Can return false to prevent inviting
+     *     PLAYER_EVENT_ON_GROUP_ROLL_REWARD_ITEM               =     56,       // (event, player, item, count, voteType, roll)
+     *     PLAYER_EVENT_ON_BG_DESERTION                         =     57,       // (event, player, type)
+     *     PLAYER_EVENT_ON_PET_KILL                             =     58,       // (event, player, killer)
+     *     PLAYER_EVENT_ON_CAN_RESURRECT                        =     59,       // (event, player)
+     *     PLAYER_EVENT_ON_CAN_UPDATE_SKILL                     =     60,       // (event, player, skill_id) -- Can return true or false
+     *     PLAYER_EVENT_ON_BEFORE_UPDATE_SKILL                  =     61,       // (event, player, skill_id, value, max, step) -- Can return new amount
+     *     PLAYER_EVENT_ON_UPDATE_SKILL                         =     62,       // (event, player, skill_id, value, max, step, new_value)
+     *     PLAYER_EVENT_ON_QUEST_ACCEPT                         =     63,       // (event, player, quest)
+     *     PLAYER_EVENT_ON_AURA_APPLY                           =     64,       // (event, player, aura)
+     *     PLAYER_EVENT_ON_HEAL                                 =     65,       // (event, player, target, heal) - Can return new heal amount
+     *     PLAYER_EVENT_ON_DAMAGE                               =     66,       // (event, player, target, damage) - Can return new damage amount
+     *     PLAYER_EVENT_ON_AURA_REMOVE                          =     67,       // (event, player, aura, remove_mode)
+     *     PLAYER_EVENT_ON_MODIFY_PERIODIC_DAMAGE_AURAS_TICK    =     68,    // (event, player, target, damage, spellInfo) - Can return new damage amount
+     *     PLAYER_EVENT_ON_MODIFY_MELEE_DAMAGE                  =     69,       // (event, player, target, damage) - Can return new damage amount
+     *     PLAYER_EVENT_ON_MODIFY_SPELL_DAMAGE_TAKEN            =     70,       // (event, player, target, damage, spellInfo) - Can return new damage amount
+     *     PLAYER_EVENT_ON_MODIFY_HEAL_RECEIVED                 =     71,       // (event, player, target, heal, spellInfo) - Can return new heal amount
+     *     PLAYER_EVENT_ON_DEAL_DAMAGE                          =     72,       // (event, player, target, damage, damagetype) - Can return new damage amount
      * };
      * 
* @@ -1130,46 +1136,52 @@ namespace LuaGlobalFunctions *
      * enum CreatureEvents
      * {
-     *     CREATURE_EVENT_ON_ENTER_COMBAT                    = 1,  // (event, creature, target) - Can return true to stop normal action
-     *     CREATURE_EVENT_ON_LEAVE_COMBAT                    = 2,  // (event, creature) - Can return true to stop normal action
-     *     CREATURE_EVENT_ON_TARGET_DIED                     = 3,  // (event, creature, victim) - Can return true to stop normal action
-     *     CREATURE_EVENT_ON_DIED                            = 4,  // (event, creature, killer) - Can return true to stop normal action
-     *     CREATURE_EVENT_ON_SPAWN                           = 5,  // (event, creature) - Can return true to stop normal action
-     *     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) - Can return true to stop normal action
-     *     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 true to stop normal action, can return new damage as second return value.
-     *     CREATURE_EVENT_ON_PRE_COMBAT                      = 10, // (event, creature, target) - Can return true to stop normal action
+     *     CREATURE_EVENT_ON_ENTER_COMBAT                       = 1,  // (event, creature, target) - Can return true to stop normal action
+     *     CREATURE_EVENT_ON_LEAVE_COMBAT                       = 2,  // (event, creature) - Can return true to stop normal action
+     *     CREATURE_EVENT_ON_TARGET_DIED                        = 3,  // (event, creature, victim) - Can return true to stop normal action
+     *     CREATURE_EVENT_ON_DIED                               = 4,  // (event, creature, killer) - Can return true to stop normal action
+     *     CREATURE_EVENT_ON_SPAWN                              = 5,  // (event, creature) - Can return true to stop normal action
+     *     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) - Can return true to stop normal action
+     *     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 true to stop normal action, can return new damage as second return value.
+     *     CREATURE_EVENT_ON_PRE_COMBAT                         = 10, // (event, creature, target) - Can return true to stop normal action
      *     // UNUSED
-     *     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) - Can return true to stop normal action          // Not on mangos
-     *     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) - Can return true to stop normal action
-     *     // UNUSED                                         = 16, // (event, creature)
-     *     // UNUSED                                         = 17, // (event, creature)
-     *     // UNUSED                                         = 18, // (event, creature)
-     *     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) - Can return true to stop normal action
-     *     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) - Can return true to stop normal action
-     *     CREATURE_EVENT_ON_RESET                           = 23, // (event, creature)
-     *     CREATURE_EVENT_ON_REACH_HOME                      = 24, // (event, creature) - Can return true to stop normal action
-     *     // UNUSED                                         = 25, // (event, creature)
-     *     CREATURE_EVENT_ON_CORPSE_REMOVED                  = 26, // (event, creature, respawndelay) - Can return true to stop normal action, can return new respawndelay as second return value
-     *     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                                         = 29, // (event, creature)
-     *     CREATURE_EVENT_ON_DUMMY_EFFECT                    = 30, // (event, caster, spellid, effindex, creature)
-     *     CREATURE_EVENT_ON_QUEST_ACCEPT                    = 31, // (event, player, creature, quest) - Can return true
-     *     // UNUSED                                         = 32, // (event, creature)
-     *     // UNUSED                                         = 33, // (event, creature)
-     *     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_ADD                             = 36, // (event, creature)
-     *     CREATURE_EVENT_ON_REMOVE                          = 37, // (event, creature)
-     *     CREATURE_EVENT_ON_AURA_APPLY                      = 38, // (event, creature, aura)
-     *     CREATURE_EVENT_ON_HEAL                            = 39, // (event, creature, target, heal) - Can return new heal amount
-     *     CREATURE_EVENT_ON_DAMAGE                          = 40, // (event, creature, target, damage) - Can return new damage amount
+     *     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) - Can return true to stop normal action          // Not on mangos
+     *     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) - Can return true to stop normal action
+     *     // UNUSED                                            = 16, // (event, creature)
+     *     // UNUSED                                            = 17, // (event, creature)
+     *     // UNUSED                                            = 18, // (event, creature)
+     *     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) - Can return true to stop normal action
+     *     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) - Can return true to stop normal action
+     *     CREATURE_EVENT_ON_RESET                              = 23, // (event, creature)
+     *     CREATURE_EVENT_ON_REACH_HOME                         = 24, // (event, creature) - Can return true to stop normal action
+     *     // UNUSED                                            = 25, // (event, creature)
+     *     CREATURE_EVENT_ON_CORPSE_REMOVED                     = 26, // (event, creature, respawndelay) - Can return true to stop normal action, can return new respawndelay as second return value
+     *     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                                            = 29, // (event, creature)
+     *     CREATURE_EVENT_ON_DUMMY_EFFECT                       = 30, // (event, caster, spellid, effindex, creature)
+     *     CREATURE_EVENT_ON_QUEST_ACCEPT                       = 31, // (event, player, creature, quest) - Can return true
+     *     // UNUSED                                            = 32, // (event, creature)
+     *     // UNUSED                                            = 33, // (event, creature)
+     *     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_ADD                                = 36, // (event, creature)
+     *     CREATURE_EVENT_ON_REMOVE                             = 37, // (event, creature)
+     *     CREATURE_EVENT_ON_AURA_APPLY                         = 38, // (event, creature, aura)
+     *     CREATURE_EVENT_ON_HEAL                               = 39, // (event, creature, target, heal) - Can return new heal amount
+     *     CREATURE_EVENT_ON_DAMAGE                             = 40, // (event, creature, target, damage) - Can return new damage amount
+     *     CREATURE_EVENT_ON_AURA_REMOVE                        = 41, // (event, creature, aura, remove_mode)
+     *     CREATURE_EVENT_ON_MODIFY_PERIODIC_DAMAGE_AURAS_TICK  = 42, // (event, creature, target, damage, spellInfo) - Can return new damage amount
+     *     CREATURE_EVENT_ON_MODIFY_MELEE_DAMAGE                = 43, // (event, creature, target, damage) - Can return new damage amount
+     *     CREATURE_EVENT_ON_MODIFY_SPELL_DAMAGE_TAKEN          = 44, // (event, creature, target, damage, spellInfo) - Can return new damage amount
+     *     CREATURE_EVENT_ON_MODIFY_HEAL_RECEIVED               = 45, // (event, creature, target, heal, spellInfo) - Can return new heal amount
+     *     CREATURE_EVENT_ON_DEAL_DAMAGE                        = 46, // (event, creature, target, damage, damagetype) - Can return new damage amount
      *     CREATURE_EVENT_COUNT
      * };
      * 
@@ -1232,6 +1244,15 @@ namespace LuaGlobalFunctions * CREATURE_EVENT_ON_DIALOG_STATUS = 35, // (event, player, creature) * CREATURE_EVENT_ON_ADD = 36, // (event, creature) * CREATURE_EVENT_ON_REMOVE = 37, // (event, creature) + * CREATURE_EVENT_ON_AURA_APPLY = 38, // (event, creature, aura) + * CREATURE_EVENT_ON_HEAL = 39, // (event, creature, target, gain) - Can return new heal amount + * CREATURE_EVENT_ON_DAMAGE = 40, // (event, creature, target, damage) - Can return new damage amount + * CREATURE_EVENT_ON_AURA_REMOVE = 41, // (event, creature, aura, remove_mode) + * CREATURE_EVENT_ON_MODIFY_PERIODIC_DAMAGE_AURAS_TICK = 42, // (event, creature, target, damage, spellInfo) - Can return new damage amount + * CREATURE_EVENT_ON_MODIFY_MELEE_DAMAGE = 43, // (event, creature, target, damage) - Can return new damage amount + * CREATURE_EVENT_ON_MODIFY_SPELL_DAMAGE_TAKEN = 44, // (event, creature, target, damage, spellInfo) - Can return new damage amount + * CREATURE_EVENT_ON_MODIFY_HEAL_RECEIVED = 45, // (event, creature, target, heal, spellInfo) - Can return new heal amount + * CREATURE_EVENT_ON_DEAL_DAMAGE = 46, // (event, creature, target, damage, damagetype) - Can return new damage amount * CREATURE_EVENT_COUNT * }; * @@ -1344,10 +1365,19 @@ namespace LuaGlobalFunctions *
      * enum AllCreatureEvents
      * {
-     *     ALL_CREATURE_EVENT_ON_ADD                       = 1, // (event, creature)
-     *     ALL_CREATURE_EVENT_ON_REMOVE                    = 2, // (event, creature)
-     *     ALL_CREATURE_EVENT_ON_SELECT_LEVEL              = 3, // (event, creature_template, creature)
-     *     ALL_CREATURE_EVENT_ON_BEFORE_SELECT_LEVEL       = 4, // (event, creature_template, creature, level) - Can return the new level
+     *     ALL_CREATURE_EVENT_ON_ADD                               = 1, // (event, creature)
+     *     ALL_CREATURE_EVENT_ON_REMOVE                            = 2, // (event, creature)
+     *     ALL_CREATURE_EVENT_ON_SELECT_LEVEL                      = 3, // (event, creature_template, creature)
+     *     ALL_CREATURE_EVENT_ON_BEFORE_SELECT_LEVEL               = 4, // (event, creature_template, creature, level) - Can return the new level
+     *     ALL_CREATURE_EVENT_ON_AURA_APPLY                        = 5, // (event, creature, aura)
+     *     ALL_CREATURE_EVENT_ON_HEAL                              = 6, // (event, creature, target, gain) - Can return new heal amount
+     *     ALL_CREATURE_EVENT_ON_DAMAGE                            = 7, // (event, creature, target, damage) - Can return new damage amount
+     *     ALL_CREATURE_EVENT_ON_AURA_REMOVE                       = 8, // (event, creature, aura, remove_mode)
+     *     ALL_CREATURE_EVENT_ON_MODIFY_PERIODIC_DAMAGE_AURAS_TICK = 9, // (event, creature, target, damage, spellInfo) - Can return new damage amount
+     *     ALL_CREATURE_EVENT_ON_MODIFY_MELEE_DAMAGE               = 10, // (event, creature, target, damage) - Can return new damage amount
+     *     ALL_CREATURE_EVENT_ON_MODIFY_SPELL_DAMAGE_TAKEN         = 11, // (event, creature, target, damage, spellInfo) - Can return new damage amount
+     *     ALL_CREATURE_EVENT_ON_MODIFY_HEAL_RECEIVED              = 12, // (event, creature, target, heal, spellInfo) - Can return new heal amount
+     *     ALL_CREATURE_EVENT_ON_DEAL_DAMAGE                       = 13, // (event, creature, target, damage, damagetype) - Can return new damage amount
      *     ALL_CREATURE_EVENT_COUNT
      * };
      *