
Key Required VerifiedUniversal

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)No comments yet for this script.



