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