0% found this document useful (0 votes)
6 views40 pages

Text File

The document outlines a Lua script for a game that implements a pet and toy management system, including functions for creating, equipping, and unmounting pets. It features a spawner system for pets and toys, as well as a system for managing pet states and player interactions with pets. Additionally, it includes thread identity management and remote function mocks for server communication in the game environment.

Uploaded by

gjemine
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
6 views40 pages

Text File

The document outlines a Lua script for a game that implements a pet and toy management system, including functions for creating, equipping, and unmounting pets. It features a spawner system for pets and toys, as well as a system for managing pet states and player interactions with pets. Additionally, it includes thread identity management and remote function mocks for server communication in the game environment.

Uploaded by

gjemine
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd

local Players = game:GetService("Players")

local ReplicatedStorage = game:GetService("ReplicatedStorage")


local UserInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")
local RunService = game:GetService("RunService")
local HttpService = game:GetService("HttpService")

local LocalPlayer = [Link]

-- Thread identity helper for different executors


local function set_thread_identity(level)
if type(syn) == "table" and syn.set_thread_identity then
return syn.set_thread_identity(level)
elseif type(getthreadidentity) == "function" and type(setthreadidentity) ==
"function" then
local current = getthreadidentity()
setthreadidentity(level)
return current
elseif type(getthreadcontext) == "function" and type(setthreadcontext) ==
"function" then
local current = getthreadcontext()
setthreadcontext(level)
return current
end
return 2 -- Default to 2 if no identity functions
end

-- Pet names list (capitalized properly)


local petNames = {
"Bat Dragon", "Shadow Dragon", "Evil Unicorn", "Crow", "Giraffe",
"Parrot", "Diamond Butterfly", "Owl", "Frost Dragon", "Giant Panda",
"Balloon Unicorn", "Monkey King", "Arctic Reindeer", "Hedgehog", "Flamingo",
"Turtle", "Kangaroo"
}

-- Toy names list


local toyNames = {
"Rainbow Rattle", "Candy Cannon", "Witches Broomstick", "Tombstone Ghostify"
}

-- === GLOBAL SPAWNER SYSTEM ===


local spawnerSystemLoaded = false
local spawnerPets = {}
local equippedPet = nil
local mountedPet = nil
local currentMountTrack = nil

-- Make these functions global so they can be called from dialog


_G.createPet = nil
_G.equipPet = nil
_G.unequipPet = nil

-- Store the original dialog message


local originalDialogMessage = "An Adopt Me admin gave you: "
local currentDialogMessage = originalDialogMessage

-- Store selected toy


local selectedToy = ""
-- === SPAWNER SYSTEM ===
local function loadSpawnerSystem()
if spawnerSystemLoaded then return end

