Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- ๐งผ Prevent duplicate windows
- if getgenv().WhimsicalWindow and getgenv().WhimsicalWindow.Destroy then
- getgenv().WhimsicalWindow:Destroy()
- end
- -- ๐งฉ Load Fluent UI and Addons
- local Fluent = loadstring(game:HttpGet("https://github.com/dawid-scripts/Fluent/releases/latest/download/main.lua"))()
- local SaveManager = loadstring(game:HttpGet("https://raw.githubusercontent.com/dawid-scripts/Fluent/master/Addons/SaveManager.lua"))()
- local InterfaceManager = loadstring(game:HttpGet("https://raw.githubusercontent.com/dawid-scripts/Fluent/master/Addons/InterfaceManager.lua"))()
- -- ๐ช Create Window
- local Window = Fluent:CreateWindow({
- Title = "Whimsical's Paradise",
- SubTitle = "by nix",
- TabWidth = 160,
- Size = UDim2.fromOffset(580, 460),
- Acrylic = true,
- Theme = "Dark",
- MinimizeKey = Enum.KeyCode.LeftControl
- })
- getgenv().WhimsicalWindow = Window
- -- ๐๏ธ Tabs
- local Tabs = {
- Settings = Window:AddTab({ Title = "Settings", Icon = "settings" }),
- Emotes = Window:AddTab({ Title = "Emotes", Icon = "smile" }),
- Main = Window:AddTab({ Title = "Main", Icon = "zap" })
- }
- local Options = Fluent.Options
- -- ๐งฉ Setup Managers
- SaveManager:SetLibrary(Fluent)
- InterfaceManager:SetLibrary(Fluent)
- SaveManager:IgnoreThemeSettings()
- SaveManager:SetIgnoreIndexes({})
- InterfaceManager:SetFolder("WhimsicalParadise")
- SaveManager:SetFolder("WhimsicalParadise/GameConfig")
- InterfaceManager:BuildInterfaceSection(Tabs.Settings)
- SaveManager:BuildConfigSection(Tabs.Settings)
- Window:SelectTab(2)
- Fluent:Notify({ Title = "Whimsical's Paradise", Content = "UI Loaded Successfully", Duration = 6 })
- SaveManager:LoadAutoloadConfig()
- -- =========================
- -- Services & Player
- -- =========================
- local Players = game:GetService("Players")
- local LocalPlayer = Players.LocalPlayer
- local RunService = game:GetService("RunService")
- local UserInputService = game:GetService("UserInputService")
- local HttpService = game:GetService("HttpService")
- local TeleportService = game:GetService("TeleportService")
- local ReplicatedStorage = game:GetService("ReplicatedStorage")
- local SoundService = game:GetService("SoundService")
- local Camera = workspace.CurrentCamera
- local function getHumanoid()
- local char = LocalPlayer.Character
- return char and char:FindFirstChildOfClass("Humanoid") or nil
- end
- -- =========================
- -- Main tab: Fly+NoClip + Switch Servers + Spinbot + ESP (purple + nametags)
- -- =========================
- -- ๐ธ Fly + NoClip Toggle (WASD + Space/Control, camera-relative)
- local flyEnabled = false
- local flyConn, flyGyro, flyVel
- local function setNoClip(state)
- local char = LocalPlayer.Character
- if not char then return end
- for _, part in ipairs(char:GetDescendants()) do
- if part:IsA("BasePart") then
- part.CanCollide = not state
- end
- end
- end
- local function startFly()
- local char = LocalPlayer.Character
- if not char then return end
- local root = char:FindFirstChild("HumanoidRootPart")
- if not root then return end
- flyVel = Instance.new("BodyVelocity")
- flyVel.Name = "Whimsical_FlyVelocity"
- flyVel.MaxForce = Vector3.new(1e6, 1e6, 1e6)
- flyVel.P = 2e4
- flyVel.Velocity = Vector3.zero
- flyVel.Parent = root
- flyGyro = Instance.new("BodyGyro")
- flyGyro.Name = "Whimsical_FlyGyro"
- flyGyro.MaxTorque = Vector3.new(1e6, 1e6, 1e6)
- flyGyro.P = 1e5
- flyGyro.CFrame = Camera.CFrame
- flyGyro.Parent = root
- local flySpeed = 50
- flyConn = RunService.RenderStepped:Connect(function()
- if not LocalPlayer.Character or not root.Parent then return end
- -- Build input direction (W=forward, S=backward, A/D strafe, Space/Control vertical)
- local dir = Vector3.zero
- if UserInputService:IsKeyDown(Enum.KeyCode.W) then dir += Camera.CFrame.LookVector end
- if UserInputService:IsKeyDown(Enum.KeyCode.S) then dir -= Camera.CFrame.LookVector end
- if UserInputService:IsKeyDown(Enum.KeyCode.D) then dir += Camera.CFrame.RightVector end
- if UserInputService:IsKeyDown(Enum.KeyCode.A) then dir -= Camera.CFrame.RightVector end
- if UserInputService:IsKeyDown(Enum.KeyCode.Space) then dir += Vector3.new(0, 1, 0) end
- if UserInputService:IsKeyDown(Enum.KeyCode.LeftControl) or UserInputService:IsKeyDown(Enum.KeyCode.Q) then dir -= Vector3.new(0, 1, 0) end
- local vel = dir.Magnitude > 0 and dir.Unit * flySpeed or Vector3.zero
- flyVel.Velocity = vel
- -- Align yaw to camera (keep level)
- local look = Camera.CFrame.LookVector
- local flat = Vector3.new(look.X, 0, look.Z)
- if flat.Magnitude < 0.001 then flat = Vector3.new(0, 0, -1) end
- flyGyro.CFrame = CFrame.new(Vector3.zero, flat.Unit)
- end)
- setNoClip(true)
- end
- local function stopFly()
- if flyConn then flyConn:Disconnect() flyConn = nil end
- if flyVel then flyVel:Destroy() flyVel = nil end
- if flyGyro then flyGyro:Destroy() flyGyro = nil end
- setNoClip(false)
- end
- Tabs.Main:AddToggle("FlyNoclip", {
- Title = "Fly + NoClip",
- Description = "WASD flight and disabled collisions",
- Default = false
- }):OnChanged(function(state)
- flyEnabled = state
- if state then startFly() else stopFly() end
- end)
- LocalPlayer.CharacterAdded:Connect(function()
- if flyEnabled then
- task.defer(startFly)
- else
- stopFly()
- end
- end)
- -- ๐ Switch Servers Button
- Tabs.Main:AddButton({
- Title = "๐ Switch Servers",
- Description = "Teleport to a random public server",
- Callback = function()
- local pid = game.PlaceId
- local ok, res = pcall(function()
- return HttpService:JSONDecode(game:HttpGet("https://games.roblox.com/v1/games/" .. pid .. "/servers/Public?sortOrder=Asc&limit=100"))
- end)
- if ok and res and res.data then
- local servers = {}
- for _, s in ipairs(res.data) do
- if s.id and s.playing and s.maxPlayers and s.playing < s.maxPlayers then
- table.insert(servers, s.id)
- end
- end
- if #servers > 0 then
- local target = servers[math.random(1, #servers)]
- local success, err = pcall(function()
- TeleportService:TeleportToPlaceInstance(pid, target, LocalPlayer)
- end)
- if not success then warn("Teleport failed:", err) end
- else
- warn("No available servers found.")
- end
- else
- warn("Failed to fetch server list.")
- end
- end
- })
- -- ๐ Spinbot Toggle + Speed Slider
- local spinSpeed = 45 -- degrees per second
- local spinEnabled = false
- local spinConn
- Tabs.Main:AddSlider("SpinSpeed", {
- Title = "Spinbot Speed",
- Description = "Rotation speed (deg/sec)",
- Default = 45,
- Min = 10,
- Max = 720,
- Rounding = 1,
- Callback = function(val)
- spinSpeed = val
- end
- })
- Tabs.Main:AddToggle("SpinbotToggle", {
- Title = "Spinbot",
- Description = "Rotate your character continuously",
- Default = false
- }):OnChanged(function(state)
- spinEnabled = state
- if spinConn then spinConn:Disconnect() spinConn = nil end
- if state then
- spinConn = RunService.RenderStepped:Connect(function(dt)
- local char = LocalPlayer.Character
- local root = char and char:FindFirstChild("HumanoidRootPart")
- local hum = char and char:FindFirstChildOfClass("Humanoid")
- if root and hum then
- root.CFrame *= CFrame.Angles(0, math.rad(spinSpeed) * dt, 0)
- hum.AutoRotate = false
- end
- end)
- else
- local hum = getHumanoid()
- if hum then hum.AutoRotate = true end
- end
- end)
- LocalPlayer.CharacterAdded:Connect(function()
- local hum = getHumanoid()
- if hum then hum.AutoRotate = not spinEnabled end
- end)
- -- ๐งฟ ESP Highlight (Purple) + Nametags โ Robust and Clean
- local espEnabled = false
- local function ensureESPForPlayer(player)
- local char = player.Character
- if not char then return end
- -- Highlight (purple)
- local highlight = char:FindFirstChild("WhimsicalESP")
- if not highlight then
- highlight = Instance.new("Highlight")
- highlight.Name = "WhimsicalESP"
- highlight.Adornee = char
- highlight.FillTransparency = 1
- highlight.OutlineTransparency = 0
- highlight.OutlineColor = Color3.fromRGB(170, 0, 255)
- highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
- highlight.Parent = char
- else
- highlight.Adornee = char
- highlight.OutlineColor = Color3.fromRGB(170, 0, 255)
- highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
- end
- -- Nametag
- local head = char:FindFirstChild("Head") or char:FindFirstChild("HumanoidRootPart")
- if head then
- local tag = head:FindFirstChild("WhimsicalNameTag")
- if not tag then
- tag = Instance.new("BillboardGui")
- tag.Name = "WhimsicalNameTag"
- tag.AlwaysOnTop = true
- tag.LightInfluence = 0
- tag.Size = UDim2.new(0, 200, 0, 40)
- tag.StudsOffset = Vector3.new(0, 2.5, 0)
- tag.Adornee = head
- tag.Parent = head
- local label = Instance.new("TextLabel")
- label.Name = "Text"
- label.BackgroundTransparency = 1
- label.Size = UDim2.new(1, 0, 1, 0)
- label.Font = Enum.Font.GothamBold
- label.TextScaled = true
- label.TextColor3 = Color3.fromRGB(230, 200, 255)
- label.TextStrokeTransparency = 0.2
- label.TextStrokeColor3 = Color3.fromRGB(60, 0, 90)
- label.Text = player.Name
- label.Parent = tag
- else
- local label = tag:FindFirstChild("Text")
- if label and label:IsA("TextLabel") then
- label.Text = player.Name
- end
- tag.Adornee = head
- end
- end
- end
- local function clearESPForPlayer(player)
- local char = player and player.Character
- if not char then return end
- local h = char:FindFirstChild("WhimsicalESP")
- if h then h:Destroy() end
- local head = char:FindFirstChild("Head") or char:FindFirstChild("HumanoidRootPart")
- if head then
- local tag = head:FindFirstChild("WhimsicalNameTag")
- if tag then tag:Destroy() end
- end
- end
- local function applyESPAll()
- for _, p in ipairs(Players:GetPlayers()) do
- ensureESPForPlayer(p)
- end
- end
- local function clearESPAll()
- for _, p in ipairs(Players:GetPlayers()) do
- clearESPForPlayer(p)
- end
- end
- Tabs.Main:AddToggle("ESPHighlightToggle", {
- Title = "ESP + Nametags",
- Description = "Highlights all players and shows names",
- Default = false
- }):OnChanged(function(state)
- espEnabled = state
- clearESPAll()
- if state then
- applyESPAll()
- end
- end)
- Players.PlayerAdded:Connect(function(p)
- p.CharacterAdded:Connect(function()
- if espEnabled then
- task.wait(0.1)
- ensureESPForPlayer(p)
- end
- end)
- if espEnabled then ensureESPForPlayer(p) end
- end)
- Players.PlayerRemoving:Connect(function(p)
- clearESPForPlayer(p)
- end)
- LocalPlayer.CharacterAdded:Connect(function()
- if espEnabled then
- task.wait(0.1)
- ensureESPForPlayer(LocalPlayer)
- end
- end)
- RunService.RenderStepped:Connect(function()
- if not espEnabled then return end
- for _, p in ipairs(Players:GetPlayers()) do
- ensureESPForPlayer(p)
- end
- end)
- -- =========================
- -- Emotes tab (modules + folders/models with nested content)
- -- =========================
- local EmoteFolder = ReplicatedStorage:WaitForChild("Assets"):WaitForChild("Emotes")
- -- Global state for emotes
- local PlayingTracks = {} -- [emoteName] = AnimationTrack
- local PlayingSounds = {} -- [emoteName] = Sound
- local SpawnedByEmote = {} -- [emoteName] = { spawned instances }
- local ActiveEmotes = {} -- [emoteName] = true if toggled on
- -- Global loop override
- local loopEmoteContent = false
- Tabs.Emotes:AddToggle("LoopEmoteContent", {
- Title = "Loop Anim & Audio",
- Description = "Force animation and sound to loop",
- Default = false
- }):OnChanged(function(state)
- loopEmoteContent = state
- for _, track in pairs(PlayingTracks) do
- if track then track.Looped = state or track.Looped end
- end
- for _, sound in pairs(PlayingSounds) do
- if sound then sound.Looped = state or sound.Looped end
- end
- for _, list in pairs(SpawnedByEmote) do
- for _, o in ipairs(list) do
- if o and o:IsA("Sound") then
- o.Looped = state or o.Looped
- end
- end
- end
- end)
- -- ๐๏ธ Emote Volume Slider
- Tabs.Emotes:AddSlider("EmoteVolume", {
- Title = "Emote Volume",
- Description = "Adjust emote sound volume",
- Default = 1,
- Min = 0,
- Max = 5,
- Rounding = 1,
- Callback = function(value)
- for _, sound in pairs(PlayingSounds) do
- if sound and sound:IsA("Sound") then
- sound.Volume = value
- end
- end
- for _, list in pairs(SpawnedByEmote) do
- for _, o in ipairs(list) do
- if o and o:IsA("Sound") then
- o.Volume = value
- end
- end
- end
- end
- })
- -- ๐๏ธ Playback Speed Control (Animation + Audio)
- local useCustomSpeed = false
- local customPlaybackSpeed = 1
- Tabs.Emotes:AddToggle("UseCustomSpeed", {
- Title = "Custom Playback Speed",
- Description = "Override animation and sound speed",
- Default = false
- }):OnChanged(function(state)
- useCustomSpeed = state
- -- Apply live if toggled on
- if useCustomSpeed then
- for _, track in pairs(PlayingTracks) do
- if track and track:IsA("AnimationTrack") then
- track:AdjustSpeed(customPlaybackSpeed)
- end
- end
- for _, sound in pairs(PlayingSounds) do
- if sound and sound:IsA("Sound") then
- sound.PlaybackSpeed = customPlaybackSpeed
- end
- end
- for _, list in pairs(SpawnedByEmote) do
- for _, o in ipairs(list) do
- if o and o:IsA("Sound") then
- o.PlaybackSpeed = customPlaybackSpeed
- end
- end
- end
- else
- -- Reset to 1x on disable
- for _, track in pairs(PlayingTracks) do
- if track and track:IsA("AnimationTrack") then
- track:AdjustSpeed(1)
- end
- end
- for _, sound in pairs(PlayingSounds) do
- if sound and sound:IsA("Sound") then
- sound.PlaybackSpeed = 1
- end
- end
- for _, list in pairs(SpawnedByEmote) do
- for _, o in ipairs(list) do
- if o and o:IsA("Sound") then
- o.PlaybackSpeed = 1
- end
- end
- end
- end
- end)
- Tabs.Emotes:AddSlider("PlaybackSpeedSlider", {
- Title = "Playback Speed",
- Description = "Speed multiplier for animation and sound",
- Default = 1,
- Min = 0.1,
- Max = 3,
- Rounding = 2,
- Callback = function(val)
- customPlaybackSpeed = val
- if useCustomSpeed then
- for _, track in pairs(PlayingTracks) do
- if track and track:IsA("AnimationTrack") then
- track:AdjustSpeed(customPlaybackSpeed)
- end
- end
- for _, sound in pairs(PlayingSounds) do
- if sound and sound:IsA("Sound") then
- sound.PlaybackSpeed = customPlaybackSpeed
- end
- end
- for _, list in pairs(SpawnedByEmote) do
- for _, o in ipairs(list) do
- if o and o:IsA("Sound") then
- o.PlaybackSpeed = customPlaybackSpeed
- end
- end
- end
- end
- end
- })
- -- Helpers for emote control
- local function stopAllEmotes()
- for name, track in pairs(PlayingTracks) do
- if track and track.IsPlaying then track:Stop() end
- PlayingTracks[name] = nil
- end
- for name, sound in pairs(PlayingSounds) do
- if sound then
- if sound.IsPlaying then sound:Stop() end
- sound:Destroy()
- end
- PlayingSounds[name] = nil
- end
- for name, list in pairs(SpawnedByEmote) do
- for _, obj in ipairs(list) do
- if obj and obj.Parent then obj:Destroy() end
- end
- SpawnedByEmote[name] = nil
- end
- ActiveEmotes = {}
- end
- local function cleanupEmote(name)
- local track = PlayingTracks[name]
- if track and track.IsPlaying then track:Stop() end
- PlayingTracks[name] = nil
- local sound = PlayingSounds[name]
- if sound then
- if sound.IsPlaying then sound:Stop() end
- sound:Destroy()
- end
- PlayingSounds[name] = nil
- local spawned = SpawnedByEmote[name]
- if spawned then
- for _, obj in ipairs(spawned) do
- if obj and obj.Parent then obj:Destroy() end
- end
- end
- SpawnedByEmote[name] = nil
- ActiveEmotes[name] = nil
- end
- -- Spawn nested content from a folder/model for an emote
- local function spawnNestedContentForEmote(emoteName, container)
- SpawnedByEmote[emoteName] = SpawnedByEmote[emoteName] or {}
- local bucket = SpawnedByEmote[emoteName]
- local function spawnNode(node)
- local clone
- local ok = pcall(function() clone = node:Clone() end)
- if not ok or not clone then return end
- if clone:IsA("Attachment") or clone:IsA("ParticleEmitter") or clone:IsA("Beam") or clone:IsA("Trail") then
- local root = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
- if root then
- clone.Parent = root
- table.insert(bucket, clone)
- else
- clone:Destroy()
- end
- elseif clone:IsA("Sound") then
- clone.Parent = SoundService
- clone.Volume = Options.EmoteVolume and Options.EmoteVolume.Value or 1
- clone.Looped = loopEmoteContent or clone.Looped or false
- if useCustomSpeed then clone.PlaybackSpeed = customPlaybackSpeed end
- clone:Play()
- table.insert(bucket, clone)
- elseif clone:IsA("BasePart") or clone:IsA("Model") then
- clone.Parent = workspace
- table.insert(bucket, clone)
- elseif clone:IsA("BillboardGui") or clone:IsA("SurfaceGui") then
- local head = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("Head")
- if head and clone:IsA("BillboardGui") then
- clone.Adornee = head
- clone.Parent = head
- else
- local root = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
- clone.Parent = root or LocalPlayer.Character or workspace
- end
- table.insert(bucket, clone)
- else
- clone.Parent = LocalPlayer.Character or workspace
- table.insert(bucket, clone)
- end
- end
- for _, child in ipairs(container:GetChildren()) do
- if not child:IsA("ModuleScript") and not child:IsA("Animation") then
- spawnNode(child)
- end
- end
- end
- -- Resolve animation and sound ids from data or descendants
- local function resolveAnimationIdFrom(anyInstance, emoteData)
- if emoteData and typeof(emoteData.AssetID) == "string" and emoteData.AssetID ~= "" then
- return emoteData.AssetID
- end
- local anim = anyInstance:FindFirstChildOfClass("Animation") or anyInstance:FindFirstChildWhichIsA("Animation", true)
- if anim and typeof(anim.AnimationId) == "string" and anim.AnimationId ~= "" then
- return anim.AnimationId
- end
- return nil
- end
- local function resolveSoundIdFrom(anyInstance, emoteData)
- local sfxId = emoteData and (emoteData.SFX or emoteData.SoundId or emoteData.EmoteSFX)
- if not sfxId or sfxId == "" then
- local snd = anyInstance:FindFirstChildOfClass("Sound") or anyInstance:FindFirstChildWhichIsA("Sound", true)
- if snd and typeof(snd.SoundId) == "string" and snd.SoundId ~= "" then
- sfxId = snd.SoundId
- end
- end
- return sfxId
- end
- -- ๐ Stop All Button
- Tabs.Emotes:AddButton({
- Title = "๐ Stop All Animations & SFX",
- Description = "Halts all emotes, sounds, and spawned effects",
- Callback = function()
- stopAllEmotes()
- end
- })
- -- ๐ญ Build toggles for all emotes (modules + folders/models, nested content supported)
- task.spawn(function()
- local EmoteFolder = ReplicatedStorage:WaitForChild("Assets"):WaitForChild("Emotes")
- local children = EmoteFolder:GetChildren()
- if #children == 0 then
- warn("No emote entries found in EmoteFolder")
- return
- end
- local EntryByName = {}
- for _, entry in ipairs(children) do
- EntryByName[entry.Name] = entry
- end
- local function playEmote(emoteName, entry, emoteData, animId, sfxId, looped)
- local hum = getHumanoid()
- -- Animation
- if animId and hum then
- local anim = Instance.new("Animation")
- anim.AnimationId = animId
- local ok, track = pcall(function() return hum:LoadAnimation(anim) end)
- if ok and track then
- track.Looped = loopEmoteContent or looped or true -- keep playing
- track:Play()
- if useCustomSpeed then
- track:AdjustSpeed(customPlaybackSpeed)
- else
- track:AdjustSpeed(1)
- end
- PlayingTracks[emoteName] = track
- else
- warn("Failed to load animation for emote:", emoteName)
- end
- end
- -- Sound
- if typeof(sfxId) == "string" and sfxId:match("^rbxassetid://") then
- local sound = Instance.new("Sound")
- sound.SoundId = sfxId
- sound.Volume = Options.EmoteVolume and Options.EmoteVolume.Value or 1
- sound.Looped = loopEmoteContent or looped or false
- if useCustomSpeed then sound.PlaybackSpeed = customPlaybackSpeed else sound.PlaybackSpeed = 1 end
- sound.Parent = SoundService
- sound:Play()
- PlayingSounds[emoteName] = sound
- end
- -- Nested content
- if not entry:IsA("ModuleScript") and (#entry:GetChildren() > 0) then
- spawnNestedContentForEmote(emoteName, entry)
- else
- local container = EmoteFolder:FindFirstChild(emoteName)
- if container and container ~= entry and (container:IsA("Folder") or container:IsA("Model")) then
- spawnNestedContentForEmote(emoteName, container)
- end
- end
- ActiveEmotes[emoteName] = true
- end
- for _, entry in ipairs(children) do
- local emoteName = entry.Name
- local emoteData = nil
- if entry:IsA("ModuleScript") then
- local ok, res = pcall(require, entry)
- if ok then emoteData = res else warn("Error requiring emote module:", emoteName, res) end
- end
- local description = (emoteData and emoteData.Description) or ("Toggle emote: " .. emoteName)
- local looped = (emoteData and emoteData.Looped) or false
- local assetId = resolveAnimationIdFrom(entry, emoteData) or ""
- local sfxId = resolveSoundIdFrom(entry, emoteData) or ""
- local toggle = Tabs.Emotes:AddToggle("Emote_" .. emoteName, {
- Title = emoteName,
- Description = description,
- Default = false
- })
- toggle:OnChanged(function()
- cleanupEmote(emoteName)
- if toggle.Value then
- playEmote(emoteName, entry, emoteData, assetId ~= "" and assetId or nil, sfxId ~= "" and sfxId or nil, looped)
- else
- ActiveEmotes[emoteName] = nil
- end
- end)
- end
- -- Reapply after respawn for any emotes still marked active
- LocalPlayer.CharacterAdded:Connect(function()
- task.wait(0.35)
- for name, _ in pairs(ActiveEmotes) do
- local entry = EntryByName[name]
- if entry then
- local emoteData
- if entry:IsA("ModuleScript") then
- local ok, res = pcall(require, entry)
- if ok then emoteData = res end
- end
- local looped = (emoteData and emoteData.Looped) or false
- local animId = resolveAnimationIdFrom(entry, emoteData)
- local sfxId = resolveSoundIdFrom(entry, emoteData)
- playEmote(name, entry, emoteData, animId, sfxId, looped)
- end
- end
- end)
- end)
Advertisement
Add Comment
Please, Sign In to add comment