CUSTOM EMOTES
Key RequiredUniversal

CUSTOM EMOTES

Universal ScriptKevin38282Kevin38282 4.5K views 7K executesUpdated Aug 12, 2026
5.0/ 5(1 votes)
10100% Positive
Lua Script•369 lines (12109 chars)
local TweenService = game:GetService("TweenService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")

local player = Players.LocalPlayer

--------------------------------------------------------------------------------
-- 1. STATE TRACKING
--------------------------------------------------------------------------------
local ejecutando = false
local noclipConexion = nil
local saltoConexion = nil
local caminarConexion = nil
local toolConexion = nil
local toolEquipCount = 0
local currentTweens = {}

--------------------------------------------------------------------------------
-- 2. HELPER FUNCTIONS
--------------------------------------------------------------------------------
local function getRootAttachment(character)
	if not character then return nil end
	local hrp = character:FindFirstChild("HumanoidRootPart")
	if hrp then
		return hrp:FindFirstChild("RootRigAttachment") or hrp:FindFirstChild("RootAttachment")
	end
	return nil
end

local function resetInvisibility(character)
	if character then
		for _, part in ipairs(character:GetDescendants()) do
			if part:IsA("BasePart") then
				if part.Name == "HumanoidRootPart" then
					part.Transparency = 1
				else
					part.Transparency = 0
				end
			elseif part:IsA("Decal") or part:IsA("Texture") then
				part.Transparency = 0
			end
		end
	end
end

local function restaurar(character, rootAttachment, originalPos)
	if noclipConexion then
		noclipConexion:Disconnect()
		noclipConexion = nil
	end
	
	if saltoConexion then
		saltoConexion:Disconnect()
		saltoConexion = nil
	end

	if caminarConexion then
		caminarConexion:Disconnect()
		caminarConexion = nil
	end

	if toolConexion then
		toolConexion:Disconnect()
		toolConexion = nil
	end
	toolEquipCount = 0

	for _, tw in ipairs(currentTweens) do
		tw:Cancel()
	end
	table.clear(currentTweens)
	
	if rootAttachment and originalPos then
		rootAttachment.Position = originalPos
	end
	
	if character then
		local hrp = character:FindFirstChild("HumanoidRootPart")
		if hrp then
			local bav = hrp:FindFirstChild("FlingVelocity")
			if bav then bav:Destroy() end
		end

		for _, part in ipairs(character:GetDescendants()) do
			if part:IsA("BasePart") then
				part.CanCollide = true
				if part.Name == "HumanoidRootPart" then
					part.Transparency = 1
				else
					part.Transparency = 0
				end
			elseif part:IsA("Decal") or part:IsA("Texture") then
				part.Transparency = 0
			end
		end
	end
	
	ejecutando = false
end

--------------------------------------------------------------------------------
-- 3. MASTER PROJECTION FUNCTION
--------------------------------------------------------------------------------
local OFFSETS = {
	["Forward150"] = Vector3.new(0, 0, -150),
	["Down"]       = Vector3.new(0, -200, 0),
	["Up"]         = Vector3.new(0, 200, 0),
	["Left"]       = Vector3.new(-30, 0, 0),
	["Right"]      = Vector3.new(30, 0, 0)
}

