
KeylessUniversal

-- Gallhealer Generator (LocalScript)
-- Place this LocalScript in StarterPlayerScripts
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local Debris = game:GetService("Debris")
local Player = Players.LocalPlayer
local Character = Player.Character or Player.CharacterAdded:Wait()
local Humanoid = Character:WaitForChild("Humanoid")
-- Teal Colors (dark to light, 15 colors)
local tealColors = {
Color3.fromRGB(0, 60, 70),
Color3.fromRGB(0, 80, 90),
Color3.fromRGB(0, 100, 110),
Color3.fromRGB(0, 120, 128),
Color3.fromRGB(0, 128, 128),
Color3.fromRGB(0, 139, 139),
Color3.fromRGB(0, 150, 150),
Color3.fromRGB(0, 160, 160),
Color3.fromRGB(32, 178, 170),
Color3.fromRGB(64, 190, 180),
Color3.fromRGB(72, 200, 190),
Color3.fromRGB(100, 210, 200),
Color3.fromRGB(128, 220, 210),
Color3.fromRGB(150, 230, 220),
Color3.fromRGB(175, 238, 238),
}
local cooldown = false
local cooldownTime = 1
local colorCycleConnection = nil
local particleConnection = nil
local glowPulseConnection = nil
-- Random Color Cycle Function
local function StartColorCycle(handle)
if colorCycleConnection then
colorCycleConnection:Disconnect()
colorCycleConnection = nil
end
local timer = 0
local interval = 1 / 3
colorCycleConnection = RunService.Heartbeat:Connect(function(dt)
if not handle or not handle.Parent then
colorCycleConnection:Disconnect()
colorCycleConnection = nil
return
end
timer = timer + dt
if timer >= interval then
timer = timer - interval
local randomIndex = math.random(1, #tealColors)
handle.Color = tealColors[randomIndex]
end
end)
end
-- Stop Color Cycle
local function StopColorCycle()
if colorCycleConnection then
colorCycleConnection:Disconnect()
colorCycleConnection = nil
end
end
-- Glow Pulse using PointLight
local function StartGlow(handle)
if glowPulseConnection then
glowPulseConnection:Disconnect()
glowPulseConnection = nil
end
-- Remove old light if exists
local oldLight = handle:FindFirstChild("GallLight")
if oldLight then oldLight:Destroy() end
-- Create PointLight for greenish teal glow
local light = Instance.new("PointLight")
light.Name = "GallLight"
light.Color = Color3.fromRGB(0, 210, 150) -- greenish teal
light.Brightness = 3
light.Range = 16
light.Shadows = true
light.Parent = handle
-- Pulse the glow smoothly
local timer = 0
glowPulseConnection = RunService.Heartbeat:Connect(function(dt)
if not handle or not handle.Parent then
glowPulseConnection:Disconnect()
glowPulseConnection = nil
return
end
timer = timer + dt
-- Smooth sine wave pulse between brightness 2 and 5
light.Brightness = 3 + math.sin(timer * 2) * 2
-- Slightly shift color between green-teal and pure teal
light.Color = Color3.fromRGB(
0,
math.floor(190 + math.sin(timer * 1.5) * 20),
math.floor(140 + math.cos(timer * 1.5) * 15)
)
end)
end
-- Stop Glow
local function StopGlow(handle)
if glowPulseConnection then
glowPulseConnection:Disconnect()
glowPulseConnection = nil
end
if handle then
local light = handle:FindFirstChild("GallLight")
if light then light:Destroy() end
end
end
-- Floating Particles around the handle
local function StartParticles(handle)
if particleConnection then
particleConnection:Disconnect()
particleConnection = nil
end
local attachment = Instance.new("Attachment")
attachment.Name = "ParticleAttachment"
attachment.Position = Vector3.new(0, 0, 0)
attachment.Parent = handle
-- Main sparkle particles
local emitter = Instance.new("ParticleEmitter")
emitter.Name = "GallParticles"
emitter.Texture = "rbxassetid://242102612"
emitter.Color = ColorSequence.new({
ColorSequenceKeypoint.new(0, tealColors[1]),
ColorSequenceKeypoint.new(0.25, tealColors[5]),
ColorSequenceKeypoint.new(0.5, tealColors[8]),
ColorSequenceKeypoint.new(0.75, tealColors[12]),
ColorSequenceKeypoint.new(1, tealColors[15]),
})
emitter.LightEmission = 1
emitter.LightInfluence = 0
emitter.Size = NumberSequence.new({
NumberSequenceKeypoint.new(0, 0.05),
NumberSequenceKeypoint.new(0.5, 0.12),
NumberSequenceKeypoint.new(1, 0),
})
emitter.Transparency = NumberSequence.new({
NumberSequenceKeypoint.new(0, 0.2),
NumberSequenceKeypoint.new(0.8, 0.6),
NumberSequenceKeypoint.new(1, 1),
})
emitter.Lifetime = NumberRange.new(0.5, 1.2)
emitter.Rate = 30
emitter.Speed = NumberRange.new(0.5, 2)
emitter.SpreadAngle = Vector2.new(180, 180)
emitter.RotSpeed = NumberRange.new(-90, 90)
emitter.Rotation = NumberRange.new(0, 360)
emitter.Parent = attachment
-- Floating orb particles
local orbEmitter = Instance.new("ParticleEmitter")
orbEmitter.Name = "OrbParticles"
orbEmitter.Texture = "rbxassetid://1266170131"
orbEmitter.Color = ColorSequence.new({
ColorSequenceKeypoint.new(0, tealColors[3]),
ColorSequenceKeypoint.new(0.5, tealColors[9]),
ColorSequenceKeypoint.new(1, tealColors[14]),
})
orbEmitter.LightEmission = 1
orbEmitter.LightInfluence = 0
orbEmitter.Size = NumberSequence.new({
NumberSequenceKeypoint.new(0, 0),
NumberSequenceKeypoint.new(0.3, 0.18),
NumberSequenceKeypoint.new(1, 0),
})
orbEmitter.Transparency = NumberSequence.new({
NumberSequenceKeypoint.new(0, 0.1),
NumberSequenceKeypoint.new(0.7, 0.5),
NumberSequenceKeypoint.new(1, 1),
})
orbEmitter.Lifetime = NumberRange.new(0.8, 1.5)
orbEmitter.Rate = 15
orbEmitter.Speed = NumberRange.new(0.3, 1.5)
orbEmitter.SpreadAngle = Vector2.new(180, 180)
orbEmitter.RotSpeed = NumberRange.new(-45, 45)
orbEmitter.Rotation = NumberRange.new(0, 360)
orbEmitter.Parent = attachment
-- Rising mist particles
local mistEmitter = Instance.new("ParticleEmitter")
mistEmitter.Name = "MistParticles"
mistEmitter.Texture = "rbxassetid://255531807"
mistEmitter.Color = ColorSequence.new({
ColorSequenceKeypoint.new(0, tealColors[6]),
ColorSequenceKeypoint.new(1, tealColors[13]),
})
mistEmitter.LightEmission = 0.8
mistEmitter.LightInfluence = 0.2
mistEmitter.Size = NumberSequence.new({
NumberSequenceKeypoint.new(0, 0.1),
NumberSequenceKeypoint.new(0.5, 0.3),
NumberSequenceKeypoint.new(1, 0),
})
mistEmitter.Transparency = NumberSequence.new({
NumberSequenceKeypoint.new(0, 0.5),
NumberSequenceKeypoint.new(0.5, 0.75),
NumberSequenceKeypoint.new(1, 1),
})
mistEmitter.Lifetime = NumberRange.new(1, 2)
mistEmitter.Rate = 10
mistEmitter.Speed = NumberRange.new(0.5, 1)
mistEmitter.SpreadAngle = Vector2.new(30, 30)
mistEmitter.RotSpeed = NumberRange.new(-20, 20)
mistEmitter.Rotation = NumberRange.new(0, 360)
mistEmitter.VelocityInheritance = 0
mistEmitter.Parent = attachment
-- Update particle colors randomly over time
particleConnection = RunService.Heartbeat:Connect(function()
if not handle or not handle.Parent then
particleConnection:Disconnect()
particleConnection = nil
return
end
local r1 = math.random(1, #tealColors)
local r2 = math.random(1, #tealColors)
local r3 = math.random(1, #tealColors)
emitter.Color = ColorSequence.new({
ColorSequenceKeypoint.new(0, tealColors[r1]),
ColorSequenceKeypoint.new(0.5, tealColors[r2]),
ColorSequenceKeypoint.new(1, tealColors[r3]),
})
orbEmitter.Color = ColorSequence.new({
ColorSequenceKeypoint.new(0, tealColors[r2]),
ColorSequenceKeypoint.new(0.5, tealColors[r3]),
ColorSequenceKeypoint.new(1, tealColors[r1]),
})
end)
end
-- Stop Particles
local function StopParticles(handle)
if particleConnection then
particleConnection:Disconnect()
particleConnection = nil
end
if handle then
local attachment = handle:FindFirstChild("ParticleAttachment")
if attachment then
for _, emitter in ipairs(attachment:GetChildren()) do
if emitter:IsA("ParticleEmitter") then
emitter.Enabled = false
end
end
Debris:AddItem(attachment, 2)
end
end
end
-- Shockwave Effect
local function CreateShockwave()
Character = Player.Character
if not Character then return end
local hrp = Character:FindFirstChild("HumanoidRootPart")
if not hrp then return end
local shockwave = Instance.new("Part")
shockwave.Shape = Enum.PartType.Cylinder
shockwave.Size = Vector3.new(0.3, 1, 1)
shockwave.CFrame = hrp.CFrame * CFrame.new(0, -2, 0) * CFrame.Angles(0, 0, math.rad(90))
shockwave.Anchored = true
shockwave.CanCollide = false
shockwave.CastShadow = false
shockwave.Material = Enum.Material.Neon
shockwave.Color = tealColors[math.random(1, #tealColors)]
shockwave.Transparency = 0.2
shockwave.Parent = workspace
-- Glow on shockwave
local shockLight = Instance.new("PointLight")
shockLight.Color = Color3.fromRGB(0, 210, 150)
shockLight.Brightness = 5
shockLight.Range = 20
shockLight.Parent = shockwave
local ring2 = Instance.new("Part")
ring2.Shape = Enum.PartType.Cylinder
ring2.Size = Vector3.new(0.2, 0.5, 0.5)
ring2.CFrame = hrp.CFrame * CFrame.new(0, -1.5, 0) * CFrame.Angles(0, 0, math.rad(90))
ring2.Anchored = true
ring2.CanCollide = false
ring2.CastShadow = false
ring2.Material = Enum.Material.Neon
ring2.Color = tealColors[math.random(1, #tealColors)]
ring2.Transparency = 0.4
ring2.Parent = workspace
-- Shockwave particles
local shockAttachment = Instance.new("Attachment")
shockAttachment.Parent = shockwave
local shockParticle = Instance.new("ParticleEmitter")
shockParticle.Texture = "rbxassetid://242102612"
shockParticle.Color = ColorSequence.new({
ColorSequenceKeypoint.new(0, tealColors[math.random(1, #tealColors)]),
ColorSequenceKeypoint.new(1, tealColors[math.random(1, #tealColors)]),
})
shockParticle.LightEmission = 1
shockParticle.Size = NumberSequence.new({
NumberSequenceKeypoint.new(0, 0.3),
NumberSequenceKeypoint.new(1, 0),
})
shockParticle.Transparency = NumberSequence.new({
NumberSequenceKeypoint.new(0, 0),
NumberSequenceKeypoint.new(1, 1),
})
shockParticle.Lifetime = NumberRange.new(0.2, 0.5)
shockParticle.Rate = 100
shockParticle.Speed = NumberRange.new(2, 5)
shockParticle.SpreadAngle = Vector2.new(180, 180)
shockParticle.Parent = shockAttachment
local steps = 25
local stepTime = 0.35 / steps
for i = 1, steps do
local size = i * 0.7
if not shockwave.Parent then break end
shockwave.Size = Vector3.new(0.3, size, size)
shockwave.CFrame = hrp.CFrame * CFrame.new(0, -2, 0) * CFrame.Angles(0, 0, math.rad(90))
shockwave.Transparency = 0.2 + (i / steps) * 0.8
shockLight.Brightness = 5 - (i / steps) * 5
if not ring2.Parent then break end
ring2.Size = Vector3.new(0.2, size * 0.5, size * 0.5)
ring2.CFrame = hrp.CFrame * CFrame.new(0, -1.5, 0) * CFrame.Angles(0, 0, math.rad(90))
ring2.Transparency = 0.4 + (i / steps) * 0.6
task.wait(stepTime)
end
shockParticle.Enabled = false
Debris:AddItem(shockwave, 1)
Debris:AddItem(ring2, 1)
end
-- Heal Particles Burst
local function CreateHealEffect()
Character = Player.Character
if not Character then return end
local hrp = Character:FindFirstChild("HumanoidRootPart")
if not hrp then return end
for i = 1, 12 do
local particle = Instance.new("Part")
particle.Size = Vector3.new(0.15, 0.15, 0.15)
particle.Shape = Enum.PartType.Ball
particle.Material = Enum.Material.Neon
particle.Color = tealColors[math.random(1, #tealColors)]
particle.Transparency = 0.2
particle.CanCollide = false
particle.Anchored = false
particle.CFrame = hrp.CFrame * CFrame.new(
math.random(-2, 2),
math.random(0, 3),
math.random(-2, 2)
)
particle.Parent = workspace
local bv = Instance.new("BodyVelocity")
bv.Velocity = Vector3.new(
math.random(-6, 6),
math.random(6, 12),
math.random(-6, 6)
)
bv.MaxForce = Vector3.new(1e4, 1e4, 1e4)
bv.Parent = particle
task.spawn(function()
for t = 1, 10 do
task.wait(0.08)
if particle and particle.Parent then
particle.Transparency = 0.2 + (t / 10) * 0.8
particle.Size = particle.Size * 0.85
end
end
end)
Debris:AddItem(particle, 1)
end
end
-- Heal Function
local function HealPlayer()
Character = Player.Character
if not Character then return end
Humanoid = Character:FindFirstChild("Humanoid")
if not Humanoid then return end
Humanoid.MaxHealth = 150
Humanoid.Health = math.min(Humanoid.Health + 30, 150)
end
-- Create the Tool
local function CreateGallhealer()
local oldTool = Player.Backpack:FindFirstChild("Gallhealer")
or (Player.Character and Player.Character:FindFirstChild("Gallhealer"))
if oldTool then oldTool:Destroy() end
StopColorCycle()
-- Create Tool
local tool = Instance.new("Tool")
tool.Name = "Gallhealer"
tool.ToolTip = "I wonder how did it get here..."
tool.RequiresHandle = true
tool.CanBeDropped = false
-- Create Handle (Cube)
local handle = Instance.new("Part")
handle.Name = "Handle"
handle.Size = Vector3.new(1, 1, 1)
handle.Material = Enum.Material.Neon
handle.Shape = Enum.PartType.Block
handle.CanCollide = false
handle.CastShadow = true
handle.Color = tealColors[math.random(1, #tealColors)]
-- Block Mesh
local mesh = Instance.new("BlockMesh")
mesh.Scale = Vector3.new(1, 1, 1)
mesh.Parent = handle
-- Always on dim glow even in backpack
local idleLight = Instance.new("PointLight")
idleLight.Name = "IdleGlow"
idleLight.Color = Color3.fromRGB(0, 210, 150)
idleLight.Brightness = 1.5
idleLight.Range = 10
idleLight.Shadows = false
idleLight.Parent = handle
handle.Parent = tool
-- On Equip
tool.Equipped:Connect(function()
-- Remove idle light and start pulse glow
local idle = handle:FindFirstChild("IdleGlow")
if idle then idle:Destroy() end
StartColorCycle(handle)
StartParticles(handle)
StartGlow(handle)
end)
-- On Unequip
tool.Unequipped:Connect(function()
StopColorCycle()
StopParticles(handle)
StopGlow(handle)
handle.Color = tealColors[math.random(1, #tealColors)]
-- Restore idle dim glow
local idleLight2 = Instance.new("PointLight")
idleLight2.Name = "IdleGlow"
idleLight2.Color = Color3.fromRGB(0, 210, 150)
idleLight2.Brightness = 1.5
idleLight2.Range = 10
idleLight2.Shadows = false
idleLight2.Parent = handle
end)
-- On Activate
tool.Activated:Connect(function()
if cooldown then return end
cooldown = true
task.spawn(CreateShockwave)
task.spawn(CreateHealEffect)
HealPlayer()
task.wait(cooldownTime)
cooldown = false
end)
tool.Parent = Player.Backpack
end
-- On Character Added
local function OnCharacterAdded(char)
Character = char
Humanoid = char:WaitForChild("Humanoid")
StopColorCycle()
StopParticles(nil)
StopGlow(nil)
task.wait(0.5)
CreateGallhealer()
end
Player.CharacterAdded:Connect(OnCharacterAdded)
if Player.Character then
task.spawn(OnCharacterAdded, Player.Character)
endNo comments yet for this script.



