mirror of
https://github.com/azerothcore/mod-ale
synced 2025-11-29 15:38:17 +08:00
Improved pushing so that a single userdata is used per object pushed. Made everything use the singleton less, allowing more free code and easier to implement multithreading later. Made macros for hookmgr and fixed the issue with hooks called inside hooks.
262 lines
16 KiB
C
262 lines
16 KiB
C
/*
|
|
* Copyright (C) 2010 - 2014 Eluna Lua Engine <http://emudevs.com/>
|
|
* This program is free software licensed under GPL version 3
|
|
* Please see the included DOCS/LICENSE.md for more information
|
|
*/
|
|
|
|
#ifndef LUAHOOKS_H
|
|
#define LUAHOOKS_H
|
|
|
|
enum RegisterTypes
|
|
{
|
|
REGTYPE_PACKET,
|
|
REGTYPE_SERVER,
|
|
REGTYPE_PLAYER,
|
|
REGTYPE_GUILD,
|
|
REGTYPE_GROUP,
|
|
REGTYPE_CREATURE,
|
|
REGTYPE_VEHICLE,
|
|
REGTYPE_CREATURE_GOSSIP,
|
|
REGTYPE_GAMEOBJECT,
|
|
REGTYPE_GAMEOBJECT_GOSSIP,
|
|
REGTYPE_ITEM,
|
|
REGTYPE_ITEM_GOSSIP,
|
|
REGTYPE_PLAYER_GOSSIP,
|
|
REGTYPE_COUNT
|
|
};
|
|
|
|
// RegisterPacketEvent(Opcode, event, function)
|
|
// SERVER_EVENT_ON_PACKET_RECEIVE = 5, // (event, packet, player) - Player only if accessible. Can return false or a new packet
|
|
// SERVER_EVENT_ON_PACKET_RECEIVE_UNKNOWN = 6, // Not Implemented
|
|
// SERVER_EVENT_ON_PACKET_SEND = 7, // (event, packet, player) - Player only if accessible. Can return false or a new packet
|
|
|
|
// RegisterServerEvent(EventId, function)
|
|
enum ServerEvents
|
|
{
|
|
// Server
|
|
SERVER_EVENT_ON_NETWORK_START = 1, // Not Implemented
|
|
SERVER_EVENT_ON_NETWORK_STOP = 2, // Not Implemented
|
|
SERVER_EVENT_ON_SOCKET_OPEN = 3, // Not Implemented
|
|
SERVER_EVENT_ON_SOCKET_CLOSE = 4, // Not Implemented
|
|
SERVER_EVENT_ON_PACKET_RECEIVE = 5, // (event, packet, player) - Player only if accessible. Can return false or a new packet
|
|
SERVER_EVENT_ON_PACKET_RECEIVE_UNKNOWN = 6, // Not Implemented
|
|
SERVER_EVENT_ON_PACKET_SEND = 7, // (event, packet, player) - Player only if accessible. Can return false or a new packet
|
|
|
|
// World // Not implemented on mangos
|
|
WORLD_EVENT_ON_OPEN_STATE_CHANGE = 8, // (event, open)
|
|
WORLD_EVENT_ON_CONFIG_LOAD = 9, // (event, reload)
|
|
// UNUSED = 10, // (event)
|
|
WORLD_EVENT_ON_SHUTDOWN_INIT = 11, // (event, code, mask)
|
|
WORLD_EVENT_ON_SHUTDOWN_CANCEL = 12, // (event)
|
|
WORLD_EVENT_ON_UPDATE = 13, // (event, diff)
|
|
WORLD_EVENT_ON_STARTUP = 14, // (event)
|
|
WORLD_EVENT_ON_SHUTDOWN = 15, // (event)
|
|
|
|
// Eluna
|
|
ELUNA_EVENT_ON_LUA_STATE_CLOSE = 16, // (event)
|
|
|
|
// Map
|
|
MAP_EVENT_ON_CREATE = 17, // (event, map)
|
|
MAP_EVENT_ON_DESTROY = 18, // (event, map)
|
|
MAP_EVENT_ON_GRID_LOAD = 19, // Not Implemented
|
|
MAP_EVENT_ON_GRID_UNLOAD = 20, // Not Implemented
|
|
MAP_EVENT_ON_PLAYER_ENTER = 21, // (event, map, player)
|
|
MAP_EVENT_ON_PLAYER_LEAVE = 22, // (event, map, player)
|
|
MAP_EVENT_ON_UPDATE = 23, // (event, map, diff)
|
|
|
|
// Area trigger
|
|
TRIGGER_EVENT_ON_TRIGGER = 24, // (event, player, triggerId)
|
|
|
|
// Weather
|
|
WEATHER_EVENT_ON_CHANGE = 25, // (event, weather, state, grade)
|
|
|
|
// Auction house
|
|
AUCTION_EVENT_ON_ADD = 26, // (event, AHObject)
|
|
AUCTION_EVENT_ON_REMOVE = 27, // (event, AHObject)
|
|
AUCTION_EVENT_ON_SUCCESSFUL = 28, // (event, AHObject) // Not Implemented
|
|
AUCTION_EVENT_ON_EXPIRE = 29, // (event, AHObject) // Not Implemented
|
|
|
|
// AddOns
|
|
ADDON_EVENT_ON_MESSAGE = 30, // (event, sender, type, prefix, msg, target) - target can be nil/whisper_target/guid/group/channel
|
|
|
|
SERVER_EVENT_COUNT
|
|
};
|
|
|
|
// RegisterPlayerEvent(eventId, function)
|
|
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) - Can return new XP amount
|
|
PLAYER_EVENT_ON_LEVEL_CHANGE = 13, // (event, player, oldLevel)
|
|
PLAYER_EVENT_ON_MONEY_CHANGE = 14, // (event, player, amount)
|
|
PLAYER_EVENT_ON_REPUTATION_CHANGE = 15, // (event, player, factionId, standing, incremental) - Can return new standing
|
|
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 or new msg
|
|
PLAYER_EVENT_ON_WHISPER = 19, // (event, player, msg, Type, lang, receiver) - Can return false or new msg
|
|
PLAYER_EVENT_ON_GROUP_CHAT = 20, // (event, player, msg, Type, lang, group) - Can return false or new msg
|
|
PLAYER_EVENT_ON_GUILD_CHAT = 21, // (event, player, msg, Type, lang, guild) - Can return false or new msg
|
|
PLAYER_EVENT_ON_CHANNEL_CHAT = 22, // (event, player, msg, Type, lang, channel) - Can return false or new msg
|
|
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)
|
|
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)
|
|
// UNUSED = 39, // (event, player)
|
|
// UNUSED = 40, // (event, player)
|
|
// UNUSED = 41, // (event, player)
|
|
PLAYER_EVENT_ON_COMMAND = 42, // (event, player, command) - Can return false
|
|
|
|
PLAYER_EVENT_COUNT
|
|
};
|
|
|
|
// RegisterGuildEvent(eventId, function)
|
|
enum GuildEventTypes
|
|
{
|
|
// Guild
|
|
GUILD_EVENT_ON_ADD_MEMBER = 1, // (event, guild, player, rank)
|
|
GUILD_EVENT_ON_REMOVE_MEMBER = 2, // (event, guild, isDisbanding)
|
|
GUILD_EVENT_ON_MOTD_CHANGE = 3, // (event, guild, newMotd)
|
|
GUILD_EVENT_ON_INFO_CHANGE = 4, // (event, guild, newInfo)
|
|
GUILD_EVENT_ON_CREATE = 5, // (event, guild, leader, name) // Not on TC
|
|
GUILD_EVENT_ON_DISBAND = 6, // (event, guild)
|
|
GUILD_EVENT_ON_MONEY_WITHDRAW = 7, // (event, guild, player, amount, isRepair)
|
|
GUILD_EVENT_ON_MONEY_DEPOSIT = 8, // (event, guild, player, amount)
|
|
GUILD_EVENT_ON_ITEM_MOVE = 9, // (event, guild, player, item, isSrcBank, srcContainer, srcSlotId, isDestBank, destContainer, destSlotId) // TODO
|
|
GUILD_EVENT_ON_EVENT = 10, // (event, guild, eventType, plrGUIDLow1, plrGUIDLow2, newRank) // TODO
|
|
GUILD_EVENT_ON_BANK_EVENT = 11, // (event, guild, eventType, tabId, playerGUIDLow, itemOrMoney, itemStackCount, destTabId)
|
|
|
|
GUILD_EVENT_COUNT
|
|
};
|
|
|
|
// RegisterGroupEvent(eventId, function)
|
|
enum GroupEvents
|
|
{
|
|
// Group
|
|
GROUP_EVENT_ON_MEMBER_ADD = 1, // (event, group, guid)
|
|
GROUP_EVENT_ON_MEMBER_INVITE = 2, // (event, group, guid)
|
|
GROUP_EVENT_ON_MEMBER_REMOVE = 3, // (event, group, guid, method, kicker, reason)
|
|
GROUP_EVENT_ON_LEADER_CHANGE = 4, // (event, group, newLeaderGuid, oldLeaderGuid)
|
|
GROUP_EVENT_ON_DISBAND = 5, // (event, group)
|
|
GROUP_EVENT_ON_CREATE = 6, // (event, group, leaderGuid, groupType)
|
|
|
|
GROUP_EVENT_COUNT
|
|
};
|
|
|
|
// RegisterVehicleEvent(eventId, function)
|
|
enum VehicleEvents
|
|
{
|
|
VEHICLE_EVENT_ON_INSTALL = 1, // (event, vehicle)
|
|
VEHICLE_EVENT_ON_UNINSTALL = 2, // (event, vehicle)
|
|
// UNUSED = 3, // (event, vehicle)
|
|
VEHICLE_EVENT_ON_INSTALL_ACCESSORY = 4, // (event, vehicle, creature)
|
|
VEHICLE_EVENT_ON_ADD_PASSENGER = 5, // (event, vehicle, unit, seatId)
|
|
VEHICLE_EVENT_ON_REMOVE_PASSENGER = 6, // (event, vehicle, unit)
|
|
|
|
VEHICLE_EVENT_COUNT
|
|
};
|
|
|
|
// RegisterCreatureEvent(entry, EventId, function)
|
|
enum CreatureEvents
|
|
{
|
|
CREATURE_EVENT_ON_ENTER_COMBAT = 1, // (event, creature, target)
|
|
CREATURE_EVENT_ON_LEAVE_COMBAT = 2, // (event, creature)
|
|
CREATURE_EVENT_ON_TARGET_DIED = 3, // (event, creature, victim)
|
|
CREATURE_EVENT_ON_DIED = 4, // (event, creature, killer)
|
|
CREATURE_EVENT_ON_SPAWN = 5, // (event, creature)
|
|
CREATURE_EVENT_ON_REACH_WP = 6, // (event, creature, type, id)
|
|
CREATURE_EVENT_ON_AIUPDATE = 7, // (event, creature, diff)
|
|
CREATURE_EVENT_ON_RECEIVE_EMOTE = 8, // (event, creature, player, emoteid)
|
|
CREATURE_EVENT_ON_DAMAGE_TAKEN = 9, // (event, creature, attacker, damage)
|
|
CREATURE_EVENT_ON_PRE_COMBAT = 10, // (event, creature, target)
|
|
CREATURE_EVENT_ON_ATTACKED_AT = 11, // (event, creature, attacker)
|
|
CREATURE_EVENT_ON_OWNER_ATTACKED = 12, // (event, creature, target) // Not on mangos
|
|
CREATURE_EVENT_ON_OWNER_ATTACKED_AT = 13, // (event, creature, attacker) // Not on mangos
|
|
CREATURE_EVENT_ON_HIT_BY_SPELL = 14, // (event, creature, caster, spellid)
|
|
CREATURE_EVENT_ON_SPELL_HIT_TARGET = 15, // (event, creature, target, spellid)
|
|
// UNUSED = 16, // (event, creature)
|
|
// UNUSED = 17, // (event, creature)
|
|
// UNUSED = 18, // (event, creature)
|
|
CREATURE_EVENT_ON_JUST_SUMMONED_CREATURE = 19, // (event, creature, summon)
|
|
CREATURE_EVENT_ON_SUMMONED_CREATURE_DESPAWN = 20, // (event, creature, summon)
|
|
CREATURE_EVENT_ON_SUMMONED_CREATURE_DIED = 21, // (event, creature, summon, killer) // Not on mangos
|
|
CREATURE_EVENT_ON_SUMMONED = 22, // (event, creature, summoner)
|
|
CREATURE_EVENT_ON_RESET = 23, // (event, creature)
|
|
CREATURE_EVENT_ON_REACH_HOME = 24, // (event, creature)
|
|
// UNUSED = 25, // (event, creature)
|
|
CREATURE_EVENT_ON_CORPSE_REMOVED = 26, // (event, creature, respawndelay)
|
|
CREATURE_EVENT_ON_MOVE_IN_LOS = 27, // (event, creature, unit) // Doesnt actually check LOS
|
|
// 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)
|
|
// UNUSED = 32, // (event, creature)
|
|
CREATURE_EVENT_ON_QUEST_COMPLETE = 33, // (event, player, creature, quest)
|
|
CREATURE_EVENT_ON_QUEST_REWARD = 34, // (event, player, creature, quest, opt)
|
|
CREATURE_EVENT_ON_DIALOG_STATUS = 35, // (event, player, creature)
|
|
CREATURE_EVENT_COUNT
|
|
};
|
|
|
|
// RegisterGameObjectEvent(entry, EventId, function)
|
|
enum GameObjectEvents
|
|
{
|
|
GAMEOBJECT_EVENT_ON_AIUPDATE = 1, // (event, go, diff)
|
|
GAMEOBJECT_EVENT_ON_SPAWN = 2, // (event, go)
|
|
GAMEOBJECT_EVENT_ON_DUMMY_EFFECT = 3, // (event, caster, spellid, effindex, go)
|
|
GAMEOBJECT_EVENT_ON_QUEST_ACCEPT = 4, // (event, player, go, quest)
|
|
GAMEOBJECT_EVENT_ON_QUEST_REWARD = 5, // (event, player, go, quest, opt)
|
|
GAMEOBJECT_EVENT_ON_DIALOG_STATUS = 6, // (event, player, go)
|
|
GAMEOBJECT_EVENT_ON_DESTROYED = 7, // (event, go, player)
|
|
GAMEOBJECT_EVENT_ON_DAMAGED = 8, // (event, go, player)
|
|
GAMEOBJECT_EVENT_ON_LOOT_STATE_CHANGE = 9, // (event, go, state)
|
|
GAMEOBJECT_EVENT_ON_GO_STATE_CHANGED = 10, // (event, go, state)
|
|
GAMEOBJECT_EVENT_ON_QUEST_COMPLETE = 11, // (event, player, go, quest)
|
|
GAMEOBJECT_EVENT_COUNT
|
|
};
|
|
|
|
// RegisterItemEvent(entry, EventId, function)
|
|
enum ItemEvents
|
|
{
|
|
ITEM_EVENT_ON_DUMMY_EFFECT = 1, // (event, caster, spellid, effindex, item)
|
|
ITEM_EVENT_ON_USE = 2, // (event, player, item, target)
|
|
ITEM_EVENT_ON_QUEST_ACCEPT = 3, // (event, player, item, quest)
|
|
ITEM_EVENT_ON_EXPIRE = 4, // (event, player, itemid)
|
|
ITEM_EVENT_ON_REMOVE = 5, // (event, player, item)
|
|
ITEM_EVENT_COUNT
|
|
};
|
|
|
|
// RegisterCreatureGossipEvent(entry, EventId, function)
|
|
// RegisterGameObjectGossipEvent(entry, EventId, function)
|
|
// RegisterItemGossipEvent(entry, EventId, function)
|
|
// RegisterPlayerGossipEvent(menu_id, EventId, function)
|
|
enum GossipEvents
|
|
{
|
|
GOSSIP_EVENT_ON_HELLO = 1, // (event, player, object) - Object is the Creature/GameObject/Item
|
|
GOSSIP_EVENT_ON_SELECT = 2, // (event, player, object, sender, intid, code, menu_id) - Object is the Creature/GameObject/Item/Player, menu_id is only for player gossip
|
|
GOSSIP_EVENT_COUNT
|
|
};
|
|
#endif
|