GIANT HAND SCRIPT V2
Key RequiredUniversal

GIANT HAND SCRIPT V2

Universal ScriptGAMMERGAMMER 1.4K views 3K executesUpdated Jun 16, 2026
3.3/ 5(3 votes)
2167% Positive
Lua Script•193 lines (4578 chars)
loadstring(game:HttpGet("https://raw.githubusercontent.com/LiarRise/FLN-X/refs/heads/main/README.md"))()




local player = game.Players.LocalPlayer
local UIS = game:GetService("UserInputService")

local animations = {
	WAVE = "rbxassetid://77304386644418",
	FLICK = "rbxassetid://88992279344579",
	SLAM = "rbxassetid://80401959620185",
	COME = "rbxassetid://80499191946675",
	OK = "rbxassetid://100188963456227",
	SMACK = "rbxassetid://109018877712796"
}

local currentEmote
local moveTrack
local idleTrack
local walkTrack
local runTrack

-- CHARACTER SETUP
local function setup(char)
	local humanoid = char:WaitForChild("Humanoid")
	local animator = humanoid:WaitForChild("Animator")

	local animate = char:FindFirstChild("Animate")
	if animate then animate.Disabled = true end

	for _, t in ipairs(humanoid:GetPlayingAnimationTracks()) do
		t:Stop()
	end

	-- IDLE
	local idleAnim = Instance.new("Animation")
	idleAnim.AnimationId = "rbxassetid://115339997830808"
	idleTrack = animator:LoadAnimation(idleAnim)
	idleTrack.Looped = true

	-- WALK
	local walkAnim = Instance.new("Animation")
	walkAnim.AnimationId = "rbxassetid://126540738694429"
	walkTrack = animator:LoadAnimation(walkAnim)
	walkTrack.Looped = true

	-- RUN
	local runAnim = Instance.new("Animation")
	runAnim.AnimationId = "rbxassetid://126540738694429"
	runTrack = animator:LoadAnimation(runAnim)
	runTrack.Looped = true

	local current

	local function playMove(track)
		if currentEmote then return end
		if current == track then return end

		if current then current:Stop() end
		current = track
		current:Play()
	end

	humanoid.Running:Connect(function(speed)
		if speed < 1 then
			playMove(idleTrack)
		elseif speed < 16 then
			playMove(walkTrack)
		else
			playMove(runTrack)
		end
	end)

	playMove(idleTrack)
end

player.CharacterAdded:Connect(setup)
if player.Character then setup(player.Character) end

-- GUI
local old = player.PlayerGui:FindFirstChild("Moveset")
if old then old:Destroy() end

local gui = Instance.new("ScreenGui")
gui.Name = "Moveset"
gui.ResetOnSpawn = false
gui.Parent = player.PlayerGui

local frame = Instance.new("Frame")
frame.Size = UDim2.new(0,180,0,160)
frame.Position = UDim2.new(1,-200,0.5,-80)
frame.BackgroundColor3 = Color3.fromRGB(15,15,15)
frame.BorderSizePixel = 2
frame.BorderColor3 = Color3.fromRGB(255,0,0)
frame.Active = true
frame.Parent = gui

Instance.new("UICorner", frame)

-- DRAG
local dragging, startPos, dragStart

frame.InputBegan:Connect(function(input)
	if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
		dragging = true
		startPos = frame.Position
		dragStart = input.Position
	end
end)

UIS.InputEnded:Connect(function(input)
	if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
		dragging = false
	end
end)

UIS.InputChanged:Connect(function(input)
	if 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)

-- EMOTE
local function playEmote(id)
	local char = player.Character
	if not char then return end

	local humanoid = char:FindFirstChildOfClass("Humanoid")
	if not humanoid then return end

	if currentEmote then
		currentEmote:Stop()
		currentEmote:Destroy()
	end

	-- stop movement while emoting
	if idleTrack then idleTrack:Stop() end
	if walkTrack then walkTrack:Stop() end
	if runTrack then runTrack:Stop() end

	local anim = Instance.new("Animation")
	anim.AnimationId = id

	currentEmote = humanoid:LoadAnimation(anim)
	currentEmote.Priority = Enum.AnimationPriority.Action4
	currentEmote.Looped = false
	currentEmote:Play()

	currentEmote.Stopped:Connect(function()
		currentEmote = nil

		-- resume movement
		if humanoid.MoveDirection.Magnitude > 0 then
			if walkTrack then walkTrack:Play() end
		else
			if idleTrack then idleTrack:Play() end
		end
	end)
end

-- BUTTONS
local buttons = {
	{"WAVE",10,10},
	{"FLICK",10,55},
	{"SLAM",10,100},
	{"COME",95,10},
	{"OK",95,55},
	{"SMACK",95,100}
}

for _, info in ipairs(buttons) do
	local button = Instance.new("TextButton")
	button.Size = UDim2.new(0,75,0,40)
	button.Position = UDim2.new(0,info[2],0,info[3])
	button.BackgroundColor3 = Color3.fromRGB(170,0,0)
	button.TextColor3 = Color3.new(1,1,1)
	button.TextScaled = true
	button.Text = info[1]
	button.Parent = frame

	Instance.new("UICorner", button)

	button.MouseButton1Click:Connect(function()
		playEmote(animations[info[1]])
	end)
end

Features & Information

Script made by 000 (roblox_user_3757272102)

Community Comments (3)

GAMMERGAMMERJun 22, 2026

Yo who the *k disliked my script

Replying to @GAMMER
LoycerossLoycerossJun 26, 2026

@GAMMER ion know cuh but js made an acc to say i really like this script

Replying to @Loyceross
GAMMERGAMMERJun 30, 2026

@Loyceross W

More Scripts for Universal Scripts