Restore the old persistidents system from AC 1.0, since it's working as
intended - if used properly.
As a reminder:
* aliases created by "const" and "tempalias" are never persistent
* aliases created or altered by "alias" or "=" become persistent, if
the persistidents flag is set during that operation
* persistidents if false during the execution of almost all config files
during game start - those files can create aliases with default values
which will not be persistent (until changed later while the flag is
set)
* before saved.cfg is executed, the flag is set and stays set all
throughout the game - which means, that all changes (from menus, for
example) will change the altered alias to "persistent"
* exceptions for map or model config files are unnecessary, since those
run restricted and can't create aliases anyway
* exceptions are necessary for "late run" config files like those in
config/opt/
The new command "persistidents" may be used to manually set or clear the
flag. It also returns the current state of the flag. If used in a config
file, the flag is restored to its original value when the file ends
execution.
In short: only late-run config files (meaning: run after saved.cfg was
restored) may need to manually set/reset the flag. Use const and tempalias
where appropriate and clear persistidents before creating an alias with a
not-to-save default value that may be changed and made persistent later.
DOCREF persistidents
27 lines
1.2 KiB
INI
27 lines
1.2 KiB
INI
// define script security contexts to restrict commands to certain contexts
|
|
// do NOT modify
|
|
|
|
// supported contexts
|
|
const context_core 0 // hardcoded scripts
|
|
const context_cfg 1 // known scripts
|
|
const context_prompt 2 // command prompt
|
|
const context_mapcfg 3 // map configs, we don't trust them
|
|
const context_mdlcfg 4 // mdl configs, same
|
|
|
|
// set allowed commands for the map config context
|
|
mapcfgidents = [loadnotexture loadsky mapmodelreset mapmodel texturereset texture fog fogcolour mapsoundreset mapsound watercolour shadowyaw]
|
|
mdlcfgidents = [md2anim md2emit md2tag md3anim md3emit md3link md3load md3skin mdlalphatest mdlalphablend mdlcachelimit mdlcullface mdlscale mdlshadowdist mdltrans mdltranslucent mdlvertexlight mdlattribute]
|
|
loop i (listlen $mapcfgidents) [ scriptcontext $context_mapcfg (at $mapcfgidents $i) ]
|
|
loop i (listlen $mdlcfgidents) [ scriptcontext $context_mdlcfg (at $mdlcfgidents $i) ]
|
|
|
|
// isolate the map config context
|
|
// this disables access from this context to identifiers located in other contexts
|
|
// also it removes all aliases created in this context once the running context changes
|
|
isolatecontext $context_mapcfg
|
|
isolatecontext $context_mdlcfg
|
|
|
|
// secure this configuration for the rest of the game
|
|
sealcontexts
|
|
|
|
|