mirror of
https://github.com/azerothcore/mod-ale
synced 2025-11-29 15:38:17 +08:00
Eluna add event group type name to the error messages
This commit is contained in:
10
HookMgr.cpp
10
HookMgr.cpp
@@ -30,6 +30,7 @@ ENDCALL();
|
|||||||
if (!BINDMAP->HasEvents(EVENT)) \
|
if (!BINDMAP->HasEvents(EVENT)) \
|
||||||
RET; \
|
RET; \
|
||||||
lua_State* L = sEluna->L; \
|
lua_State* L = sEluna->L; \
|
||||||
|
const char* _LuaBindType = sEluna->BINDMAP->groupName; \
|
||||||
uint32 _LuaEvent = EVENT; \
|
uint32 _LuaEvent = EVENT; \
|
||||||
int _LuaStackTop = lua_gettop(L); \
|
int _LuaStackTop = lua_gettop(L); \
|
||||||
for (size_t i = 0; i < sEluna->BINDMAP->Bindings[_LuaEvent].size(); ++i) \
|
for (size_t i = 0; i < sEluna->BINDMAP->Bindings[_LuaEvent].size(); ++i) \
|
||||||
@@ -44,7 +45,7 @@ ENDCALL();
|
|||||||
int _LuaParams = lua_gettop(L) - _LuaFuncTop; \
|
int _LuaParams = lua_gettop(L) - _LuaFuncTop; \
|
||||||
if (_LuaParams < 1) \
|
if (_LuaParams < 1) \
|
||||||
{ \
|
{ \
|
||||||
ELUNA_LOG_ERROR("[Eluna]: Executing event %u, params was %i. Report to devs", _LuaEvent, _LuaParams); \
|
ELUNA_LOG_ERROR("[Eluna]: Executing event %u for %s, params was %i. Report to devs", _LuaEvent, _LuaBindType, _LuaParams); \
|
||||||
} \
|
} \
|
||||||
for (int j = _LuaFuncTop-_LuaStackTop; j > 0; --j) \
|
for (int j = _LuaFuncTop-_LuaStackTop; j > 0; --j) \
|
||||||
{ \
|
{ \
|
||||||
@@ -63,6 +64,7 @@ ENDCALL();
|
|||||||
if (!_Luabind) \
|
if (!_Luabind) \
|
||||||
RET; \
|
RET; \
|
||||||
lua_State* L = sEluna->L; \
|
lua_State* L = sEluna->L; \
|
||||||
|
const char* _LuaBindType = sEluna->BINDMAP->groupName; \
|
||||||
uint32 _LuaEvent = EVENT; \
|
uint32 _LuaEvent = EVENT; \
|
||||||
int _LuaStackTop = lua_gettop(L); \
|
int _LuaStackTop = lua_gettop(L); \
|
||||||
lua_rawgeti(L, LUA_REGISTRYINDEX, _Luabind); \
|
lua_rawgeti(L, LUA_REGISTRYINDEX, _Luabind); \
|
||||||
@@ -79,7 +81,11 @@ ENDCALL();
|
|||||||
#define ENDCALL() \
|
#define ENDCALL() \
|
||||||
if (_LuaReturnValues != LUA_MULTRET && lua_gettop(L) != _LuaStackTop + _LuaReturnValues) \
|
if (_LuaReturnValues != LUA_MULTRET && lua_gettop(L) != _LuaStackTop + _LuaReturnValues) \
|
||||||
{ \
|
{ \
|
||||||
ELUNA_LOG_ERROR("[Eluna]: Ending event %u, stack top was %i and was supposed to be %i. Report to devs", _LuaEvent, lua_gettop(L), _LuaStackTop + _LuaReturnValues); \
|
ELUNA_LOG_ERROR("[Eluna]: Ending event %u for %s, stack top was %i and was supposed to be %i. Report to devs", _LuaEvent, _LuaBindType, lua_gettop(L), _LuaStackTop + _LuaReturnValues); \
|
||||||
|
} \
|
||||||
|
else if (_LuaReturnValues == LUA_MULTRET && lua_gettop(L) < _LuaStackTop) \
|
||||||
|
{ \
|
||||||
|
ELUNA_LOG_ERROR("[Eluna]: Ending event %u for %s, stack top was %i and was supposed to be >= %i. Report to devs", _LuaEvent, _LuaBindType, lua_gettop(L), _LuaStackTop); \
|
||||||
} \
|
} \
|
||||||
lua_settop(L, _LuaStackTop);
|
lua_settop(L, _LuaStackTop);
|
||||||
|
|
||||||
|
|||||||
@@ -58,20 +58,20 @@ L(luaL_newstate()),
|
|||||||
|
|
||||||
m_EventMgr(new EventMgr(*this)),
|
m_EventMgr(new EventMgr(*this)),
|
||||||
|
|
||||||
ServerEventBindings(new EventBind<HookMgr::ServerEvents>(*this)),
|
ServerEventBindings(new EventBind<HookMgr::ServerEvents>("ServerEvents", *this)),
|
||||||
PlayerEventBindings(new EventBind<HookMgr::PlayerEvents>(*this)),
|
PlayerEventBindings(new EventBind<HookMgr::PlayerEvents>("PlayerEvents", *this)),
|
||||||
GuildEventBindings(new EventBind<HookMgr::GuildEvents>(*this)),
|
GuildEventBindings(new EventBind<HookMgr::GuildEvents>("GuildEvents", *this)),
|
||||||
GroupEventBindings(new EventBind<HookMgr::GroupEvents>(*this)),
|
GroupEventBindings(new EventBind<HookMgr::GroupEvents>("GroupEvents", *this)),
|
||||||
VehicleEventBindings(new EventBind<HookMgr::VehicleEvents>(*this)),
|
VehicleEventBindings(new EventBind<HookMgr::VehicleEvents>("VehicleEvents", *this)),
|
||||||
|
|
||||||
PacketEventBindings(new EntryBind<HookMgr::PacketEvents>(*this)),
|
PacketEventBindings(new EntryBind<HookMgr::PacketEvents>("PacketEvents", *this)),
|
||||||
CreatureEventBindings(new EntryBind<HookMgr::CreatureEvents>(*this)),
|
CreatureEventBindings(new EntryBind<HookMgr::CreatureEvents>("CreatureEvents", *this)),
|
||||||
CreatureGossipBindings(new EntryBind<HookMgr::GossipEvents>(*this)),
|
CreatureGossipBindings(new EntryBind<HookMgr::GossipEvents>("GossipEvents (creature)", *this)),
|
||||||
GameObjectEventBindings(new EntryBind<HookMgr::GameObjectEvents>(*this)),
|
GameObjectEventBindings(new EntryBind<HookMgr::GameObjectEvents>("GameObjectEvents", *this)),
|
||||||
GameObjectGossipBindings(new EntryBind<HookMgr::GossipEvents>(*this)),
|
GameObjectGossipBindings(new EntryBind<HookMgr::GossipEvents>("GossipEvents (gameobject)", *this)),
|
||||||
ItemEventBindings(new EntryBind<HookMgr::ItemEvents>(*this)),
|
ItemEventBindings(new EntryBind<HookMgr::ItemEvents>("ItemEvents", *this)),
|
||||||
ItemGossipBindings(new EntryBind<HookMgr::GossipEvents>(*this)),
|
ItemGossipBindings(new EntryBind<HookMgr::GossipEvents>("GossipEvents (item)", *this)),
|
||||||
playerGossipBindings(new EntryBind<HookMgr::GossipEvents>(*this))
|
playerGossipBindings(new EntryBind<HookMgr::GossipEvents>("GossipEvents (player)", *this))
|
||||||
{
|
{
|
||||||
// open base lua
|
// open base lua
|
||||||
luaL_openlibs(L);
|
luaL_openlibs(L);
|
||||||
|
|||||||
41
LuaEngine.h
41
LuaEngine.h
@@ -686,25 +686,36 @@ template<> Corpse* Eluna::CHECKOBJ<Corpse>(lua_State* L, int narg, bool error);
|
|||||||
|
|
||||||
// #define ELUNA_GUARD() ACE_Guard< ACE_Recursive_Thread_Mutex > ELUNA_GUARD_OBJECT(sEluna->lock);
|
// #define ELUNA_GUARD() ACE_Guard< ACE_Recursive_Thread_Mutex > ELUNA_GUARD_OBJECT(sEluna->lock);
|
||||||
|
|
||||||
template<typename T>
|
struct ElunaBind
|
||||||
struct EventBind
|
|
||||||
{
|
{
|
||||||
typedef std::vector<int> ElunaBindingMap;
|
|
||||||
typedef std::map<int, ElunaBindingMap> ElunaEntryMap;
|
|
||||||
|
|
||||||
Eluna& E;
|
Eluna& E;
|
||||||
|
const char* groupName;
|
||||||
|
|
||||||
EventBind(Eluna& _E): E(_E)
|
ElunaBind(const char* bindGroupName, Eluna& _E): E(_E), groupName(bindGroupName)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
~EventBind()
|
~ElunaBind()
|
||||||
{
|
{
|
||||||
Clear();
|
Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// unregisters all registered functions and clears all registered events from the bindings
|
||||||
|
virtual void Clear() {};
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
struct EventBind : ElunaBind
|
||||||
|
{
|
||||||
|
typedef std::vector<int> ElunaBindingMap;
|
||||||
|
typedef std::map<int, ElunaBindingMap> ElunaEntryMap;
|
||||||
|
|
||||||
|
EventBind(const char* bindGroupName, Eluna& _E): ElunaBind(bindGroupName, _E)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
// unregisters all registered functions and clears all registered events from the bind std::maps (reset)
|
// unregisters all registered functions and clears all registered events from the bind std::maps (reset)
|
||||||
void Clear()
|
void Clear() override
|
||||||
{
|
{
|
||||||
for (ElunaEntryMap::iterator itr = Bindings.begin(); itr != Bindings.end(); ++itr)
|
for (ElunaEntryMap::iterator itr = Bindings.begin(); itr != Bindings.end(); ++itr)
|
||||||
{
|
{
|
||||||
@@ -746,23 +757,17 @@ struct EventBind
|
|||||||
};
|
};
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
struct EntryBind
|
struct EntryBind : ElunaBind
|
||||||
{
|
{
|
||||||
typedef std::map<int, int> ElunaBindingMap;
|
typedef std::map<int, int> ElunaBindingMap;
|
||||||
typedef UNORDERED_MAP<uint32, ElunaBindingMap> ElunaEntryMap;
|
typedef UNORDERED_MAP<uint32, ElunaBindingMap> ElunaEntryMap;
|
||||||
|
|
||||||
Eluna& E;
|
EntryBind(const char* bindGroupName, Eluna& _E): ElunaBind(bindGroupName, _E)
|
||||||
|
|
||||||
EntryBind(Eluna& _E): E(_E)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
~EntryBind()
|
// unregisters all registered functions and clears all registered events from the bindmap
|
||||||
{
|
void Clear() override
|
||||||
Clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
void Clear() // unregisters all registered functions and clears all registered events from the bind std::maps (reset)
|
|
||||||
{
|
{
|
||||||
for (ElunaEntryMap::iterator itr = Bindings.begin(); itr != Bindings.end(); ++itr)
|
for (ElunaEntryMap::iterator itr = Bindings.begin(); itr != Bindings.end(); ++itr)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user