this code.
local TweenService = game:GetService("TweenService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local BASE_SIZE = 150
local WINDUP_SIZE = BASE_SIZE * 25
local MIN_SIZE = 15
local FLOAT_HEIGHT = 2
local FLOAT_DURATION = 2
local WINDUP_DURATION = 9.25
local APPEAR_DELAY = 0.5
local SHRINK_DURATION = 3.25
local BASE_TEXTURE_SPEED = 0.325
local WINDUP_TEXTURE_SPEED = 50
local DAMAGE_INTERVAL = 0.125
local DAMAGE_AMOUNT = 2.5
-- Track damaged players
local damagedPlayers = {}
local active = true
-- Create a container for all visual elements
local container = Instance.new("Folder")
container.Name = "BeamVisuals"
container.Parent = workspace
-- Create attachments directly in workspace
local attachment1 = Instance.new("Attachment")
attachment1.Name = "Attachment1"
attachment1.Position = Vector3.new(0, 0, -1 * BASE_SIZE)
attachment1.Parent = container
local attachment2 = Instance.new("Attachment")
attachment2.Name = "Attachment2"
attachment2.Position = Vector3.new(0, 0, 1 * BASE_SIZE)
attachment2.Parent = container
local redAttachment1 = Instance.new("Attachment")
redAttachment1.Name = "RedAttachment1"
redAttachment1.Position = Vector3.new(0, 0, -1 * BASE_SIZE)
redAttachment1.Parent = container
local redAttachment2 = Instance.new("Attachment")
redAttachment2.Name = "RedAttachment2"
redAttachment2.Position = Vector3.new(0, 0, 1 * BASE_SIZE)
redAttachment2.Parent = container
-- Create beams
local beam1 = Instance.new("Beam")
beam1.CurveSize1 = -1.35 * BASE_SIZE
beam1.CurveSize0 = 1.35 * BASE_SIZE
beam1.LightInfluence = 1
beam1.Segments = 999
beam1.TextureSpeed = BASE_TEXTURE_SPEED
beam1.Width1 = 999999
beam1.Width0 = 999999
beam1.Transparency = NumberSequence.new(0)
beam1.TextureLength = 5
beam1.LightEmission = 0.75
beam1.Texture = "rbxassetid://124670965229302"
beam1.Attachment0 = attachment1
beam1.Attachment1 = attachment2
beam1.Enabled = false
beam1.Parent = container
local beam2 = Instance.new("Beam")
beam2.CurveSize1 = 1.35 * BASE_SIZE
beam2.CurveSize0 = -1.35 * BASE_SIZE
beam2.LightInfluence = 1
beam2.Segments = 999
beam2.TextureSpeed = -BASE_TEXTURE_SPEED
beam2.Width1 = 999999
beam2.Width0 = 999999
beam2.Transparency = NumberSequence.new(0)
beam2.TextureLength = 5
beam2.LightEmission = 0.75
beam2.Texture = "rbxassetid://124670965229302"
beam2.Attachment0 = attachment1
beam2.Attachment1 = attachment2
beam2.Enabled = false
beam2.Parent = container
local redBeam1 = Instance.new("Beam")
redBeam1.CurveSize1 = -1.35 * BASE_SIZE
redBeam1.CurveSize0 = 1.35 * BASE_SIZE
redBeam1.LightInfluence = 1
redBeam1.Segments = 999
redBeam1.TextureSpeed = BASE_TEXTURE_SPEED
redBeam1.Width1 = 999999
redBeam1.Width0 = 999999
redBeam1.Transparency = NumberSequence.new(0)
redBeam1.TextureLength = 5
redBeam1.LightEmission = 1.5
redBeam1.Color = ColorSequence.new(Color3.fromRGB(255, 0, 0))
redBeam1.Texture = "rbxassetid://124670965229302"
redBeam1.Attachment0 = redAttachment1
redBeam1.Attachment1 = redAttachment2
redBeam1.Enabled = false
redBeam1.Parent = container
local redBeam2 = Instance.new("Beam")
redBeam2.CurveSize1 = 1.35 * BASE_SIZE
redBeam2.CurveSize0 = -1.35 * BASE_SIZE
redBeam2.LightInfluence = 1
redBeam2.Segments = 999
redBeam2.TextureSpeed = -BASE_TEXTURE_SPEED
redBeam2.Width1 = 999999
redBeam2.Width0 = 999999
redBeam2.Transparency = NumberSequence.new(0)
redBeam2.TextureLength = 5
redBeam2.LightEmission = 1.5
redBeam2.Color = ColorSequence.new(Color3.fromRGB(255, 0, 0))
redBeam2.Texture = "rbxassetid://124670965229302"
redBeam2.Attachment0 = redAttachment1
redBeam2.Attachment1 = redAttachment2
redBeam2.Enabled = false
redBeam2.Parent = container
-- Create billboard gui for center visual
local billboard = Instance.new("BillboardGui")
billboard.AlwaysOnTop = true
billboard.Size = UDim2.new(1.25, 0, 1.25, 0)
billboard.StudsOffset = Vector3.new(0, 3.5, 0)
billboard.Adornee = attachment1 -- Use attachment as reference
billboard.Parent = container
local outline = Instance.new("Frame")
outline.AnchorPoint = Vector2.new(0.5, 0.5)
outline.Position = UDim2.new(0.5, 0, 0.5, 0)
outline.Size = UDim2.new(1, 4, 1, 4)
outline.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
outline.BorderSizePixel = 0
outline.Rotation = 45
outline.Parent = billboard
local diamond = Instance.new("Frame")
diamond.AnchorPoint = Vector2.new(0.5, 0.5)
diamond.Position = UDim2.new(0.5, 0, 0.5, 0)
diamond.Size = UDim2.new(1, 0, 1, 0)
diamond.BackgroundColor3 = Color3.fromRGB(0, 170, 255)
diamond.BackgroundTransparency = 0
diamond.BorderSizePixel = 0
diamond.Rotation = 45
diamond.Parent = billboard
-- Float animation for the attachments
local function floatAnimation()
local startPos1 = attachment1.Position
local startPos2 = attachment2.Position
local tween1 = TweenService:Create(attachment1, TweenInfo.new(FLOAT_DURATION, Enum.EasingStyle.Quad, Enum.EasingDirection.InOut, -1, true), {
Position = startPos1 + Vector3.new(0, FLOAT_HEIGHT, 0)
})
local tween2 = TweenService:Create(attachment2, TweenInfo.new(FLOAT_DURATION, Enum.EasingStyle.Quad, Enum.EasingDirection.InOut, -1, true), {
Position = startPos2 + Vector3.new(0, FLOAT_HEIGHT, 0)
})
tween1:Play()
tween2:Play()
end
local function flickerBeams(intensity, speed)
local flickerTime = 0
local flickerConnection = RunService.Heartbeat:Connect(function(deltaTime)
flickerTime = flickerTime + deltaTime * speed
local flickerValue = (math.sin(flickerTime * 10) + 1) / 2 * intensity
beam1.LightEmission = 0.75 + flickerValue
beam2.LightEmission = 0.75 + flickerValue
end)
return flickerConnection
end
local function checkPlayers(currentSize)
if not active then return end
local playersAlive = 0
local players = Players:GetPlayers()
for _, player in ipairs(players) do
local character = player.Character
if character and not damagedPlayers[player] then
local humanoid = character:FindFirstChildOfClass("Humanoid")
if humanoid and humanoid.Health > 0 then
playersAlive = playersAlive + 1
local rootPart = character:FindFirstChild("HumanoidRootPart")
if rootPart then
local pos = rootPart.Position
local distance = Vector3.new(pos.X, 0, pos.Z).Magnitude
if distance > currentSize or distance < 5 then
humanoid:TakeDamage(DAMAGE_AMOUNT)
if humanoid.Health <= 0 then
damagedPlayers[player] = true
end
end
end
else
damagedPlayers[player] = true
end
end
end
if playersAlive == 0 then
active = false
container:Destroy()
end
end
local function windUpEffect()
redBeam1.Enabled = true
redBeam2.Enabled = true
TweenService:Create(diamond, TweenInfo.new(0.5, Enum.EasingStyle.Quad), {
BackgroundColor3 = Color3.fromRGB(255, 0, 0),
Size = UDim2.new(6, 0, 6, 0)
}):Play()
beam1.CurveSize1 = -1.35 * WINDUP_SIZE
beam1.CurveSize0 = 1.35 * WINDUP_SIZE
beam2.CurveSize1 = 1.35 * WINDUP_SIZE
beam2.CurveSize0 = -1.35 * WINDUP_SIZE
attachment1.Position = Vector3.new(0, 0, -1 * WINDUP_SIZE)
attachment2.Position = Vector3.new(0, 0, 1 * WINDUP_SIZE)
beam1.TextureSpeed = WINDUP_TEXTURE_SPEED
beam2.TextureSpeed = -WINDUP_TEXTURE_SPEED
local flickerConnection = flickerBeams(0.5, 10)
local windupTweenInfo = TweenInfo.new(WINDUP_DURATION, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut)
local beam1Tween = TweenService:Create(beam1, windupTweenInfo, {
CurveSize1 = -1.35 * BASE_SIZE,
CurveSize0 = 1.35 * BASE_SIZE,
TextureSpeed = BASE_TEXTURE_SPEED
})
local beam2Tween = TweenService:Create(beam2, windupTweenInfo, {
CurveSize1 = 1.35 * BASE_SIZE,
CurveSize0 = -1.35 * BASE_SIZE,
TextureSpeed = -BASE_TEXTURE_SPEED
})
local attachment1Tween = TweenService:Create(attachment1, windupTweenInfo, {
Position = Vector3.new(0, 0, -1 * BASE_SIZE)
})
local attachment2Tween = TweenService:Create(attachment2, windupTweenInfo, {
Position = Vector3.new(0, 0, 1 * BASE_SIZE)
})
beam1Tween:Play()
beam2Tween:Play()
attachment1Tween:Play()
attachment2Tween:Play()
-- Start damage checking during windup
local damageCheckConnection
damageCheckConnection = RunService.Heartbeat:Connect(function()
checkPlayers(WINDUP_SIZE)
end)
task.delay(WINDUP_DURATION * 0.75, function()
flickerConnection:Disconnect()
flickerConnection = flickerBeams(0.2, 5)
end)
task.delay(WINDUP_DURATION, function()
flickerConnection:Disconnect()
damageCheckConnection:Disconnect()
beam1.LightEmission = 0.75
beam2.LightEmission = 0.75
redBeam1.Enabled = false
redBeam2.Enabled = false
TweenService:Create(diamond, TweenInfo.new(0.5, Enum.EasingStyle.Quad), {
BackgroundColor3 = Color3.fromRGB(0, 170, 255),
Size = UDim2.new(1, 0, 1, 0)
}):Play()
end)
end
local function shrinkEffect()
local tweenInfo = TweenInfo.new(SHRINK_DURATION, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
local currentSize = BASE_SIZE
-- Start damage checking during shrink
local damageCheckConnection
damageCheckConnection = RunService.Heartbeat:Connect(function()
checkPlayers(currentSize)
end)
while currentSize > MIN_SIZE and active do
local targetSize = math.max(currentSize - 1, MIN_SIZE)
TweenService:Create(beam1, tweenInfo, {CurveSize1 = -1.35 * targetSize}):Play()
TweenService:Create(beam1, tweenInfo, {CurveSize0 = 1.35 * targetSize}):Play()
TweenService:Create(beam2, tweenInfo, {CurveSize1 = 1.35 * targetSize}):Play()
TweenService:Create(beam2, tweenInfo, {CurveSize0 = -1.35 * targetSize}):Play()
TweenService:Create(attachment1, tweenInfo, {Position = Vector3.new(0, 0, -1 * targetSize)}):Play()
TweenService:Create(attachment2, tweenInfo, {Position = Vector3.new(0, -0.25 * targetSize, 1 * targetSize)}):Play()
currentSize = targetSize
task.wait(0.2)
end
damageCheckConnection:Disconnect()
end
-- Initialize the effect
task.delay(APPEAR_DELAY, function()
beam1.Enabled = true
beam2.Enabled = true
floatAnimation()
windUpEffect()
task.delay(WINDUP_DURATION, shrinkEffect)
end)
make it that the damage range completely matches with the size of the circle and everything.