예제 #1
0
        private int UnregisterTableInternal(LuaState luaState)
        {
            try {
                if (LuaLib.LuaGetMetatable(luaState, 1) != 0)
                {
                    LuaLib.LuaPushString(luaState, "__index");
                    LuaLib.LuaGetTable(luaState, -2);
                    object obj = GetRawNetObject(luaState, -1);

                    if (obj == null)
                    {
                        ThrowError(luaState, "unregister_table: arg is not valid table");
                    }

                    var luaTableField = obj.GetType().GetField("__luaInterface_luaTable");

                    if (luaTableField == null)
                    {
                        ThrowError(luaState, "unregister_table: arg is not valid table");
                    }

                    luaTableField.SetValue(obj, null);
                    LuaLib.LuaPushNil(luaState);
                    LuaLib.LuaSetMetatable(luaState, 1);
                    LuaLib.LuaPushString(luaState, "base");
                    LuaLib.LuaPushNil(luaState);
                    LuaLib.LuaSetTable(luaState, 1);
                }
                else
                {
                    ThrowError(luaState, "unregister_table: arg is not valid table");
                }
            } catch (Exception e) {
                ThrowError(luaState, e.Message);
            }

            return(0);
        }