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
})