Run it
Copy the script and paste it into your executor.
WindUI
ok, result = (()
()
)
ok
WindUI = result
WindUI = (:())()
WindUI.TransparencyValue =
WindUI:()
Window = WindUI:({
Title = ,
Author = ,
Folder = ,
Size = .(, ),
Theme = ,
HidePanelBackground = ,
Acrylic = ,
HideSearchBar = ,
SideBarWidth =
})
Window:()
Window:(, , ()
WindUI:(WindUI:() == )
, )
FeatureSection = Window:({ Title = , Opened = })
Tabs = {
EmoteChanger = FeatureSection:({ Title = , Icon = })
}
Tabs.EmoteChanger:({ Title = })
player = :().LocalPlayer
ReplicatedStorage = :()
Events = ReplicatedStorage:(, )
CharacterFolder = Events Events:(, )
EmoteRemote = CharacterFolder CharacterFolder:(, )
PassCharacterInfo = CharacterFolder CharacterFolder:(, )
remoteSignal = PassCharacterInfo PassCharacterInfo.OnClientEvent
currentTag =
currentEmotes = .(, )
selectEmotes = .(, )
emoteEnabled = .(, )
currentEmoteInputs = {}
selectEmoteInputs = {}
(f)
f
a = f:()
a ~=
a
o = f:()
o o:()
o.Value
()
currentTag =
pendingSlot =
.(()
startTime = ()
() - startTime <
:() .Game:()
pf = .Game.Players:(player.Name)
pf
currentTag = (pf)
currentTag
b = (currentTag)
b b >= b <=
currentTag =
.()
)
pendingSlot =
blockOriginalEmote =
(slot)
currentTag
b = (currentTag)
b b < b >
selectEmotes[slot] selectEmotes[slot] ==
buf = buffer.()
buffer.(buf, , b)
buffer.(buf, , )
remoteSignal
(remoteSignal, buf, {selectEmotes[slot]})
PassCharacterInfo EmoteRemote
PassCharacterInfo.OnClientEvent:((...)
pendingSlot
slot = pendingSlot
pendingSlot =
.()
(slot)
)
success, oldNamecall = (()
(, , (self, ...)
m
ok, err = (()
m = ()
)
ok
args = {...}
m == self == EmoteRemote (args[]) ==
i = ,
emoteEnabled[i] currentEmotes[i] ~= args[] == currentEmotes[i]
pendingSlot = i
blockOriginalEmote =
.(()
ok2, err2 = (()
.()
blockOriginalEmote =
pendingSlot == i
pendingSlot =
(i)
)
ok2 (err2)
)
blockOriginalEmote
(self, ...)
)
)
success
EmoteChangerEmoteApply
EmoteChangerEmoteApply:()
EmoteChangerEmoteReset
EmoteChangerEmoteReset:()
i = ,
currentEmoteInputs[i] currentEmoteInputs[i].Lock
currentEmoteInputs[i]:()
selectEmoteInputs[i] selectEmoteInputs[i].Lock
selectEmoteInputs[i]:()
WindUI:({
Title = ,
Content = ,
Duration =
})
player.Character
.(onRespawn)
player.CharacterAdded:(()
.()
()
)
:() .Game:()
.Game.Players.ChildAdded:((child)
child.Name == player.Name
.()
()
)
.Game.Players.ChildRemoved:((child)
child.Name == player.Name
currentTag =
pendingSlot =
)
Tabs.EmoteChanger:({ Title = , TextSize = })
Tabs.EmoteChanger:()
i = ,
currentEmoteInputs[i] = Tabs.EmoteChanger:({
Title = .. i,
Placeholder = ,
Value = currentEmotes[i],
Callback = (v)
currentEmotes[i] = v:(, )
})
Tabs.EmoteChanger:()
i = ,
selectEmoteInputs[i] = Tabs.EmoteChanger:({
Title = .. i,
Placeholder = ,
Value = selectEmotes[i],
Callback = (v)
selectEmotes[i] = v:(, )
})
EmoteChangerEmoteOption = Tabs.EmoteChanger:({
Title = ,
Desc = ,
Placeholder = ,
Callback = (v)
num = (v)
Players = :()
player = Players.LocalPlayer
currentNum = num
(character)
character == player.Character
character:(, currentNum)
()
()
character = player.Character
character character:() ~= currentNum
character:(, currentNum)
player.Character
(player.Character)
player.CharacterAdded:((character)
()
(character)
)
(monitorCharacter)
})
EmoteChangerEmoteApply = Tabs.EmoteChanger:({
Title=,
Icon=,
Callback=()
hasAnyEmote =
i=,
currentEmotes[i] ~= selectEmotes[i] ~=
hasAnyEmote =
hasAnyEmote
WindUI:({
Title=,
Content=,
Duration=
})
(name)
name:(, ):()
(emoteName)
emoteName == ,
normalizedInput = (emoteName)
emotesFolder = :():()
emotesFolder
emotesFolder = emotesFolder:()
emotesFolder
_, emoteModule (emotesFolder:())
emoteModule:()
normalizedEmote = (emoteModule.Name)
normalizedEmote == normalizedInput
, emoteModule.Name
,
sameEmoteSlots = {}
missingEmoteSlots = {}
invalidEmoteSlots = {}
successfulSlots = {}
i=,
currentEmotes[i] ~= selectEmotes[i] ~=
currentValid, currentActual = (currentEmotes[i])
selectValid, selectActual = (selectEmotes[i])
currentValid selectValid
.(invalidEmoteSlots, {slot = i, currentInvalid = , currentName = currentEmotes[i], selectInvalid = , selectName = selectEmotes[i]})
currentValid
.(invalidEmoteSlots, {slot = i, currentInvalid = , currentName = currentEmotes[i], selectInvalid = , selectName = selectEmotes[i]})
selectValid
.(invalidEmoteSlots, {slot = i, currentInvalid = , currentName = currentEmotes[i], selectInvalid = , selectName = selectEmotes[i]})
currentActual:() == selectActual:()
.(sameEmoteSlots, i)
.(successfulSlots, {slot = i, current = currentActual, = selectActual})
currentEmotes[i] ~= selectEmotes[i] ~=
.(missingEmoteSlots, i)
message =
#successfulSlots >
message = message ..
_, data (successfulSlots)
message = message .. .. data.slot .. .. data.current .. .. data.select ..
message = message ..
#sameEmoteSlots >
message = message ..
_, slot (sameEmoteSlots)
message = message .. .. slot ..
message = message ..
#invalidEmoteSlots >
message = message ..
_, data (invalidEmoteSlots)
message = message .. .. data.slot ..
data.currentInvalid data.selectInvalid
message = message .. .. data.currentName .. .. data.selectName ..
data.currentInvalid
message = message .. .. data.currentName .. .. data.selectName ..
message = message .. .. data.currentName .. .. data.selectName ..
message = message ..
#missingEmoteSlots >
message = message ..
_, slot (missingEmoteSlots)
currentEmotes[slot] ==
message = message .. .. slot ..
message = message .. .. slot ..
i=,
currentValid = (currentEmotes[i])
selectValid = (selectEmotes[i])
emoteEnabled[i] = (currentValid selectValid currentEmotes[i]:() ~= selectEmotes[i]:())
WindUI:({
Title=,
Content=message,
Duration=
})
})
EmoteChangerEmoteReset = Tabs.EmoteChanger:({
Title = ,
Icon = ,
Callback = ()
i = ,
currentEmotes[i] =
selectEmotes[i] =
emoteEnabled[i] =
currentEmoteInputs[i] currentEmoteInputs[i].Set
currentEmoteInputs[i]:()
selectEmoteInputs[i] selectEmoteInputs[i].Set
selectEmoteInputs[i]:()
WindUI:({
Title = ,
Content =
})
})
Tabs.EmoteChanger:({ Title = })
yaneedtobeinlegacymodetousethis = Tabs.EmoteChanger:({ Title = })
placeId = .PlaceId
placeId ==
yaneedtobeinlegacymodetousethis
yaneedtobeinlegacymodetousethis:()
EmoteChangerEmoteApply
EmoteChangerEmoteApply:()
EmoteChangerEmoteReset
EmoteChangerEmoteReset:()
i = ,
currentEmoteInputs[i] currentEmoteInputs[i].Lock
currentEmoteInputs[i]:()
selectEmoteInputs[i] selectEmoteInputs[i].Lock
selectEmoteInputs[i]:()
originalEmotes = {}
i = ,
originalEmotes[i] = :().LocalPlayer:( .. i)
hookInstalled =
blockRemote =
emoteSpeedConnection =
tpcameraConnection =
emotingAttributeConnection =
pendingEmoteChanges = {}
emoteSpeedCache = {}
()
player = :().LocalPlayer
character = player.Character
character
character:()
(emoteSlot)
blockRemote
emoteName = pendingEmoteChanges[emoteSlot] :().LocalPlayer:( .. emoteSlot)
emoteName emoteName ==
tagData = ()
tagData
characterEvent = :().Events.Character.Emote
(characterEvent.OnClientEvent, tagData, emoteName)
(emoteName)
emoteSpeedCache[emoteName]
emoteSpeedCache[emoteName]
replicatedStorage = :()
replicatedStorage
itemsFolder = replicatedStorage:()
itemsFolder
emotesFolder = itemsFolder:()
emotesFolder
emoteModule = emotesFolder:(emoteName)
emoteModule emoteModule:()
success, emoteData = (, emoteModule)
success emoteData
speedMult = emoteData.SpeedMult emoteData.EmoteInfo emoteData.EmoteInfo.SpeedMult
emoteSpeedCache[emoteName] = speedMult
speedMult
(apply)
emoteSpeedConnection
emoteSpeedConnection:()
emoteSpeedConnection =
playerModel = :() .Game:()
playerModel
localPlayerModel = playerModel:(.Players.LocalPlayer.Name)
localPlayerModel
isEmoting = localPlayerModel:()
isEmoting ==
emoteName =
i = ,
currentEmote = :().LocalPlayer:( .. i)
currentEmote currentEmote ~=
emoteName = currentEmote
emoteName
speedMult = (emoteName)
statChanges = localPlayerModel:()
statChanges
speed = statChanges:()
speed
emoteSpeed = speed:()
apply
emoteSpeed
emoteSpeed.Value = speedMult
emoteSpeed = .()
emoteSpeed.Name =
emoteSpeed.Value = speedMult
emoteSpeed.Parent = speed
emoteSpeed
emoteSpeed:()
statChanges = localPlayerModel:()
statChanges
speed = statChanges:()
speed
emoteSpeed = speed:()
emoteSpeed
emoteSpeed:()
apply
emoteSpeedConnection = localPlayerModel:():(()
newIsEmoting = localPlayerModel:()
statChanges = localPlayerModel:()
statChanges
speed = statChanges:()
speed
emoteSpeed = speed:()
newIsEmoting ==
emoteName =
i = ,
currentEmote = :().LocalPlayer:( .. i)
currentEmote currentEmote ~=
emoteName = currentEmote
emoteName
speedMult = (emoteName)
emoteSpeed
emoteSpeed = .()
emoteSpeed.Name =
emoteSpeed.Value = speedMult
emoteSpeed.Parent = speed
emoteSpeed.Value = speedMult
emoteSpeed
emoteSpeed:()
)
(apply)
tpcameraConnection
tpcameraConnection:()
tpcameraConnection =
emotingAttributeConnection
emotingAttributeConnection:()
emotingAttributeConnection =
apply
playerModel = :() .Game:()
playerModel
localPlayerModel = playerModel:(.Players.LocalPlayer.Name)
localPlayerModel
emotingAttributeConnection = localPlayerModel:():(()
isEmoting = localPlayerModel:()
isEmoting ==
Event = :().LocalPlayer.Character.Client
(Event.OnClientEvent, , {Zoom = })
)
()
Event = :().Events.Emote
hookInstalled
success, errorMsg = (()
mt = (Event)
mt mt.__namecall
oldNamecall = mt.__namecall
(mt, )
mt.__namecall = (self, ...)
method = ()
method ==
args = {...}
emoteNum = (args[])
blockRemote emoteNum:()
((emoteNum))
(self, ...)
(mt, )
hookInstalled =
WindUI:({
Title = ,
Content = ,
Duration =
})
WindUI:({
Title = ,
Content = ,
Duration =
})
)
success
WindUI:({
Title = ,
Content = .. (errorMsg),
Duration =
})
hookInstalled
WindUI:({
Title = ,
Content = ,
Duration =
})
()
emotes = {}
replicatedStorage = :()
replicatedStorage
itemsFolder = replicatedStorage:()
itemsFolder
emotesFolder = itemsFolder:()
emotesFolder
_, item (emotesFolder:())
.(emotes, item.Name)
#emotes > emotes {}
emoteValues = ()
legacyemoteDropdowns = {}
i = ,
currentEmote = :().LocalPlayer:( .. i)
legacyemoteDropdowns[i] = Tabs.EmoteChanger:({
Title = .. i,
Flag = .. i,
Desc = .. currentEmote,
Values = emoteValues,
Value = currentEmote,
Multi = ,
AllowNone = ,
Callback = (value)
pendingEmoteChanges[i] = value
legacyemoteDropdowns[i].Desc = .. (value )
})
Tabs.EmoteChanger:()
LegacyApply = Tabs.EmoteChanger:({
Title = ,
Desc = ,
Callback = ()
blockRemote =
success, errorMsg = (()
i = ,
pendingEmoteChanges[i]
:().LocalPlayer:( .. i, pendingEmoteChanges[i])
legacyemoteDropdowns[i].Desc = .. (pendingEmoteChanges[i] )
pendingEmoteChanges = {}
()
()
()
)
success
WindUI:({
Title = ,
Content = ,
Duration =
})
WindUI:({
Title = ,
Content = .. (errorMsg),
Duration =
})
})
LegacyReset = Tabs.EmoteChanger:({
Title = ,
Desc = ,
Callback = ()
blockRemote =
success, errorMsg = (()
()
()
pendingEmoteChanges = {}
i = ,
:().LocalPlayer:( .. i, originalEmotes[i])
legacyemoteDropdowns[i]:(originalEmotes[i])
legacyemoteDropdowns[i].Desc = .. (originalEmotes[i] )
)
success
WindUI:({
Title = ,
Content = ,
Duration =
})
WindUI:({
Title = ,
Content = .. (errorMsg),
Duration =
})
})
:().LocalPlayer.CharacterAdded:(()
.()
blockRemote
success = (()
()
()
)
)
:().LocalPlayer.Character
blockRemote
.()
success = (()
()
()
)
()
Tabs.EmoteChanger:({ Title = })
Tabs.EmoteChanger:({ Title = , TextSize = })
Tabs.EmoteChanger:()
EmoteSwapper = {
CurrentEmotes = {},
SelectedEmotes = {},
SwappedPairs = {},
InputFields = {},
PendingApply = ,
PendingSwaps = {}
}
i = ,
EmoteSwapper.CurrentEmotes[i] =
EmoteSwapper.SelectedEmotes[i] =
Tabs.EmoteChanger:({ Title = , TextSize = })
i = ,
EmoteSwapper.InputFields[ .. i] = Tabs.EmoteChanger:({
Title = .. i,
Placeholder = ,
Value = ,
Callback = (value)
EmoteSwapper.CurrentEmotes[i] = value
})
Tabs.EmoteChanger:({ Title = , TextSize = })
i = ,
EmoteSwapper.InputFields[ .. i] = Tabs.EmoteChanger:({
Title = .. i,
Placeholder = ,
Value = ,
Callback = (value)
EmoteSwapper.SelectedEmotes[i] = value
})
(currentName, selectedName)
Items = :():()
Items
EmotesFolder = Items:()
EmotesFolder
currentEmoteObj = EmotesFolder:(currentName)
selectedEmoteObj = EmotesFolder:(selectedName)
currentEmoteObj selectedEmoteObj
tempName = selectedName ..
EmotesFolder:(tempName)
tempName = tempName ..
currentEmoteObj.Name = tempName
selectedEmoteObj.Name = currentName
currentEmoteObj.Name = selectedName
()
Items = :():()
Items
EmotesFolder = Items:()
EmotesFolder
currentEmote, selectedEmote (EmoteSwapper.SwappedPairs)
currentEmoteObj = EmotesFolder:(selectedEmote)
selectedEmoteObj = EmotesFolder:(currentEmote)
currentEmoteObj selectedEmoteObj
tempName = currentEmote ..
EmotesFolder:(tempName)
tempName = tempName ..
currentEmoteObj.Name = tempName
selectedEmoteObj.Name = selectedEmote
currentEmoteObj.Name = currentEmote
()
EmoteSwapper.PendingSwaps #EmoteSwapper.PendingSwaps ==
swappedCount =
failedCount =
_, swapData (EmoteSwapper.PendingSwaps)
currentEmote = swapData[]
selectedEmote = swapData[]
(currentEmote, selectedEmote)
EmoteSwapper.SwappedPairs[currentEmote] = selectedEmote
swappedCount = swappedCount +
failedCount = failedCount +
EmoteSwapper.PendingSwaps = {}
EmoteSwapper.PendingApply =
swappedCount, failedCount
()
player.Character player.Character:() player.Character.Humanoid.Health <=
()
player.Character player.Character:()
EmoteSwapApplyButton = Tabs.EmoteChanger:({
Title = ,
Desc = ,
Icon = ,
Callback = ()
() ()
EmoteSwapper.PendingSwaps = {}
i = ,
currentEmote = EmoteSwapper.CurrentEmotes[i]
selectedEmote = EmoteSwapper.SelectedEmotes[i]
currentEmote ~= selectedEmote ~=
.(EmoteSwapper.PendingSwaps, {currentEmote, selectedEmote})
#EmoteSwapper.PendingSwaps >
EmoteSwapper.PendingApply =
WindUI:({
Title = ,
Content = ,
Icon = ,
Duration =
})
WindUI:({
Title = ,
Content = ,
Icon = ,
Duration =
})
swappedCount =
failedCount =
i = ,
currentEmote = EmoteSwapper.CurrentEmotes[i]
selectedEmote = EmoteSwapper.SelectedEmotes[i]
currentEmote ~= selectedEmote ~=
(currentEmote, selectedEmote)
EmoteSwapper.SwappedPairs[currentEmote] = selectedEmote
swappedCount = swappedCount +
failedCount = failedCount +
message =
swappedCount >
message = .. (swappedCount) ..
failedCount >
message ~= message = message ..
message = message .. .. (failedCount) ..
message ==
message =
WindUI:({
Title = ,
Content = message,
Icon = swappedCount > ,
Duration =
})
})
EmoteSwapResetButton = Tabs.EmoteChanger:({
Title = ,
Desc = ,
Icon = ,
Callback = ()
()
EmoteSwapper.SwappedPairs = {}
EmoteSwapper.PendingSwaps = {}
EmoteSwapper.PendingApply =
i = ,
EmoteSwapper.CurrentEmotes[i] =
EmoteSwapper.SelectedEmotes[i] =
EmoteSwapper.InputFields[ .. i]
EmoteSwapper.InputFields[ .. i]:()
EmoteSwapper.InputFields[ .. i]
EmoteSwapper.InputFields[ .. i]:()
WindUI:({
Title = ,
Content = ,
Icon = ,
Duration =
})
WindUI:({
Title = ,
Content = ,
Icon = ,
Duration =
})
})
player.CharacterRemoving:(()
(EmoteSwapper.SwappedPairs)
()
)
player.CharacterAdded:((character)
.()
()
(EmoteSwapper.SwappedPairs)
currentEmote, selectedEmote (EmoteSwapper.SwappedPairs)
(currentEmote, selectedEmote)
EmoteSwapper.PendingApply #EmoteSwapper.PendingSwaps >
swappedCount, failedCount = ()
message =
swappedCount >
message = .. (swappedCount) ..
failedCount >
message ~= message = message ..
message = message .. .. (failedCount) ..
message ~=
WindUI:({
Title = ,
Content = message,
Icon = swappedCount > ,
Duration =
})
)
player.CharacterAdded:((character)
.()
character:()
(EmoteSwapper.SwappedPairs)
currentEmote, selectedEmote (EmoteSwapper.SwappedPairs)
(currentEmote, selectedEmote)
)Loads code from the internet. It downloads more code when it runs (loadstring + HttpGet), which can change after it was posted. From: github.com.
Free visual emote

Universal