Untitled
unknown
lua
a year ago
9.8 kB
19
Indexable
------- SERVER
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local WeatherDirect = ReplicatedStorage.WeatherController
local ClientReplicator = WeatherDirect.RemoteEvents.ClientReplicator
local PauseWeatherEvent = WeatherDirect.RemoteEvents.PauseWeather
local RequestData = WeatherDirect.RemFunctions.RequestData
local CurrentChance = 1
local lowerChance = 1000
local GlobalWeatherData = {
Time = math.random(7, 17),
GameBright = 0,
GameFogDensity = 0,
CurrentWeather = 0,
GlobalHaze = 0
}
local function calculateBrightness(time)
return math.clamp(0.2 + 1.8 * (0.5 + 0.5 * math.sin(math.pi * time / 12)), 0.2, 2)
end
local function calculateFogDensity(time)
return math.clamp(0.55 - 0.34 * (0.5 - 0.5 * math.sin(math.pi * time / 12)), 0.36, 0.55)
end
local function updateWeatherData()
GlobalWeatherData.GameBright = calculateBrightness(GlobalWeatherData.Time)
if GlobalWeatherData.CurrentWeather == 0 then
GlobalWeatherData.GameFogDensity = calculateFogDensity(GlobalWeatherData.Time)
end
end
local function PauseWeather()
local ReturnTable = GlobalWeatherData
local WeatherActionTable = {
[1] = function()
local finalTarg = math.random() * (0.700 - 0.900) + 0.900
GlobalWeatherData.GameFogDensity = 0.400
wait(1)
GlobalWeatherData.GameFogDensity = 0.600
GlobalWeatherData.GameFogDensity = finalTarg
end,
[2] = function()
return
end,
[3] = function()
GlobalWeatherData.GameFogDensity = 0.700
GlobalWeatherData.GlobalHaze = 10
end,
[4] = function()
GlobalWeatherData.GameFogDensity = 0.850
end
}
local action = WeatherActionTable[GlobalWeatherData.CurrentWeather]
action()
wait(math.random(5, 15) * 60)
GlobalWeatherData.CurrentWeather = 0
GlobalWeatherData.GameFogDensity = ReturnTable.GameFogDensity
GlobalWeatherData.GlobalHaze = ReturnTable.GlobalHaze
end
while true do
wait(0.1)
GlobalWeatherData.Time = (GlobalWeatherData.Time + 0.001) % 24
updateWeatherData()
if math.random(1, CurrentChance) > lowerChance and GlobalWeatherData.CurrentWeather == 0 and math.random(1, 100) >= 20 and math.random(1, 100) >= 21 then
GlobalWeatherData.CurrentWeather = math.random(1, 4)
local NewCo = coroutine.create(PauseWeather)
coroutine.resume(NewCo)
lowerChance = 1000
CurrentChance = 1
else
CurrentChance = CurrentChance+1
lowerChance = lowerChance-1
end
ClientReplicator:FireAllClients(GlobalWeatherData)
end
----------- CLIENT
local RainModule = require(script.Parent.RainScript.Rain)
local BlizzardModule = require(script.Parent.SnowScript.Rain)
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local TweenService = game:GetService("TweenService")
local player = game.Players.LocalPlayer
local HTTPServ = game:GetService("HttpService")
local WeatherDirect = ReplicatedStorage.WeatherController
local ClientReplicator = WeatherDirect.RemoteEvents.ClientReplicator
local PauseWeather = WeatherDirect.RemoteEvents.PauseWeather
local RequestData = WeatherDirect.RemFunctions.RequestData
local IsRain = false
local IsBlizzard = false
local IsRad = false
local DoingThunder = false
local ActiveThunder = false
local DoingWeather = false
local SoundTable = {
[1] = Enum.ReverbType.SewerPipe,
[2] = Enum.ReverbType.GenericReverb
}
local tweening = false
local function tweenProperty(instance, property, targetValue)
if tweening then
return
end
local currentValue = instance[property]
local difference = math.abs(currentValue - targetValue)
if difference < 0.1 then
instance[property] = targetValue
return
end
tweening = true
local tweenTime = math.clamp(difference * 0.5, 0.5, 5)
local tweenInfo = TweenInfo.new(tweenTime, Enum.EasingStyle.Linear, Enum.EasingDirection.InOut)
local tween = TweenService:Create(instance, tweenInfo, {[property] = targetValue})
tween:Play()
tween.Completed:Connect(function()
tweening = false
end)
end
RainModule:Disable(TweenInfo.new(0, Enum.EasingStyle.Linear, Enum.EasingDirection.InOut))
BlizzardModule:Disable(TweenInfo.new(0, Enum.EasingStyle.Linear, Enum.EasingDirection.InOut))
ClientReplicator.OnClientEvent:Connect(function(Package)
local PlayerAt = player:GetAttribute("Type")
PlayerAt = HTTPServ:JSONDecode(PlayerAt)
if PlayerAt.Active ~= true then
if DoingThunder ~= true then
tweenProperty(game.Lighting, "Brightness", Package.GameBright)
end
tweenProperty(game.Lighting.Atmosphere, "Density", Package.GameFogDensity)
tweenProperty(game.Lighting.Atmosphere, "Haze", Package.GlobalHaze)
tweenProperty(game.Lighting, "ClockTime", Package.Time)
game.SoundService.AmbientReverb = Enum.ReverbType.NoReverb
else
local function tweenClockTime(currentTime, targetTime)
local forwardDistance = (targetTime - currentTime) % 24
local backwardDistance = (currentTime - targetTime) % 24
if forwardDistance <= backwardDistance then
tweenProperty(game.Lighting, "ClockTime", targetTime)
else
tweenProperty(game.Lighting, "ClockTime", targetTime, true)
end
end
local function setClockTime()
local targetTime = PlayerAt.AverageTime ~= "Default" and PlayerAt.AverageTime or Package.Time
local currentTime = game.Lighting.ClockTime
tweenClockTime(currentTime, targetTime)
end
local function setBrightness()
local targetBrightness = PlayerAt.AverageDarkness ~= "Default" and PlayerAt.AverageDarkness or Package.GameBright
if DoingThunder ~= true then
tweenProperty(game.Lighting, "Brightness", targetBrightness)
end
end
local function setAtmosphereDensity()
local targetDensity = PlayerAt.AverageDensity ~= "Default" and PlayerAt.AverageDensity or Package.GameFogDensity
tweenProperty(game.Lighting.Atmosphere, "Density", targetDensity)
end
local co1 = coroutine.create(setClockTime)
local co2 = coroutine.create(setBrightness)
local co3 = coroutine.create(setAtmosphereDensity)
coroutine.resume(co1)
coroutine.resume(co2)
coroutine.resume(co3)
game.Lighting.Atmosphere.Haze = 0
game.SoundService.AmbientReverb = SoundTable[PlayerAt.SoundType]
end
if PlayerAt.Active ~= true then
if DoingWeather ~= true and Package.CurrentWeather ~= 0 then
DoingWeather = true
local function ThunderSim()
if ActiveThunder ~= true then
ActiveThunder = true
while true do
wait(math.random(10,20))
if IsRain or IsRad or IsBlizzard then
local PlayerAt = player:GetAttribute("Type")
PlayerAt = HTTPServ:JSONDecode(PlayerAt)
if PlayerAt.Active ~= true then
if math.random(1, 15) >= 2 then
local thunderSound = game.Workspace.Sounds.Thunder
thunderSound:Play()
DoingThunder = true
for I = 1, 3 do
game.Lighting.Brightness = 10
wait(0.01)
game.Lighting.Brightness = Package.GameBright
wait(0.01)
game.Lighting.Brightness = 10
end
game.Lighting.Brightness = Package.GameBright
DoingThunder = false
else
ActiveThunder = false
break
end
else
ActiveThunder = false
break
end
else
ActiveThunder = false
break
end
end
end
end
if Package.CurrentWeather == 2 then
local rainSound = game.Workspace.Sounds.Rain
rainSound.Volume = 0
rainSound:Play()
game:GetService("TweenService"):Create(rainSound, TweenInfo.new(3, Enum.EasingStyle.Linear, Enum.EasingDirection.InOut), {Volume = 0.5}):Play()
IsRain = true
RainModule:Enable(TweenInfo.new(3, Enum.EasingStyle.Linear, Enum.EasingDirection.InOut))
local co1 = coroutine.create(ThunderSim)
coroutine.resume(co1)
end
if Package.CurrentWeather == 3 then
local stormSound = game.Workspace.Sounds.Storm
stormSound.Volume = 0
stormSound:Play()
game:GetService("TweenService"):Create(stormSound, TweenInfo.new(3, Enum.EasingStyle.Linear, Enum.EasingDirection.InOut), {Volume = 0.5}):Play()
IsRad = true
local co1 = coroutine.create(ThunderSim)
coroutine.resume(co1)
end
if Package.CurrentWeather == 4 then
local stormSound = game.Workspace.Sounds.Storm
stormSound.Volume = 0
stormSound:Play()
game:GetService("TweenService"):Create(stormSound, TweenInfo.new(3, Enum.EasingStyle.Linear, Enum.EasingDirection.InOut), {Volume = 0.5}):Play()
IsBlizzard = true
BlizzardModule:Enable(TweenInfo.new(3, Enum.EasingStyle.Linear, Enum.EasingDirection.InOut))
end
end
end
if DoingWeather == true and (Package.CurrentWeather == 0 or PlayerAt.Active == true) then
local tweenService = game:GetService("TweenService")
if IsRain then
local rainSound = game.Workspace.Sounds.Rain
local rainTween = tweenService:Create(rainSound, TweenInfo.new(3, Enum.EasingStyle.Linear, Enum.EasingDirection.InOut), {Volume = 0})
rainTween:Play()
rainTween.Completed:Connect(function()
rainSound:Stop()
end)
end
if IsRad then
local stormSound = game.Workspace.Sounds.Storm
local stormTween = tweenService:Create(stormSound, TweenInfo.new(3, Enum.EasingStyle.Linear, Enum.EasingDirection.InOut), {Volume = 0})
stormTween:Play()
stormTween.Completed:Connect(function()
stormSound:Stop()
end)
end
if IsBlizzard then
local stormSound = game.Workspace.Sounds.Storm
local stormTween = tweenService:Create(stormSound, TweenInfo.new(3, Enum.EasingStyle.Linear, Enum.EasingDirection.InOut), {Volume = 0})
stormTween:Play()
stormTween.Completed:Connect(function()
stormSound:Stop()
end)
end
if RainModule then RainModule:Disable(TweenInfo.new(3, Enum.EasingStyle.Linear, Enum.EasingDirection.InOut)) end
if BlizzardModule then BlizzardModule:Disable(TweenInfo.new(3, Enum.EasingStyle.Linear, Enum.EasingDirection.InOut)) end
DoingWeather = false
end
end)
Editor is loading...
Leave a Comment