--[[
-- THIS SCRIPT HAS BEEN CODED BY RAFA (discord.gg/MilkUp)
-- DON'T BE A STUPID SKIDDIE THAT STEAL PEOPLE CODE AND PUT ON A SHIT PAID (or "watch ad to get key") SCRIPT
-- hi Project WD please don't steal my code again thx
-- For Preston:
-- Sorry for any incovenience I don't make any malicous script like mail/bank stealers, trade scam and this shit, just auto-farm and QoL scripts, feel free to use this repo to fix any vulnerability on your game
--]]
-- Join us at
-- discord.gg/MilkUp
--[[
-- TODO LIST:
-- • Huge notifier on Discord Webhook (its ez but I'm lazy)
-- • Auto quest
-- • Improve Bank Index with "Auto buy storage upgrades" (+ withdraw needed diamonds from bank)
--]]
-- Important Variables
local SCRIPT_NAME = "Rafa PSX GUI"
local SCRIPT_VERSION = "v0.4" -- Hey rafa remember to change it before updating lmao
-- Detect if the script has executed by AutoExec
local AutoExecuted = false
if not game:IsLoaded() then AutoExecuted = true end
repeat task.wait() until game.PlaceId ~= nil
if not game:IsLoaded() then game.Loaded:Wait() end
--//-------------- SERVICES ----------------//*
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local LocalPlayer = Players.LocalPlayer
local HttpService = game:GetService("HttpService")
local InputService = game:GetService('UserInputService')
local RunService = game:GetService('RunService')
local ContentProvider = game:GetService("ContentProvider")
--//*--------- GLOBAL VARIABLES -----------//*
local ScriptIsCurrentlyBusy = false
local Character = nil
local Humanoid = nil
local HumanoidRootPart = nil
local CurrentWorld = ""
local CurrentPosition = nil
local Settings_DisableRendering = true
local Webhook_Enabled = false
local Webhook_URL = ""
local Webhook_Daycare = true
local Webhook_Huge = true
LocalPlayer.CharacterAdded:Connect(function(char)
Character = char
Humanoid = Character:WaitForChild("Humanoid")
HumanoidRootPart = Character:WaitForChild("HumanoidRootPart")
end)
if game.PlaceId == 6284583030 or game.PlaceId == 10321372166 or game.PlaceId == 7722306047 or game.PlaceId == 12610002282 then
local banSuccess, banError = pcall(function()
local Blunder = require(game:GetService("ReplicatedStorage"):WaitForChild("X", 10):WaitForChild("Blunder", 10):WaitForChild("BlunderList", 10))
if not Blunder or not Blunder.getAndClear then LocalPlayer:Kick("Error while bypassing the anti-cheat! (Didn't find blunder)") end
local OldGet = Blunder.getAndClear
setreadonly(Blunder, false)
local function OutputData(Message)
print("-- PET SIM X BLUNDER --")
print(Message .. "\n")
end
Blunder.getAndClear = function(...)
local Packet = ...
for i,v in next, Packet.list do
if v.message ~= "PING" then
OutputData(v.message)
table.remove(Packet.list, i)
end
end
return OldGet(Packet)
end
setreadonly(Blunder, true)
end)
if not banSuccess then
LocalPlayer:Kick("Error while bypassing the anti-cheat! (".. banError ..")")
return
end
local Library = require(game:GetService("ReplicatedStorage").Library)
assert(Library, "Oopps! Library has not been loaded. Maybe try re-joining?")
while not Library.Loaded do task.wait() end
Character = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait()
Humanoid = Character:WaitForChild("Humanoid")
HumanoidRootPart = Character:WaitForChild("HumanoidRootPart")
local bypassSuccess, bypassError = pcall(function()
if not Library.Network then
LocalPlayer:Kick("Network not found, can't bypass!")
end
if not Library.Network.Invoke or not Library.Network.Fire then
LocalPlayer:Kick("Network Invoke/Fire was not found! Failed to bypass!")
end
hookfunction(debug.getupvalue(Library.Network.Invoke, 1), function(...) return true end)
-- Currently we don't need to hook Fire, since both Invoke/Fire have the same upvalue, this may change in future.
-- hookfunction(debug.getupvalue(Library.Network.Fire, 1), function(...) return true end)
local originalPlay = Library.Audio.Play
Library.Audio.Play = function(...)
if checkcaller() then
local audioId, parent, pitch, volume, maxDistance, group, looped, timePosition = unpack({ ... })
if type(audioId) == "table" then
audioId = audioId[Random.new():NextInteger(1, #audioId)]
end
if not parent then
warn("Parent cannot be nil", debug.traceback())
return nil
end
if audioId == 0 then return nil end
if type(audioId) == "number" or not string.find(audioId, "rbxassetid://", 1, true) then
audioId = "rbxassetid://" .. audioId
end
if pitch and type(pitch) == "table" then
pitch = Random.new():NextNumber(unpack(pitch))
end
if volume and type(volume) == "table" then
volume = Random.new():NextNumber(unpack(volume))
end
if group then
local soundGroup = game.SoundService:FindFirstChild(group) or nil
else
soundGroup = nil
end
if timePosition == nil then
timePosition = 0
else
timePosition = timePosition
end
local isGargabe = false
if not pcall(function() local _ = parent.Parent end) then
local newParent = parent
pcall(function()
newParent = CFrame.new(newParent)
end)
parent = Instance.new("Part")
parent.Anchored = true
parent.CanCollide = false
parent.CFrame = newParent
parent.Size = Vector3.new()
parent.Transparency = 1
parent.Parent = workspace:WaitForChild("__DEBRIS")
isGargabe = true
end
local sound = Instance.new("Sound")
sound.SoundId = audioId
sound.Name = "sound-" .. audioId
sound.Pitch = pitch and 1
sound.Volume = volume and 0.5
sound.SoundGroup = soundGroup
sound.Looped = looped and false
sound.MaxDistance = maxDistance and 100
sound.TimePosition = timePosition
sound.RollOffMode = Enum.RollOffMode.Linear
sound.Parent = parent
if not require(game:GetService("ReplicatedStorage"):WaitForChild("Library"):WaitForChild("Client")).Settings.SoundsEnabled then
sound:SetAttribute("CachedVolume", sound.Volume)
sound.Volume = 0
end
sound:Play()
getfenv(originalPlay).AddToGarbageCollection(sound, isGargabe)
return sound
end
return originalPlay(...)
end
end)
if not bypassSuccess then
print(bypassError)
LocalPlayer:Kick("Error while bypassing network, try again or wait for an update!")
return
end
LocalPlayer.PlayerScripts:WaitForChild("Scripts", 10):WaitForChild("Game", 10):WaitForChild("Coins", 10)
LocalPlayer.PlayerScripts:WaitForChild("Scripts", 10):WaitForChild("Game", 10):WaitForChild("Pets", 10)
wait()
-- local orbsScript = getsenv(game.Players.LocalPlayer.PlayerScripts.Scripts.Game:WaitForChild("Orbs", 10))
-- local CollectOrb = orbsScript.Collect
local GetRemoteFunction = debug.getupvalue(Library.Network.Invoke, 2)
-- OrbList = debug.getupvalue(orbsScript.Collect, 1)
local CoinsTable = debug.getupvalue(getsenv(LocalPlayer.PlayerScripts.Scripts.Game:WaitForChild("Coins", 10)).DestroyAllCoins, 1)
local RenderedPets = debug.getupvalue(getsenv(LocalPlayer.PlayerScripts.Scripts.Game:WaitForChild("Pets", 10)).NetworkUpdate, 1)
local IsHardcore = Library.Shared.IsHardcore
local AllGameWorlds = {}
for name, world in pairs(Library.Directory.Worlds) do
if name ~= "WIP" and name ~= "Trading Plaza" and not world.disabled and world.worldOrder and world.worldOrder ~= 0 then
world.name = name
table.insert(AllGameWorlds, world)
end
end
table.sort(AllGameWorlds, function(a, b)
return a.worldOrder < b.worldOrder
end)
local WorldWithAreas = {}
for areaName, area in pairs(Library.Directory.Areas) do
if area and area.world then
local world = Library.Directory.Worlds[area.world]
local containsSpawn = false
if world and world.spawns then
for spawnName, spawn in pairs(world.spawns) do
if spawn.settings and spawn.settings.area and spawn.settings.area == name then
containsSpawn = true
break
end
end
end
if containsSpawn then
if not WorldWithAreas[area.world] then
WorldWithAreas[area.world] = {}
end
table.insert(WorldWithAreas[area.world], area.name)
end
end
end
function GetAllAreasInWorld(world)
-- local AllAreasInSelectedWorld = {}
-- for name, area in pairs(Library.Directory.Areas) do
-- local containsSpawn = false
-- for spawnName, spawn in pairs(world.spawns) do
-- if spawn.settings and spawn.settings.area and spawn.settings.area == name then
-- containsSpawn = true
-- break
-- end
-- end
-- if area.world == world.name and containsSpawn then
-- table.insert(AllAreasInSelectedWorld, name)
-- end
-- end
-- table.sort(AllAreasInSelectedWorld, function(a, b)
-- local areaA = Library.Directory.Areas[a]
-- local areaB = Library.Directory.Areas[b]
-- return areaA.id < areaB.id
-- end)
-- return AllAreasInSelectedWorld
return WorldWithAreas[world] or {}
end
--// AUTO COMPLETE game
local AllGameAreas = {}
for name, area in pairs(Library.Directory.Areas) do
local world = Library.Directory.Worlds[area.world]
if world and world.worldOrder and world.worldOrder > 0 then
if not area.hidden and not area.isVIP then
local containsArea = false
if world.spawns then
for i,v in pairs(world.spawns) do
if v.settings and v.settings.area and v.settings.area == name then
containsArea = true
break
end
end
end
if area.gate or containsArea then
table.insert(AllGameAreas, name)
end
end
end
end
table.sort(AllGameAreas, function(a, b)
local areaA = Library.Directory.Areas[a]
local areaB = Library.Directory.Areas[b]
local worldA = Library.Directory.Worlds[areaA.world]
if a == "Ice Tech" then
worldA = Library.Directory.Worlds["Fantasy"]
end
local worldB = Library.Directory.Worlds[areaB.world]
if b == "Ice Tech" then
worldB = Library.Directory.Worlds["Fantasy"]
end
if worldA.worldOrder ~= worldB.worldOrder then
return worldA.worldOrder < worldB.worldOrder
end
local currencyA = Library.Directory.Currency[worldA.mainCurrency]
local currencyB = Library.Directory.Currency[worldB.mainCurrency]
if currencyA.order ~= currencyB.order then
return currencyA.order < currencyB.order
end
if not areaA.gate or not areaB.gate then
return areaA.id < areaB.id
end
return areaA.gate.cost < areaB.gate.cost
end)
function GetCurrentAndNextArea()
local cArea, nArea = "", ""
for i, v in ipairs(AllGameAreas) do
if cArea == "" and Library.WorldCmds.HasArea(v) then
local nxtArea = AllGameAreas[i + 1]
if nxtArea and not Library.WorldCmds.HasArea(nxtArea) then
cArea = v
nArea = nxtArea
break
elseif not nxtArea then
cArea = v
nArea = "COMPLETED"
end
end
end
return cArea, nArea
end
function CheckIfCanAffordArea(areaName)
local saveData = Library.Save.Get()
local area = Library.Directory.Areas[areaName]
if not saveData then
return false
end
if not area then return false end
if not area.gate then
return true
end -- Area is free =)
local gateCurrency = area.gate.currency
local currency = saveData[gateCurrency]
if IsHardcore then
if gateCurrency ~= "Diamonds" then
currency = saveData.HardcoreCurrency[gateCurrency]
end
end
if currency and currency >= area.gate.cost then
return true
end
return false
end
-- TODO: Implement huge webhook notifier
function RewardsRedeemed(rewards)
for v, rewardBox in pairs(rewards) do
local reward, quantity = unpack(rewardBox)
if Webhook_Huge and reward == "Huge Pet" then
local petId = quantity
local petData = Library.Directory.Pets[petId]
if petData then
SendWebhook()
end
end
print(quantity, reward)
end
end
Library.Network.Fired("Rewards Redeemed"):Connect(function(rewards)
RewardsRedeemed(rewards)
end)
Library.Signal.Fired("Rewards Redeemed"):Connect(function(rewards)
RewardsRedeemed(rewards)
end)
local GetCoinsInstance = GetRemoteFunction("Get Coins")
local OpenEggInstance = GetRemoteFunction("Buy Egg")
-- print(OpenEggInstance, typeof(OpenEggInstance))
local metatable = getrawmetatable(game)
setreadonly(metatable, false)
local oldNamecall = metatable.__namecall
metatable.__namecall = function(self, ...)
local InstanceMethod = getnamecallmethod()
local args = {...}
if InstanceMethod == "InvokeServer" then
if self == OpenEggInstance then
LastOpenEggId = args[1]
LastOpenEggData = Library.Directory.Eggs[LastOpenEggId]
LastHatchSetting = "Normal"
if args[2] then
LastHatchSetting = "Triple"
end
if args[3] then
LastHatchSetting = "Octuple"
end
coroutine.wrap(function()
while true do
SaveCustomFlag("CurrentEgg", LastOpenEggId)
wait()
SaveCustomFlag("CurrentHatchSettings", LastHatchSetting)
break
end
end)()
end
end
return oldNamecall(self, ...)
end
setreadonly(metatable, true)
-- local originalInvokeServer = OpenEggInstance.InvokeServer
-- originalInvokeServer = hookfunction(OpenEggInstance.InvokeServer, newcclosure(function(...)
-- local args = {...}
-- print(args[1])
-- -- if self == OpenEggInstance then
-- LastOpenEggId = args[1]
-- LastOpenEggData = Library.Directory.Eggs[LastOpenEggId]
-- LastHatchSetting = "Normal"
-- if args[2] then
-- LastHatchSetting = "Triple"
-- end
-- if args[3] then
-- LastHatchSetting = "Octuple"
-- end
-- coroutine.wrap(function()
-- while true do
-- SaveCustomFlag("CurrentEgg", LastOpenEggId)
-- wait()
-- SaveCustomFlag("CurrentHatchSettings", LastHatchSetting)
-- break
-- end
-- end)()
-- -- end
-- return originalInvokeServer(...)
-- end))
local fastPets = false
local Original_HasPower = Library.Shared.HasPower
Library.Shared.HasPower = function(pet, powerName)
if fastPets and powerName == "Agility" then
return true, 3
end
return Original_HasPower(pet, powerName)
end
local Original_GetPowerDir = Library.Shared.GetPowerDir
Library.Shared.GetPowerDir = function(powerName, tier)
if fastPets and powerName == "Agility" then
return {
title = "Agility III",
desc = "Pet moves 50% faster",
value = 20
}
end
return Original_GetPowerDir(powerName, tier)
end
getgenv().SecureMode = true
getgenv().DisableArrayfieldAutoLoad = true
local Rayfield = nil
if isfile("UI/ArrayField.lua") then
Rayfield = loadstring(readfile("UI/ArrayField.lua"))()
else
Rayfield = loadstring(game:HttpGet("https://raw.githubusercontent.com/Rafacasari/ArrayField/main/v2.lua"))()
end
-- local Rayfield = (isfile("UI/ArrayField.lua") and loadstring(readfile("UI/ArrayField.lua"))()) or loadstring(game:HttpGet("https://raw.githubusercontent.com/Rafacasari/ArrayField/main/v2.lua"))()
assert(Rayfield, "Oopps! Rayfield has not been loaded. Maybe try re-joining?")
local Window = Rayfield:CreateWindow({
Name = "Pet Simulator GUI | by Rafa ",
LoadingTitle = SCRIPT_NAME .. " " .. SCRIPT_VERSION,
LoadingSubtitle = "by Rafa",
ConfigurationSaving = {
Enabled = true,
FolderName = "Rafa",
FileName = "PetSimulatorX_" .. tostring(LocalPlayer.UserId)
},
OldTabLayout = true
})
coroutine.wrap(function()
wait(0.5)
if not isfile("Rafa/AcceptedTerms.txt") then
Window:Prompt({
Title = 'Disclaimer',
SubTitle = 'Misuse of this script may result in penalties!',
Content = "I am not responsible for any harm caused by this tool, use at your own risk.",
Actions = {
Accept = {
Name = "Ok",
Callback = function()
if not isfolder("Rafa") then makefolder("Rafa") end
writefile("Rafa/AcceptedTerms.txt", "true")
end,
}
}
})
end
end)()
function AddCustomFlag(flagName, defaultValue, callback)
if Rayfield and Rayfield.Flags and not Rayfield.Flags[flagName] then
local newFlag = {
CurrentValue = defaultValue
}
function newFlag:Set(newValue)
Rayfield.Flags[flagName].CurrentValue = newValue
callback(newValue)
end
Rayfield.Flags[flagName] = newFlag
end
end
function SaveCustomFlag(flagName, value)
if Rayfield and Rayfield.Flags and Rayfield.Flags[flagName] then
pcall(function()
Rayfield.Flags[flagName]:Set(value)
coroutine.wrap(function()
Rayfield.SaveConfiguration()
end)()
end)
end
end
Library.ChatMsg.New(string.format("Hello, %s! You're running %s %s", LocalPlayer.DisplayName, SCRIPT_NAME, SCRIPT_VERSION), Color3.fromRGB(175, 70, 245))
--local mainTab = Window:CreateTab("Main", "12434808810")
-- task.spawn(function()
-- while true do
-- stats:Set({Title = "Hello, " .. LocalPlayer.DisplayName, Content = string.format("There are some useful information:\nServer age: %s\n", Library.Functions.TimeString(workspace.DistributedGameTime, true))})
-- task.wait(1)
-- end
-- end)
LocalPlayer.PlayerScripts:WaitForChild("Scripts", 10):WaitForChild("Game", 10)
local autoFarmTab = Window:CreateTab("Farm", "13075651575", true)
local stats = autoFarmTab:CreateParagraph({Title = "Hello, " .. LocalPlayer.DisplayName .. "!", Content = "Thanks for using my script! - Rafa\nMake sure to join us at discord.gg/MilkUp"})
local autoFarmSection = autoFarmTab:CreateSection("Auto Farm", false, false, "7785988164")
local enableAutoFarm = false
autoFarmTab:CreateToggle({
Name = "Enable Auto-Farm",
Info = 'Auto Farm will automatically destroy/farm coins for you, be aware of the risks of abusing it',
Flag = "AutoFarm_Enabled",
SectionParent = autoFarmSection,
CurrentValue = false,
Callback = function(Value)
enableAutoFarm = Value
end
})
local AutoFarm_FastMode = false
autoFarmTab:CreateToggle({
Name = "Fast Mode (unlegit farm)",
Flag = "AutoFarm_FastMode",
SectionParent = autoFarmSection,
CurrentValue = false,
Callback = function(Value)
AutoFarm_FastMode = Value
end
})
local AutoFarm_FarmSpeed = 0.3
autoFarmTab:CreateSlider({
Name = "Farm Speed",
Flag = "AutoFarm_FarmSpeed",
SectionParent = autoFarmSection,
Range = {0.05, 2},
Increment = 0.05,
Suffix = "Second(s)",
CurrentValue = 0.3,
Callback = function(Value)
AutoFarm_FarmSpeed = Value
end,
})
local farmMaxDistance = 150
autoFarmTab:CreateSlider({
Name = "Farm Max Distance",
Flag = "AutoFarm_MaxDistance",
SectionParent = autoFarmSection,
Range = {10, tonumber(Library.Settings.CoinGrabDistance) or 300},
Increment = 1,
Suffix = "Studs",
CurrentValue = 150,
Callback = function(Value)
farmMaxDistance = Value
end,
})
local farmPreferences = autoFarmTab:CreateSection("Farm Priority", false, true)
local farmFocusListText = autoFarmTab:CreateParagraph({Title = "Current Farming", Content = "Nothing"}, farmPreferences)
local DefaultFarmFocusList = {
"Fruits",
"Highest Multiplier",
"Diamonds",
"Lowest Life",
"Highest Life",
"Nearest",
"Longest"
}
function CalcMultiplier(coinBonus)
if not coinBonus then return 0 end
local totalMultiplier = 0
if coinBonus.l then
for _, v in pairs(coinBonus.l) do
pcall(function()
if v.m and tonumber(v.m) then
totalMultiplier = totalMultiplier + v.m
end
end)
end
end
return totalMultiplier
end
local FarmFocusList = {}
local FarmFocusListButtons = {}
function UpdateFarmFocusUI()
local farmingText = ""
if not FarmFocusList or #FarmFocusList < 1 then
farmingText = "There is nothing on your priority list!\nAdd some by clicking on buttons!"
else
for i, v in ipairs(FarmFocusList) do
farmingText = farmingText .. (farmingText == "" and "This is your priority list to farm.\nYou can modify it by clicking on buttons!\n\n" or "\n") .. i .. "° - " .. tostring(v) .. ""
end
end
farmFocusListText:Set({Title = "Current Farming", Content = farmingText})
for _, button in pairs(FarmFocusListButtons) do
local buttonName = button.Button.Name
if buttonName then
if table.find(FarmFocusList, buttonName) then
button:Set(nil, "Remove")
else
button:Set(nil, "Add")
end
end
end
end
for _, focusName in pairs(DefaultFarmFocusList) do
local function UpdateButton(text, interact)
if not FarmFocusListButtons[focusName] then return end
while true do
wait()
FarmFocusListButtons[focusName]:Set(text, interact)
break
end
end
FarmFocusListButtons[focusName] = autoFarmTab:CreateButton({
Name = focusName,
SectionParent = farmPreferences,
Interact = table.find(FarmFocusList, focusName) and "Remove" or "Add",
CurrentValue = false,
Callback = function(Value)
if table.find(FarmFocusList, focusName) then
table.remove(FarmFocusList, table.find(FarmFocusList, focusName))
-- UpdateButton(nil, "Add")
else
table.insert(FarmFocusList, focusName)
-- UpdateButton(nil, "Remove")
end
coroutine.wrap(function()
while true do
wait()
UpdateFarmFocusUI()
break
end
end)
SaveCustomFlag("AutoFarm_FarmFocusList", FarmFocusList)
end
})
-- FarmFocusListButtons[focusName]:Disable("Coming soon")
end
AddCustomFlag("AutoFarm_FarmFocusList", {}, function(newTable)
FarmFocusList = newTable
local hasChanges = false
for i, v in pairs(FarmFocusList) do
if not table.find(DefaultFarmFocusList, v) then
table.remove(FarmFocusList, i)
hasChanges = true
end
end
if hasChanges then
coroutine.wrap(function()
wait()
SaveCustomFlag("AutoFarm_FarmFocusList", FarmFocusList)
end)
end
UpdateFarmFocusUI()
end)
local farmUtilities = autoFarmTab:CreateSection("Farm Utilities", false, true)
local FarmUtilities_CollectDrops = false
local FarmUtilities_CurrentOrbs = {}
autoFarmTab:CreateToggle({
Name = "Collect Drops",
SectionParent = farmUtilities,
CurrentValue = false,
Flag = "FarmUtilities_CollectDrops",
Callback = function(Value)
FarmUtilities_CollectDrops = Value
if Value then
table.clear(FarmUtilities_CurrentOrbs)
FarmUtilities_CurrentOrbs = {}
CollectAllOrbs()
CollectAllLootbags()
end
if not FarmUtilities_CollectDrops then return end
task.spawn(function()
while FarmUtilities_CollectDrops do
wait(0.05)
if not FarmUtilities_CollectDrops then break end
if FarmUtilities_CurrentOrbs and #FarmUtilities_CurrentOrbs > 0 then
Library.Network.Fire("Claim Orbs", FarmUtilities_CurrentOrbs)
table.clear(FarmUtilities_CurrentOrbs)
FarmUtilities_CurrentOrbs = {}
end
end
end)
end
})
function CollectAllOrbs()
pcall(function()
local OrbsToCollect = {}
for orbId, orb in pairs(Library.Things:FindFirstChild("Orbs"):GetChildren()) do
if not FarmUtilities_CollectDrops then break end
if orbId and orb then
table.insert(OrbsToCollect, orb.Name)
end
end
if OrbsToCollect and #OrbsToCollect > 0 and FarmUtilities_CollectDrops then
Library.Network.Fire("Claim Orbs", OrbsToCollect)
end
end)
end
function CollectAllLootbags()
pcall(function()
for _, lootbag in pairs(Library.Things:FindFirstChild("Lootbags"):GetChildren()) do
if not FarmUtilities_CollectDrops then break end
if lootbag and not lootbag:GetAttribute("Collected") then
Library.Network.Fire("Collect Lootbag", lootbag.Name, HumanoidRootPart.Position + Vector3.new(math.random(-0.05, 0.05), math.random(-0.05, 0.05), math.random(-0.05, 0.05)))
wait(0.03)
end
end
end)
end
Library.Things:FindFirstChild("Lootbags").ChildAdded:Connect(function(child)
wait()
if FarmUtilities_CollectDrops and child then
Library.Network.Fire("Collect Lootbag", child.Name, HumanoidRootPart.Position + Vector3.new(math.random(-0.05, 0.05), math.random(-0.05, 0.05), math.random(-0.05, 0.05)))
end
end)
Library.Things:FindFirstChild("Orbs").ChildAdded:Connect(function(child)
task.wait()
if FarmUtilities_CollectDrops and child then
table.insert(FarmUtilities_CurrentOrbs, child.name)
end
end)
autoFarmTab:CreateToggle({
Name = "Fast Pets",
SectionParent = farmUtilities,
CurrentValue = false,
Flag = "FarmUtilities_FastPets",
Callback = function(Value)
fastPets = Value
end
})
local instantFall = false
autoFarmTab:CreateToggle({
Name = "Instant Fall Coins",
SectionParent = farmUtilities,
CurrentValue = false,
Flag = "FarmUtilities_InstantFallCoins",
Callback = function(Value)
instantFall = Value
end
})
local WorldCoins = Library.Things:WaitForChild("Coins")
WorldCoins.ChildAdded:Connect(function(ch)
if instantFall then
ch:SetAttribute("HasLanded", true)
ch:SetAttribute("IsFalling", false)
local coin = ch:WaitForChild("Coin")
coin:SetAttribute("InstantLand", true)
end
end)
local areaToFarmSection = autoFarmTab:CreateSection("Areas to Farm", false, true)
for w, world in ipairs(AllGameWorlds) do
coroutine.wrap(function()
if world and world.name then
local containsSpawns = false
if world.spawns then
for i,v in pairs(world.spawns) do containsSpawns = true break end
end
if containsSpawns then
local worldDropdown = autoFarmTab:CreateDropdown({
Name = world.name,
MultiSelection = true,
CurrentOption = {},
Flag = "SelectedAreas_" .. world.name,
Icon = Library.Directory.Currency[world.mainCurrency].tinyImage,
Options = GetAllAreasInWorld(world),
SectionParent = areaToFarmSection,
Callback = function(Option)
end
})
worldDropdown:Lock("Coming soon!", true)
end
end
end)()
end
function GetCoinsInArea(area)
local coinsInArea = {}
for _, coin in pairs(WorldCoins:GetChildren()) do
if coin and coin:GetAttribute("Area") and coin:GetAttribute("Area") == area then
table.insert(coinsInArea, coin)
end
end
return coinsInArea
end
function SortCoinsByPriority(coins)
local sortedCoins = {}
CoinsTable = debug.getupvalue(getsenv(LocalPlayer.PlayerScripts.Scripts.Game.Coins).DestroyAllCoins, 1)
for _, coin in pairs(coins) do
local coinMesh = coin:FindFirstChild("Coin")
local mag = (HumanoidRootPart.Position - coinMesh.Position).magnitude
if CoinsTable[coin.Name] and mag <= math.max(math.min(farmMaxDistance, Library.Settings.CoinGrabDistance), 10) and Library.WorldCmds.HasArea(coin:GetAttribute("Area")) then
table.insert(sortedCoins, coin)
end
end
table.sort(sortedCoins, function(coinA, coinB)
local a = CoinsTable[coinA.Name]
local b = CoinsTable[coinB.Name]
local APriority = GetCoinLowestPriority(a, b)
local BPriority = GetCoinLowestPriority(b, a)
return APriority < BPriority
end)
return sortedCoins
end
function SortCoinsByPriorityFastMode(coins)
local sortedCoins = {}
for coinId, coin in pairs(coins) do
coin.coinId = coinId
local mag = (HumanoidRootPart.Position - coin.p).magnitude
if mag <= math.max(math.min(farmMaxDistance, Library.Settings.CoinGrabDistance), 10) and Library.WorldCmds.HasArea(coin.a) then
table.insert(sortedCoins, coin)
end
end
table.sort(sortedCoins, function(a, b)
local APriority = GetCoinLowestPriority(a, b)
local BPriority = GetCoinLowestPriority(b, a)
return APriority < BPriority
end)
return sortedCoins
end
function GetCoinLowestPriority(mainCoin, coinToCompare)
local coin = Library.Directory.Coins[mainCoin.n]
local coinCompare = Library.Directory.Coins[coinToCompare.n]
local aMagnitude = (HumanoidRootPart.Position - mainCoin.p).magnitude
local bMagnitude = (HumanoidRootPart.Position - coinToCompare.p).magnitude
local coinIsFruit = coin.breakSound == "fruit"
local coinIsDiamond = coin.currencyType == "Diamonds"
local coinIsEaster = coin.currencyType == "Easter Coins"
local coinHighestMultiplier = CalcMultiplier(mainCoin.b) > CalcMultiplier(coinToCompare.b)
local coinPriority = 9999999
for priority, priorityName in ipairs(FarmFocusList) do
if priorityName == "Fruits" and coinIsFruit then
mainCoin.priority = priorityName
coinPriority = priority
break
elseif priorityName == "Highest Multiplier" and coinHighestMultiplier then
mainCoin.priority = priorityName
coinPriority = priority
break
elseif priorityName == "Diamonds" and coinIsDiamond then
mainCoin.priority = priorityName
coinPriority = priority
break
elseif priorityName == "Lowest Life" and coin.health < coinCompare.health then
mainCoin.priority = priorityName
coinPriority = priority
break
elseif priorityName == "Highest Life" and coin.health > coinCompare.health then
mainCoin.priority = priorityName
coinPriority = priority
break
elseif priorityName == "Nearest" and aMagnitude < bMagnitude then
mainCoin.priority = priorityName
coinPriority = priority
break
elseif priorityName == "Longest" and aMagnitude > bMagnitude then
mainCoin.priority = priorityName
coinPriority = priority
break
elseif priorityName == "Easter Coins" and coinIsEaster then
mainCoin.priority = priorityName
coinPriority = priority
break
end
end
return coinPriority
end
local petsCurrentlyFarming = {}
coroutine.wrap(function()
while true do
if enableAutoFarm and not ScriptIsCurrentlyBusy then
CoinsTable = debug.getupvalue(getsenv(LocalPlayer.PlayerScripts.Scripts.Game.Coins).DestroyAllCoins, 1)
RenderedPets = debug.getupvalue(getsenv(LocalPlayer.PlayerScripts.Scripts.Game.Pets).NetworkUpdate, 1)
if AutoFarm_FastMode then
local foundCoins = SortCoinsByPriorityFastMode(CoinsTable)
local equippedPets = Library.PetCmds.GetEquipped()
if equippedPets and #equippedPets > 0 and #foundCoins > 0 then
for _, pet in pairs(equippedPets) do
local selectedCoin = foundCoins[1]
task.spawn(function()
Library.Network.Invoke("Join Coin", selectedCoin.coinId, {pet.uid})
Library.Network.Fire("Farm Coin", selectedCoin.coinId, pet.uid)
end)
table.remove(foundCoins, 1)
task.wait(AutoFarm_FarmSpeed)
end
end
else
local equippedPets = Library.PetCmds.GetEquipped()
local foundCoins = {}
for _, ch in ipairs(SortCoinsByPriority(WorldCoins:GetChildren())) do
local containsMyPet = false
local coin = CoinsTable[ch.Name]
local coinMesh = ch:FindFirstChild("Coin")
local mag = (HumanoidRootPart.Position - coinMesh.Position).magnitude
for _, pet in pairs(equippedPets) do
if coin and coin.pets and table.find(coin.pets, pet.uid) then
containsMyPet = true
break
end
end
if not containsMyPet and mag <= math.max(math.min(farmMaxDistance, Library.Settings.CoinGrabDistance), 10) and Library.WorldCmds.HasArea(ch:GetAttribute("Area")) then
table.insert(foundCoins, ch)
end
end
for i, pet in pairs(RenderedPets) do
if ScriptIsCurrentlyBusy or not enableAutoFarm or #foundCoins <= 0 then break end
if pet.spawned.owner == LocalPlayer and not pet.farming then
local coin = foundCoins[1]
if coin then
if not coin:FindFirstChild("Pets") then
local petsFolder = Instance.new("Folder")
petsFolder.Name = "Pets"
petsFolder.Parent = coin
end
-- Legit Mode
Library.Signal.Fire("Select Coin", coin, pet)
table.remove(foundCoins, 1)
wait(AutoFarm_FarmSpeed)
end
end
end
end
end
wait(0.1)
end
end)()
function IsEggUnlocked(eggId)
local egg = Library.Directory.Eggs[eggId]
local saveData = Library.Save.Get()
if egg.areaRequired then
if not Library.WorldCmds.HasArea(egg.area) then
return false
end
end
if egg.eggRequired ~= "" then
if egg.eggRequired ~= eggId then
if not IsEggUnlocked(egg.eggRequired) then
return false
end
end
end
if egg.eggRequiredOpenAmount > 0 then
if egg.eggRequired ~= "" then
local eggsHatched = (IsHardcore and saveData.Hardcore.EggsOpened or saveData.EggsOpened)[egg.eggRequired]
if eggsHatched then
if eggsHatched < egg.eggRequiredOpenAmount then
return false
end
else
return false
end
end
end
if eggId == "Dominus Egg" then
if IsHardcore and not saveData.Hardcore.OwnsDominusGate then return false end
if not IsHardcore and not saveData.OwnsDominusGate then return false end
elseif eggId == "Hacker Egg" or eggId == "Hacker Golden Egg" then
if IsHardcore and not saveData.Hardcore.OwnsHackerGate then return false end
if not IsHardcore and not saveData.OwnsHackerGate then return false end
end
return true
end
function HatchEgg(eggId, tripleHatch, octupleHatch, teleportToEgg)
if ScriptIsCurrentlyBusy then return false, "Script is currently busy!" end
if not eggId or eggId == "None" then return false, "No egg provided!" end
local eggToHatch = Library.Directory.Eggs[eggId]
if not eggToHatch then return false, "Didn't found this egg!" end
if tripleHatch == nil then tripleHatch = false end
if octupleHatch == nil then octupleHatch = false end
if not eggToHatch.hatchable or eggToHatch.disabled then return false, "This is egg is not available!" end
if not IsEggUnlocked(eggId) then return false, "This egg is not unlocked yet!" end
local eggArea = Library.Directory.Areas[eggToHatch.area]
if eggArea then
if teleportToEgg and Library.WorldCmds.Get() ~= eggArea.world then
Library.WorldCmds.Load(eggArea.world)
wait(0.25)
elseif not teleportToEgg and Library.WorldCmds.Get() ~= eggArea.world then return false, "You're not in the right world!" end
local mapEgg = nil
for i,v in pairs(Library.WorldCmds.GetAllEggs()) do
if v:GetAttribute("ID") and v:GetAttribute("ID") == eggId then
mapEgg = v
break
end
end
if not mapEgg then return false, "Didn't found the egg in map!" end
local isNearEgg = Library.LocalPlayer:DistanceFromCharacter(mapEgg.PrimaryPart.CFrame.p) <= 30
if teleportToEgg and not isNearEgg then
HumanoidRootPart.CFrame = CFrame.new(mapEgg.PrimaryPart.CFrame.p) + (mapEgg.PrimaryPart.CFrame.RightVector * 10)
wait(0.25)
elseif not teleportToEgg and not isNearEgg then return false, "You're too far from the egg!" end
end
return Library.Network.Invoke("Buy Egg", eggId, tripleHatch, octupleHatch)
end
-- local easterEventTab = Window:CreateTab("Easter Event", "13075572975", true)
-- local easterEventSection = easterEventTab:CreateSection("Easter Event", true)
-- easterEventTab:CreateButton({
-- Name = "Teleport to Easter Isle",
-- Callback = function()
-- if Library.WorldCmds.Get() ~= "Spawn" then
-- if not Library.WorldCmds.Load("Spawn") then return end
-- end
-- wait(0.25)
-- local areaTeleport = Library.WorldCmds.GetMap().Teleports:FindFirstChild("Easter")
-- if areaTeleport then
-- Character:PivotTo(areaTeleport.CFrame + areaTeleport.CFrame.UpVector * (Humanoid.HipHeight + HumanoidRootPart.Size.Y / 2))
-- end
-- end
-- })
-- local Easter_AutoEggHunt = false
-- local isEggHuntHappening = false
-- local eggHuntTimeSeed = 0
-- local lastEggHuntSeed = 0
-- task.spawn(function()
-- task.wait(1)
-- local checkEggHuntSeed = Library.Network.Invoke("Easter Egg Hunt: Get Time Seed")
-- if checkEggHuntSeed and checkEggHuntSeed and checkEggHuntSeed > 0 and os.time() >= checkEggHuntSeed and os.time() < checkEggHuntSeed + (60 * 60) then
-- isEggHuntHappening = true
-- eggHuntTimeSeed = checkEggHuntSeed
-- lastEggHuntSeed = 0
-- end
-- end)
-- local easterEventAutoEggHunt = easterEventTab:CreateToggle({
-- Name = "Auto Egg Hunt",
-- CurrentValue = false,
-- Flag = "Easter_AutoEggHunt",
-- Callback = function(value)
-- Easter_AutoEggHunt = value
-- lastEggHuntSeed = 0
-- if not value then return end
-- local checkEggHuntSeed = Library.Network.Invoke("Easter Egg Hunt: Get Time Seed")
-- if checkEggHuntSeed and checkEggHuntSeed and checkEggHuntSeed > 0 and os.time() >= checkEggHuntSeed and os.time() < checkEggHuntSeed + (60 * 60) then
-- isEggHuntHappening = true
-- eggHuntTimeSeed = checkEggHuntSeed
-- lastEggHuntSeed = 0
-- end
-- wait()
-- task.spawn(function()
-- while Easter_AutoEggHunt do
-- local saveData = Library.Save.Get()
-- if isEggHuntHappening and eggHuntTimeSeed > 0 and lastEggHuntSeed == 0 then
-- if not (saveData and saveData.Easter2023.FoundEggs and saveData.Easter2023.FoundEggs[tostring(eggHuntTimeSeed)] and #saveData.Easter2023.FoundEggs[tostring(eggHuntTimeSeed)] >= 100) then
-- if ScriptIsCurrentlyBusy then
-- while ScriptIsCurrentlyBusy do wait() end
-- ScriptIsCurrentlyBusy = true
-- wait(1)
-- end
-- ScriptIsCurrentlyBusy = true
-- CurrentWorld = Library.WorldCmds.Get()
-- CurrentPosition = HumanoidRootPart.CFrame
-- for i, world in ipairs(AllGameWorlds) do
-- if not Easter_AutoEggHunt then break end
-- if not world.requiredArea or Library.WorldCmds.HasArea(world.requiredArea) then
-- if Library.WorldCmds.Get() ~= world.name then
-- Library.WorldCmds.Load(world.name)
-- end
-- for i,v in pairs(Library.WorldCmds.GetMap():WaitForChild("EasterEggs"):GetChildren()) do
-- if not Easter_AutoEggHunt then break end
-- if v:GetAttribute("Enabled") then
-- task.spawn(function()
-- local success, errorMessage = Library.Network.Invoke("Easter Egg Hunt: Claim", v.Name, (v:GetAttribute("TextureIDX")))
-- if not success then print(errorMessage) end
-- end)
-- wait(0.05)
-- end
-- end
-- end
-- end
-- wait(5)
-- TeleportBack()
-- wait(1)
-- ScriptIsCurrentlyBusy = false
-- end
-- lastEggHuntSeed = eggHuntTimeSeed
-- end
-- wait(5)
-- end
-- end)
-- end
-- })
-- Library.Network.Fired("Easter Egg Hunt: End"):Connect(function()
-- isEggHuntHappening = false
-- eggHuntTimeSeed = 0
-- lastEggHuntSeed = 0
-- end)
-- Library.Network.Fired("Easter Egg Hunt: Start"):Connect(function(eggHuntData)
-- isEggHuntHappening = true
-- eggHuntTimeSeed = Library.Network.Invoke("Easter Egg Hunt: Get Time Seed")
-- lastEggHuntSeed = 0
-- end)
local eggTab = Window:CreateTab("Eggs", "13075637275", true)
local hatchingSection = eggTab:CreateSection("Egg Hatching", false)
local eggInfo = eggTab:CreateParagraph({Title = "Information", Content = "Buy some egg in-game and it will be automatically selected!\nSelected Egg: %s\nMode: %s\nQuantity Hatched: %s\nQuantity Remaining: %s\n25x Insane Luck: %s\n\n\n\naaa"}, hatchingSection)
local LastOpenEggId = "None"
AddCustomFlag("CurrentEgg", "None", function(newValue)
LastOpenEggId = newValue
end)
local LastOpenEggData = nil
local LastHatchSetting = "Normal"
AddCustomFlag("CurrentHatchSettings", "Normal", function(newValue)
LastHatchSetting = newValue
end)
local EnableAutoHatch = false
eggTab:CreateToggle({
Name = "Auto Hatch",
Flag = "AutoHatch_Enabled",
SectionParent = hatchingSection,
Callback = function(Value)
EnableAutoHatch = Value
if EnableAutoHatch then
coroutine.wrap(function()
while EnableAutoHatch do
wait(math.random(3, 3.1))
if not EnableAutoHatch then break end
local tripleHatch = false
local octupleHatch = false
if LastHatchSetting == "Triple" then tripleHatch = true end
if LastHatchSetting == "Octuple" then octupleHatch = true end
--print("Trying to hatch: ", LastOpenEggId, tripleHatch, octupleHatch)
local successHatch, errorHatch = HatchEgg(LastOpenEggId, tripleHatch, octupleHatch, true)
if not successHatch then print(errorHatch or "Opss, failed to hatch!") end
end
end)()
end
end
})
local Original_OpenEgg = nil
eggTab:CreateToggle({
Name = "Skip Egg Animation",
Flag = "AutoFarm_SkipEggAnimation",
SectionParent = hatchingSection,
Callback = function(Value)
if Value then SkipEggAnimation() else RestoreEggAnimation() end
end
})
local OpenEggsScript = getsenv(LocalPlayer.PlayerScripts.Scripts.Game:WaitForChild("Open Eggs", 10))
function SkipEggAnimation()
if not Original_OpenEgg then
Original_OpenEgg = OpenEggsScript.OpenEgg
end
OpenEggsScript.OpenEgg = function()
return true
end
end
function RestoreEggAnimation()
if not Original_OpenEgg then return end
OpenEggsScript.OpenEgg = Original_OpenEgg
end
function UpdateEggInfo()
local playerData = Library.Save.Get()
local playerEggsOpened = playerData["EggsOpened"]
local serverBoosts = Library.ServerBoosts.GetActiveBoosts()
if eggInfo then
local selectedEgg = LastOpenEggId or "None"
local selectedSetting = LastHatchSetting or "Normal"
local eggsOpened = Library.Functions.Commas(playerEggsOpened and playerEggsOpened[LastOpenEggId] and playerEggsOpened[LastOpenEggId] or 0)
local eggsRemaining = Library.Functions.Commas(Library.Directory.Eggs[selectedEgg] and math.floor(playerData[Library.Directory.Eggs[selectedEgg].currency] / Library.Directory.Eggs[selectedEgg].cost) > 0 and math.floor(playerData[Library.Directory.Eggs[selectedEgg].currency] / Library.Directory.Eggs[selectedEgg].cost) or 0)
local insaneLucky = serverBoosts and serverBoosts["Insane Luck"] and tostring(serverBoosts["Insane Luck"].totalTimeLeft) .. "s" or "Inactive"
eggInfo:Set({Title = "Information", Content = string.format("Buy some egg in-game and it will be automatically selected!\n\nSelected Egg: %s\nMode: %s\nQuantity Hatched: %s\nQuantity Remaining: %s\n25x Insane Luck: %s", selectedEgg, selectedSetting, eggsOpened, eggsRemaining, insaneLucky)})
end
end
task.spawn(function()
while true do
UpdateEggInfo()
task.wait()
end
end)
local automationTab = Window:CreateTab("Automation", "13075622619", true)
local automaticFunctionsSection = automationTab:CreateSection("Automatic Functions", false)
local enableAutoDaycare = false
local autodaycareButton = automationTab:CreateToggle({
Name = "Auto Daycare",
CurrentValue = false,
Flag = "Automation_AutoDaycare",
SectionParent = automaticFunctionsSection,
Callback = function(Value)
enableAutoDaycare = Value
if Value then
CreateReminder()
end
end
})
local Automations_AutoGameComplete = false
local autoCompleteGameToggle = automationTab:CreateToggle({
Name = "Auto Complete Game",
Flag = "Automation_AutoCompleteGame",
CurrentValue = false,
SectionParent = automaticFunctionsSection,
Callback = function(Value)
if Value then
local currentAreaName, nextAreaName = GetCurrentAndNextArea()
if nextAreaName ~= "COMPLETED" then
local areaToTeleport = Library.Directory.Areas[currentAreaName]
if areaToTeleport and areaToTeleport.world then
if Library.WorldCmds.Get() ~= areaToTeleport.world then
Library.WorldCmds.Load(areaToTeleport.world)
end
wait(0.25)
local areaTeleport = Library.WorldCmds.GetMap().Teleports:FindFirstChild(currentAreaName)
if areaTeleport then
Library.Signal.Fire("Teleporting")
task.wait(0.25)
Character:PivotTo(areaTeleport.CFrame + areaTeleport.CFrame.UpVector * (Humanoid.HipHeight + HumanoidRootPart.Size.Y / 2))
Library.Network.Fire("Performed Teleport", currentAreaName)
task.wait(0.25)
end
end
else
Value = false
Rayfield.Flags["Automation_AutoCompleteGame"]:Set(false)
end
-- CHECK FOR CURRENT AREA AND TELEPORT TO IT
end
Automations_AutoGameComplete = Value
end
})
local _, nextAreaCheck = GetCurrentAndNextArea()
if nextAreaCheck == "COMPLETED" then
autoCompleteGameToggle:Lock("No areas to unlock! 🎉", true)
end
local bankIndexSection = automationTab:CreateSection("Bank Index", false, false, "13080063246")
automationTab:CreateParagraph({ Title = "What is this?", Content = "Some people store pets in a bank to complete the pet collection on alt accounts.\nThis feature should help on that process, it will automatically do:\n- Check non-indexed pets on current account\n- Take pets from the bank\n- Put back on the bank after indexed" }, bankIndexSection)
local BankIndex_Debounce = false
local BankIndex_InProgress = false
local BankIndex_OwnerUsername = ""
local Input = automationTab:CreateInput({
Name = "Bank Owner",
Info = "Owner of the bank", -- Speaks for itself, Remove if none.
PlaceholderText = "CoolUsername69",
Flag = "BankIndex_OwnerUsername",
SectionParent = bankIndexSection,
OnEnter = false, -- Will callback only if the user pressed ENTER while the box is focused.
RemoveTextAfterFocusLost = false,
Callback = function(Text)
BankIndex_OwnerUsername = Text
end,
})
local bankIndexInfo = automationTab:CreateParagraph({
Title = "Idling",
Content = "Not doing anything yet..."
}, bankIndexSection)
local startBankIndex = nil
function BankMessage(message)
if not startBankIndex then return end
coroutine.wrap(function()
while true do
wait()
startBankIndex:Set(nil, message)
break
end
end)()
end
function BankError(errorMessage)
pcall(function()
bankIndexInfo:Set({
Title = "Idling",
Content = "Not doing anything yet..."
})
end)
BankMessage(errorMessage)
print("Error on Bank Index: " .. errorMessage)
wait(3)
BankMessage("")
end
startBankIndex = automationTab:CreateButton({
Name = "Start Indexing",
CurrentValue = false,
Interact = "",
SectionParent = bankIndexSection,
Callback = function(Value)
if BankIndex_Debounce then return end
if not BankIndex_InProgress then
BankIndex_Debounce = true
coroutine.wrap(function()
wait(0.3)
BankIndex_Debounce = false
end)()
end
-- Start bank functions
if BankIndex_InProgress then
-- Cancel process
BankIndex_Debounce = true
BankIndex_InProgress = false
BankMessage(nil, "")
coroutine.wrap(function()
while true do
wait()
startBankIndex:Set("Waiting deposit to stop...", nil)
break
end
end)()
else
-- Start process
local SaveData = Library.Save.Get()
if not SaveData or not SaveData.Collection then
BankError("Failed to get data!")
return
end
if Library.WorldCmds.Get() ~= "Spawn" then
if not Library.WorldCmds.Load("Spawn") then return end
wait(1)
end
HumanoidRootPart.CFrame = Library.WorldCmds.GetMap().Interactive.Bank.Pad.CFrame + Vector3.new(0, 3, 0)
HumanoidRootPart.CFrame = HumanoidRootPart.CFrame + (HumanoidRootPart.CFrame.LookVector * 15)
wait(0.5)
local BankUID = nil
BankMessage(nil, "Getting UserID")
local success, result = pcall(function() return Players:GetUserIdFromNameAsync(BankIndex_OwnerUsername) end)
if not success then
BankError("User not found!")
print(result)
return
end
ownerId = result
if not ownerId or not tonumber(ownerId) then
BankError("Can't get UserID")
return
end
local myBanks = Library.Network.Invoke("Get My Banks")
if not myBanks then
BankError("Bank is on cooldown!")
return
end
for _, bank in pairs(myBanks) do
if bank.Owner == tonumber(ownerId) then
BankUID = bank.BUID
break
end
end
if not BankUID then BankError("Bank was not found!") return end
-- Get missing collection pets
local allCollectablePets = Library.Shared.GetAllCollectablePets()
local remainingPets = {}
for i, pet in pairs(allCollectablePets) do
local petId = pet.petId
local isGolden = pet.isGolden
local isRainbow = pet.isRainbow
local isDarkMatter = pet.isDarkMatter
local petType = 1
if isGolden then
petType = 2
elseif isRainbow then
petType = 3
elseif isDarkMatter then
petType = 4
end
local isUnlocked = Library.Functions.SearchArray(SaveData.Collection, tostring(petId) .. "-" .. tostring(petType))
if not isUnlocked then
remainingPets[petId] = true
end
end
local Bank = Library.Network.Invoke("Get Bank", BankUID)
if not Bank then BankError("Bank was not found!") return end
local BankPets = Bank.Storage.Pets
local petsAvailableOnBank = {}
for _, pet in pairs(BankPets) do
local petId = pet.id
local isGolden = pet.g
local isRainbow = pet.r
local isDarkMatter = pet.dm
local petType = 1
if isGolden then petType = 2
elseif isRainbow then petType = 3
elseif isDarkMatter then petType = 4 end
local isUnlocked = Library.Functions.SearchArray(SaveData.Collection, tostring(petId) .. "-" .. tostring(petType))
local petData = Library.Directory.Pets[petId]
if petData and (petData.titanic or petData.huge or petData.rarity == "Exclusive" or petData.rarity == "Event") then petType = 5 end -- Huges/Exclusives/Event don't need to be indexed more than 1 time
local petIdentifer = tostring(petId) .. "-" .. tostring(petType)
-- Pet is not unlocked and not on our table, put they on list!
if remainingPets[petId] and not petsAvailableOnBank[petIdentifer] and not isUnlocked then petsAvailableOnBank[petIdentifer] = pet end
end
local function UpdateInfo()
local petsAvailableOnBankCount = 0
for _, pet in pairs(petsAvailableOnBank) do
if pet then
petsAvailableOnBankCount = petsAvailableOnBankCount + 1
end
end
bankIndexInfo:SetContent(string.format("You have %s of %s unlockable pets\n", tostring(#SaveData.Collection), tostring(#allCollectablePets)) ..
string.format("This bank have %s pets in total\n", tostring(#BankPets)) ..
string.format("This bank have %s of %s pets that you need to complete your collection", tostring(petsAvailableOnBankCount), tostring(#allCollectablePets - #SaveData.Collection)))
end
UpdateInfo()
BankIndex_InProgress = true
coroutine.wrap(function()
while true do
wait()
startBankIndex:Set("Stop Indexing", nil)
break
end
end)()
wait(1)
coroutine.wrap(function()
local petsToWithdraw = {}
local failedToDeposit = false
while BankIndex_InProgress do
UpdateInfo()
if not petsToWithdraw or #petsToWithdraw < 50 then
for petIdentifer, pet in pairs(petsAvailableOnBank) do
if pet and pet.uid and #petsToWithdraw < 50 then
table.insert(petsToWithdraw, pet.uid)
petsAvailableOnBank[petIdentifer] = nil
end
if #petsToWithdraw >= 50 then break end
end
end
UpdateInfo()
if petsToWithdraw and #petsToWithdraw > 0 then
bankIndexInfo:SetTitle(string.format("Withdrawing %s pets...", tostring(#petsToWithdraw)))
wait(0.5)
local oldCollectionCount = 0 + #SaveData.Collection
local expectedCollectionCount = oldCollectionCount + #petsToWithdraw
local withdrawSuccess, withdrawMessage = Library.Network.Invoke("Bank Withdraw", BankUID, petsToWithdraw, 0)
if withdrawSuccess then
UpdateInfo()
bankIndexInfo:SetTitle(string.format("Waiting for %s pets to index...", tostring(#petsToWithdraw)))
wait(5)
local cTick = tick()
repeat UpdateInfo() wait() until #SaveData.Collection > oldCollectionCount or not BankIndex_InProgress or tick() - cTick > 15
bankIndexInfo:SetTitle(string.format("Depositing %s pets...", tostring(#petsToWithdraw)))
UpdateInfo()
local depositsAttempts = 0
local function TryToDeposit()
local depositSuccess, depositMessage = Library.Network.Invoke("Bank Deposit", BankUID, petsToWithdraw, 0)
if not depositSuccess then
if depositsAttempts >= 5 then
failedToDeposit = true
return
end
depositsAttempts = depositsAttempts + 1
wait(5)
TryToDeposit()
end
end
TryToDeposit()
if failedToDeposit then
bankIndexInfo:SetTitle("Oopps... Aborting process!")
bankIndexInfo:SetContent(string.format("Damn! Failed to deposit after 5 attempts, process has been canceled!\nFailed to deposit: %s pets!", tostring(#petsToWithdraw)))
break
else
-- CLEAR THE WITHDRAW TABLE
petsToWithdraw = {}
end
else
print(withdrawMessage)
end
else break end
wait(10)
end
BankIndex_InProgress = false
BankIndex_Debounce = false
UpdateInfo()
coroutine.wrap(function()
while true do
wait()
startBankIndex:Set("Start Indexing", nil)
break
end
end)()
if not failedToDeposit then
bankIndexInfo:Set({
Title = "Idling",
Content = "Not doing anything yet..."
})
end
BankMessage(nil, "")
end)()
end
end
})
local CompleteCollection_NormalEggs = true
local CompleteCollection_GoldenEggs = true
local CompleteCollection_MakeRainbows = false
local CompleteCollection_MakeDarkMatter = false
function GetNextMissingPet()
local SaveData = Library.Save.Get()
if not SaveData then return nil end
local allCollectablePets = Library.Shared.GetAllCollectablePets()
local remainingPets = {}
for i, pet in pairs(allCollectablePets) do
local petId = pet.petId
local petData = Library.Directory.Pets[petId]
local isGolden = pet.isGolden
local isRainbow = pet.isRainbow
local isDarkMatter = pet.isDarkMatter
local petType = 1
if isGolden then
petType = 2
elseif isRainbow then
petType = 3
elseif isDarkMatter then
petType = 4
end
local isUnlocked = Library.Functions.SearchArray(SaveData.Collection, tostring(petId) .. "-" .. tostring(petType))
if petData and not (petData.titanic or petData.huge or petData.rarity == "Exclusive" or petData.rarity == "Event") and not isUnlocked then
-- remainingPets[petId] = petType
table.insert(remainingPets, {petId, petType})
end
end
table.sort(remainingPets, function(a, b)
local petDataA = Library.Directory.Pets[a[1]]
local petDataB = Library.Directory.Pets[b[1]]
local petTypeA = a[2]
local petTypeB = b[2]
if a == b then
return petTypeA < petTypeB
end
return a[1] < b[1]
end)
for i, v in ipairs(remainingPets) do return v end
end
function GetBestEggForPet(petId)
local allEggs = Library.Directory.Eggs
local eggsWithPet = {}
for eggId, v in pairs(allEggs) do
if v and v.drops and typeof(v.drops) == "table" then
for _, drop in pairs(v.drops) do
local petDropId = drop[1]
if petDropId == tostring(petId) then
table.insert(eggsWithPet, {eggId, drop[2]})
end
end
end
end
table.sort(eggsWithPet, function(a, b)
local chanceA = eggsWithPet[a][2]
local chanceB = eggsWithPet[b][2]
return chanceA > chanceB
end)
for i, v in ipairs(eggsWithPet) do
return v[1]
end
return nil
end
local completeCollectionSection = automationTab:CreateSection("Auto Pet Collection", false, true)
local completeCollectionStatus = automationTab:CreateParagraph({Title = "Status", Content = "Waiting to start"}, completeCollectionSection)
local completeCollectionNormalEggs = automationTab:CreateToggle({
Name = "Normal Eggs",
SectionParent = completeCollectionSection,
CurrentValue = true,
Flag = "CompleteCollection_NormalEggs",
Callback = function(value)
CompleteCollection_NormalEggs = value
coroutine.wrap(function()
local currentPet, currentPetType = unpack(GetNextMissingPet())
local currentEgg = GetBestEggForPet(currentPet)
completeCollectionStatus:SetContent("Pet: " .. Library.Directory.Pets[currentPet].name .. "\nType: " .. currentPetType .. "\nEgg: " .. currentEgg)
while task.wait(3) do
end
end)()
end
})
local completeCollectionGolldenEggs = automationTab:CreateToggle({
Name = "Golden Eggs",
SectionParent = completeCollectionSection,
CurrentValue = true,
Flag = "CompleteCollection_GoldenEggs",
Callback = function(value)
CompleteCollection_GoldenEggs = value
end
})
local completeCollectionMakeRainbows = automationTab:CreateToggle({
Name = "Make Rainbows",
SectionParent = completeCollectionSection,
CurrentValue = false,
Flag = "CompleteCollection_MakeRainbows",
Callback = function(value)
CompleteCollection_MakeRainbows = value
end
})
local completeCollectionMakeDarkMatter = automationTab:CreateToggle({
Name = "Make Dark Matter",
SectionParent = completeCollectionSection,
CurrentValue = false,
Flag = "CompleteCollection_MakeDarkMatter",
Callback = function(value)
CompleteCollection_MakeDarkMatter = value
end
})
-- SETTINGS
local AUTODAYCARE_OTHER_GAMEMODES = false -- CHANGE THIS TO TRUE IF YOU WANT TO AUTO-COLLECT/ENROLL BOTH NORMAL AND HARDCORE GAMEMODES
local TRY_TO_TELEPORT_SAME_SERVER = true -- If auto-daycare is enabled for both gamemodes, this option will TRY teleport you back to the same server that you were before
local DAYCARE_WORLD = "Spawn"
local DAYCARE_POSITION = Vector3.new(35, 110, 40)
local PetsToDaycare = {}
local DaycareGUI = Library.GUI.Daycare;
local DISCORD_EMOTES = {
["Diamonds"] = "<:e:1062469796341497887>",
["Triple Coins"] = "<:e:1082130777355079800>",
["Triple Damage"] = "<:e:1082130816261443674>",
["Super Lucky"] = "<:e:1082130793880621167>",
["Ultra Lucky"] = "<:e:1082130805914079313>"
}
local COIN_EMOTE = "<:e:1087199766401794168>"
local PET_EMOTE = "<:e:1083222082533462098>"
local AUTODAYCARE_SETTINGS_FOLDER = "AutoDaycare"
local AUTODAYCARE_SETTINGS_FILE = "SaveData"
function SaveSettings()
pcall(function()
if not isfolder(AUTODAYCARE_SETTINGS_FOLDER) then
makefolder(AUTODAYCARE_SETTINGS_FOLDER)
end
local fileData = {}
if CurrentWorld and CurrentWorld ~= "" then
fileData.World = CurrentWorld
end
if CurrentPosition and CurrentPosition ~= nil then
fileData.Position = CurrentPosition
end
fileData.GameMode = "normal"
if Library.Shared.IsHardcore then
fileData.GameMode = "hardcore"
end
writefile(AUTODAYCARE_SETTINGS_FOLDER .. "/" .. AUTODAYCARE_SETTINGS_FILE .. ".json", tostring(HttpService:JSONEncode(fileData)))
end)
end
local IsTeleporting = false
function LoadSettings()
pcall(function()
if isfile(AUTODAYCARE_SETTINGS_FOLDER .. "/" .. AUTODAYCARE_SETTINGS_FILE .. ".json") then
local saveData = readfile(AUTODAYCARE_SETTINGS_FOLDER .. "/" .. AUTODAYCARE_SETTINGS_FILE .. ".json")
local save = HttpService:JSONDecode(saveData)
if not save.GameMode or save.GameMode == "" then return end
local shouldTeleport = false
if save.World and save.World ~= "" then
CurrentWorld = save.World
shouldTeleport = true
end
if save.Position and save.Position ~= nil then
CurrentPosition = save.Position
shouldTeleport = true
end
local gamemode = "normal"
if Library.Shared.IsHardcore then
gamemode = "hardcore"
end
if save.GameMode ~= gamemode then return end
if shouldTeleport then
IsTeleporting = true
TeleportBack()
IsTeleporting = false
end
end
end)
end
function SendWebhookInfo(quantity, loots)
if not Webhook_Enabled or not Webhook_Daycare or not Webhook_URL or Webhook_URL == "" then return end
local gamemode = "[NORMAL]"
if Library.Shared.IsHardcore then
gamemode = "[HARDCORE]"
end
local lootString = ""
local ContainsPet = false
for _, loot in pairs(loots) do
local selectedEmote = ""
if DISCORD_EMOTES[loot.Data] then
selectedEmote = DISCORD_EMOTES[loot.Data]
elseif loot.Category == "Currency" then
selectedEmote = COIN_EMOTE
elseif loot.Category == "Pet" then
ContainsPet = true
selectedEmote = PET_EMOTE
end
lootString = lootString .. selectedEmote .. " " .. Library.Functions.NumberShorten(loot.Min) .. " **" .. loot.Data .. "**\n"
end
local embed = {
["title"] = "Daycare has been collected! " .. gamemode,
["description"] = "Successfully collected **".. tostring(quantity) .."** pets from daycare!",
["color"] = tonumber(0x90ff90),
["fields"] = {
{
["name"] = "Collected Loot",
["value"] = lootString,
["inline"] = false
}
},
["footer"] = {
["text"] = "Pet Simulator X",
["icon_url"] = "https://i.imgur.com/pWIzvzD.png"
}
}
(syn and syn.request or http_request or http.request) {
Url = Webhook_URL;
Method = 'POST';
Headers = {
['Content-Type'] = 'application/json';
};
Body = HttpService:JSONEncode({
username = "Daycare Update",
avatar_url = 'https://i.imgur.com/pWIzvzD.png',
embeds = {embed}
})
}
end
function TeleportToDaycare()
CurrentWorld = Library.WorldCmds.Get()
CurrentPosition = HumanoidRootPart.CFrame
task.wait()
-- Go to Spawn World
if CurrentWorld ~= DAYCARE_WORLD then
Library.WorldCmds.Load(DAYCARE_WORLD)
end
HumanoidRootPart.CFrame = CFrame.new(DAYCARE_POSITION)
end
function SendNotification(msg, options)
if not options then
options = {
time = 10,
color = Color3.fromRGB(160, 30, 245),
force = true
}
end
Library.Signal.Fire("Notification", msg, options)
end
function ErrorNotification(msg)
SendNotification(msg, {
time = 10, color = Color3.fromRGB(255, 60, 60), force = true
})
end
local BoostIcons = {
["Triple Coins"] = "rbxassetid://7402604552",
["Triple Damage"] = "rbxassetid://7402604431",
["Super Lucky"] = "rbxassetid://7402604677",
["Ultra Lucky"] = "rbxassetid://7402706511"
}
function CollectDaycare()
local saving = Library.Save.Get()
if not saving then
ErrorNotification("Something went wrong! Try re-logging!")
return
end
local success, errorMsg, pets, loots, queue = Library.Network.Invoke("Daycare: Claim", nil)
if not success then
return false, (errorMsg and "Can't claim, unknown error!")
end
if loots then
for _, loot in pairs(loots) do
-- print (tostring(loot.Category) .. ": " .. tostring(loot.Min) .. "x " .. tostring(loot.Data) )
-- Quantity: loot.Min
if loot.Category == "Currency" then
-- CurrencyIcon: Library.Directory.Currency[loot.Data].tinyImage;
elseif loot.Category == "Boost" then
-- BoostIcon = BoostIcon[loot.Data]
elseif loot.Category == "Pet" then
local petData = loot.Data;
-- Open Huge Egg
if petData.id ~= "1019" then
Library.Signal.Fire("Open Egg", "Huge Machine Egg 1", { petData });
end
end
end
end
if queue then
if Library.Shared.IsHardcore then
saving.DaycareHardcoreQueue = queue;
else
saving.DaycareQueue = queue;
end
-- Remove pets that isn't ready yet
for _, pet in pairs(queue) do
if pet["Pet"] and pet["Pet"].uid then
local tablePos = table.find(PetsToDaycare, pet["Pet"].uid)
if tablePos then
-- print("A pet was not ready yet!")
table.remove(PetsToDaycare, tablePos)
end
end
end
end
SendWebhookInfo(#PetsToDaycare, loots)
return true, nil
end
function PutPetsInDaycare()
local saving = Library.Save.Get()
local success, errorMsg, _ = Library.Network.Invoke("Daycare: Enroll", PetsToDaycare)
if not success then
return false, (errorMsg and "Can't enroll pets, unknown error!")
end
print(tostring(#PetsToDaycare) .. " pets have been put on daycare!")
task.wait(1)
Library.Signal.Fire("Stat Changed", "DaycareTier")
Library.Signal.Fire("Window Closed", DaycareGUI.Gui)
return true, nil
end
function CreateReminder()
if getgenv().AutoDaycare then
return
end
local saving = Library.Save.Get()
local queue = saving.DaycareQueue
if Library.Shared.IsHardcore then
queue = saving.DaycareHardcoreQueue
end
-- Check if queue isn't nil and queue lenght is more than 1 (pet)
if queue ~= nil and #queue > 0 then
getgenv().AutoDaycare = true
coroutine.wrap(function()
while true do
local allPetsAreReady = true
for _, pet in pairs(queue) do
local remainingTime = Library.Shared.DaycareComputeRemainingTime(saving, pet)
if remainingTime > 0 then
allPetsAreReady = false
break
end
end
if allPetsAreReady or not enableAutoDaycare then break end
task.wait(1)
end
getgenv().AutoDaycare = false
if not enableAutoDaycare then return end
if ScriptIsCurrentlyBusy then
while ScriptIsCurrentlyBusy do wait() end
ScriptIsCurrentlyBusy = true
wait(3)
end
ScriptIsCurrentlyBusy = true
--if reminder then Library.Message.New("Your pets in daycare are ready to collect!") end
PetsToDaycare = {}
for _, pet in pairs(queue) do
local remainingTime = Library.Shared.DaycareComputeRemainingTime(saving, pet)
if remainingTime <= 0 and pet["Pet"] and pet["Pet"].uid then
table.insert(PetsToDaycare, pet["Pet"].uid)
end
end
TeleportToDaycare()
task.wait(1)
local collected, collectError = CollectDaycare()
if not collected then
ErrorNotification(collectError)
ResetDaycare()
return
end
task.wait(3)
local enrollSuccess, enrollError = PutPetsInDaycare()
if not enrollSuccess then
ErrorNotification(enrollError)
ResetDaycare()
return
end
SendNotification("Successfully put pets in daycare!")
ResetDaycare()
end)()
end
end
function TeleportBack()
pcall(function()
-- Go to Spawn World
if CurrentWorld ~= "" and Library.WorldCmds.Get() ~= CurrentWorld then
Library.WorldCmds.Load(CurrentWorld)
end
CurrentWorld = ""
if CurrentPosition then
HumanoidRootPart.CFrame = CurrentPosition
end
CurrentPosition = nil
end)
end
function ResetDaycare()
TeleportBack()
DaycareGUI.Categories.ViewPets.Frame.PetReady.Visible = false
-- FIRE CLOSE CONNECTION
for _, connection in pairs(getconnections(DaycareGUI.Close.Activated)) do
connection:Fire()
end
wait(3)
ScriptIsCurrentlyBusy = false
end
Library.Signal.Fired("Stat Changed"):Connect(function(stat)
if stat == "DaycareQueue" and enableAutoDaycare then
CreateReminder()
end
end)
task.spawn(function()
while true do
if Automations_AutoGameComplete then
local saveData = Library.Save.Get()
local currentAreaName, nextAreaName = GetCurrentAndNextArea()
local currentArea = Library.Directory.Areas[currentAreaName]
local nextArea = Library.Directory.Areas[nextAreaName]
local shouldSkip = false
if currentAreaName == "Hacker Portal" then
shouldSkip = true
local ownsHackerGate = IsHardcore and saveData.Hardcore.HackerPortalUnlocked or not IsHardcore and saveData.HackerPortalUnlocked
if not ownsHackerGate then
local currentProgress, currentMission = unpack(IsHardcore and saveData.Hardcore.HackerPortalProgress or saveData.HackerPortalProgress)
if currentMission < 0 then
-- Start quest
local map = Library.WorldCmds.GetMap()
local interactive = nil
if map then interactive = map:FindFirstChild("Interactive") end
local hackerPortal = nil
if interactive then hackerPortal = interactive:FindFirstChild("Hacker Portal") end
local interactLocation = nil
if hackerPortal then interactLocation = hackerPortal:FindFirstChild("_INTERACT") end
if interactLocation then
HumanoidRootPart.CFrame = CFrame.new(interactLocation.CFrame.p) + (interactLocation.CFrame.RightVector * 10)
SendNotification("Starting hacker portal mission...")
Library.Network.Fire("Start Hacker Portal Quests")
currentMission = 1
end
end
if currentMission > 1 then
currentMission = 1
currentProgress = Library.Shared.HackerPortalQuests[1]
end
if currentMission > -1 then
local totalToComplete = Library.Shared.HackerPortalQuests[currentMission]
if totalToComplete and tonumber(totalToComplete) and currentProgress >= totalToComplete then
local map = Library.WorldCmds.GetMap()
local interactive = nil
if map then interactive = map:FindFirstChild("Interactive") end
local hackerPortal = nil
if interactive then hackerPortal = interactive:FindFirstChild("Hacker Portal") end
local interactLocation = nil
if hackerPortal then interactLocation = hackerPortal:FindFirstChild("_INTERACT") end
if interactLocation then
HumanoidRootPart.CFrame = CFrame.new(interactLocation.CFrame.p) + (interactLocation.CFrame.RightVector * 10)
wait(0.3)
end
if Library.Network.Invoke("Finish Hacker Portal Quest") then
SendNotification("Unlocking Void...")
Library.WorldCmds.Load("Void")
wait(2)
SendNotification("Unlocking ".. nextAreaName .. "...")
Library.WorldCmds.Load(nextArea.world)
wait(1)
end
end
end
else
SendNotification("Unlocking Void...")
Library.WorldCmds.Load("Void")
wait(2)
SendNotification("Unlocking ".. nextAreaName .. "...")
Library.WorldCmds.Load(nextArea.world)
wait(1)
end
end
if nextAreaName ~= "COMPLETED" and not shouldSkip and CheckIfCanAffordArea(nextAreaName) then
-- Buy area
local currentWorld = Library.WorldCmds.Get()
if currentWorld ~= nextArea.world then
Library.WorldCmds.Load(nextArea.world)
wait(1)
end
local map = Library.WorldCmds.GetMap()
local allGates = nil
if map then allGates = map:FindFirstChild("Gates") end
local successfullyTeleported = false
if allGates and allGates:FindFirstChild(nextAreaName) then
local gate = allGates:FindFirstChild(nextAreaName):FindFirstChild("Gate")
if gate and gate:FindFirstChild("GateHUD") then
local gateTP = gate:FindFirstChild("GateHUD").Parent
if gateTP then
HumanoidRootPart.CFrame = CFrame.new(gateTP.CFrame.p) * CFrame.new(1,0,0)
successfullyTeleported = true
end
end
elseif currentArea.world == "Fantasy" then
local interactive = map:FindFirstChild("Interactive")
local portals = nil
if interactive then portals = interactive:FindFirstChild("Portals") end
if portals and portals:FindFirstChild(nextAreaName) then
local portal = portals:FindFirstChild(nextAreaName)
HumanoidRootPart.CFrame = CFrame.new(portal.PrimaryPart.CFrame.p) + (portal.PrimaryPart.CFrame.RightVector * 5)
successfullyTeleported = true
end
end
if successfullyTeleported then
wait(0.1)
SendNotification("Unlocking ".. nextAreaName .. "...")
local success, errorMsg = Library.Network.Invoke("Buy Area", nextAreaName)
if success then
if currentAreaName == "Cat Kingdom" then
SendNotification("Unlocking Limbo...")
Library.WorldCmds.Load("Limbo")
wait(1)
end
-- TELEPORT TO THE NEW AREA
local areaTeleport = Library.WorldCmds.GetMap().Teleports:FindFirstChild(nextAreaName);
if areaTeleport then
Library.Signal.Fire("Teleporting")
task.wait(0.25)
Character:PivotTo(areaTeleport.CFrame + areaTeleport.CFrame.UpVector * (Humanoid.HipHeight + HumanoidRootPart.Size.Y / 2))
Library.Network.Fire("Performed Teleport", nextAreaName)
task.wait(0.25)
end
end
end
wait(1)
else
-- NOT AVAILABLE YET
-- Start farming? Teleport to area? Idk yet
end
end
task.wait(0.5)
end
end)
local settingsTab = Window:CreateTab("Settings", "13075268290", true)
local windowSettings = settingsTab:CreateSection("General Options", false, false, "13080063021")
settingsTab:CreateToggle({
Name = "Compact Mode",
CurrentValue = false,
Flag = "Settings_CompactMode",
SectionParent = windowSettings,
Callback = function(value)
Rayfield:ToggleOldTabStyle(not value)
end
})
settingsTab:CreateToggle({
Name = "Disable Rendering when Alt-Tab",
CurrentValue = true,
Flag = "Settings_DisableRendering",
SectionParent = windowSettings,
Callback = function(value)
Settings_DisableRendering = value
end
})
local discordSettings = settingsTab:CreateSection("Webhook Options", false, true, "13085068876")
settingsTab:CreateToggle({
Name = "Enable Webhook",
CurrentValue = false,
Flag = "Webhook_Enabled",
SectionParent = discordSettings,
Callback = function(value)
Webhook_Enabled = value
end
})
local WebhookURLInput = settingsTab:CreateInput({
Name = "Webhook URL",
PlaceholderText = "Paste your Discord Webhook here",
SectionParent = discordSettings,
NumbersOnly = false,
OnEnter = false,
RemoveTextAfterFocusLost = false,
Callback = function(Text)
SaveCustomFlag("Webhook_URL", Text)
end,
})
AddCustomFlag("Webhook_URL", "", function(newValue)
Webhook_URL = newValue
if WebhookURLInput and newValue and newValue ~= "" then
WebhookURLInput:Set(newValue)
end
end)
settingsTab:CreateToggle({
Name = "Daycare Updates",
CurrentValue = false,
Flag = "Webhook_Daycare",
SectionParent = discordSettings,
Callback = function(value)
Webhook_Daycare = value
end
})
-- TODO: Change this to a Dropdown with rarities to notify
settingsTab:CreateToggle({
Name = "Notify Huge Hatches",
CurrentValue = false,
Flag = "Webhook_Huge",
SectionParent = discordSettings,
Callback = function(value)
Webhook_Huge = value
end
})
Rayfield.LoadConfiguration()
for i,v in pairs(getconnections(game.Players.LocalPlayer.Idled)) do
v:Disable()
end
InputService.WindowFocused:Connect(function()
RunService:Set3dRenderingEnabled(true)
end)
InputService.WindowFocusReleased:Connect(function()
if Settings_DisableRendering then
RunService:Set3dRenderingEnabled(false)
end
end)
end
-- discord.gg/MilkUp
-- discord.gg/MilkUp
-- discord.gg/MilkUp
-- discord.gg/MilkUp
-- discord.gg/MilkUp
-- discord.gg/MilkUp
-- discord.gg/MilkUp
-- discord.gg/MilkUp
-- discord.gg/MilkUp
-- discord.gg/MilkUp
-- discord.gg/MilkUp
-- discord.gg/MilkUp
-- discord.gg/MilkUp