local function playProjection(directionOrOffset, timeIda, timeVuelta, mode, enableNoclip)
	if ejecutando then return end
	
	local character = player.Character
	if not character then return end
	
	local rootAttachment = getRootAttachment(character)
	local humanoid = character:FindFirstChildOfClass("Humanoid")
	local hrp = character:FindFirstChild("HumanoidRootPart")
	if not rootAttachment or not humanoid or not hrp then return end

	ejecutando = true
	local originalPos = rootAttachment.Position

	if enableNoclip and mode ~= "FlingBack" then
		noclipConexion = RunService.Stepped:Connect(function()
			if player.Character then
				for _, part in ipairs(player.Character:GetDescendants()) do
					if part:IsA("BasePart") then
						part.CanCollide = false
					end
				end
			end
		end)
	end

	----------------------------------------------------------------------------
	-- MODO: FLINGBACK
	----------------------------------------------------------------------------
	if mode == "FlingBack" then
		local bav = Instance.new("BodyAngularVelocity")
		bav.Name = "FlingVelocity"
		bav.MaxTorque = Vector3.new(math.huge, math.huge, math.huge)
		bav.AngularVelocity = Vector3.new(0, 99999, 0)
		bav.Parent = hrp

		caminarConexion = humanoid:GetPropertyChangedSignal("MoveDirection"):Connect(function()
			if humanoid.MoveDirection.Magnitude > 0 then
				restaurar(character, rootAttachment, originalPos)
			end
		end)

		task.wait(1.5)
		if ejecutando then
			restaurar(character, rootAttachment, originalPos)
		end

	----------------------------------------------------------------------------
	-- MODO 1: WAVE
	----------------------------------------------------------------------------
	elseif mode == "Wave" then
		local targetPos = originalPos + OFFSETS["Up"]
		local tweenIr = TweenService:Create(rootAttachment, TweenInfo.new(timeIda or 2, Enum.EasingStyle.Linear), {Position = targetPos})
		table.insert(currentTweens, tweenIr)

		if not noclipConexion then
			noclipConexion = RunService.Stepped:Connect(function()
				if player.Character then
					for _, part in ipairs(player.Character:GetDescendants()) do
						if part:IsA("BasePart") then
							part.CanCollide = false
						end
					end
				end
			end)
		end

		saltoConexion = humanoid.Jumping:Connect(function()
			if saltoConexion then
				saltoConexion:Disconnect()
				saltoConexion = nil
			end
			
			tweenIr:Cancel()
			local tweenVolver = TweenService:Create(rootAttachment, TweenInfo.new(timeVuelta or 2, Enum.EasingStyle.Linear), {Position = originalPos})
			table.insert(currentTweens, tweenVolver)
			
			tweenVolver:Play()
			tweenVolver.Completed:Wait()
			restaurar(character, rootAttachment, originalPos)
		end)

		tweenIr:Play()

	----------------------------------------------------------------------------
	-- MODO 2: LAUGHTER
	----------------------------------------------------------------------------
	elseif mode == "Laugh" then
		local targetPos = originalPos + OFFSETS["Forward150"]

		local tweenIr = TweenService:Create(rootAttachment, TweenInfo.new(timeIda or 15, Enum.EasingStyle.Linear), {Position = targetPos})
		local tweenVolver = TweenService:Create(rootAttachment, TweenInfo.new(2, Enum.EasingStyle.Linear), {Position = originalPos})
		
		table.insert(currentTweens, tweenIr)
		table.insert(currentTweens, tweenVolver)

		caminarConexion = humanoid:GetPropertyChangedSignal("MoveDirection"):Connect(function()
			if humanoid.MoveDirection.Magnitude > 0 then
				restaurar(character, rootAttachment, originalPos)
			end
		end)

		tweenIr:Play()
		tweenIr.Completed:Wait()

		if ejecutando then
			tweenVolver:Play()
			tweenVolver.Completed:Wait()
			restaurar(character, rootAttachment, originalPos)
		end

	----------------------------------------------------------------------------
	-- MODO 3: ESTÁNDAR
	----------------------------------------------------------------------------
	else
		local offsetVector = Vector3.zero
		if typeof(directionOrOffset) == "Vector3" then
			offsetVector = directionOrOffset
		elseif typeof(directionOrOffset) == "string" then
			offsetVector = OFFSETS[directionOrOffset] or Vector3.zero
		end

		local targetPos = originalPos + offsetVector

		local tweenIr = TweenService:Create(rootAttachment, TweenInfo.new(timeIda or 1.5, Enum.EasingStyle.Linear), {Position = targetPos})
		local tweenVolver = TweenService:Create(rootAttachment, TweenInfo.new(timeVuelta or 1.5, Enum.EasingStyle.Linear), {Position = originalPos})
		table.insert(currentTweens, tweenIr)
		table.insert(currentTweens, tweenVolver)

		caminarConexion = humanoid:GetPropertyChangedSignal("MoveDirection"):Connect(function()
			if humanoid.MoveDirection.Magnitude > 0 then
				restaurar(character, rootAttachment, originalPos)
			end
		end)

		tweenIr:Play()
		tweenIr.Completed:Wait()
		
		if ejecutando then
			tweenVolver:Play()
			tweenVolver.Completed:Wait()
			restaurar(character, rootAttachment, originalPos)
		end
	end
end

