Run it
Copy the script and paste it into your executor.
HttpService = :()
Players = :()
RunService = :()
MarketplaceService = :()
TextChatService = :()
ReplicatedStorage = :()
LocalPlayer = Players.LocalPlayer
OPENROUTER_KEY =
FISH_API_KEY =
FISH_VOICE_ID =
NORMAL_FACE =
TALKING_FACE =
COLOR_VERITY = .(, , )
CHAT_RADIUS =
(player)
player
daysAgo = player.AccountAge
joinTime = .() - (daysAgo * )
.(, joinTime)
success, gameInfo = (() MarketplaceService:(.PlaceId) )
gameName = (success (gameInfo) == ) gameInfo.Name
gameDesc = (success (gameInfo) == gameInfo.Description)
gameDesc = .(gameDesc, , ):(, )
pName = LocalPlayer.Name
pDisplayName = LocalPlayer.DisplayName
pJoinDate = (LocalPlayer)
verityPart, verityMesh, verityGui, verityFace, verityGuiText
isHeld, hasIntroduced = ,
lastYVelocity =
holdAnimTrack =
sizeSpring = {current = .(, , ), velocity = .(, , ), target = .(, , ), stiffness = , damping = }
isRespawning =
isAutoChatEnabled =
isVerityBusy =
isPlayingMusic =
currentSongSound =
systemPrompt = .(
..
..
..
..
..
..
,
gameName, gameDesc, pName, pDisplayName, pJoinDate
)
conversationHistory = {
{role = , content = systemPrompt},
{role = , content = },
{role = , content = }
}
playerGui = LocalPlayer:()
screenGui = .(, playerGui)
screenGui.ResetOnSpawn =
dialogueScreen = .(, screenGui)
dialogueScreen.Size = .(, , , ); dialogueScreen.Position = .(, , , )
dialogueScreen.BackgroundTransparency = ; dialogueScreen.TextScaled = ; dialogueScreen.TextColor3 = .(, , ); dialogueScreen.TextStrokeTransparency = ; dialogueScreen.Text =
dropButton = .(, screenGui); dropButton.Size = .(, , , ); dropButton.Position = .(, , , ); dropButton.Text = ; dropButton.BackgroundColor3 = .(, , ); dropButton.TextColor3 = .(, , ); dropButton.Visible = ; dropButton.TextScaled =
.(, dropButton)
chatFrame = .(, screenGui); chatFrame.Size = .(, , , ); chatFrame.Position = .(, , , ); chatFrame.BackgroundColor3 = .(, , ); chatFrame.BackgroundTransparency =
.(, chatFrame)
chatInput = .(, chatFrame); chatInput.Size = .(, , , ); chatInput.Position = .(, , , ); chatInput.BackgroundTransparency = ; chatInput.PlaceholderText = ; chatInput.TextColor3 = .(, , ); chatInput.TextScaled =
sendButton = .(, chatFrame); sendButton.Size = .(, , , ); sendButton.Position = .(, , , ); sendButton.BackgroundColor3 = .(, , ); sendButton.TextColor3 = .(, , ); sendButton.Text = ; sendButton.TextScaled =
.(, sendButton)
historyButton = .(, chatFrame); historyButton.Size = .(, , , ); historyButton.Position = .(, , , ); historyButton.BackgroundColor3 = .(, , ); historyButton.TextColor3 = .(, , ); historyButton.Text = ; historyButton.TextScaled =
.(, historyButton)
autoChatBtn = .(, chatFrame); autoChatBtn.Size = .(, , , ); autoChatBtn.Position = .(, , , ); autoChatBtn.BackgroundColor3 = .(, , ); autoChatBtn.TextColor3 = .(, , ); autoChatBtn.Text = ; autoChatBtn.TextScaled =
.(, autoChatBtn)
historyFrame = .(, screenGui); historyFrame.Size = .(, , , ); historyFrame.Position = .(, , , ); historyFrame.BackgroundColor3 = .(, , ); historyFrame.BackgroundTransparency = ; historyFrame.Visible = ; historyFrame.CanvasSize = .(, , , ); historyFrame.AutomaticCanvasSize = .AutomaticSize.Y; historyFrame.ScrollBarThickness =
.(, historyFrame)
historyLayout = .(, historyFrame); historyLayout.Padding = .(, ); historyLayout.SortOrder = .SortOrder.LayoutOrder
historyPadding = .(, historyFrame); historyPadding.PaddingLeft = .(, ); historyPadding.PaddingTop = .(, ); historyPadding.PaddingRight = .(, ); historyPadding.PaddingBottom = .(, )
(role, text)
msgLabel = .(, historyFrame)
msgLabel.Size = .(, , , )
msgLabel.AutomaticSize = .AutomaticSize.Y
msgLabel.BackgroundTransparency =
msgLabel.TextWrapped =
msgLabel.TextSize =
msgLabel.TextXAlignment = .TextXAlignment.Left
role == role == LocalPlayer.Name
msgLabel.TextColor3 = .(, , )
msgLabel.Text = .. text
role ==
msgLabel.TextColor3 = COLOR_VERITY
msgLabel.Text = .. text
msgLabel.TextColor3 = .(, , )
msgLabel.Text = role .. .. text
historyButton.MouseButton1Click:(() historyFrame.Visible = historyFrame.Visible )
autoChatBtn.MouseButton1Click:(()
isAutoChatEnabled = isAutoChatEnabled
isAutoChatEnabled
autoChatBtn.Text =
autoChatBtn.BackgroundColor3 = .(, , )
autoChatBtn.Text =
autoChatBtn.BackgroundColor3 = .(, , )
)
(text, targetPart)
targetPart
requestFunc = ( .request) (fluxus fluxus.request) ( .request)
success, response = (()
({
Url = ,
Method = ,
Headers = {
[] = .. FISH_API_KEY,
[] = ,
[] =
},
Body = HttpService:({
text = text,
reference_id = FISH_VOICE_ID,
format =
})
})
)
success response response.Success response.Body
fileName = .. (.(, )) ..
(() (fileName, response.Body) )
soundId
(() soundId = (fileName) )
soundId
sound = .()
sound.SoundId = soundId
sound.Volume =
sound.RollOffMaxDistance =
sound.RollOffMinDistance =
sound.Parent = targetPart
sound.Ended:(()
sound:()
(() (fileName) )
)
sound
()
isPlayingMusic
isPlayingMusic =
isVerityBusy =
(, )
verityGuiText.Text =
dialogueScreen.Text =
verityFace.Texture = NORMAL_FACE
.(()
rawSongUrl =
success, songData = (()
:(rawSongUrl)
)
success songData
fileName = .. (.(, )) ..
(() (fileName, songData) )
soundId
(() soundId = (fileName) )
soundId
songSound = .()
songSound.SoundId = soundId
songSound.Volume =
songSound.Parent = verityPart
songSound:()
currentSongSound = songSound
songSound.Ended:(()
currentSongSound == songSound
isPlayingMusic =
isVerityBusy =
currentSongSound =
verityPart verityGuiText.Text = ; dialogueScreen.Text =
songSound:()
(() (fileName) )
)
isPlayingMusic =
isVerityBusy =
dialogueScreen.Text =
isPlayingMusic =
isVerityBusy =
dialogueScreen.Text =
)
()
reply =
(, reply)
verityGuiText.Text =
dialogueScreen.Text =
.(()
sound = (reply, verityPart)
verityGuiText.Text = reply
dialogueScreen.Text = .. reply
verityFace.Texture = TALKING_FACE
sound sound:()
(()
(:())()
)
waitTime = .(, (#reply / ) + )
.(waitTime)
verityPart verityGuiText.Text = ; dialogueScreen.Text = ; verityFace.Texture = NORMAL_FACE
isVerityBusy =
)
(promptContext)
.(conversationHistory, {role = , content = promptContext})
#conversationHistory
.(conversationHistory, )
.(conversationHistory, )
requestFunc = ( .request) (fluxus fluxus.request) ( .request)
requestFunc
.(conversationHistory)
success, response = (()
({
Url = ,
Method = ,
Headers = {
[] = ,
[] = .. OPENROUTER_KEY
},
Body = HttpService:({
model = ,
messages = conversationHistory,
max_tokens =
})
})
)
success
.(conversationHistory)
response response.Body
.(conversationHistory)
decodeSuccess, data = (()
HttpService:(response.Body)
)
decodeSuccess (data) ~=
.(conversationHistory)
data.error
.(conversationHistory)
.. (data.error.message )
reply =
data.choices data.choices[] data.choices[].message data.choices[].message.content
rawReply = data.choices[].message.content
rawReply rawReply ~= rawReply ~= rawReply ~=
reply = rawReply
fallbacks = {
,
,
,
,
}
reply = fallbacks[.(, #fallbacks)]
.(conversationHistory, {role = , content = reply})
reply
(senderName)
verityPart .huge
targetPart =
player = Players:(senderName)
player player.Character
targetPart = player.Character:() player.Character:()
targetPart
npc = :(senderName)
npc npc:()
targetPart = npc:() npc:()
targetPart
(verityPart.Position - targetPart.Position).Magnitude
.huge
(text)
TextChatService.ChatVersion == .ChatVersion.TextChatService
channel = TextChatService.TextChannels:()
channel channel:(text)
sayMsg = ReplicatedStorage:()
sayMsg sayMsg:()
sayMsg.SayMessageRequest:(text, )
(message, senderName)
isAutoChatEnabled
senderName == LocalPlayer.Name
dist = (senderName)
dist CHAT_RADIUS
lowerMsg = message:()
lowerMsg:()
isPlayingMusic
isPlayingMusic =
isVerityBusy =
currentSongSound
currentSongSound:()
currentSongSound:()
currentSongSound =
verityGuiText.Text =
dialogueScreen.Text =
.(, () dialogueScreen.Text = )
isPlayingMusic
isVerityBusy
lowerMsg:() lowerMsg:() lowerMsg:() lowerMsg:()
(senderName, message)
()
lowerMsg:() lowerMsg:()
isVerityBusy =
(senderName, message)
()
isVerityBusy =
(senderName, message)
speakerPlayer = Players:(senderName)
joinDate = (speakerPlayer)
hiddenNote = .(
,
speakerPlayer speakerPlayer.DisplayName senderName, senderName, joinDate
)
promptContext = hiddenNote .. message
verityGuiText.Text =
dialogueScreen.Text =
verityFace.Texture = NORMAL_FACE
.(()
reply = (promptContext)
(, reply)
verityGuiText.Text =
dialogueScreen.Text =
sound = (reply, verityPart)
verityGuiText.Text = reply
dialogueScreen.Text = .. reply
verityFace.Texture = TALKING_FACE
sound sound:()
(reply)
waitTime = .(, (#reply / ) + )
.(waitTime)
verityPart isPlayingMusic verityGuiText.Text = ; dialogueScreen.Text = ; verityFace.Texture = NORMAL_FACE
isVerityBusy =
)
TextChatService.ChatVersion == .ChatVersion.TextChatService
TextChatService.MessageReceived:((textChatMessage)
textChatMessage.TextSource
(textChatMessage.Text, textChatMessage.TextSource.Name)
)
chatEvents = ReplicatedStorage:(, )
chatEvents
chatEvents:().OnClientEvent:((msgData)
(msgData.Message, msgData.FromSpeaker)
)
spawnVerity
()
isRespawning
isRespawning =
isHeld =
dropButton.Visible =
holdAnimTrack holdAnimTrack:(); holdAnimTrack:(); holdAnimTrack =
char = LocalPlayer.Character LocalPlayer.CharacterAdded:()
root = char:()
respawnPos = root.Position - (root.CFrame.LookVector * ) + .(, , )
verityPart verityPart.Parent
verityPart.CFrame = .(respawnPos)
verityPart.AssemblyLinearVelocity = .(,,)
verityPart.AssemblyAngularVelocity = .(,,)
.(()
madText =
sound = (madText, verityPart)
verityGuiText.Text = madText
dialogueScreen.Text = .. madText
verityFace.Texture = TALKING_FACE
sound sound:()
.(conversationHistory, {role = , content = })
.(conversationHistory, {role = , content = madText})
waitTime = .(, (#madText / ) + )
.(waitTime)
verityPart verityFace.Texture = NORMAL_FACE; verityGuiText.Text = ; dialogueScreen.Text =
isRespawning =
)
(respawnPos, )
(pos, isRespawnCall)
verityPart verityPart.Parent verityPart:()
verityPart = .(, )
verityPart.Name = ; verityPart.Shape = .PartType.Ball; verityPart.Size = .(, , ); verityPart.Color = COLOR_VERITY; verityPart.Position = pos + .(, , )
verityPart.Material = .Material.SmoothPlastic
verityPart.TopSurface = .SurfaceType.Smooth; verityPart.BottomSurface = .SurfaceType.Smooth
verityPart.FrontSurface = .SurfaceType.Smooth; verityPart.BackSurface = .SurfaceType.Smooth
verityPart.LeftSurface = .SurfaceType.Smooth; verityPart.RightSurface = .SurfaceType.Smooth
verityMesh = .(, verityPart); verityMesh.MeshType = .MeshType.Sphere
verityFace = .(, verityPart); verityFace.Texture = NORMAL_FACE
verityGui = .(, verityPart); verityGui.Size = .(, , , ); verityGui.AlwaysOnTop =
verityGuiText = .(, verityGui); verityGuiText.Size = .(, , , ); verityGuiText.BackgroundTransparency = ; verityGuiText.TextScaled = ; verityGuiText.TextColor3 = .(, , )
verityPart.Touched:((hit)
name = hit.Name:()
name:() name:() name:() name:()
()
)
cd = .(, verityPart)
cd.MaxActivationDistance =
cd.MouseClick:(()
isHeld
isHeld =
dropButton.Visible =
char = LocalPlayer.Character
hum = char char:()
animator = hum (hum:() .(, hum))
animator
anim = .()
anim.AnimationId = hum.RigType == .HumanoidRigType.R15
holdAnimTrack = animator:(anim)
holdAnimTrack.Priority = .AnimationPriority.Action
holdAnimTrack:()
)
isRespawnCall
hasIntroduced =
.(()
madText =
sound = (madText, verityPart)
verityGuiText.Text = madText
dialogueScreen.Text = .. madText
verityFace.Texture = TALKING_FACE
sound sound:()
.(conversationHistory, {role = , content = })
.(conversationHistory, {role = , content = madText})
waitTime = .(, (#madText / ) + )
.(waitTime)
verityPart verityFace.Texture = NORMAL_FACE; verityGuiText.Text = ; dialogueScreen.Text =
isRespawning =
)
RunService.RenderStepped:((dt)
verityPart verityPart.Parent
verityPart.Position.Y = -
impactForce = .(-lastYVelocity * , , )
sizeSpring.velocity = .(impactForce * , -impactForce * , impactForce * )
verityPart.AssemblyLinearVelocity = .(verityPart.AssemblyLinearVelocity.X, -lastYVelocity * , verityPart.AssemblyLinearVelocity.Z)
lastYVelocity = currentYVelocity
verityFace.Texture == TALKING_FACE
stretchFactor = + (.(() * ) * )
sizeSpring.target = .( * (/stretchFactor), * stretchFactor, * (/stretchFactor))
sizeSpring.target = .(, , )
springForce = (sizeSpring.target - sizeSpring.current) * sizeSpring.stiffness
sizeSpring.velocity = sizeSpring.velocity + (springForce - sizeSpring.velocity * sizeSpring.damping) * dt
sizeSpring.current = sizeSpring.current + sizeSpring.velocity * dt
verityMesh.Scale = .(.(sizeSpring.current.X, )/, .(sizeSpring.current.Y, )/, .(sizeSpring.current.Z, )/)
hasIntroduced verityPart.AssemblyLinearVelocity.Magnitude =
spawnPos = box.Position
box:()
(spawnPos, )
)Loads code from the internet. It downloads more code when it runs (loadstring + HttpGet), which can change after it was posted. From: api.fish.audio, raw.githubusercontent.com, openrouter.ai.
some update things

Universal