diff --git a/LuaEngine.cpp b/LuaEngine.cpp index ddd5eac..1d6677d 100644 --- a/LuaEngine.cpp +++ b/LuaEngine.cpp @@ -676,47 +676,35 @@ template<> uint64 Eluna::CHECKVAL(lua_State* L, int narg) // return static_cast(*(Eluna::CHECKOBJ(L, narg, true))); //} -#define TEST_OBJ(T, O, R, F)\ -{\ - if (!O || !O->F())\ - {\ - if (R)\ - {\ - std::string errmsg(ElunaTemplate::tname);\ - errmsg += " expected";\ - luaL_argerror(L, narg, errmsg.c_str());\ - }\ - return NULL;\ - }\ - return O->F();\ +template<> Object* Eluna::CHECKOBJ(lua_State* L, int narg, bool error) +{ + Object* obj = CHECKOBJ(L, narg, false); + if (!obj) + obj = CHECKOBJ(L, narg, false); + if (!obj) + obj = ElunaTemplate::Check(L, narg, false); + return obj; +} +template<> WorldObject* Eluna::CHECKOBJ(lua_State* L, int narg, bool error) +{ + WorldObject* obj = CHECKOBJ(L, narg, false); + if (!obj) + obj = CHECKOBJ(L, narg, false); + if (!obj) + obj = CHECKOBJ(L, narg, false); + if (!obj) + obj = ElunaTemplate::Check(L, narg, false); + return obj; } - template<> Unit* Eluna::CHECKOBJ(lua_State* L, int narg, bool error) { - WorldObject* obj = CHECKOBJ(L, narg, false); - TEST_OBJ(Unit, obj, error, ToUnit); + Unit* obj = CHECKOBJ(L, narg, false); + if (!obj) + obj = CHECKOBJ(L, narg, false); + if (!obj) + obj = ElunaTemplate::Check(L, narg, false); + return obj; } -template<> Player* Eluna::CHECKOBJ(lua_State* L, int narg, bool error) -{ - WorldObject* obj = CHECKOBJ(L, narg, false); - TEST_OBJ(Player, obj, error, ToPlayer); -} -template<> Creature* Eluna::CHECKOBJ(lua_State* L, int narg, bool error) -{ - WorldObject* obj = CHECKOBJ(L, narg, false); - TEST_OBJ(Creature, obj, error, ToCreature); -} -template<> GameObject* Eluna::CHECKOBJ(lua_State* L, int narg, bool error) -{ - WorldObject* obj = CHECKOBJ(L, narg, false); - TEST_OBJ(GameObject, obj, error, ToGameObject); -} -template<> Corpse* Eluna::CHECKOBJ(lua_State* L, int narg, bool error) -{ - WorldObject* obj = CHECKOBJ(L, narg, false); - TEST_OBJ(Corpse, obj, error, ToCorpse); -} -#undef TEST_OBJ template<> ElunaObject* Eluna::CHECKOBJ(lua_State* L, int narg, bool error) { diff --git a/LuaEngine.h b/LuaEngine.h index 6930276..85b9ae1 100644 --- a/LuaEngine.h +++ b/LuaEngine.h @@ -384,10 +384,8 @@ public: void OnBGDestroy(BattleGround* bg, BattleGroundTypeId bgId, uint32 instanceId); }; template<> Unit* Eluna::CHECKOBJ(lua_State* L, int narg, bool error); -template<> Player* Eluna::CHECKOBJ(lua_State* L, int narg, bool error); -template<> Creature* Eluna::CHECKOBJ(lua_State* L, int narg, bool error); -template<> GameObject* Eluna::CHECKOBJ(lua_State* L, int narg, bool error); -template<> Corpse* Eluna::CHECKOBJ(lua_State* L, int narg, bool error); +template<> Object* Eluna::CHECKOBJ(lua_State* L, int narg, bool error); +template<> WorldObject* Eluna::CHECKOBJ(lua_State* L, int narg, bool error); template<> ElunaObject* Eluna::CHECKOBJ(lua_State* L, int narg, bool error); #define sEluna Eluna::GEluna