
KeylessUniversal

-- Put this LocalScript in StarterGui
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local StarterGui = game:GetService("StarterGui")
local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")
-- Try to find the SayMessageRequest event used to send chat messages
local function getSayEvent()
local root = ReplicatedStorage:FindFirstChild("DefaultChatSystemChatEvents")
if root and root:FindFirstChild("SayMessageRequest") then
return root:FindFirstChild("SayMessageRequest")
end
-- sometimes games put chat under different places (rare). Try waiting a little.
root = ReplicatedStorage:WaitForChild("DefaultChatSystemChatEvents", 5)
if root then
return root:FindFirstChild("SayMessageRequest")
end
return nil
end
local sayEvent = getSayEvent()
-- Create GUI
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "R6EmotesGUI"
screenGui.ResetOnSpawn = false
screenGui.Parent = playerGui
screenGui.DisplayOrder = 50
local frame = Instance.new("Frame")
frame.Parent = screenGui
frame.Size = UDim2.new(0, 220, 0, 320)
frame.Position = UDim2.new(0.05, 0, 0.25, 0)
frame.BackgroundColor3 = Color3.fromRGB(0,0,0)
frame.BackgroundTransparency = 0.15
frame.Active = true
local uiCorner = Instance.new("UICorner", frame)
uiCorner.CornerRadius = UDim.new(0, 14)
-- Title
local title = Instance.new("TextLabel", frame)
title.Size = UDim2.new(1, -12, 0, 36)
title.Position = UDim2.new(0, 6, 0, 6)
title.BackgroundTransparency = 1
title.Text = "R6 EMOTES"
title.TextScaled = true
title.TextColor3 = Color3.fromRGB(255,255,255)
title.Font = Enum.Font.SourceSansBold
title.TextXAlignment = Enum.TextXAlignment.Center
-- Status label (shows errors)
local status = Instance.new("TextLabel", frame)
status.Size = UDim2.new(1, -12, 0, 22)
status.Position = UDim2.new(0, 6, 0, 46)
status.BackgroundTransparency = 1
status.Text = ""
status.TextScaled = true
status.TextColor3 = Color3.fromRGB(255,200,200)
status.Font = Enum.Font.SourceSans
status.TextXAlignment = Enum.TextXAlignment.Center
-- Container for buttons (scrollable)
local scroller = Instance.new("ScrollingFrame", frame)
scroller.Size = UDim2.new(1, -12, 1, -80)
scroller.Position = UDim2.new(0, 6, 0, 74)
scroller.BackgroundTransparency = 1
scroller.CanvasSize = UDim2.new(0,0,0,0)
scroller.ScrollBarThickness = 6
local layout = Instance.new("UIListLayout", scroller)
layout.Padding = UDim.new(0,6)
layout.SortOrder = Enum.SortOrder.LayoutOrder
layout.HorizontalAlignment = Enum.HorizontalAlignment.Center
-- Emote list (default R6 emotes)
local emotes = {
{name = "Wave", cmd = "/e wave"},
{name = "Point", cmd = "/e point"},
{name = "Cheer", cmd = "/e cheer"},
{name = "Laugh", cmd = "/e laugh"},
{name = "Dance 1", cmd = "/e dance"},
{name = "Dance 2", cmd = "/e dance2"},
{name = "Dance 3", cmd = "/e dance3"},
}
-- debounce map to avoid spam clicking
local debounces = {}
local function sendEmote(command)
if not sayEvent then
status.Text = "Chat event not found. Emotes may be blocked in this game."
return
end
-- basic debounce (1 second)
if debounces[command] then return end
debounces[command] = true
-- Fire server to send chat message which triggers emote if allowed
local ok, err = pcall(function()
sayEvent:FireServer("/e "..command, "All")
end)
if not ok then
status.Text = "Failed to send chat: "..tostring(err)
else
status.Text = "" -- clear any previous error
end
-- clear debounce after short delay
delay(0.9, function()
debounces[command] = nil
end)
end
-- Button creator
local function makeButton(displayName, emoteCmd)
local btn = Instance.new("TextButton")
btn.Size = UDim2.new(0.95, 0, 0, 34)
btn.BackgroundColor3 = Color3.fromRGB(80,80,80)
btn.TextColor3 = Color3.fromRGB(255,255,255)
btn.Text = displayName
btn.TextScaled = true
btn.Font = Enum.Font.SourceSansSemibold
btn.Parent = scroller
local corner = Instance.new("UICorner", btn)
corner.CornerRadius = UDim.new(0,8)
btn.MouseButton1Click:Connect(function()
sendEmote(emoteCmd)
end)
end
-- Create all emote buttons
for _, v in ipairs(emotes) do
makeButton(v.name, v.cmd)
end
-- Update canvas size so scroller fits all buttons
local function updateCanvas()
local contentY = 0
for _, obj in ipairs(scroller:GetChildren()) do
if obj:IsA("TextButton") then
contentY = contentY + obj.AbsoluteSize.Y + layout.Padding.Offset
end
end
scroller.CanvasSize = UDim2.new(0,0,0, contentY + 8)
end
-- Wait for UI to render then update canvas
scroller:GetPropertyChangedSignal("AbsoluteSize"):Connect(updateCanvas)
delay(0.1, updateCanvas)
-- Make frame draggable (works reliably across devices)
local dragging, dragInput, dragStart, startPos
local function onInputBegan(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
dragging = true
dragStart = input.Position
startPos = frame.Position
input.Changed:Connect(function()
if input.UserInputState == Enum.UserInputState.End then
dragging = false
end
end)
end
end
local function onInputChanged(input)
if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then
dragInput = input
end
end
frame.InputBegan:Connect(onInputBegan)
frame.InputChanged:Connect(onInputChanged)
game:GetService("UserInputService").InputChanged:Connect(function(input)
if input == dragInput and dragging then
local delta = input.Position - dragStart
frame.Position = UDim2.new(
startPos.X.Scale,
startPos.X.Offset + delta.X,
startPos.Y.Scale,
startPos.Y.Offset + delta.Y
)
end
end)
-- If the chat event wasn't found, show a friendly message
if not sayEvent then
status.Text = "Chat event not found — emotes may be blocked by this game."
end



@transdimensional get* is better and like undetectable
@slurkyz 99.99% of exploits dont have it and anticheats cannot even reference coregui anymore!