local success, err = pcall(function()


local oldIdentity = set_thread_identity(2)
local Fsys = require([Link]:WaitForChild('Fsys'))
local load = [Link]

local clientData = load('ClientData')


local items = load('KindDB')
local router = load('RouterClient')
local downloader = load('DownloadClient')
local animationManager = load('AnimationManager')
local petRigs = load('new:PetRigs')
local UIManager = load('UIManager')

set_thread_identity(oldIdentity)

local petModels = {}

local function updateData(key, action)


local oldId = set_thread_identity(2)
local data = [Link](key)
local clonedData = [Link](data)
[Link](key, action(clonedData))
set_thread_identity(oldId)
end

local function getUniqueId()


return HttpService:GenerateGUID(false)
end

local function getPetModel(kind)


if petModels[kind] then
return petModels[kind]:Clone()
end

local promise = downloader.promise_download_copy('Pets', kind)


if promise then
local streamed = promise:expect()
petModels[kind] = streamed
return streamed:Clone()
end
return nil
end

-- === PET CREATION ===


_G.createPet = function(id, properties)
local uniqueId = getUniqueId()
local item = items[id]
if not item then
return nil
end

local oldId = set_thread_identity(2)


local new_pet = {
unique = uniqueId,
category = 'pets',
id = id,
kind = [Link],
newness_order = [Link](1, 900000),
properties = properties or {},
}
local inventory = [Link]('inventory')
[Link][uniqueId] = new_pet
set_thread_identity(oldId)

spawnerPets[uniqueId] = {
data = new_pet,
model = nil,
}

return new_pet
end

-- === TOY CREATION ===


_G.createToy = function(toyName, properties)
local uniqueId = getUniqueId()

local oldId = set_thread_identity(2)


local InventoryDB = load('InventoryDB')

-- Find toy ID by name


local toyId
for id, toy in pairs([Link]) do
if [Link]:lower() == toyName:lower() then
toyId = id
break
end
end

if not toyId then


set_thread_identity(oldId)
return nil
end

local item = items[toyId]


if not item then
set_thread_identity(oldId)
return nil
end

local new_toy = {
unique = uniqueId,
category = 'toys',
id = toyId,
kind = [Link],
newness_order = [Link](1, 900000),
properties = properties or {},
}

local inventory = [Link]('inventory')


[Link][uniqueId] = new_toy
set_thread_identity(oldId)

return new_toy
end

local function neonify(model, entry)


local petModel = model:FindFirstChild('PetModel')
if not petModel then
return
end

local oldId = set_thread_identity(2)


local petRig = [Link](petModel)
set_thread_identity(oldId)

if petRig and petRig.get_geo_part then


for neonPart, configuration in pairs(entry.neon_parts) do
local trueNeonPart = petRig.get_geo_part(petModel, neonPart)
if trueNeonPart then
[Link] = [Link]
[Link] = [Link]
end
end
end
end

local function addPetWrapper(wrapper)


updateData('pet_char_wrappers', function(petWrappers)
[Link] = #petWrappers + 1
[Link] = #petWrappers + 1
petWrappers[#petWrappers + 1] = wrapper
return petWrappers
end)
end

local function addPetState(state)


updateData('pet_state_managers', function(petStates)
petStates[#petStates + 1] = state
return petStates
end)
end

local function findIndex(array, finder)


for index, value in pairs(array) do
local isIt = finder(value, index)
if isIt then
return index
end
end
return nil
end

local function removePetWrapper(uniqueId)


updateData('pet_char_wrappers', function(petWrappers)
local index = findIndex(petWrappers, function(wrapper)
return wrapper.pet_unique == uniqueId
end)

if not index then


return petWrappers
end
[Link](petWrappers, index)

for wrapperIndex, wrapper in pairs(petWrappers) do


[Link] = wrapperIndex
[Link] = wrapperIndex
end

return petWrappers
end)
end

local function removePetState(uniqueId)


local pet = spawnerPets[uniqueId]
if not pet or not [Link] then
return
end

updateData('pet_state_managers', function(petStates)
local index = findIndex(petStates, function(state)
return [Link] == [Link]
end)

if not index then


return petStates
end

[Link](petStates, index)
return petStates
end)
end

-- === EQUIP/UNEQUIP SYSTEM ===


_G.unequipPet = function(item)
local pet = spawnerPets[[Link]]
if not pet then
return
end

removePetWrapper([Link])
removePetState([Link])

if [Link] then
[Link]:Destroy()
[Link] = nil
end

equippedPet = nil
end

_G.equipPet = function(item)
if equippedPet then
_G.unequipPet(equippedPet)
end

local petModel = getPetModel([Link])


if not petModel then
return
end
[Link] = workspace
spawnerPets[[Link]].model = petModel

if [Link] or [Link].mega_neon then


neonify(petModel, items[[Link]])
end

equippedPet = item

local wrapper = {
char = petModel,
mega_neon = [Link].mega_neon,
neon = [Link],
player = LocalPlayer,
entity_controller = LocalPlayer,
controller = LocalPlayer,
rp_name = [Link].rp_name or '',
pet_trick_level = [Link].pet_trick_level,
pet_unique = [Link],
pet_id = [Link],
location = {
full_destination_id = 'housing',
destination_id = 'housing',
house_owner = LocalPlayer,
},
pet_progression = {
age = [Link](1, 900000),
percentage = [Link](0.01, 0.99),
},
are_colors_sealed = false,
is_pet = true,
}

addPetWrapper(wrapper)

addPetState({
char = petModel,
player = LocalPlayer,
store_key = 'pet_state_managers',
is_sitting = false,
chars_connected_to_me = {},
states = {},
})
end

-- Helper function to get pet by name


local InventoryDB = load('InventoryDB')
_G.GetPetByName = function(name)
local oldId = set_thread_identity(2)
for i, v in pairs([Link]) do
if [Link]:lower() == name:lower() then
set_thread_identity(oldId)
return [Link]
end
end
set_thread_identity(oldId)
return false
end
-- Helper function to get toy by name
_G.GetToyByName = function(name)
local oldId = set_thread_identity(2)
for i, v in pairs([Link]) do
if [Link]:lower() == name:lower() then
set_thread_identity(oldId)
return [Link]
end
end
set_thread_identity(oldId)
return false
end

-- [Link] OVERRIDE
local oldGet = [Link]

local function createRemoteFunctionMock(callback)


return {
InvokeServer = function(_, ...)
return callback(...)
end,
}
end

local function createRemoteEventMock(callback)


return {
FireServer = function(_, ...)
return callback(...)
end,
}
end

-- Helper functions for mounting


local function clearPetState(uniqueId)
local pet = spawnerPets[uniqueId]
if not pet or not [Link] then return end

updateData('pet_state_managers', function(states)
local index = findIndex(states, function(state)
return [Link] == [Link]
end)
if not index then return states end

local clonedStates = [Link](states)


clonedStates[index] = [Link](clonedStates[index])
clonedStates[index].states = {}
return clonedStates
end)
end

local function setPetState(uniqueId, id)


local pet = spawnerPets[uniqueId]
if not pet or not [Link] then return end

updateData('pet_state_managers', function(states)
local index = findIndex(states, function(state)
return [Link] == [Link]
end)
if not index then return states end
local clonedStates = [Link](states)
clonedStates[index] = [Link](clonedStates[index])
clonedStates[index].states = {{ id = id }}
return clonedStates
end)
end

local function attachPlayerToPet(pet)


local character = [Link]
if not character or not [Link] then return false end

local ridePosition = pet:FindFirstChild('RidePosition', true)


if not ridePosition then return false end

local sourceAttachment = [Link]('Attachment')


[Link] = ridePosition
[Link] = [Link](0, 1.237, 0)
[Link] = 'SourceAttachment'

local stateConnection = [Link]('RigidConstraint')


[Link] = 'StateConnection'
stateConnection.Attachment0 = sourceAttachment
stateConnection.Attachment1 = [Link]
[Link] = character

return true
end

local function clearPlayerState()


updateData('state_manager', function(state)
local clonedState = [Link](state)
[Link] = {}
clonedState.is_sitting = false
return clonedState
end)
end

local function setPlayerState(id)


updateData('state_manager', function(state)
local clonedState = [Link](state)
[Link] = {{ id = id }}
clonedState.is_sitting = true
return clonedState
end)
end

local function unmount(uniqueId)


local pet = spawnerPets[uniqueId]
if not pet or not [Link] then return end

if currentMountTrack then
currentMountTrack:Stop()
currentMountTrack:Destroy()
end

local sourceAttachment = [Link]:FindFirstChild('SourceAttachment',


true)
if sourceAttachment then
sourceAttachment:Destroy()
end

if [Link] then
for _, descendant in pairs([Link]:GetDescendants())
do
if descendant:IsA('BasePart') and
descendant:GetAttribute('HaveMass') then
[Link] = false
end
end
end

clearPetState(uniqueId)
clearPlayerState()
[Link]:ScaleTo(1)
mountedPet = nil
end

local function mount(uniqueId, playerState, petState)


local pet = spawnerPets[uniqueId]
if not pet or not [Link] then return end

local player = LocalPlayer


if not [Link] or not [Link] then return
end

mountedPet = uniqueId

setPetState(uniqueId, petState)
setPlayerState(playerState)

[Link]:ScaleTo(2)
attachPlayerToPet([Link])

currentMountTrack = [Link]:LoadAnimation(
animationManager.get_track('PlayerRidingPet')
)
[Link] = true

for _, descendant in pairs([Link]:GetDescendants()) do


if descendant:IsA('BasePart') and [Link] == false then
[Link] = true
descendant:SetAttribute('HaveMass', true)
end
end

currentMountTrack:Play()
end

local function fly(uniqueId)


mount(uniqueId, 'PlayerFlyingPet', 'PetBeingFlown')
end

local function ride(uniqueId)


mount(uniqueId, 'PlayerRidingPet', 'PetBeingRidden')
end

-- Only intercept pet equips


local equipRemote = createRemoteFunctionMock(function(uniqueId, metadata)
local pet = spawnerPets[uniqueId]

if pet then
_G.equipPet([Link])
return true, { action = 'equip', is_server = true }
end

-- Forward non-pet equips to original handler


return oldGet('ToolAPI/Equip'):InvokeServer(uniqueId, metadata)
end)

-- Only intercept pet unequips


local unequipRemote = createRemoteFunctionMock(function(uniqueId)
local pet = spawnerPets[uniqueId]

if pet then
_G.unequipPet([Link])
return true, { action = 'unequip', is_server = true }
end

-- Forward non-pet unequips to original handler


return oldGet('ToolAPI/Unequip'):InvokeServer(uniqueId)
end)

-- Pet riding/flying remotes


local rideRemote = createRemoteFunctionMock(function(item)
ride(item.pet_unique)
end)

local flyRemote = createRemoteFunctionMock(function(item)


fly(item.pet_unique)
end)

local unmountRemoteFunction = createRemoteFunctionMock(function()


unmount(mountedPet)
end)

local unmountRemoteEvent = createRemoteEventMock(function()


unmount(mountedPet)
end)

[Link] = function(name)
-- Only intercept pet-related calls
if name == 'ToolAPI/Equip' then
return equipRemote
elseif name == 'ToolAPI/Unequip' then
return unequipRemote
elseif name == 'AdoptAPI/RidePet' then
return rideRemote
elseif name == 'AdoptAPI/FlyPet' then
return flyRemote
elseif name == 'AdoptAPI/ExitSeatStatesYield' then
return unmountRemoteFunction
elseif name == 'AdoptAPI/ExitSeatStates' then
return unmountRemoteEvent
end

-- Pass through all other requests


return oldGet(name)
end

spawnerSystemLoaded = true
end)

if not success then


warn("Error loading spawner system:", err)
end
end

-- === MAIN GUI ===


local screenGui = [Link]("ScreenGui")
[Link] = "PetDialogGui"
[Link] = false
[Link] = LocalPlayer:WaitForChild("PlayerGui")

local mainFrame = [Link]("Frame")


[Link] = [Link](0, 180, 0, 400) -- Increased height for toy dialog
button
[Link] = [Link](0.5, -90, 0.5, -200)
mainFrame.BackgroundColor3 = [Link](30, 30, 40)
[Link] = 0
[Link] = 0
[Link] = 1
[Link] = true
[Link] = true
[Link] = screenGui

local uiCorner = [Link]("UICorner")


[Link] = [Link](0, 10)
[Link] = mainFrame

local uiStroke = [Link]("UIStroke")


[Link] = [Link](170, 0, 255)
[Link] = 3
[Link] = 0
[Link] = mainFrame

local blackFrame = [Link]("Frame")


[Link] = [Link](0, 190, 0, 410)
blackFrame.BackgroundColor3 = [Link](0, 0, 0)
[Link] = 0
[Link] = 0
[Link] = 0
[Link] = screenGui

local blackCorner = [Link]("UICorner")


[Link] = [Link](0, 12)
[Link] = blackFrame

mainFrame:GetPropertyChangedSignal("Position"):Connect(function()
[Link] = [Link](
[Link],
[Link] - 5,
[Link],
[Link] - 5
)
end)
[Link] = [Link](
[Link],
[Link] - 5,
[Link],
[Link] - 5
)

-- === COLOR ANIMATION ===


local colorPalette = {
[Link](170, 0, 255), [Link](120, 0, 255),
[Link](0, 100, 255), [Link](0, 200, 255),
[Link](0, 255, 150), [Link](0, 255, 100),
[Link](255, 100, 0), [Link](255, 50, 150)
}

local currentIndex = 1
local function animateToNextColor()
local nextIndex = currentIndex % #colorPalette + 1
TweenService:Create(uiStroke, [Link](4, [Link]), {
Color = colorPalette[nextIndex]
}):Play()
currentIndex = nextIndex
wait(4)
animateToNextColor()
end
[Link](animateToNextColor)()

-- === TABS SYSTEM ===


local tabsContainer = [Link]("Frame")
[Link] = [Link](1, 0, 0, 30)
[Link] = [Link](0, 0, 0, 40) -- Moved down to make room for
title
[Link] = 1
[Link] = mainFrame

-- Create tabs
local mainTab = [Link]("TextButton")
[Link] = [Link](0.4, 0, 1, 0)
[Link] = [Link](0.05, 0, 0, 0)
[Link] = "Main"
[Link] = [Link]
[Link] = 12
mainTab.BackgroundColor3 = [Link](50, 40, 80)
mainTab.TextColor3 = [Link](215, 215, 255)
[Link] = true
[Link] = tabsContainer

local editorTab = [Link]("TextButton")


[Link] = [Link](0.4, 0, 1, 0)
[Link] = [Link](0.55, 0, 0, 0)
[Link] = "Editor"
[Link] = [Link]
[Link] = 12
editorTab.BackgroundColor3 = [Link](50, 40, 80)
editorTab.TextColor3 = [Link](215, 215, 255)
[Link] = true
[Link] = tabsContainer
local tabsCorner = [Link]("UICorner")
[Link] = [Link](0, 4)
[Link] = mainTab

local tabsCorner2 = [Link]("UICorner")


[Link] = [Link](0, 4)
[Link] = editorTab

-- === CONTENT FRAMES ===


local contentContainer = [Link]("Frame")
[Link] = [Link](1, 0, 1, -70) -- Adjusted for tabs and title
[Link] = [Link](0, 0, 0, 70)
[Link] = 1
[Link] = mainFrame

-- Main content frame (default visible)


local mainContent = [Link]("Frame")
[Link] = [Link](1, 0, 1, 0)
[Link] = 1
[Link] = true
[Link] = contentContainer

-- Editor content frame


local editorContent = [Link]("Frame")
[Link] = [Link](1, 0, 1, 0)
[Link] = 1
[Link] = false
[Link] = contentContainer

-- === GUI ELEMENTS (NOW IN MAIN CONTENT) ===


local topLabel = [Link]("TextLabel")
[Link] = [Link](1, 0, 0, 25)
[Link] = [Link](0, 0, 0, 5) -- Moved up higher
[Link] = 1
[Link] = "@bb_tricks on dc"
[Link] = [Link]
[Link] = 14
topLabel.TextColor3 = [Link](240, 240, 255)
[Link] = mainFrame

-- === PET SECTION ===


local petNameLabel = [Link]("TextLabel")
[Link] = [Link](0.6, 0, 0, 12)
[Link] = [Link](0.05, 0, 0, 0) -- Adjusted position for
mainContent
[Link] = 1
[Link] = "Pet Name"
[Link] = [Link]
[Link] = 8
petNameLabel.TextColor3 = [Link](200, 200, 200)
[Link] = [Link]
[Link] = mainContent

local petListBtn = [Link]("TextButton")


[Link] = [Link](0.3, 0, 0, 12)
[Link] = [Link](0.65, 0, 0, 0) -- Adjusted position for mainContent
[Link] = "Pet list"
[Link] = [Link]
[Link] = 8
petListBtn.BackgroundColor3 = [Link](50, 40, 80)
petListBtn.TextColor3 = [Link](215, 215, 255)
[Link] = true
[Link] = mainContent

local uiCornerList = [Link]("UICorner")


[Link] = [Link](0, 4)
[Link] = petListBtn

local petNameBox = [Link]("TextBox")


[Link] = [Link](0.9, 0, 0, 20)
[Link] = [Link](0.05, 0, 0.05, 0) -- Adjusted position for
mainContent
petNameBox.BackgroundColor3 = [Link](40, 40, 50)
[Link] = 0.2
petNameBox.TextColor3 = [Link](255, 255, 255)
[Link] = 11
[Link] = [Link]
[Link] = "insert pet name"
[Link] = ""
[Link] = false
[Link] = mainContent

[Link]("UICorner", petNameBox).CornerRadius = [Link](0, 6)

local boxStroke = [Link]("UIStroke", petNameBox)


[Link] = [Link](0, 0, 0)
[Link] = 1.2
[Link] = [Link]

local boxGlow = [Link]("UIStroke", petNameBox)


[Link] = [Link](255, 255, 255)
[Link] = 2.2
[Link] = 0.25
[Link] = [Link]

-- === PET SHOW DIALOG BUTTON ===


local petDialogBtn = [Link]("TextButton")
[Link] = [Link](0.9, 0, 0, 20)
[Link] = [Link](0.05, 0, 0.12, 0) -- Adjusted position for
mainContent
[Link] = "Show Pet Dialog"
[Link] = [Link]
[Link] = 11
petDialogBtn.BackgroundColor3 = [Link](30, 105, 210)
petDialogBtn.TextColor3 = [Link](255, 255, 255)
[Link] = true
[Link] = mainContent

[Link]("UICorner", petDialogBtn).CornerRadius = [Link](0, 6)

-- === RANDOM PET BUTTON ===


local randomPetBtn = [Link]("TextButton")
[Link] = [Link](0.9, 0, 0, 18)
[Link] = [Link](0.05, 0, 0.20, 0) -- Adjusted position for
mainContent
[Link] = "Pick Random Pet"
[Link] = [Link]
[Link] = 10
randomPetBtn.BackgroundColor3 = [Link](100, 50, 150)
randomPetBtn.TextColor3 = [Link](255, 255, 255)
[Link] = true
[Link] = mainContent

[Link]("UICorner", randomPetBtn).CornerRadius = [Link](0, 6)

-- === POTION BUTTONS ===


local activeFlags = {F = false, R = false, N = false, M = false}
local flagColors = {
M = [Link](170, 0, 255),
N = [Link](0, 255, 100),
F = [Link](0, 200, 255),
R = [Link](255, 50, 150)
}

local prefixes = {"F", "R", "N", "M"}

for i, prefix in ipairs(prefixes) do


local prefixButton = [Link]("TextButton")
[Link] = [Link](0.18, 0, 0, 18)
[Link] = [Link](0.05 + (i-1)*0.23, 0, 0.28, 0) -- Adjusted
position for mainContent
[Link] = prefix
prefixButton.BackgroundColor3 = [Link](60, 60, 70)
[Link] = 0.2
[Link] = [Link]
prefixButton.TextColor3 = [Link](255, 255, 255)
[Link] = 12
[Link] = true
[Link] = mainContent

[Link]("UICorner", prefixButton).CornerRadius = [Link](0, 6)

local buttonStroke = [Link]("UIStroke", prefixButton)


[Link] = flagColors[prefix]
[Link] = 2
[Link] = 0.5
[Link] = [Link]

local textStroke = [Link]("UIStroke", prefixButton)


[Link] = [Link](0, 0, 0)
[Link] = 1.5
[Link] = [Link]

local originalStroke = {
Color = flagColors[prefix],
Thickness = 2,
Transparency = 0.5
}

prefixButton.MouseButton1Click:Connect(function()
if prefix == "M" and activeFlags["N"] then return end
if prefix == "N" and activeFlags["M"] then return end

activeFlags[prefix] = not activeFlags[prefix]

if activeFlags[prefix] then
prefixButton.BackgroundColor3 = [Link](100, 100, 100)
TweenService:Create(buttonStroke, [Link](0.3,
[Link]), {
Color = [Link](0, 255, 0),
Thickness = 3,
Transparency = 0.2
}):Play()
else
prefixButton.BackgroundColor3 = [Link](60, 60, 70)
TweenService:Create(buttonStroke, [Link](0.3,
[Link]), {
Color = [Link],
Thickness = [Link],
Transparency = [Link]
}):Play()
end
updateInfoBox()
end)
end

-- === INFO BOX ===


local infoBox = [Link]("Frame")
[Link] = [Link](0.9, 0, 0, 22)
[Link] = [Link](0.05, 0, 0.38, 0) -- Adjusted position for mainContent
infoBox.BackgroundColor3 = [Link](0, 0, 0)
[Link] = 0.5
[Link] = mainContent

[Link]("UICorner", infoBox).CornerRadius = [Link](0, 6)

local infoBoxStroke = [Link]("UIStroke", infoBox)


[Link] = [Link](255, 255, 255)
[Link] = 1.2
[Link] = 0.7

local infoTextContainer = [Link]("Frame", infoBox)


[Link] = [Link](1, 0, 1, 0)
[Link] = 1

local uiListLayout = [Link]("UIListLayout", infoTextContainer)


[Link] = [Link]
[Link] = [Link]
[Link] = [Link]
[Link] = [Link](0, 4)

-- === INFO BOX UPDATE FUNCTION ===


local function updateInfoBox()
for _, child in ipairs(infoTextContainer:GetChildren()) do
if child:IsA("TextLabel") then
child:Destroy()
end
end

if activeFlags["M"] then
local label = [Link]("TextLabel")
[Link] = [Link](0, 0, 1, 0)
[Link] = [Link].X
[Link] = 1
[Link] = "Mega Neon"
[Link] = [Link]
[Link] = 10
label.TextColor3 = flagColors.M
[Link] = infoTextContainer
elseif activeFlags["N"] then
local label = [Link]("TextLabel")
[Link] = [Link](0, 0, 1, 0)
[Link] = [Link].X
[Link] = 1
[Link] = "Neon"
[Link] = [Link]
[Link] = 10
label.TextColor3 = flagColors.N
[Link] = infoTextContainer
end

if activeFlags["F"] then
local label = [Link]("TextLabel")
[Link] = [Link](0, 0, 1, 0)
[Link] = [Link].X
[Link] = 1
[Link] = activeFlags["N"] or activeFlags["M"] and " Fly" or "Fly"
[Link] = [Link]
[Link] = 10
label.TextColor3 = flagColors.F
[Link] = infoTextContainer
end

if activeFlags["R"] then
local label = [Link]("TextLabel")
[Link] = [Link](0, 0, 1, 0)
[Link] = [Link].X
[Link] = 1
[Link] = (activeFlags["N"] or activeFlags["M"] or activeFlags["F"]) and
" Ride" or "Ride"
[Link] = [Link]
[Link] = 10
label.TextColor3 = flagColors.R
[Link] = infoTextContainer
end

if not (activeFlags["M"] or activeFlags["N"] or activeFlags["F"] or


activeFlags["R"]) then
local label = [Link]("TextLabel")
[Link] = [Link](0, 0, 1, 0)
[Link] = [Link].X
[Link] = 1
[Link] = "Normal"
[Link] = [Link]
[Link] = 10
label.TextColor3 = [Link](255, 255, 255)
[Link] = infoTextContainer
[Link] = [Link](255, 255, 255)
[Link] = 1.2
[Link] = 0.7
end
end

-- Initialize info box


updateInfoBox()
-- === TOY SECTION ===
local toyListLabel = [Link]("TextLabel")
[Link] = [Link](0.6, 0, 0, 12)
[Link] = [Link](0.05, 0, 0.50, 0)
[Link] = 1
[Link] = "Toy List"
[Link] = [Link]
[Link] = 8
toyListLabel.TextColor3 = [Link](200, 200, 200)
[Link] = [Link]
[Link] = mainContent

local toyListBtn = [Link]("TextButton")


[Link] = [Link](0.3, 0, 0, 12)
[Link] = [Link](0.65, 0, 0.50, 0)
[Link] = "Toy list"
[Link] = [Link]
[Link] = 8
toyListBtn.BackgroundColor3 = [Link](50, 40, 80)
toyListBtn.TextColor3 = [Link](215, 215, 255)
[Link] = true
[Link] = mainContent

local toyListCorner = [Link]("UICorner")


[Link] = [Link](0, 4)
[Link] = toyListBtn

local toyNameBox = [Link]("TextBox")


[Link] = [Link](0.9, 0, 0, 20)
[Link] = [Link](0.05, 0, 0.56, 0)
toyNameBox.BackgroundColor3 = [Link](40, 40, 50)
[Link] = 0.2
toyNameBox.TextColor3 = [Link](255, 255, 255)
[Link] = 11
[Link] = [Link]
[Link] = "selected toy appears here"
[Link] = ""
[Link] = false
[Link] = mainContent

[Link]("UICorner", toyNameBox).CornerRadius = [Link](0, 6)

local toyBoxStroke = [Link]("UIStroke", toyNameBox)


[Link] = [Link](0, 0, 0)
[Link] = 1.2
[Link] = [Link]

local toyBoxGlow = [Link]("UIStroke", toyNameBox)


[Link] = [Link](255, 180, 0)
[Link] = 2.2
[Link] = 0.25
[Link] = [Link]

-- === TOY SHOW DIALOG BUTTON ===


local toyDialogBtn = [Link]("TextButton")
[Link] = [Link](0.9, 0, 0, 20)
[Link] = [Link](0.05, 0, 0.63, 0)
[Link] = "Show Toy Dialog"
[Link] = [Link]
[Link] = 11
toyDialogBtn.BackgroundColor3 = [Link](210, 105, 30) -- Orange color for
toy button
toyDialogBtn.TextColor3 = [Link](255, 255, 255)
[Link] = true
[Link] = mainContent

[Link]("UICorner", toyDialogBtn).CornerRadius = [Link](0, 6)

-- === SPAM POP-UPS TOGGLE ===


local spamActive = false
local spamCoroutine = nil
local spamSpeed = 0.01 -- ULTRA FAST: 0.01 seconds = 100 dialogs per second

local spamContainer = [Link]("Frame")


[Link] = [Link](0.9, 0, 0, 20)
[Link] = [Link](0.05, 0, 0.70, 0) -- Adjusted position for
mainContent
[Link] = 1
[Link] = mainContent

local spamLabel = [Link]("TextLabel")


[Link] = [Link](0.6, 0, 1, 0)
[Link] = [Link](0, 0, 0, 0)
[Link] = 1
[Link] = "SPAM POP-UPS"
[Link] = [Link]
[Link] = 10
spamLabel.TextColor3 = [Link](255, 100, 100)
[Link] = [Link]
[Link] = spamContainer

local spamToggle = [Link]("TextButton")


[Link] = [Link](0.3, 0, 0.7, 0)
[Link] = [Link](0.65, 0, 0.15, 0)
[Link] = ""
spamToggle.BackgroundColor3 = [Link](80, 0, 0)
[Link] = false
[Link] = spamContainer

local toggleCorner = [Link]("UICorner")


[Link] = [Link](0, 10)
[Link] = spamToggle

local toggleCircle = [Link]("Frame")


[Link] = [Link](0.45, 0, 0.7, 0)
[Link] = [Link](0, 2, 0.15, 0)
toggleCircle.BackgroundColor3 = [Link](255, 255, 255)
[Link] = spamToggle

local circleCorner = [Link]("UICorner")


[Link] = [Link](0, 10)
[Link] = toggleCircle

-- === SPAM STATUS ===


local spamStatus = [Link]("TextLabel")
[Link] = [Link](0.9, 0, 0, 15)
[Link] = [Link](0.05, 0, 0.75, 0) -- Adjusted position for
mainContent
[Link] = 1
[Link] = "Status: OFF (Speed: 100/sec)"
[Link] = [Link]
[Link] = 9
spamStatus.TextColor3 = [Link](255, 100, 100)
[Link] = mainContent

-- === ADD TO INVENTORY BUTTON ===


local addToInventoryBtn = [Link]("TextButton")
[Link] = [Link](0.9, 0, 0, 20)
[Link] = [Link](0.05, 0, 0.85, 0)
[Link] = "Add to Inventory"
[Link] = [Link]
[Link] = 11
addToInventoryBtn.BackgroundColor3 = [Link](0, 150, 80)
addToInventoryBtn.TextColor3 = [Link](255, 255, 255)
[Link] = true
[Link] = mainContent

[Link]("UICorner", addToInventoryBtn).CornerRadius = [Link](0, 6)

-- === EDITOR TAB CONTENT ===


-- Custom Dialog Message TextBox
local editorTitle = [Link]("TextLabel")
[Link] = [Link](0.9, 0, 0, 20)
[Link] = [Link](0.05, 0, 0, 0)
[Link] = 1
[Link] = "Custom Dialog Message:"
[Link] = [Link]
[Link] = 11
editorTitle.TextColor3 = [Link](240, 240, 255)
[Link] = [Link]
[Link] = editorContent

local dialogMessageBox = [Link]("TextBox")


[Link] = [Link](0.9, 0, 0, 50)
[Link] = [Link](0.05, 0, 0.08, 0)
dialogMessageBox.BackgroundColor3 = [Link](40, 40, 50)
[Link] = 0.2
dialogMessageBox.TextColor3 = [Link](255, 255, 255)
[Link] = 11
[Link] = [Link]
[Link] = "Enter custom dialog message here..."
[Link] = originalDialogMessage
[Link] = false
[Link] = true
[Link] = editorContent

[Link]("UICorner", dialogMessageBox).CornerRadius = [Link](0, 6)

local messageBoxStroke = [Link]("UIStroke", dialogMessageBox)


[Link] = [Link](0, 0, 0)
[Link] = 1.2
[Link] = [Link]

-- Presets Scrollbox
local presetsTitle = [Link]("TextLabel")
[Link] = [Link](0.9, 0, 0, 15)
[Link] = [Link](0.05, 0, 0.28, 0)
[Link] = 1
[Link] = "Presets:"
[Link] = [Link]
[Link] = 10
presetsTitle.TextColor3 = [Link](200, 200, 255)
[Link] = [Link]
[Link] = editorContent

local presetsScroll = [Link]("ScrollingFrame")


[Link] = [Link](0.9, 0, 0, 100)
[Link] = [Link](0.05, 0, 0.35, 0)
presetsScroll.BackgroundColor3 = [Link](40, 40, 50)
[Link] = 0.2
[Link] = 6
[Link] = [Link](0, 0, 0, 200)
[Link] = 0
[Link] = editorContent

[Link]("UICorner", presetsScroll).CornerRadius = [Link](0, 6)

local scrollStroke = [Link]("UIStroke", presetsScroll)


[Link] = [Link](170, 0, 255)
[Link] = 2
[Link] = 0.3

local presetsLayout = [Link]("UIListLayout")


[Link] = [Link](0, 5)
[Link] = [Link]
[Link] = presetsScroll

-- Preset buttons
local presets = {
"Adopt Me! Has partnered with Starpets and given you:",
"Thank you for buying from the tropicaljules shop! Heres your pet:",
"JesseRaen and NewFissy have given you a PERMANENT:"
}

-- Add original as first preset


[Link](presets, 1, originalDialogMessage)

for i, presetText in ipairs(presets) do


local presetButton = [Link]("TextButton")
[Link] = [Link](0.95, 0, 0, 40)
[Link] = [Link](0, 5, 0, (i-1)*45)
[Link] = presetText
[Link] = [Link]
[Link] = 9
presetButton.TextColor3 = [Link](255, 255, 255)
presetButton.BackgroundColor3 = [Link](60, 60, 80)
[Link] = true
[Link] = true
[Link] = i
[Link] = presetsScroll

[Link]("UICorner", presetButton).CornerRadius = [Link](0, 6)

local presetStroke = [Link]("UIStroke", presetButton)


[Link] = [Link](120, 0, 255)
[Link] = 2
[Link] = 0.5

presetButton.MouseButton1Click:Connect(function()
[Link] = presetText
end)
end

-- Update canvas size


[Link](function()
wait()
[Link] = [Link](0, 0, 0,
[Link].Y)
end)

-- Apply and Revert Buttons


local applyButton = [Link]("TextButton")
[Link] = [Link](0.4, 0, 0, 20)
[Link] = [Link](0.05, 0, 0.78, 0)
[Link] = "Apply"
[Link] = [Link]
[Link] = 11
applyButton.BackgroundColor3 = [Link](30, 170, 80)
applyButton.TextColor3 = [Link](255, 255, 255)
[Link] = true
[Link] = editorContent

[Link]("UICorner", applyButton).CornerRadius = [Link](0, 6)

local revertButton = [Link]("TextButton")


[Link] = [Link](0.4, 0, 0, 20)
[Link] = [Link](0.55, 0, 0.78, 0)
[Link] = "Revert"
[Link] = [Link]
[Link] = 11
revertButton.BackgroundColor3 = [Link](170, 30, 30)
revertButton.TextColor3 = [Link](255, 255, 255)
[Link] = true
[Link] = editorContent

[Link]("UICorner", revertButton).CornerRadius = [Link](0, 6)

-- Apply Button Function


applyButton.MouseButton1Click:Connect(function()
local newMessage = [Link]
if newMessage ~= "" then
currentDialogMessage = newMessage
-- Show confirmation
local oldText = [Link]
[Link] = "? Applied!"
applyButton.BackgroundColor3 = [Link](0, 200, 0)
wait(1)
[Link] = oldText
applyButton.BackgroundColor3 = [Link](30, 170, 80)
print("Dialog message updated to: " .. currentDialogMessage)
end
end)

-- Revert Button Function


revertButton.MouseButton1Click:Connect(function()
currentDialogMessage = originalDialogMessage
[Link] = originalDialogMessage
-- Show confirmation
local oldText = [Link]
[Link] = "? Reverted!"
revertButton.BackgroundColor3 = [Link](0, 200, 0)
wait(1)
[Link] = oldText
revertButton.BackgroundColor3 = [Link](170, 30, 30)
print("Dialog message reverted to original")
end)

-- === PET LIST POPUP ===


local petListFrame = [Link]("Frame")
[Link] = [Link](0, 200, 0, 220)
petListFrame.BackgroundColor3 = [Link](30, 30, 40)
[Link] = false
[Link] = 100
[Link] = screenGui

[Link]("UICorner", petListFrame).CornerRadius = [Link](0, 8)

local petListStroke = [Link]("UIStroke", petListFrame)


[Link] = [Link](110, 0, 255)
[Link] = 2
[Link] = petListFrame

local petListScroll = [Link]("ScrollingFrame")


[Link] = [Link](1, -10, 1, -10)
[Link] = [Link](0, 5, 0, 5)
[Link] = 1
[Link] = 6
[Link] = [Link](0, 0, 0, #petNames * 20 + 10)
[Link] = 0
[Link] = 101
[Link] = petListFrame

local petListLayout = [Link]("UIListLayout")


[Link] = [Link](0, 2)
[Link] = [Link]
[Link] = petListScroll

for i, pet in ipairs(petNames) do


local btn = [Link]("TextButton")
[Link] = [Link](1, -10, 0, 18)
[Link] = pet
[Link] = [Link]
[Link] = 10
btn.BackgroundColor3 = [Link](50, 40, 80)
btn.TextColor3 = [Link](215, 215, 255)
[Link] = i
[Link] = 0
[Link] = [Link]
[Link] = [Link]
[Link] = true
[Link] = 102
[Link] = petListScroll
[Link]("UICorner", btn).CornerRadius = [Link](0, 4)

local textPadding = [Link]("UIPadding")


[Link] = [Link](0, 5)
[Link] = [Link](0, 5)
[Link] = btn

btn.MouseButton1Click:Connect(function()
[Link] = pet
[Link] = false
end)
end

-- === TOY LIST POPUP ===


local toyListFrame = [Link]("Frame")
[Link] = [Link](0, 200, 0, 120)
toyListFrame.BackgroundColor3 = [Link](30, 30, 40)
[Link] = false
[Link] = 100
[Link] = screenGui

[Link]("UICorner", toyListFrame).CornerRadius = [Link](0, 8)

local toyListStroke = [Link]("UIStroke", toyListFrame)


[Link] = [Link](255, 180, 0)
[Link] = 2
[Link] = toyListFrame

local toyListScroll = [Link]("ScrollingFrame")


[Link] = [Link](1, -10, 1, -10)
[Link] = [Link](0, 5, 0, 5)
[Link] = 1
[Link] = 6
[Link] = [Link](0, 0, 0, #toyNames * 20 + 10)
[Link] = 0
[Link] = 101
[Link] = toyListFrame

local toyListLayout = [Link]("UIListLayout")


[Link] = [Link](0, 2)
[Link] = [Link]
[Link] = toyListScroll

for i, toy in ipairs(toyNames) do


local btn = [Link]("TextButton")
[Link] = [Link](1, -10, 0, 18)
[Link] = toy
[Link] = [Link]
[Link] = 10
btn.BackgroundColor3 = [Link](80, 60, 40)
btn.TextColor3 = [Link](255, 220, 180)
[Link] = i
[Link] = 0
[Link] = [Link]
[Link] = [Link]
[Link] = true
[Link] = 102
[Link] = toyListScroll
[Link]("UICorner", btn).CornerRadius = [Link](0, 4)

local textPadding = [Link]("UIPadding")


[Link] = [Link](0, 5)
[Link] = [Link](0, 5)
[Link] = btn

btn.MouseButton1Click:Connect(function()
[Link] = toy
selectedToy = toy
[Link] = false
end)
end

-- === UPDATE LIST POSITIONS ===


local function updatePetListPosition()
if [Link] then
local mfPos = [Link]
local mfSize = [Link]
[Link] = [Link](0, mfPos.X + mfSize.X + 5, 0, mfPos.Y +
70)
end
end

local function updateToyListPosition()


if [Link] then
local mfPos = [Link]
local mfSize = [Link]
[Link] = [Link](0, mfPos.X + mfSize.X + 5, 0, mfPos.Y +
200)
end
end

petListBtn.MouseButton1Click:Connect(function()
[Link] = not [Link]
[Link] = false
if [Link] then
updatePetListPosition()
end
end)

toyListBtn.MouseButton1Click:Connect(function()
[Link] = not [Link]
[Link] = false
if [Link] then
updateToyListPosition()
end
end)

mainFrame:GetPropertyChangedSignal("Position"):Connect(function()
if [Link] then
updatePetListPosition()
end
if [Link] then
updateToyListPosition()
end
end)

-- === TAB FUNCTIONALITY ===


local function switchToTab(tabName)
if tabName == "Main" then
[Link] = true
[Link] = false
mainTab.BackgroundColor3 = [Link](70, 60, 100)
editorTab.BackgroundColor3 = [Link](50, 40, 80)
elseif tabName == "Editor" then
[Link] = false
[Link] = true
mainTab.BackgroundColor3 = [Link](50, 40, 80)
editorTab.BackgroundColor3 = [Link](70, 60, 100)
end
end

mainTab.MouseButton1Click:Connect(function()
switchToTab("Main")
end)

editorTab.MouseButton1Click:Connect(function()
switchToTab("Editor")
end)

-- Initialize with Main tab active


switchToTab("Main")

-- === RANDOM PET FUNCTION ===


randomPetBtn.MouseButton1Click:Connect(function()
local randomIndex = [Link](1, #petNames)
local randomPet = petNames[randomIndex]
[Link] = randomPet

local randomOption = [Link](1, 3)

for _, prefix in ipairs(prefixes) do


activeFlags[prefix] = false
end

if randomOption == 1 then
activeFlags["M"] = true
elseif randomOption == 2 then
activeFlags["N"] = true
end

updateInfoBox()
end)

-- === ADD TO INVENTORY FUNCTION ===


local function addToInventory()
local selectedPet = [Link]
local selectedToyText = [Link]

if selectedPet == "" and selectedToyText == "" then


-- Show error message
local oldText = [Link]
[Link] = "Select something!"
addToInventoryBtn.BackgroundColor3 = [Link](200, 50, 50)
wait(1)
[Link] = oldText
addToInventoryBtn.BackgroundColor3 = [Link](0, 150, 80)
return
end

-- Load spawner system if not loaded


if not spawnerSystemLoaded then
loadSpawnerSystem()
wait(0.5)
end

local oldIdentity = set_thread_identity(2)

local success, err = pcall(function()


local Fsys = require(ReplicatedStorage:WaitForChild('Fsys'))
local load = [Link]

-- Add pet if selected


if selectedPet ~= "" then
-- Get pet ID
local petId
if _G.GetPetByName then
petId = _G.GetPetByName(selectedPet)
else
local InventoryDB = load('InventoryDB')
for id, pet in pairs([Link]) do
if [Link]:lower() == selectedPet:lower() then
petId = id
break
end
end
end

if petId and _G.createPet then


local petProperties = {
pet_trick_level = [Link](1, 5),
neon = activeFlags["N"],
mega_neon = activeFlags["M"],
rideable = activeFlags["R"],
flyable = activeFlags["F"],
age = [Link](1, 900000),
ailments_completed = 0,
rp_name = ""
}
_G.createPet(petId, petProperties)
print("Added pet to inventory: " .. selectedPet)
end
end

-- Add toy if selected


if selectedToyText ~= "" then
if _G.createToy then
local toyProperties = {
durability = 100,
last_used = [Link]()
}
_G.createToy(selectedToyText, toyProperties)
print("Added toy to inventory: " .. selectedToyText)
else
-- Fallback method for toys
local InventoryDB = load('InventoryDB')
for id, toy in pairs([Link]) do
if [Link]:lower() == selectedToyText:lower() then
-- Use createPet function as fallback for toys
local toyProperties = {
durability = 100,
last_used = [Link]()
}
_G.createPet(id, toyProperties)
print("Added toy to inventory (fallback): " ..
selectedToyText)
break
end
end
end
end
end)

set_thread_identity(oldIdentity)

if success then
-- Show success message
local oldText = [Link]
[Link] = "? Added!"
addToInventoryBtn.BackgroundColor3 = [Link](0, 200, 0)
wait(1)
[Link] = oldText
addToInventoryBtn.BackgroundColor3 = [Link](0, 150, 80)

print("Successfully added items to inventory!")


else
warn("Error adding to inventory:", err)
local oldText = [Link]
[Link] = "Error!"
addToInventoryBtn.BackgroundColor3 = [Link](200, 50, 50)
wait(1)
[Link] = oldText
addToInventoryBtn.BackgroundColor3 = [Link](0, 150, 80)
end
end

addToInventoryBtn.MouseButton1Click:Connect(addToInventory)

-- === FIXED ULTRA-FAST SPAM FUNCTION (WITH PET ICONS) ===


local function ultraFastSpam()
while spamActive do
-- Ensure spawner system is loaded
if not spawnerSystemLoaded then
loadSpawnerSystem()
end

-- Use your dialog system directly with random values


local oldIdentity = set_thread_identity(2)

local success, err = pcall(function()


local Fsys = require(ReplicatedStorage:WaitForChild('Fsys'))
local load = [Link]

-- Random pet from list


local randomPet = petNames[[Link](1, #petNames)]
-- Get pet ID using the proper method
local petId = false
if _G.GetPetByName then
petId = _G.GetPetByName(randomPet)
end

if not petId then


-- Try alternative method
local InventoryDB = load('InventoryDB')
for id, pet in pairs([Link]) do
if [Link]:lower() == randomPet:lower() then
petId = id
break
end
end
end

if petId then
-- Random version pattern
local versionPattern = [Link](1, 12)
local neon = false
local mega_neon = false
local rideable = false
local flyable = false

if versionPattern == 1 then -- MFR (Mega Neon, Flyable,


Rideable)
mega_neon = true
flyable = true
rideable = true
elseif versionPattern == 2 then -- MR (Mega Neon, Rideable)
mega_neon = true
rideable = true
elseif versionPattern == 3 then -- MF (Mega Neon, Flyable)
mega_neon = true
flyable = true
elseif versionPattern == 4 then -- M (Mega Neon)
mega_neon = true
elseif versionPattern == 5 then -- NFR (Neon, Flyable, Rideable)
neon = true
flyable = true
rideable = true
elseif versionPattern == 6 then -- NF (Neon, Flyable)
neon = true
flyable = true
elseif versionPattern == 7 then -- NR (Neon, Rideable)
neon = true
rideable = true
elseif versionPattern == 8 then -- N (Neon)
neon = true
elseif versionPattern == 9 then -- FR (Flyable, Rideable)
flyable = true
rideable = true
elseif versionPattern == 10 then -- F (Flyable)
flyable = true
elseif versionPattern == 11 then -- R (Rideable)
rideable = true
end
-- versionPattern == 12 is Normal (No Pot)

local petProperties = {
pet_trick_level = [Link](1, 5),
neon = neon,
mega_neon = mega_neon,
rideable = rideable,
flyable = flyable,
age = [Link](1, 900000),
ailments_completed = 0,
rp_name = ""
}

-- Load items database to get pet kind


local items = load('KindDB')
local petItem = items[petId]

if not petItem then


set_thread_identity(oldIdentity)
[Link]:Wait()
return
end

-- Use game's dialog system (YOUR EXACT DIALOG) WITH CUSTOM MESSAGE
AND PROPER ITEM DATA
local UIManager = load('UIManager')
local DialogApp = [Link]

if DialogApp and [Link] then


local dialogParams = {
dialog_type = "ItemPreviewDialog",
text = currentDialogMessage .. randomPet, -- USING CUSTOM
MESSAGE HERE
item = {
id = petId,
name = randomPet,
category = "pets",
kind = [Link], -- IMPORTANT: This is needed for
the icon
properties = petProperties
},
button = "Okay!",
yields = true
}

-- Show the dialog


local response = DialogApp:dialog(dialogParams)

if response == "Okay!" and _G.createPet then


_G.createPet(petId, petProperties)
end
else
-- Fallback to alternative dialog method if DialogApp not
available
local messageGui = [Link]("ScreenGui")
[Link] = "SpamDialog"
[Link] = false
[Link] = LocalPlayer:WaitForChild("PlayerGui")
local frame = [Link]("Frame")
[Link] = [Link](0, 250, 0, 120)
[Link] = [Link](0.5, -125, 0.5, -60)
frame.BackgroundColor3 = [Link](40, 40, 50)
[Link] = 0.1
[Link] = messageGui

[Link]("UICorner", frame).CornerRadius = [Link](0, 8)

local label = [Link]("TextLabel")


[Link] = [Link](0.9, 0, 0.6, 0)
[Link] = [Link](0.05, 0, 0.1, 0)
[Link] = currentDialogMessage .. randomPet
[Link] = [Link]
[Link] = 12
label.TextColor3 = [Link](255, 255, 255)
[Link] = 1
[Link] = true
[Link] = frame

local okButton = [Link]("TextButton")


[Link] = [Link](0.6, 0, 0.25, 0)
[Link] = [Link](0.2, 0, 0.65, 0)
[Link] = "Okay!"
[Link] = [Link]
[Link] = 12
okButton.BackgroundColor3 = [Link](30, 105, 210)
okButton.TextColor3 = [Link](255, 255, 255)
[Link] = true
[Link] = frame

[Link]("UICorner", okButton).CornerRadius = [Link](0, 6)

okButton.MouseButton1Click:Connect(function()
messageGui:Destroy()
if _G.createPet then
_G.createPet(petId, petProperties)
end
end)

-- Auto-remove after 0.5 seconds (fast spam)


[Link](0.5, function()
if messageGui then
messageGui:Destroy()
end
if _G.createPet then
_G.createPet(petId, petProperties)
end
end)
end
end
end)

if not success then


warn("Spam dialog error:", err)
end

set_thread_identity(oldIdentity)
-- NO WAIT - SPAM AS FAST AS POSSIBLE
-- This will spam dialogs instantly
[Link]:Wait() -- Only wait one frame to prevent crashing
end
end

-- === SPAM TOGGLE FUNCTION ===


spamToggle.MouseButton1Click:Connect(function()
spamActive = not spamActive

if spamActive then
-- Ensure spawner system is loaded before starting spam
if not spawnerSystemLoaded then
loadSpawnerSystem()
wait(0.5)
end

-- Turn ON
TweenService:Create(spamToggle, [Link](0.1), {
BackgroundColor3 = [Link](0, 170, 0)
}):Play()

TweenService:Create(toggleCircle, [Link](0.1), {
Position = [Link](0.53, 0, 0.15, 0)
}):Play()

spamLabel.TextColor3 = [Link](100, 255, 100)


[Link] = "Status: SPAMMING (Speed: 100+/sec)"
spamStatus.TextColor3 = [Link](100, 255, 100)

-- Start ULTRA-FAST spam loop


spamCoroutine = [Link](ultraFastSpam)

print("ULTRA-FAST SPAM ENABLED - Spamming at MAXIMUM SPEED!")


print("Using custom dialog message: " .. currentDialogMessage)
print("Pet icons should now load properly!")
else
-- Turn OFF
TweenService:Create(spamToggle, [Link](0.1), {
BackgroundColor3 = [Link](80, 0, 0)
}):Play()

TweenService:Create(toggleCircle, [Link](0.1), {
Position = [Link](0, 2, 0.15, 0)
}):Play()

spamLabel.TextColor3 = [Link](255, 100, 100)


[Link] = "Status: OFF (Speed: 100/sec)"
spamStatus.TextColor3 = [Link](255, 100, 100)

print("SPAM DISABLED")
end
end)

-- === MODIFIED FIXED DIALOG FUNCTION FOR PETS (USES CUSTOM MESSAGE AND PROPER ITEM
DATA) ===
local function showPetDialog()
local selectedPet = [Link]
if selectedPet == "" or selectedPet == "insert pet name" then
return
end

-- Load spawner system if not loaded


if not spawnerSystemLoaded then
loadSpawnerSystem()
wait(0.5) -- Give time to load
end

-- Use game's DialogApp with proper thread identity


local oldIdentity = set_thread_identity(2)

local success, result = pcall(function()


local Fsys = require(ReplicatedStorage:WaitForChild('Fsys'))
local load = [Link]

-- Get pet ID
local petId
if _G.GetPetByName then
petId = _G.GetPetByName(selectedPet)
else
local InventoryDB = load('InventoryDB')
for id, pet in pairs([Link]) do
if [Link]:lower() == selectedPet:lower() then
petId = id
break
end
end
end

if not petId then


return false
end

local items = load('KindDB')


local petItemData = items[petId]

if not petItemData then


return false
end

local petProperties = {
pet_trick_level = [Link](1, 5),
neon = activeFlags["N"],
mega_neon = activeFlags["M"],
rideable = activeFlags["R"],
flyable = activeFlags["F"],
age = [Link](1, 900000),
ailments_completed = 0,
rp_name = ""
}

-- Use game's dialog system WITH CUSTOM MESSAGE AND PROPER ITEM DATA
local UIManager = load('UIManager')
local DialogApp = [Link]

if DialogApp and [Link] then


local response = DialogApp:dialog({
dialog_type = "ItemPreviewDialog",
text = currentDialogMessage .. selectedPet, -- USING CUSTOM MESSAGE
HERE
item = {
id = petId,
name = selectedPet,
category = "pets",
kind = [Link], -- IMPORTANT: This loads the pet icon
properties = petProperties
},
button = "Okay!",
yields = true
})

if response == "Okay!" and _G.createPet then


_G.createPet(petId, petProperties)
return true
end
end

return false
end)

set_thread_identity(oldIdentity)

-- If game dialog failed, show simple message


if not success or not result then
-- Simple success message
local messageGui = [Link]("ScreenGui")
[Link] = "SuccessMessage"
[Link] = false
[Link] = LocalPlayer:WaitForChild("PlayerGui")

local frame = [Link]("Frame")


[Link] = [Link](0, 200, 0, 100)
[Link] = [Link](0.5, -100, 0.5, -50)
frame.BackgroundColor3 = [Link](40, 40, 50)
[Link] = 0.1
[Link] = messageGui

[Link]("UICorner", frame).CornerRadius = [Link](0, 8)

local label = [Link]("TextLabel")


[Link] = [Link](0.9, 0, 0.6, 0)
[Link] = [Link](0.05, 0, 0.1, 0)
[Link] = "Pet Spawned: " .. selectedPet
[Link] = [Link]
[Link] = 14
label.TextColor3 = [Link](255, 255, 255)
[Link] = 1
[Link] = frame

local okButton = [Link]("TextButton")


[Link] = [Link](0.6, 0, 0.25, 0)
[Link] = [Link](0.2, 0, 0.65, 0)
[Link] = "Okay!"
[Link] = [Link]
[Link] = 12
okButton.BackgroundColor3 = [Link](30, 105, 210)
okButton.TextColor3 = [Link](255, 255, 255)
[Link] = true
[Link] = frame

[Link]("UICorner", okButton).CornerRadius = [Link](0, 6)

okButton.MouseButton1Click:Connect(function()
messageGui:Destroy()
if _G.createPet then
local oldId = set_thread_identity(2)
local InventoryDB =
require(ReplicatedStorage:WaitForChild('Fsys')).load('InventoryDB')
local petId
for id, pet in pairs([Link]) do
if [Link]:lower() == selectedPet:lower() then
petId = id
break
end
end

if petId then
local petProperties = {
pet_trick_level = [Link](1, 5),
neon = activeFlags["N"],
mega_neon = activeFlags["M"],
rideable = activeFlags["R"],
flyable = activeFlags["F"],
age = [Link](1, 900000),
ailments_completed = 0,
rp_name = ""
}
_G.createPet(petId, petProperties)
end
set_thread_identity(oldId)
end
end)

-- Auto-remove after 5 seconds


[Link](5, function()
if messageGui then
messageGui:Destroy()
end
end)
end
end

-- === TOY DIALOG FUNCTION ===


local function showToyDialog()
local selectedToyText = [Link]
if selectedToyText == "" or selectedToyText == "selected toy appears here" then
return
end

-- Load spawner system if not loaded


if not spawnerSystemLoaded then
loadSpawnerSystem()
wait(0.5) -- Give time to load
end

-- Use game's DialogApp with proper thread identity


local oldIdentity = set_thread_identity(2)

local success, result = pcall(function()


local Fsys = require(ReplicatedStorage:WaitForChild('Fsys'))
local load = [Link]

-- Get toy ID
local toyId
if _G.GetToyByName then
toyId = _G.GetToyByName(selectedToyText)
else
local InventoryDB = load('InventoryDB')
for id, toy in pairs([Link]) do
if [Link]:lower() == selectedToyText:lower() then
toyId = id
break
end
end
end

if not toyId then


return false
end

local items = load('KindDB')


local toyItemData = items[toyId]

if not toyItemData then


return false
end

local toyProperties = {
durability = 100,
last_used = [Link]()
}

-- Use game's dialog system WITH CUSTOM MESSAGE AND PROPER ITEM DATA
local UIManager = load('UIManager')
local DialogApp = [Link]

if DialogApp and [Link] then


local response = DialogApp:dialog({
dialog_type = "ItemPreviewDialog",
text = currentDialogMessage .. selectedToyText, -- USING CUSTOM
MESSAGE HERE
item = {
id = toyId,
name = selectedToyText,
category = "toys",
kind = [Link], -- IMPORTANT: This loads the toy icon
properties = toyProperties
},
button = "Okay!",
yields = true
})

if response == "Okay!" and _G.createToy then


_G.createToy(selectedToyText, toyProperties)
return true
elseif response == "Okay!" and _G.createPet then
-- Fallback to pet creation if toy function doesn't exist
_G.createPet(toyId, toyProperties)
return true
end
end

return false
end)

set_thread_identity(oldIdentity)

-- If game dialog failed, show simple message


if not success or not result then
-- Simple success message
local messageGui = [Link]("ScreenGui")
[Link] = "ToySuccessMessage"
[Link] = false
[Link] = LocalPlayer:WaitForChild("PlayerGui")

local frame = [Link]("Frame")


[Link] = [Link](0, 200, 0, 100)
[Link] = [Link](0.5, -100, 0.5, -50)
frame.BackgroundColor3 = [Link](40, 40, 50)
[Link] = 0.1
[Link] = messageGui

[Link]("UICorner", frame).CornerRadius = [Link](0, 8)

local label = [Link]("TextLabel")


[Link] = [Link](0.9, 0, 0.6, 0)
[Link] = [Link](0.05, 0, 0.1, 0)
[Link] = "Toy Spawned: " .. selectedToyText
[Link] = [Link]
[Link] = 14
label.TextColor3 = [Link](255, 255, 255)
[Link] = 1
[Link] = frame

local okButton = [Link]("TextButton")


[Link] = [Link](0.6, 0, 0.25, 0)
[Link] = [Link](0.2, 0, 0.65, 0)
[Link] = "Okay!"
[Link] = [Link]
[Link] = 12
okButton.BackgroundColor3 = [Link](210, 105, 30) -- Orange color for
toy
okButton.TextColor3 = [Link](255, 255, 255)
[Link] = true
[Link] = frame

[Link]("UICorner", okButton).CornerRadius = [Link](0, 6)

okButton.MouseButton1Click:Connect(function()
messageGui:Destroy()
if _G.createToy then
local oldId = set_thread_identity(2)
local toyProperties = {
durability = 100,
last_used = [Link]()
}
_G.createToy(selectedToyText, toyProperties)
set_thread_identity(oldId)
elseif _G.createPet then
-- Fallback method
local oldId = set_thread_identity(2)
local InventoryDB =
require(ReplicatedStorage:WaitForChild('Fsys')).load('InventoryDB')
local toyId
for id, toy in pairs([Link]) do
if [Link]:lower() == selectedToyText:lower() then
toyId = id
break
end
end

if toyId then
local toyProperties = {
durability = 100,
last_used = [Link]()
}
_G.createPet(toyId, toyProperties)
end
set_thread_identity(oldId)
end
end)

-- Auto-remove after 5 seconds


[Link](5, function()
if messageGui then
messageGui:Destroy()
end
end)
end
end

-- Connect buttons to their functions


petDialogBtn.MouseButton1Click:Connect(showPetDialog)
toyDialogBtn.MouseButton1Click:Connect(showToyDialog)

-- === DRAGGABLE GUI ===


local dragging, dragStart, startPos

[Link]:Connect(function(input)
if [Link] == [Link].MouseButton1 or
[Link] == [Link] then
dragging = true
dragStart = [Link]
startPos = [Link]

[Link]:Connect(function()
if [Link] == [Link] then
dragging = false
end
end)
end
end)
[Link]:Connect(function(input)
if dragging and ([Link] == [Link] or
[Link] == [Link]) then
local delta = [Link] - dragStart
[Link] = [Link](
[Link],
[Link] + delta.X,
[Link],
[Link] + delta.Y
)
end
end)

-- Close popups when clicking outside


[Link]:Connect(function(input)
if [Link] == [Link].MouseButton1 then
local mousePos = [Link]

-- Check pet list


if [Link] then
local listAbsPos = [Link]
local listSize = [Link]
local mainAbsPos = [Link]
local mainSize = [Link]

local isInPetList = (mousePos.X >= listAbsPos.X and mousePos.X <=


listAbsPos.X + listSize.X and
mousePos.Y >= listAbsPos.Y and mousePos.Y <=
listAbsPos.Y + listSize.Y)

local isInMainFrame = (mousePos.X >= mainAbsPos.X and mousePos.X <=


mainAbsPos.X + mainSize.X and
mousePos.Y >= mainAbsPos.Y and mousePos.Y <=
mainAbsPos.Y + mainSize.Y)

if not isInPetList and not isInMainFrame then


[Link] = false
end
end

-- Check toy list


if [Link] then
local listAbsPos = [Link]
local listSize = [Link]
local mainAbsPos = [Link]
local mainSize = [Link]

local isInToyList = (mousePos.X >= listAbsPos.X and mousePos.X <=


listAbsPos.X + listSize.X and
mousePos.Y >= listAbsPos.Y and mousePos.Y <=
listAbsPos.Y + listSize.Y)

local isInMainFrame = (mousePos.X >= mainAbsPos.X and mousePos.X <=


mainAbsPos.X + mainSize.X and
mousePos.Y >= mainAbsPos.Y and mousePos.Y <=
mainAbsPos.Y + mainSize.Y)

if not isInToyList and not isInMainFrame then


[Link] = false
end
end
end
end)

-- Auto-start spawner system


[Link](function()
wait(1)
loadSpawnerSystem()
print("Spawner system loaded. Pet icons should work properly!")
print("Toy system loaded: Rainbow Rattle, Candy Cannon, Witches Broomstick,
Tombstone Ghostify")
print("NEW: Added 'Show Toy Dialog' button with orange styling!")
end)

print("=" .. [Link]("=", 50))


print("ULTRA-FAST PET & TOY SPAWNER LOADED!")
print("Features:")
print("1. Show Pet Dialog (Blue button) - Spawns selected pet with dialog")
print("2. Show Toy Dialog (Orange button) - Spawns selected toy with dialog")
print("3. SPAM POP-UPS toggle - Spams ~100+ dialogs per second!")
print("4. All pet versions: MFR, MR, MF, M, NFR, NF, NR, N, FR, F, R, No Pot")
print("5. EDITOR TAB: Customize dialog messages with 4 presets!")
print("6. TOY SYSTEM: 4 premium toys with inventory support!")
print("=" .. [Link]("=", 50))

You might also like