Пример #1
0
void Initialize( lua_State *state )
{
	lua_interface = static_cast<GarrysMod::Lua::ILuaInterface *>( LUA );

	INetworkStringTableContainer *networkstringtable = global::engine_loader.GetInterface<INetworkStringTableContainer>(
		INTERFACENAME_NETWORKSTRINGTABLESERVER
	);
	if( networkstringtable == nullptr )
		LUA->ThrowError( "unable to get INetworkStringTableContainer" );

	downloads = networkstringtable->FindTable( "downloadables" );
	if( downloads == nullptr )
		LUA->ThrowError( "missing \"downloadables\" string table" );

	SymbolFinder symfinder;
	IsValidFileForTransfer = reinterpret_cast<IsValidFileForTransfer_t>( symfinder.ResolveOnBinary(
		global::engine_lib.c_str( ),
		IsValidFileForTransfer_sig,
		IsValidFileForTransfer_siglen
	) );
	if( IsValidFileForTransfer == nullptr )
		LUA->ThrowError( "unable to sigscan for CNetChan::IsValidFileForTransfer" );

	LUA->PushCFunction( EnableFileValidation );
	LUA->SetField( -2, "EnableFileValidation" );
}
META_FUNCTION( INetworkStringTableContainer, FindTable )
{
	UsesLua();

	Lua()->CheckType( 1, GET_META_ID( INetworkStringTableContainer ) );
	Lua()->CheckType( 2, GLua::TYPE_STRING );

	INetworkStringTableContainer *pContainer = GET_META( 1, INetworkStringTableContainer );

	PUSH_META( pContainer->FindTable( Lua()->GetString( 2 ) ), INetworkStringTable );

	return 1;
}
META_FUNCTION( INetworkStringTableContainer, GetTable )
{
	UsesLua();

	//Lua()->SetGlobal( "META_ID" ,  (double)GET_META_ID( INetworkStringTableContainer ) );

	Lua()->CheckType( 1, GET_META_ID( INetworkStringTableContainer ) );
	Lua()->CheckType( 2, GLua::TYPE_NUMBER );

	INetworkStringTableContainer *pContainer = GET_META( 1, INetworkStringTableContainer );

	PUSH_META( pContainer->GetTable( Lua()->GetInteger( 2 ) ), INetworkStringTable );

	return 1;
}