- rook1969on [DZEXP-134]
I posted a janky workaround that works as long as the profile folder is under the gamefolder. I've since added indexing so I don't have to use FindFile.
- rook1969on [DZEXP-134]
Independent confirmation on the same two builds — 1.29.163709 and
1.30.164014.27 — from a server mod that enumerates player record files under
$profile:. Five features silently stopped working. Adding measurements ratherthan repeating the repro.
**1.
FindFileis not returning nothing. It is searching the server's workingdirectory.** The prefix is discarded, not rejected. On 1.30, in one run, from a
server whose working directory is its own root:
```
FindFile("*") -> handle, 84 entries (the server folder)
FindFile("addons/*") -> handle, 236 entries
FindFile("$profile:<mod>/Players/*.json") -> NO HANDLE
```
$profile:*,$mission:*,$saves:*and a bare*all return the samelisting. So the mount is not consulted at all, and the remainder of the string
is searched relative to the working directory. That is a narrower statement than
"FindFile is broken", and it predicts every symptom in this ticket.
**2. Only
FindFileis affected —$profile:writes still work.** Worthstating explicitly given this was briefly marked a duplicate of DZEXP-85. On
1.30 we measured creating, writing and reading files under
$profile:allresolving correctly; the mod rewrites
$profile:<mod>/Settings.sample.txtonevery boot and reads its settings back from the same mount.
If the intent were to confine mods to the working directory, the write path is
the one you would close first. Instead listing is confined while writing is
not, which is not a coherent sandbox — so this looks like an unintended
consequence rather than hardening.
**3. No live vanilla call site passes a prefixed pattern, which is probably how
this shipped.** There are four
FindFilecall sites in the 1.30 scripts:-
2_gamelib/entities/worldsmenu.c:72—"worlds/*.ent", bare relative.-
5_mission/gui/newui/videoplayer.c:81—"video\*", bare relative.-
4_world/plugins/.../pluginconfigscene.c:112—FILE_ROOTis declared"$saves:"but overwritten at line 40 withg_Game.GetMissionFolderPath(),which is relative. Registered through
RegisterPluginDebug.-
4_world/plugins/.../pluginlocalprofilescene.c:72—FILE_ROOT = "$saves:",never overwritten. The only site that would actually pass a prefix, and
PluginLocalProfileScenehas zero references outside its own file, so it isnever registered or instantiated.
A regression test built from vanilla usage would not catch this.
**4. The documentation still describes the old behaviour.**
EnSystem.c:401names the three prefixes;
:527and:530state that Delete and Copy work onlyon
$profile:and$saves:. 1.30 added a great many[Obsolete]markerselsewhere and none to
FindFile.**5. A workaround, and its hard limit.** A relative root derived from
GetCLIParam("profiles")works while the profile folder sits under the serverdirectory, which is the common layout.
FindFilerefuses an absolute pattern,and it also refuses
..:```
FindFile("../*") -> NO HANDLE in the same run where FindFile("*") -> 84 entries
```
So for a
-profilesfolder outside the server directory there is no patternthat reaches it, and a mod cannot work around this at all for those servers.
Flagging it in case
..is deliberate and separate from this ticket — it stillbounds how far mods can compensate while this is open.