
KeylessUniversal

loadstring([[
local CoreGui = game:GetService("CoreGui")
local Players = game:GetService("Players")
local VIM = game:GetService("VirtualInputManager")
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
if CoreGui:FindFirstChild("DragonSideClickerV2") then
CoreGui.DragonSideClickerV2:Destroy()
end
local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "DragonSideClickerV2"
ScreenGui.Parent = CoreGui
ScreenGui.ResetOnSpawn = false
-- Hardcoded Main Menu Panel (Height extended slightly to 200 to fit the "?" button comfortably)
local SidePanel = Instance.new("Frame")
SidePanel.Size = UDim2.new(0, 110, 0, 200)
SidePanel.Position = UDim2.new(1, -150, 0.35, 0)
SidePanel.BackgroundColor3 = Color3.fromRGB(220, 220, 220)
SidePanel.BackgroundTransparency = 0.35
SidePanel.Active = true
SidePanel.Parent = ScreenGui
local PanelCorner = Instance.new("UICorner")
PanelCorner.CornerRadius = UDim.new(0, 12)
PanelCorner.Parent = SidePanel
local ClickPositions = {}
local IsClicking = false
local ClickConnection = nil
local function makeElementDraggableWithBorders(element, isMainPanel)
local dragging = false
local dragInput, dragStart, startPos
element.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
dragging = true
element:SetAttribute("BeingDragged", true)
if not isMainPanel then
element.BackgroundTransparency = 0.8
end
dragStart = input.Position
startPos = element.Position
input.Changed:Connect(function()
if input.UserInputState == Enum.UserInputState.End then
dragging = false
element:SetAttribute("BeingDragged", false)
if not isMainPanel then
element.BackgroundTransparency = 0.4
end
end
end)
end
end)
element.InputChanged:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then
dragInput = input
end
end)
UserInputService.InputChanged:Connect(function(input)
if input == dragInput and dragging then
local delta = input.Position - dragStart
local newOffsetX = startPos.X.Offset + delta.X
local newOffsetY = startPos.Y.Offset + delta.Y
local screenSize = ScreenGui.AbsoluteSize
if isMainPanel then
local maxBoundsX = screenSize.X - element.AbsoluteSize.X
local maxBoundsY = screenSize.Y - element.AbsoluteSize.Y
local clampedX = math.clamp(newOffsetX, 0, maxBoundsX)
local clampedY = math.clamp(newOffsetY, 0, maxBoundsY)
element.Position = UDim2.new(0, clampedX, 0, clampedY)
else
element.Position = UDim2.new(0, newOffsetX, 0, newOffsetY)
end
end
end)
end
makeElementDraggableWithBorders(SidePanel, true)
local function createBlockBtn(color, sizeX, sizeY, posX, posY, text, textSize, parent)
local btn = Instance.new("TextButton")
btn.Size = UDim2.new(0, sizeX, 0, sizeY)
btn.Position = UDim2.new(0, posX, 0, posY)
btn.BackgroundColor3 = color
btn.Text = text
btn.TextColor3 = Color3.fromRGB(255, 255, 255)
btn.Font = Enum.Font.SourceSansBold
btn.TextSize = textSize
btn.AutoButtonColor = true
btn.Parent = parent
local btnCorner = Instance.new("UICorner")
btnCorner.CornerRadius = UDim.new(0, 8)
btnCorner.Parent = btn
return btn
end
-- Menu Buttons Stack
local SpawnBtn = createBlockBtn(Color3.fromRGB(52, 152, 219), 94, 36, 8, 12, "+", 24, SidePanel)
local PlayBtn = createBlockBtn(Color3.fromRGB(46, 204, 113), 94, 36, 8, 58, "Start", 18, SidePanel)
local PauseBtn = createBlockBtn(Color3.fromRGB(231, 76, 60), 94, 36, 8, 104, "Clear/Stop", 16, SidePanel)
-- Purple Info Button at the bottom
local InfoBtn = createBlockBtn(Color3.fromRGB(142, 68, 173), 94, 36, 8, 150, "?", 20, SidePanel)
-- Credits Pop-Up UI Window (Hidden by default)
local CreditsFrame = Instance.new("Frame")
CreditsFrame.Size = UDim2.new(0, 240, 0, 130)
CreditsFrame.Position = UDim2.new(0.5, -120, 0.4, -65)
CreditsFrame.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
CreditsFrame.BorderSizePixel = 0
CreditsFrame.Visible = false
CreditsFrame.Active = true
CreditsFrame.Parent = ScreenGui
local CreditsCorner = Instance.new("UICorner")
CreditsCorner.CornerRadius = UDim.new(0, 10)
CreditsCorner.Parent = CreditsFrame
-- Credits Content text wrapper
local InfoText = Instance.new("TextLabel")
InfoText.Size = UDim2.new(1, -16, 1, -24)
InfoText.Position = UDim2.new(0, 8, 0, 20)
InfoText.BackgroundTransparency = 1
InfoText.Text = "singularity_scripts on scriptblox\nthebakerconbacon on roblox\n\nMADE BY GEMINI AI"
InfoText.TextColor3 = Color3.fromRGB(240, 240, 240)
InfoText.Font = Enum.Font.SourceSansBold
InfoText.TextSize = 15
InfoText.TextWrapped = true
InfoText.Parent = CreditsFrame
-- 'X' Close button for info menu
local CloseInfoBtn = Instance.new("TextButton")
CloseInfoBtn.Size = UDim2.new(0, 24, 0, 24)
CloseInfoBtn.Position = UDim2.new(1, -28, 0, 4)
CloseInfoBtn.BackgroundTransparency = 1
CloseInfoBtn.Text = "X"
CloseInfoBtn.TextColor3 = Color3.fromRGB(231, 76, 60)
CloseInfoBtn.Font = Enum.Font.SourceSansBold
CloseInfoBtn.TextSize = 18
CloseInfoBtn.Parent = CreditsFrame
-- Interactive Handlers for the Info Overlay
InfoBtn.MouseButton1Click:Connect(function()
CreditsFrame.Visible = true
end)
CloseInfoBtn.MouseButton1Click:Connect(function()
CreditsFrame.Visible = false
end)
-- Main logic loops
SpawnBtn.MouseButton1Click:Connect(function()
if #ClickPositions >= 1 then return end
local TargetBox = Instance.new("Frame")
TargetBox.Size = UDim2.new(0, 50, 0, 50)
local screenCenter = ScreenGui.AbsoluteSize
TargetBox.Position = UDim2.new(0, (screenCenter.X / 2) - 25, 0, (screenCenter.Y / 2) - 25)
TargetBox.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
TargetBox.BackgroundTransparency = 0.4
TargetBox.Active = true
TargetBox.Parent = ScreenGui
local boxCorner = Instance.new("UICorner")
boxCorner.CornerRadius = UDim.new(0, 8)
boxCorner.Parent = TargetBox
local CenterDot = Instance.new("Frame")
CenterDot.Size = UDim2.new(0, 6, 0, 6)
CenterDot.Position = UDim2.new(0.5, -3, 0.5, -3)
CenterDot.BackgroundColor3 = Color3.fromRGB(52, 152, 219)
CenterDot.Parent = TargetBox
TargetBox:SetAttribute("BeingDragged", false)
makeElementDraggableWithBorders(TargetBox, false)
table.insert(ClickPositions, TargetBox)
end)
PlayBtn.MouseButton1Click:Connect(function()
if IsClicking then return end
IsClicking = true
ClickConnection = RunService.Heartbeat:Connect(function()
for _, box in ipairs(ClickPositions) do
if box and box.Parent and box:GetAttribute("BeingDragged") == false then
local targetX = box.AbsolutePosition.X + (box.AbsoluteSize.X / 2)
local targetY = box.AbsolutePosition.Y + (box.AbsoluteSize.Y / 2)
for i = 1, 5 do
VIM:SendMouseButtonEvent(targetX, targetY, 0, true, game, 1)
VIM:SendMouseButtonEvent(targetX, targetY, 0, false, game, 1)
end
end
end
end)
end)
PauseBtn.MouseButton1Click:Connect(function()
IsClicking = false
if ClickConnection then
ClickConnection:Disconnect()
ClickConnection = nil
end
for _, box in ipairs(ClickPositions) do
if box and box.Parent then
box:Destroy()
end
end
table.clear(ClickPositions)
end)
]])()



NEW UPDATE! - Added Text Added Credits
can you add you can move the cursor around??
very good for mobile i approve 👍