Run it
Copy the script and paste it into your executor.
if getgenv().__SA_LightingLock_Running then
local existing = getgenv().__SA_LightingLock_Running
existing.token = existing.token + 1
local myToken = existing.token
if existing.Conn then pcall(() existing.Conn:() )
existing.SkyConn (() existing.SkyConn:() )
existing.Conn =
existing.SkyConn =
().__SA_LightingLock_Running =
ok, StarterGui = (.GetService, , )
ok
(()
StarterGui:(, {
Title = ,
Text = ,
Duration =
})
)
Lighting = :()
RunService = :()
StarterGui = :()
LOCK_PROPS = {
, , , ,
, , ,
, , ,
, , , ,
,
}
(text)
(()
StarterGui:(, {
Title = ,
Text = text,
Duration =
})
)
()
snap = {}
_, prop (LOCK_PROPS)
ok, val = (() Lighting[prop] )
ok snap[prop] = val
snap
()
sky = Lighting:()
sky sky:()
state = {token = }
().__SA_LightingLock_Running = state
snap = ()
skyClone = ()
state.Conn = RunService.Heartbeat:(()
().__SA_LightingLock_Running ~= state
prop, val (snap)
ok, cur = (() Lighting[prop] )
ok cur ~= val
(() Lighting[prop] = val )
)
skyClone
state.SkyConn = Lighting.ChildAdded:((child)
().__SA_LightingLock_Running ~= state
child:() child ~= skyClone
.(()
().__SA_LightingLock_Running ~= state
(() child:() )
Lighting:()
restored = skyClone:()
restored.Parent = Lighting
)
)
Lighting:()
skyClone:().Parent = Lighting
()Locks current lighting and skybox. Useful for games with different lighting per area. Best if locked on best lighting chosen. Script executed at first will lock. Re exec will unlock it, allow you to choose a time to execute and lock again.

Universal