Fix up Lua command/cvar safety
Most of this is work done a couple years ago by Hannu_Hanhi, with light refactoring by me today.
Bug fixes
- The
toggle
andadd
commands can no longer be used to bypass Lua restrictions on cvars. - Lua cvar restrictions can no longer be bypassed by chaining commands with a semicolon.
API
- Replaced
CV_NOLUA
withCV_ALLOWLUA
, cvars now opt in to Lua mutability (stronger definition). - Adds
COM_LUA
, pass toCOM_AddCommand
. Commands registered withCOM_LUA
can be called from Lua, commands without this flag cannot. -
LUA SCRIPT RELEVANT:
CV_NOLUA
has been replaced byCV_ALLOWLUA
. All other changes do not affect the Lua API.
Big list of cvars and commands
Click to expand
Cvars Lua can change Cvars Lua CANNOT change Commands Lua can run Commands Lua CANNOT run ----------------------- ------------------------ ------------------- ------------ advancemap 1upsound add alias allowexitlevel addons_folder addfile exec allowjoin addons_md5 addfolder wait allowmlook addons_option archivetest cls allowseenames addons_search_case ban bind allowteamchange addons_search_type banip saveconfig autobalance addons_showall causecfail loadconfig basenumlaps alwaysgrabmouse cecho changeconfig cam2_adjust alwaysmlook cechoduration playdemo cam2_centertoggle alwaysmlook2 cechoflags timedemo cam2_curdist apng_compress_level changeteam setcontrol cam2_curheight apng_downscale changeteam2 setcontrol2 cam2_dist apng_memory_level charability listserv cam2_height apng_speed charspeed vid_mode cam2_lockaimassist apng_strategy cheats cam2_lockedinput apng_window_size clearbans cam2_orbit autobrake clearscores cam2_rotate autobrake2 connect cam2_rotspeed autorecord countmobjs cam2_shiftfacingchar bgamma csay cam2_simpledist bhue demote cam2_simpleheight blamecfail devmode cam2_speed bsaturation displayplayer cam2_still cd_update downloads cam2_turnfacingability cd_volume drop cam2_turnfacingchar cgamma droprate cam2_turnfacinginput chasecam dumplua cam2_turnfacingspindash chasecam2 echo cam2_turnmultiplier chasemlook exitgame cam_adjust chasemlook2 exitlevel cam_centertoggle chatbacktint gametype cam_curdist chatheight getallemeralds cam_curheight chatmode getplayernum cam_dist chatnotifications god cam_height chatspamprotection gravflip cam_lockaimassist chattime help cam_lockedinput chatwidth hurtme cam_orbit chooseskin isgamemodified cam_rotate chue jumptoaxis cam_rotspeed closedcaptioning kick cam_shiftfacingchar compactscoreboard listwad cam_simpledist con_backcolor login cam_simpleheight con_backpic manual cam_speed con_height map cam_still con_hudlines mapmd5 cam_turnfacingability con_hudtime masterserver_update cam_turnfacingchar con_speed memdump cam_turnfacinginput con_textsize memfree cam_turnfacingspindash configanalog mod_details cam_turnmultiplier configanalog2 motd color controlperkey noclip color2 cpusleep nodes competitionboxes crosshair notarget cooplives crosshair2 numnodes coopstarposts csaturation numthinkers countdowntime defaultcolor objectplace exitmove defaultcolor2 password flagtime defaultskin pause forceskin defaultskin2 ping friendlyfire digimusic playintro gravity digmusicvolume promote hidetime directionchar quit inttime directionchar2 reloadbans itemfinder downloading resendgamestate killingdead downloadspeed resetcamera matchboxes drawdist resetemeralds maxplayers drawdist_nights restartaudio mute drawdist_precip retry numlaps dummyconsvar rteleport overtime dummycontinues runsoc pausepermission dummycutscenes savecheckpoint playersforexit dummylives say pointlimit dummyloadless sayteam powerstones dummymarathon sayto respawndelay dummymares scale respawnitem dummyrings screenshot respawnitemtime dummyscramble serverchangeteam restrictskinchange dummyteam setcontinues ringslinger dumpconsistency setlives runscripts execversion setrings scrambleonchange ffloorclip showbanlist seenames fishcake showmap servername flipcam showscores showhud flipcam2 showtime showinputjoy fov skynum skin fpscap startmovie skin2 freedemocamera stopdemo specialrings fullscreen stopmovie startinglives gamma suicide tailspickup ggamma teleport teamscramble ghost_bestrings toggle timelimit ghost_bestscore togglemodified touchtag ghost_besttime toggletwod tv_1up ghost_guest tunes tv_bombshield ghost_last version tv_eggman ghue vid_info tv_forceshield gif_downscale vid_modelist tv_invincibility gif_dynamicdelay vid_nummodes tv_jumpshield gif_localcolortable weather tv_recycler gif_optimize tv_ringshield gr_allowclientshaders tv_superring gr_anisotropicmode tv_supersneaker gr_batching tv_teleporter gr_clipwalls tv_watershield gr_coronas gr_coronasize gr_dynamiclighting gr_fakecontrast gr_filtermode gr_fovchange gr_modelinterpolation gr_modellighting gr_models gr_shaders gr_shearing gr_skydome gr_slopecontrast gr_solvetjoin gr_spritebillboarding gr_staticlighting gsaturation hazardlog homremoval invertmouse invertmouse2 joindelay joinnextround jointimeout joy_deadzone joy_deadzone2 joy_digdeadzone joy_digdeadzone2 joyaxis2_fire joyaxis2_firenormal joyaxis2_jump joyaxis2_look joyaxis2_move joyaxis2_side joyaxis2_spin joyaxis2_turn joyaxis_fire joyaxis_firenormal joyaxis_jump joyaxis_look joyaxis_move joyaxis_side joyaxis_spin joyaxis_turn masterserver masterserver_update_rate maxping maxportals maxsend mgamma mhue midimusic midimusicvolume midiplayer midisoundbank midisoundfont modfilter mouse2opt mouse2port mousemove mousemove2 mousesens mousesens2 mouseysens mouseysens2 movebob movie_folder movie_option moviemode_mode msaturation musicpref name name2 netstat netticbuffer nettimeout newgametype nextmap noticedownload op_flags op_hoopflags op_mapthingnum op_speed padport padport2 padscale padscale2 pauseifunfocused perfstats pingtimeout playbackspeed playmusicifunfocused playsoundsifunfocused png_compress_level png_memory_level png_strategy png_window_size powerupdisplay precachesound precipdensity ps_descriptor ps_samplesize rejointimeout renderer renderstats renderview resetmusic resetmusicbyheader resynchattempts rgamma rhue rollingdemos rsaturation samplerate saturation scr_depth scr_height scr_width screenshot_colorprofile screenshot_folder screenshot_option serversort sessionanalog sessionanalog2 shadow showfocuslost showfps showjoinaddress showping skipmapcheck skybox snd_channels sounds soundtest soundvolume stereoreverse stretch surround timerres timescale translucency translucenthud tutorialprompt use_gamepad use_gamepad2 use_mouse use_mouse2 vid_wait ygamma yhue ysaturation