In addition to above I just mentioned errors in client console:
[ 77188] [b2189_GTAProce] MainThrd/ ^1Error: Failed to parse resources:/gb-assets/vehicles/vehicles.meta in rage::parManager::LoadFromStructure(const char*, …). Make sure this is a well-formed XML/PSO file.
[ 77203] [b2189_GTAProce] MainThrd/ ^1Error: Failed to parse resources:/gb-assets/vehicles/carvariations.meta in rage::parManager::LoadFromStructure(const char*, …). Make sure this is a well-formed XML/PSO file.
That’s not ‘a new format’, #typ entries with DLC_ITYP_REQUEST are not referring to a physical file - only the entry name itself is used, you could even add feeeeeee/food_slimer_1.nfjsbnfsjfnsdfjn and it’d work fine - so they don’t have to be added to files at all (and doing so was even considered malformed).
Any entries that actually refer to an actual file need that file to be added to the packfile too, and this never changed, nor are parentheses in any way related.
data_file is a hint to the game engine to read that file
however, the file does not automatically exist on the client, only on the server
so it also needs to be in files
which is a hint to the server to send that to the client
stream/ is different, since this is downloaded on request and automatically indexed
and DLC_ITYP_REQUEST is yet again different as it doesn’t refer to any real file path but just something looking like one, it actually refers to the base name of a .#typ file stored anywhere in the streaming file index
you may ask ‘why can’t data_file also imply file’, well, that’s because not all data_file strings are real files
for example DLC_ITYP_REQUEST, but also AUDIO_WAVEPACK or DLC_POP_GROUPS
or the file may have a similar name, like AUDIO_GAMEDATA