local WindUI do local ok, result = pcall(function() return require("./src/Init") end) if ok then WindUI = result else WindUI = loadstring(game:HttpGet("https://github.com/Footagesus/WindUI/releases/latest/download/main.lua"))() end end WindUI.TransparencyValue = 0.2 WindUI:SetTheme("Dark") local Window = WindUI:CreateWindow({ Title = "Visual Emote Changer", Author = "By Pnsdg (Evade Overhaul)", Folder = "DaraHub", Size = UDim2.fromOffset(580, 490), Theme = "Dark", HidePanelBackground = false, Acrylic = false, HideSearchBar = false, SideBarWidth = 200 }) Window:SetIconSize(48) Window:CreateTopbarButton("theme-switcher", "moon", function() WindUI:SetTheme(WindUI:GetCurrentTheme() == "Dark" and "Light" or "Dark") end, 990) local FeatureSection = Window:Section({ Title = "Idk", Opened = true }) local Tabs = { EmoteChanger = FeatureSection:Tab({ Title = "EmoteChanger", Icon = "smile" }) } local player = game:GetService("Players").LocalPlayer local ReplicatedStorage = game:GetService("ReplicatedStorage") local Events = ReplicatedStorage:WaitForChild("Events", 10) local CharacterFolder = Events and Events:WaitForChild("Character", 10) local EmoteRemote = CharacterFolder and CharacterFolder:WaitForChild("Emote", 10) local PassCharacterInfo = CharacterFolder and CharacterFolder:WaitForChild("PassCharacterInfo", 10) local remoteSignal = PassCharacterInfo and PassCharacterInfo.OnClientEvent local currentTag = nil local currentEmotes = table.create(12, "") local selectEmotes = table.create(12, "") local emoteEnabled = table.create(12, false) local currentEmoteInputs = {} local selectEmoteInputs = {} local function readTagFromFolder(f) if not f then return nil end local a = f:GetAttribute("Tag") if a ~= nil then return a end local o = f:FindFirstChild("Tag") if o and o:IsA("ValueBase") then return o.Value end return nil end local function onRespawn() currentTag = nil pendingSlot = nil task.spawn(function() local startTime = tick() while tick() - startTime < 10 do if workspace:FindFirstChild("Game") and workspace.Game:FindFirstChild("Players") then local pf = workspace.Game.Players:FindFirstChild(player.Name) if pf then currentTag = readTagFromFolder(pf) if currentTag then local b = tonumber(currentTag) if b and b >= 0 and b <= 255 then break else currentTag = nil end end end end task.wait(0.5) end end) end local pendingSlot = nil local blockOriginalEmote = false local function fireSelect(slot) if not currentTag then return end local b = tonumber(currentTag) if not b or b < 0 or b > 255 then return end if not selectEmotes[slot] or selectEmotes[slot] == "" then return end local buf = buffer.create(2) buffer.writeu8(buf, 0, b) buffer.writeu8(buf, 1, 17) if remoteSignal then firesignal(remoteSignal, buf, {selectEmotes[slot]}) end end if PassCharacterInfo and EmoteRemote then PassCharacterInfo.OnClientEvent:Connect(function(...) if not pendingSlot then return end local slot = pendingSlot pendingSlot = nil task.wait(0.1) fireSelect(slot) end) success, oldNamecall = pcall(function() return hookmetamethod(game, "__namecall", function(self, ...) local m local ok, err = pcall(function() m = getnamecallmethod() end) if not ok then return nil end a = {...} if m == "FireServer" and self == EmoteRemote and type(a[1]) == "string" then for i = 1, 12 do if emoteEnabled[i] and currentEmotes[i] ~= "" and a[1] == currentEmotes[i] then pendingSlot = i blockOriginalEmote = true task.spawn(function() local ok2, err2 = pcall(function() task.wait(0.1) blockOriginalEmote = false if pendingSlot == i then pendingSlot = nil fireSelect(i) end end) if not ok2 then warn(err2) end end) if blockOriginalEmote then return nil end end end end return oldNamecall(self, ...) end) end) if not success then pcall(function() Window:Destroy() end) local function showExecutorPopup() local executor = identifyexecutor and identifyexecutor() or "Unknown" local executorName = "" if type(executor) == "table" then executorName = executor.Name or "Unknown" elseif type(executor) == "string" then executorName = executor else executorName = "Unknown" end local WindUI = loadstring(game:HttpGet("https://raw.githubusercontent.com/Footagesus/WindUI/main/dist/main.lua"))() local Localization = WindUI:Localization({ Enabled = true, Prefix = "loc:", DefaultLanguage = "en", Translations = { ["en"] = { ["LIB_DESC"] = "Your executeor suck bro get a better executeor dawg, Your executeor is : " .. executorName .. "" } } }) WindUI.TransparencyValue = 0.2 WindUI:SetTheme("Dark") local function gradient(text, startColor, endColor) local result = "" for i = 1, #text do local t = (i - 1) / (#text - 1) local r = math.floor((startColor.R + (endColor.R - startColor.R) * t) * 255) local g = math.floor((startColor.G + (endColor.G - startColor.G) * t) * 255) local b = math.floor((startColor.B + (endColor.B - startColor.B) * t) * 255) result = result .. string.format('%s', r, g, b, text:sub(i, i)) end return result end WindUI:Popup({ Title = gradient("Dara Hub", Color3.fromHex("#6A11CB"), Color3.fromHex("#2575FC")), Icon = "sparkles", Content = "loc:LIB_DESC", Buttons = { { Title = "OK", Variant = "Primary", } } }) end showExecutorPopup() end if player.Character then task.spawn(onRespawn) end player.CharacterAdded:Connect(function() task.wait(1) onRespawn() end) if workspace:FindFirstChild("Game") and workspace.Game:FindFirstChild("Players") then workspace.Game.Players.ChildAdded:Connect(function(child) if child.Name == player.Name then task.wait(0.5) onRespawn() end end) workspace.Game.Players.ChildRemoved:Connect(function(child) if child.Name == player.Name then currentTag = nil pendingSlot = nil end end) end end Tabs.EmoteChanger:Section({ Title = "Emote Changer", TextSize = 20 }) Tabs.EmoteChanger:Divider() for i = 1, 12 do currentEmoteInputs[i] = Tabs.EmoteChanger:Input({ Title = "Current Emote " .. i, Placeholder = "Enter current emote name", Value = currentEmotes[i], Callback = function(v) currentEmotes[i] = v:gsub("%s+", "") end }) end Tabs.EmoteChanger:Divider() for i = 1, 12 do selectEmoteInputs[i] = Tabs.EmoteChanger:Input({ Title = "Select Emote " .. i, Placeholder = "Enter select emote name", Value = selectEmotes[i], Callback = function(v) selectEmotes[i] = v:gsub("%s+", "") end }) end EmoteChangerEmoteOption = Tabs.EmoteChanger:Input({ Title = "Emote Possible option", Desc = "Higher Value may Broke emote animation recommend Use 1-3", Placeholder = "1", Callback = function(v) local num = tonumber(v) or 1 local Players = game:GetService("Players") local player = Players.LocalPlayer local currentNum = num local function setupCharacter(character) if character == player.Character then character:SetAttribute("EmoteNum", currentNum) end end local function monitorCharacter() while true do wait(1) local character = player.Character if character and character:GetAttribute("EmoteNum") ~= currentNum then character:SetAttribute("EmoteNum", currentNum) end end end if player.Character then setupCharacter(player.Character) end player.CharacterAdded:Connect(function(character) wait(1) setupCharacter(character) end) spawn(monitorCharacter) end }) EmoteChangerEmoteApply = Tabs.EmoteChanger:Button({ Title="Apply Emote Mappings", Icon="check", Callback=function() local hasAnyEmote = false for i=1,12 do if currentEmotes[i] ~= "" or selectEmotes[i] ~= "" then hasAnyEmote = true break end end if not hasAnyEmote then WindUI:Notify({ Title="Emote Changer", Content="Please enter your emote", Duration=3 }) return end local function normalizeEmoteName(name) return name:gsub("%s+", ""):lower() end local function isValidEmote(emoteName) if emoteName == "" then return false, "" end local normalizedInput = normalizeEmoteName(emoteName) local emotesFolder = game:GetService("ReplicatedStorage"):FindFirstChild("Items") if emotesFolder then emotesFolder = emotesFolder:FindFirstChild("Emotes") if emotesFolder then for _, emoteModule in ipairs(emotesFolder:GetChildren()) do if emoteModule:IsA("ModuleScript") then local normalizedEmote = normalizeEmoteName(emoteModule.Name) if normalizedEmote == normalizedInput then return true, emoteModule.Name end end end end end return false, "" end local sameEmoteSlots = {} local missingEmoteSlots = {} local invalidEmoteSlots = {} local successfulSlots = {} for i=1,12 do if currentEmotes[i] ~= "" and selectEmotes[i] ~= "" then local currentValid, currentActual = isValidEmote(currentEmotes[i]) local selectValid, selectActual = isValidEmote(selectEmotes[i]) if not currentValid and not selectValid then table.insert(invalidEmoteSlots, {slot = i, currentInvalid = true, currentName = currentEmotes[i], selectInvalid = true, selectName = selectEmotes[i]}) elseif not currentValid then table.insert(invalidEmoteSlots, {slot = i, currentInvalid = true, currentName = currentEmotes[i], selectInvalid = false, selectName = selectEmotes[i]}) elseif not selectValid then table.insert(invalidEmoteSlots, {slot = i, currentInvalid = false, currentName = currentEmotes[i], selectInvalid = true, selectName = selectEmotes[i]}) elseif currentActual:lower() == selectActual:lower() then table.insert(sameEmoteSlots, i) else table.insert(successfulSlots, {slot = i, current = currentActual, select = selectActual}) end elseif currentEmotes[i] ~= "" or selectEmotes[i] ~= "" then table.insert(missingEmoteSlots, i) end end local message = "" if #successfulSlots > 0 then message = message .. "✓ Successfully applied emote on:\n" for _, data in ipairs(successfulSlots) do message = message .. "Slot " .. data.slot .. " Emote: " .. data.current .. " → " .. data.select .. "\n" end message = message .. "\n" end if #sameEmoteSlots > 0 then message = message .. "🆇 Failed to apply emote on:\n" for _, slot in ipairs(sameEmoteSlots) do message = message .. "Slot " .. slot .. " - Cannot change emote with the same name\n" end message = message .. "\n" end if #invalidEmoteSlots > 0 then message = message .. "🆇 Failed to apply emote on:\n" for _, data in ipairs(invalidEmoteSlots) do message = message .. "Slot " .. data.slot .. " - " if data.currentInvalid and data.selectInvalid then message = message .. "Invalid current emote: \"" .. data.currentName .. "\", Invalid select emote: \"" .. data.selectName .. "\"\n" elseif data.currentInvalid then message = message .. "Invalid current emote: \"" .. data.currentName .. "\", Select emote: \"" .. data.selectName .. "\"\n" else message = message .. "Current emote: \"" .. data.currentName .. "\", Invalid select emote: \"" .. data.selectName .. "\"\n" end end message = message .. "\n" end if #missingEmoteSlots > 0 then message = message .. "🆇 Failed to apply emote on:\n" for _, slot in ipairs(missingEmoteSlots) do if currentEmotes[slot] == "" then message = message .. "Slot " .. slot .. " - Current emote slot is missing text\n" else message = message .. "Slot " .. slot .. " - Select emote slot is missing text\n" end end end for i=1,12 do local currentValid = isValidEmote(currentEmotes[i]) local selectValid = isValidEmote(selectEmotes[i]) emoteEnabled[i] = (currentValid and selectValid and currentEmotes[i]:lower() ~= selectEmotes[i]:lower()) end WindUI:Notify({ Title="Emote Changer", Content=message, Duration=8 }) end }) EmoteChangerEmoteReset = Tabs.EmoteChanger:Button({ Title = "Reset All Emotes", Icon = "trash-2", Callback = function() for i = 1, 12 do currentEmotes[i] = "" selectEmotes[i] = "" emoteEnabled[i] = false if currentEmoteInputs[i] and currentEmoteInputs[i].Set then currentEmoteInputs[i]:Set("") end if selectEmoteInputs[i] and selectEmoteInputs[i].Set then selectEmoteInputs[i]:Set("") end end WindUI:Notify({ Title = "Emote Changer", Content = "All emotes have been reset!" }) end })