Hello Everyone! this is how i solved this!
So in lighting i have a folder called “StormEffects” or somtin like that. when effects are inside of it they arnt shown
I have an orgin of the circle (aka the middle of the circle) its an immaginary point
I have a Radius that is essentially just makes the circle…
so i have a script that moves the orgin and resets the radius
I have a script that checks the players distance from orgin and compairs it to radius
BOOM now i have a storm system right?
NO i still need to show the plr where the storm is basicly i made a union of parts in a circle to make a storm wall gave it properties and i can change its size and that to make a circle!
Here is my orgin moving script (Its kinda weird)
-- Server Script
-- Storm Functionality For First Circle
local Max = nil
local X = script["XCordnate(Studs)"].Value
local Z = script["ZCordnate(Studs)"].Value
local NX = script["XCordnateNegative(Studs)"].Value
local NZ = script["ZCordnateNegative(Studs)"].Value
local TimeBetweenCircles = script["TimeBetweenCircles(NotIncludingClosingTime)"].Value
local ClosingTime = script.ClosingTime.Value
local Radius = (X * 2 + Z * 2) / 2
wait(TimeBetweenCircles)
game.Workspace.StormStats.StormBoarder.Size = Vector3.new(Radius * 2, game.Workspace.StormStats.StormBoarder.Size.Y, Radius * 2)
game.Workspace.StormStats.StormBoarder.Position = Vector3.new(0, game.Workspace.StormStats.StormBoarder.Position.Y, 0)
game.Workspace.StormStats.Radius.Value = Radius
game.Workspace.StormStats.OrginX.Value = 0
game.Workspace.StormStats.OrginZ.Value = 0
game.Workspace.StormStats.FirstDone.Value = true
game.Workspace.StormStats.StormBoarder.Transparency = 0.025
Max = Radius
-- Server Script (Same One)
-- Storm Functionality For Later Circles
local Circles = 0
repeat
local OX = math.random(NX,X)
local OZ = math.random(NZ,Z)
local RX = math.random(X/2,X)
local RZ = math.random(X/2,Z)
local DepricateRate = script["TimeDepritiationRate(In%)"].Value
local ClosingTime = script.ClosingTime.Value
local TimeBetweenCircles = script["TimeBetweenCircles(NotIncludingClosingTime)"].Value
local Orgin = {OX,OZ}
local Depricate = DepricateRate/100
wait(TimeBetweenCircles)
Circles += 1
local Radius = ((30 - game.ServerStorage.PlayersAlive.Value) / (RX + RZ)) * 25 -- Change The 25 To A Smaller/Bigger Number if you want
if Circles >= 10 and game.ServerStorage.PlayersAlive.Value <= 4 then
game.Workspace.StormStats.Radius.Value = 0
else
if Max <= Radius then
Max = Radius
end
local Bump = 1000
local LerpBump = (1 / Bump)
local SizeVector = Vector3.new((game.Workspace.StormStats.StormBoarder.Size.X - (Radius * 2)) / Bump, game.Workspace.StormStats.StormBoarder.Size.Y, (game.Workspace.StormStats.StormBoarder.Size.Z - (Radius * 2)) / Bump)
local WaitTime = ClosingTime/Bump
local Old = nil
Old = game.Workspace.StormStats.StormBoarder.Position
for i = 1,Bump do
if Radius == Max then
game.Workspace.StormStats.StormBoarder.Size = Vector3.new(game.Workspace.StormStats.StormBoarder.Size.X - SizeVector.X, game.Workspace.StormStats.StormBoarder.Size.Y, game.Workspace.StormStats.StormBoarder.Size.Z - SizeVector.Z)
end
Max = Radius
game.Workspace.StormStats.StormBoarder.Position = Old:Lerp(Vector3.new(Orgin[1], game.Workspace.StormStats.StormBoarder.Position.Y, Orgin[2]), LerpBump)
LerpBump += 1/Bump
game.Workspace.StormStats.Radius.Value = game.Workspace.StormStats.StormBoarder.Size.X/2
game.Workspace.StormStats.OrginX.Value = game.Workspace.StormStats.StormBoarder.Position.X
game.Workspace.StormStats.OrginZ.Value = game.Workspace.StormStats.StormBoarder.Position.Z
task.wait(WaitTime)
end
game.Workspace.StormStats.StormBoarder.Size = Vector3.new(Radius * 2, game.Workspace.StormStats.StormBoarder.Size.Y, Radius * 2)
game.Workspace.StormStats.StormBoarder.Position = Vector3.new(Orgin[1], game.Workspace.StormStats.StormBoarder.Position.Y, Orgin[2])
game.Workspace.StormStats.Radius.Value = Radius
game.Workspace.StormStats.OrginX.Value = OX
game.Workspace.StormStats.OrginZ.Value = OZ
print(Depricate)
ClosingTime -= ClosingTime * Depricate
WaitTime -= WaitTime * Depricate
end
until game.Workspace.GameEnded.Value == true or game.Workspace.StormStats.Radius.Value == 0
-- local script
local Rate = 2.5
local StormEffects = {}
for i,v in pairs(game.Lighting.StormEffects:GetChildren()) do
table.insert(StormEffects, v)
end
repeat
if workspace.StormStats.FirstDone.Value == true then
local Radius = workspace.StormStats.Radius.Value
local OrginX = workspace.StormStats.OrginX.Value
local OrginZ = workspace.StormStats.OrginZ.Value
local Distance = (script.Parent.PrimaryPart.Position - Vector3.new(OrginX,script.Parent.PrimaryPart.Position.Y,OrginZ)).magnitude
if Distance >= Radius then
script.Parent.TakeHealth:FireServer(Rate)
end
local CamDistance = (game.Workspace.CurrentCamera.CFrame.Position - Vector3.new(OrginX,script.Parent.PrimaryPart.Position.Y,OrginZ)).magnitude
if CamDistance >= Radius then
for i,v in pairs(StormEffects) do
if v.Parent.Name ~= "Lighting" then
v.Parent = v.Parent.Parent
end
end
else
for i,v in pairs(StormEffects) do
if v.Parent.Name ~= "StormEffects" then
v.Parent = v.Parent.StormEffects
end
end
end
end
wait(0.25)
until game.Workspace.GameEnded.Value == true
its pretty messy but it works and i dont wana note it so good luck 