--------------------------------------------------------------------------------
-- 4. SPECIAL MODES
--------------------------------------------------------------------------------
local function playSpecialMode(mode)
	local character = player.Character
	if not character then return end
	
	local rootAttachment = getRootAttachment(character)
	local humanoid = character:FindFirstChildOfClass("Humanoid")
	
	restaurar(character, rootAttachment, nil)

	if mode == "Invisible" then
		ejecutando = true
		toolEquipCount = 0

		for _, part in ipairs(character:GetDescendants()) do
			if part:IsA("BasePart") or part:IsA("Decal") or part:IsA("Texture") then
				part.Transparency = 1
			end
		end
		
		noclipConexion = RunService.Stepped:Connect(function()
			if player.Character then
				for _, part in ipairs(player.Character:GetDescendants()) do
					if part:IsA("BasePart") then
						part.CanCollide = false
					end
				end
			end
		end)

		if humanoid then
			saltoConexion = humanoid.Jumping:Connect(function()
				resetInvisibility(player.Character)
			end)
		end

		toolConexion = character.ChildAdded:Connect(function(child)
			if child:IsA("Tool") then
				toolEquipCount = toolEquipCount + 1
				if toolEquipCount >= 2 then
					restaurar(player.Character, getRootAttachment(player.Character), nil)
				end
			end
		end)
	end
end

--------------------------------------------------------------------------------
-- 5. CHAT COMMAND LISTENER
--------------------------------------------------------------------------------
local function processCommand(msg)
	local cleanMsg = string.lower(msg)

	if cleanMsg == "/e laugh" or cleanMsg == "laugh" or cleanMsg == "/e laughter" or cleanMsg == "laughter" then
		task.spawn(function() playProjection(nil, 15, 2, "Laugh") end)

	elseif cleanMsg == "/e wave" or cleanMsg == "wave" then
		task.spawn(function() playProjection("Up", 2, 2, "Wave") end)

	elseif cleanMsg == "/e dance" or cleanMsg == "dance" then
		task.spawn(function() playProjection("Right", 1.5, 1.5, "Standard") end)

	elseif cleanMsg == "/e dance2" or cleanMsg == "dance2" then
		task.spawn(function() playProjection("Left", 1.5, 1.5, "Standard") end)

	elseif cleanMsg == "/e dance3" or cleanMsg == "dance3" then
		task.spawn(function() playProjection("Up", 2, 2, "Standard") end)

	elseif cleanMsg == "/e point" or cleanMsg == "point" then
		task.spawn(function() playProjection("Down", 2, 2, "Standard") end)

	elseif cleanMsg == "/e point2" or cleanMsg == "point2" then
		task.spawn(function() playProjection(Vector3.new(0, 0, -150), 1.5, 1.5, "Standard", true) end)

	elseif cleanMsg == "/e hello" or cleanMsg == "hello" then
		task.spawn(function() playProjection(Vector3.new(0, -80, 0), 1.5, 1.5, "Standard", true) end)

	elseif cleanMsg == "/e hello2" or cleanMsg == "hello2" then
		task.spawn(function() playProjection(Vector3.new(0, 80, 0), 1.5, 1.5, "Standard", true) end)

	elseif cleanMsg == "/e moonwalk" or cleanMsg == "/e moon walk" or cleanMsg == "moonwalk" then
		task.spawn(function() playProjection(Vector3.new(0, 0, 50), 3, 1.5, "Standard", true) end)

	elseif cleanMsg == "/e babyqueen" or cleanMsg == "/e baby queen" or cleanMsg == "babyqueen" then
		task.spawn(function() playProjection(Vector3.new(0, 80, -80), 2, 2, "Standard", true) end)

	elseif cleanMsg == "/e flingback" or cleanMsg == "/e fling back" or cleanMsg == "flingback" then
		task.spawn(function() playProjection(nil, nil, nil, "FlingBack", false) end)

	elseif cleanMsg == "/e invisible" or cleanMsg == "invisible" or cleanMsg == "/e invis" or cleanMsg == "invis" or cleanMsg == "/e ghost" or cleanMsg == "ghost" then
		task.spawn(function() playSpecialMode("Invisible") end)
	end
end

--------------------------------------------------------------------------------
-- 6. RESPONSIVE CHARACTER SETUP (AUTO-RENEWAL ON RESET)
--------------------------------------------------------------------------------
local function setupCharacter(char)
	restaurar(char, getRootAttachment(char), nil)
end

-- Limpieza y reinicio automático al morir / reaparecer
player.CharacterAdded:Connect(setupCharacter)

if player.Character then
	setupCharacter(player.Character)
end

-- Listener del chat que persiste al morir
player.Chatted:Connect(processCommand)

Features & Information

This script is very useful in the world of glitching, as it includes custom emotes created by me, which can be used to walk through walls, perform emote flings, and more.

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts