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" ); }
static void Initialize( GarrysMod::Lua::ILuaBase *LUA ) { lua = LUA; SymbolFinder symfinder; AddOrUpdateFile_original = reinterpret_cast<AddOrUpdateFile_t>( symfinder.ResolveOnBinary( server_lib.c_str( ), AddOrUpdateFile_sym, AddOrUpdateFile_symlen ) ); if( AddOrUpdateFile_original == nullptr ) LUA->ThrowError( "failed to find GModDataPack::AddOrUpdateFile" ); if( !Hook( AddOrUpdateFile_original, &GModDataPackProxy::AddOrUpdateFile ) ) LUA->ThrowError( "failed to hook GModDataPack::AddOrUpdateFile" ); }