Dig for Dinos Script | Auto Farm Dinos based on Rarity script OP, Keyless
Description
Embark on the ultimate paleontological adventure in Dig for Dinos and instantly unearth the rarest prehistoric creatures with this powerful, completely keyless script. By automating the tedious digging process, this utility lets you effortlessly locate, claim, and collect legendary dinosaurs without spending hours grinding. Whether you are aiming to dominate the leaderboards or unlock every world in the game, this exploit provides the ultimate shortcut to becoming the top dino explorer.
Key Features
- Auto Farm & TP Claim: Instantly teleports your character to claim newly discovered dinosaurs based on their rarity, maximizing your collection efficiency.
- Auto Rebirth: Automatically triggers rebirths the moment you meet the requirements, allowing you to scale your multipliers seamlessly.
- World Teleport & Walk Speed: Warp instantly across different prehistoric zones and boost your movement speed to explore the map in seconds.
- 100% Free & Keyless Access: Enjoy uninterrupted gameplay with a direct, hassle-free execution that does not require completing annoying key systems.
- Optimized & Lag-Free: The lightweight codebase is fully optimized to run smoothly on mobile executors like Delta, Codex, and Hydrogen, as well as PC clients.
How to Use the Script
- Launch Roblox and open the Dig for Dinos game on your device.
- Open your preferred Roblox executor client, such as Delta, Codex, or Wave.
- Copy the official Pastebin loadstring script code provided below.
- Paste the copied code into the executor’s editor window and click the Execute button.
- Use the clean, in-game GUI to toggle on Auto Farm Dinos by Rarity and configure your rebirth preferences.
Features
Compatible Executors
Script
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Workspace = game:GetService("Workspace")
local RunService = game:GetService("RunService")
local CollectionService = game:GetService("CollectionService")
local LocalPlayer = Players.LocalPlayer
local pcall = pcall
local Data = require(ReplicatedStorage:WaitForChild("Data"))
local Dinos = Data.Dinos
local Rebirths = Data.Rebirths
if type(getgenv) == "function" then
local env = getgenv()
if env.UniverseLibrary then
pcall(function()
env.UniverseLibrary:Unload()
end)
end
end
local repo = "https://raw.githubusercontent.com/deividcomsono/Obsidian/main/"
local function fetch(path)
local ok, result = pcall(function()
return loadstring(game:HttpGet(repo .. path))()
end)
if ok then
return result
end
return nil
end
local Library = fetch("Library.lua")
local SaveManager = fetch("addons/SaveManager.lua")
local ThemeManager = fetch("addons/ThemeManager.lua")
if not Library or not SaveManager or not ThemeManager then
return warn("[Universe] No se pudo cargar la librería Obsidian. Revisa tu conexión e inténtalo de nuevo.")
end
if type(getgenv) == "function" then
getgenv().UniverseLibrary = Library
end
Library.ForceCheckbox = false
Library.ShowToggleFrameInKeybinds = true
local Window = Library:CreateWindow({
Title = "Dig for Dinos! 🦕",
Footer = "Dig for Dinos! 🦕",
AutoShow = true,
NotifySide = "Right",
ShowCustomCursor = false,
})
local MainTab = Window:AddTab("Main", "house")
local SettingsTab = Window:AddTab("Settings", "sliders-horizontal")
local ClaimDinosCFrame = CFrame.new(256.277588, 6.22658443, -134.723221, -0.0700938404, -1.28709514e-08, -0.997540414, -1.46516808e-08, 1, -1.1873162e-08, 0.997540414, 1.37834082e-08, -0.0700938404)
local activeConnections = {}
local function trackConnection(connection)
activeConnections[#activeConnections + 1] = connection
return connection
end
local Worlds = {
{
name = "World 7",
zones = {
{ "Earthbound", CFrame.new(6734.52783, -245.821381, -8079.46728, 0.000436367206, 0, -0.999999905, 0, 1, 0, 0.999999905, 0, 0.000436367206) },
{ "Orbital", CFrame.new(6732.45117, -505.675629, -8079.54443, -0.0278344236, 0, -0.999612547, 0, 1, 0, 0.999612547, 0, -0.0278344236) },
{ "Lunar", CFrame.new(6735.14941, -826.826111, -8080.25147, -0.024693916, 0, -0.999695059, 0, 1, 0, 0.999695059, 0, -0.024693916) },
{ "Apollonian", CFrame.new(6737.40478, -1221.60498, -8078.99023, 0.0130023889, 0, -0.999915465, 0, 1, 0, 0.999915465, 0, 0.0130023889) },
{ "Artemisian", CFrame.new(6735.21924, -1728.43127, -8079.92725, -0.0152710373, 0, -0.999883391, 0, 1, 0, 0.999883391, 0, -0.0152710373) },
{ "Khonshian", CFrame.new(6734.80615, -2347.81812, -8079.44043, -0.0184121831, 0, -0.999830481, 0, 1, 0, 0.999830481, 0, -0.0184121831) },
{ "Xeno", CFrame.new(6733.70703, -3105.72021, -8080.12891, -0.00298447368, 0, -0.999995546, 0, 1, 0, 0.999995546, 0, -0.00298447368) },
{ "Extraterrestrial", CFrame.new(6736.88379, -4029.75293, -8077.57129, 0.00644027278, 0, -0.999979261, 0, 1, 0, 0.999979261, 0, 0.00644027278) },
},
},
{
name = "World 6",
zones = {
{ "Charmed", CFrame.new(6737.00146, -249.197388, 6593.14404, -0.0169392861, -2.53930832e-08, -0.999856532, -2.31452635e-09, 1, -2.53575152e-08, 0.999856532, 1.88465621e-09, -0.0169392861) },
{ "Hexed", CFrame.new(6736.23438, -509.197357, 6594.07227, -0.00751324138, -7.56313767e-08, -0.999971747, 2.11650715e-08, 1, -7.57925349e-08, 0.999971747, -2.17339231e-08, -0.00751324138) },
{ "Enchanted", CFrame.new(6736.64551, -829.197388, 6593.16602, 0.0348937102, 2.77370993e-09, -0.999391019, 1.56134021e-08, 1, 3.32054162e-09, 0.999391019, -1.57197597e-08, 0.0348937102) },
{ "Runic", CFrame.new(6736.25684, -1229.80103, 6593.03223, 0.0490193106, 1.66084728e-08, -0.998797834, 1.38920306e-08, 1, 1.73102599e-08, 0.998797834, -1.47238675e-08, 0.0490193106) },
{ "Leviathan", CFrame.new(6736.83203, -1722.28833, 6593.5542, 0.013791807, 6.10578565e-09, -0.999904871, 8.22807544e-10, 1, 6.11771567e-09, 0.999904871, -9.07103614e-10, 0.013791807) },
{ "Arcane", CFrame.new(6736.396, -2349.80127, 6594.15088, -0.0176249798, 6.35864197e-08, -0.99984467, 3.15268189e-09, 1, 6.35407247e-08, 0.99984467, -2.03228812e-09, -0.0176249798) },
{ "Dragonian", CFrame.new(6736.81104, -3109.80127, 6592.37891, 0.0389070176, -6.96779239e-08, -0.999242842, -1.18012782e-08, 1, -7.01902252e-08, 0.999242842, 1.45232351e-08, 0.0389070176) },
{ "Eldritch", CFrame.new(6737.31055, -4022.28882, 6594.25342, 0.0507960804, -8.8207166e-08, -0.998709023, 3.08041437e-09, 1, -8.81645121e-08, 0.998709023, 1.40197398e-09, 0.0507960804) },
},
},
{
name = "World 5",
zones = {
{ "Sugared", CFrame.new(6736.05859, -249.197388, -872.862732, -0.0565745756, 8.77809256e-08, -0.998398364, -3.33523502e-08, 1, 8.9811671e-08, 0.998398364, 3.83799872e-08, -0.0565745756) },
{ "Sprinkled", CFrame.new(6736.92773, -509.197357, -873.004028, -0.0408848561, -4.8875556e-08, -0.999163866, 1.34183864e-08, 1, -4.94655268e-08, 0.999163866, -1.54295581e-08, -0.0408848561) },
{ "Sour", CFrame.new(6735.76123, -829.197388, -873.682556, -0.0630942881, -3.85886345e-09, -0.998007596, -1.41742795e-08, 1, -2.97046565e-09, 0.998007596, 1.39586191e-08, -0.0630942881) },
{ "Fizzy", CFrame.new(6734.69336, -1229.80103, -873.715393, 0.0206233561, -6.14434654e-08, -0.999787331, -3.7826247e-08, 1, -6.22368077e-08, 0.999787331, 3.91017352e-08, 0.0206233561) },
{ "Caramelized", CFrame.new(6736.13965, -1729.80103, -873.580078, 0.0376348719, -1.95005416e-08, -0.999291539, -5.76802321e-08, 1, -2.16866933e-08, 0.999291539, 5.84555444e-08, 0.0376348719) },
{ "Crystallized", CFrame.new(6736.31104, -2349.80127, -872.830994, 0.0313570052, 7.94116417e-09, -0.999508262, -7.37957695e-09, 1, 7.71355602e-09, 0.999508262, 7.13407422e-09, 0.0313570052) },
{ "Decadent", CFrame.new(6736.4541, -3109.80127, -872.143799, 0.037636254, 2.60526463e-08, -0.99929148, 5.98186887e-08, 1, 2.83240649e-08, 0.99929148, -6.08423179e-08, 0.037636254) },
{ "Insatiable", CFrame.new(6737.32666, -4022.28931, -874.700684, 0.0159449093, -1.09729015e-09, -0.999872863, 2.73234058e-08, 1, -6.61705024e-10, 0.999872863, -2.73093814e-08, 0.0159449093) },
},
},
{
name = "World 4",
zones = {
{ "Blessed", CFrame.new(-24.4364166, -249.801025, -7450.4541, -0.0660624653, -2.38404905e-08, -0.99781549, -9.25590715e-09, 1, -2.32798776e-08, 0.99781549, 7.69776154e-09, -0.0660624653) },
{ "Ethereal", CFrame.new(-23.563242, -509.800995, -7449.56787, -0.0378356166, 2.2202058e-09, -0.999283969, 2.97153857e-09, 1, 2.1092863e-09, 0.999283969, -2.88960456e-09, -0.0378356166) },
{ "Elysian", CFrame.new(-23.6444321, -829.801025, -7449.00244, -0.000139891868, -2.95100531e-08, -1, -2.31165096e-08, 1, -2.95068183e-08, 1, 2.31123813e-08, -0.000139891868) },
{ "Celestial", CFrame.new(-24.4103031, -1229.80103, -7449.5, -0.05175988, 4.60532732e-08, -0.998659551, 1.83378468e-08, 1, 4.51646471e-08, 0.998659551, -1.59755498e-08, -0.05175988) },
{ "Angelic", CFrame.new(-24.2683601, -1729.80115, -7449.74268, 0.0549969785, 8.3733255e-08, -0.998486519, 2.97367997e-09, 1, 8.40239665e-08, 0.998486519, -7.59024399e-09, 0.0549969785) },
{ "Valhallan", CFrame.new(-24.7670135, -2349.80127, -7450.04102, -0.00465696305, -7.53203224e-08, -0.999989152, -2.54662282e-08, 1, -7.52025429e-08, 0.999989152, 2.5115737e-08, -0.00465696305) },
{ "Seraphic", CFrame.new(-25.0984173, -3109.80127, -7450.21387, -0.0674402043, -6.28672865e-08, -0.997723341, 2.19282263e-08, 1, -6.44929656e-08, 0.997723341, -2.62277222e-08, -0.0674402043) },
{ "Omnipotent", CFrame.new(-24.1282597, -4029.80127, -7450.09717, -0.157938108, 4.89414731e-08, -0.98744899, -4.40885408e-08, 1, 5.66153098e-08, 0.98744899, 5.24769028e-08, -0.157938108) },
},
},
{
name = "World 3",
zones = {
{ "Frostbitten", CFrame.new(-7107.36621, -249.197388, -874.471191, -0.0724782571, -2.13126885e-08, -0.997370005, 2.43110398e-09, 1, -2.15455565e-08, 0.997370005, -3.98629441e-09, -0.0724782571) },
{ "Glacial", CFrame.new(-7108.75049, -509.197357, -873.803223, -0.077074565, 7.27362206e-08, -0.997025311, -3.26748477e-08, 1, 7.54791429e-08, 0.997025311, 3.8395175e-08, -0.077074565) },
{ "Whiteout", CFrame.new(-7108.66211, -829.197388, -873.737732, 0.0127838934, -6.14040943e-08, -0.999918282, -1.66610334e-08, 1, -6.16221172e-08, 0.999918282, 1.74474426e-08, 0.0127838934) },
{ "IceCrystal", CFrame.new(-7109.4502, -1229.80103, -873.838562, -0.0531642251, -3.60742582e-08, -0.998585761, 9.43748404e-08, 1, -4.11498178e-08, 0.998585761, -9.64290692e-08, -0.0531642251) },
{ "Borealis", CFrame.new(-7106.76416, -1722.28845, -874.505737, -0.0669314489, -9.89669058e-09, -0.997757554, 1.78751036e-09, 1, -1.00388426e-08, 0.997757554, -2.45541631e-09, -0.0669314489) },
{ "Prismatic", CFrame.new(-7107.93652, -2349.80127, -874.871521, -0.00647993153, 1.1946768e-08, -0.999979019, -2.42240414e-08, 1, 1.21039916e-08, 0.999979019, 2.43019667e-08, -0.00647993153) },
{ "Spectral", CFrame.new(-7107.68311, -3109.80127, -874.094238, -0.0519523956, -2.27088055e-08, -0.998649538, 9.29715114e-08, 1, -2.75761369e-08, 0.998649538, -9.42786045e-08, -0.0519523956) },
{ "Cosmic", CFrame.new(-7106.58301, -4022.28882, -874.4021, -0.00405639783, -1.07583062e-07, -0.999991775, -1.61965161e-08, 1, -1.07518247e-07, 0.999991775, 1.57602464e-08, -0.00405639783) },
},
},
{
name = "World 2",
zones = {
{ "Primal", CFrame.new(130.773972, -249.932449, 6871.01367, 0.0377811268, -6.75098093e-08, 0.999286056, 1.57284158e-10, 1, 6.75520937e-08, -0.999286056, -2.3950224e-09, 0.0377811268) },
{ "Prehistoric", CFrame.new(132.319473, -509.34726, 6875.81543, 0.0213362593, -1.19052208e-08, 0.99977237, 3.91781079e-08, 1, 1.1071827e-08, -0.99977237, 3.893296e-08, 0.0213362593) },
{ "Fossilized", CFrame.new(131.826187, -829.932556, 6876.28369, 0.0315402187, -1.50500092e-08, 0.99950248, -3.02788763e-08, 1, 1.60129776e-08, -0.99950248, -3.0768863e-08, 0.0315402187) },
{ "Extinction", CFrame.new(131.858932, -1229.34717, 6874.91113, -0.00306858961, 6.39295266e-08, 0.999995291, 5.07487741e-08, 1, -6.37741024e-08, -0.999995291, 5.05528384e-08, -0.00306858961) },
{ "Genesis", CFrame.new(132.77272, -1729.93237, 6876.53223, 0.433732212, -8.8491106e-08, 0.901041806, 1.22371603e-07, 1, 3.93040587e-08, -0.901041806, 9.32144886e-08, 0.433732212) },
{ "Eternal", CFrame.new(131.48204, -2349.34741, 6874.25342, 0.0834260359, -5.47401946e-08, 0.996513963, -6.7618096e-08, 1, 6.05925266e-08, -0.996513963, -7.24373734e-08, 0.0834260359) },
{ "Meteoric", CFrame.new(131.900726, -3109.93262, 6876.49463, -0.0173395891, 5.45614434e-08, 0.999849677, -8.97345274e-08, 1, -5.61258418e-08, -0.999849677, -9.06942361e-08, -0.0173395891) },
{ "Apex", CFrame.new(128.974655, -4022.64941, 6877.00879, 0.0321365856, -2.32511628e-08, 0.999483466, 5.96797776e-08, 1, 2.13442828e-08, -0.999483466, 5.89630176e-08, 0.0321365856) },
},
},
{
name = "World 1",
zones = {
{ "Common", CFrame.new(-32.7610817, -82.0928421, -116.216232, -0.0161483604, -9.88939419e-08, -0.999869585, 3.1562795e-08, 1, -9.94165887e-08, 0.999869585, -3.31640955e-08, -0.0161483604) },
{ "Uncommon", CFrame.new(-32.7610817, -342.05307, -116.216232, -0.0161483604, 1.18497944e-07, -0.999869585, -3.77434937e-08, 1, 1.19122973e-07, 0.999869585, 3.96622148e-08, -0.0161483604) },
{ "Rare", CFrame.new(-32.7610817, -662.092896, -116.216232, -0.0161483604, -2.32178952e-08, -0.999869585, 7.38395967e-09, 1, -2.33401778e-08, 0.999869585, -7.75990205e-09, -0.0161483604) },
{ "Epic", CFrame.new(-32.7610817, -1062.0929, -116.216232, -0.0161483604, -5.79326063e-08, -0.999869585, 1.83957969e-08, 1, -5.82372586e-08, 0.999869585, -1.93338341e-08, -0.0161483604) },
{ "Legendary", CFrame.new(-32.7610817, -1562.0929, -116.216232, -0.0161483604, -4.87015299e-08, -0.999869585, 1.54312669e-08, 1, -4.89571015e-08, 0.999869585, -1.62198308e-08, -0.0161483604) },
{ "Mythic", CFrame.new(-32.7610817, -2182.76489, -116.216232, -0.0161483604, -6.59061161e-09, -0.999869585, 2.08302264e-09, 1, -6.6251129e-09, 0.999869585, -2.18973573e-09, -0.0161483604) },
{ "Secret", CFrame.new(-32.7610817, -2942.09302, -116.216232, -0.0161483604, -6.58329853e-08, -0.999869585, 2.0741334e-08, 1, -6.6176554e-08, 0.999869585, -2.18072724e-08, -0.0161483604) },
{ "Ancient", CFrame.new(-32.7610817, -3860.76489, -116.216232, -0.0161483604, -9.14856524e-10, -0.999869585, 2.87143059e-10, 1, -9.19613274e-10, 0.999869585, -3.01955877e-10, -0.0161483604) },
},
},
}
for _, world in ipairs(Worlds) do
local ordered = {}
for index = #world.zones, 1, -1 do
ordered[#ordered + 1] = world.zones[index]
end
world.zones = ordered
end
local Teleports = {}
local ZoneNames = {}
for _, world in ipairs(Worlds) do
for _, zone in ipairs(world.zones) do
Teleports[zone[1]] = zone[2]
table.insert(ZoneNames, zone[1])
end
end
local function getCharacterParts()
local character = LocalPlayer.Character
if not character then
return nil
end
local root = character:FindFirstChild("HumanoidRootPart")
local humanoid = character:FindFirstChildOfClass("Humanoid")
if not root or not humanoid or humanoid.Health = deadline
lastHumanoid = humanoid or lastHumanoid
if character and root then
anchorTeleport(root, humanoid, cframe)
local _, currentRoot, currentHumanoid = getCharacterParts()
lastHumanoid = currentHumanoid or lastHumanoid
if currentRoot and (currentRoot.Position - cframe.Position).Magnitude 4 then
root.CFrame = ClaimDinosCFrame
end
end)
RunService.Heartbeat:Wait()
end
local _, _, endHumanoid = getCharacterParts()
releaseGround(endHumanoid)
local _, root = getCharacterParts()
success = root ~= nil and (root.Position - ClaimDinosCFrame.Position).Magnitude 0 and not waitAction(remaining, generation) then
return false
end
local character, root, humanoid = waitForActionCharacter(generation, 1.5)
if not character or not root then
return false
end
local cframe = type(targetSource) == "function" and targetSource() or targetSource
if not cframe then
return false
end
lastGetDinoTeleport = os.clock()
anchorTeleport(root, humanoid, cframe)
local currentCharacter, currentRoot = getCharacterParts()
if currentCharacter == character and currentRoot and (currentRoot.Position - cframe.Position).Magnitude bestCash then
local prompt = getPickupPrompt(model)
if prompt and promptActive(prompt) then
bestModel = model
bestPrompt = prompt
bestCash = cash
end
end
end
end
return bestModel, bestPrompt, bestCash
end
local function findBestDinoForZone(zone)
return findBestDinoByFilter(function(model)
return model:GetAttribute("Rarity") == zone
end)
end
local function findDinoById(dinoId)
return findBestDinoByFilter(function(model)
return model:GetAttribute("DinoId") == dinoId
end)
end
local function findDinoInSet(allowed)
return findBestDinoByFilter(function(model)
return allowed[model:GetAttribute("DinoId")] == true
end)
end
local function waitForDino(finder, generation, timeout)
local deadline = os.clock() + timeout
while actionActive(generation) and os.clock() < deadline do
local model, prompt, cash = finder()
if model then
return model, prompt, cash
end
RunService.Heartbeat:Wait()
end
return nil
end
local function isDinoTool(instance)
return instance:IsA("Tool")
and (instance:GetAttribute("InventoryType") == "Dino" or type(instance:GetAttribute("DinoId")) == "string")
end
local function getDinoToolSnapshot()
local snapshot = {}
local backpack = LocalPlayer:FindFirstChildOfClass("Backpack")
if backpack then
for _, child in ipairs(backpack:GetChildren()) do
if isDinoTool(child) then
snapshot[child] = true
end
end
end
local character = LocalPlayer.Character
if character then
for _, child in ipairs(character:GetChildren()) do
if isDinoTool(child) then
snapshot[child] = true
end
end
end
return snapshot
end
local function findNewDinoTool(snapshot, dinoId)
local function inspect(parent)
if not parent then
return nil
end
for _, child in ipairs(parent:GetChildren()) do
if not snapshot[child] and isDinoTool(child) and child:GetAttribute("DinoId") == dinoId then
return child
end
end
return nil
end
return inspect(LocalPlayer:FindFirstChildOfClass("Backpack")) or inspect(LocalPlayer.Character)
end
local function waitForNewDinoTool(snapshot, dinoId, generation, timeout)
local deadline = os.clock() + timeout
while actionActive(generation) and os.clock() < deadline do
if not getCharacterParts() then
return nil
end
local tool = findNewDinoTool(snapshot, dinoId)
if tool then
return tool
end
RunService.Heartbeat:Wait()
end
return nil
end
local function captureDino(model, prompt, generation)
local dinoId = model:GetAttribute("DinoId")
if type(dinoId) ~= "string" then
return false
end
local snapshot = getDinoToolSnapshot()
for _ = 1, 14 do
if not actionActive(generation) or not getCharacterParts() then
return findNewDinoTool(snapshot, dinoId)
end
if not dinoAvailable(model, prompt) then
return waitForNewDinoTool(snapshot, dinoId, generation, 0.5)
end
local promptRoot = prompt.Parent
local _, playerRoot, playerHum = getCharacterParts()
if promptRoot and promptRoot:IsA("BasePart") and playerRoot and (playerRoot.Position - promptRoot.Position).Magnitude > 6 then
anchorTeleport(playerRoot, playerHum, promptRoot.CFrame * CFrame.new(0, 0, 4))
end
fireInstantPrompt(prompt)
local tool = waitForNewDinoTool(snapshot, dinoId, generation, 0.1)
if tool then
return tool
end
end
return findNewDinoTool(snapshot, dinoId)
end
local function ownsCapturedDino(tool, dinoId)
if not tool or not tool.Parent or tool:GetAttribute("DinoId") ~= dinoId then
return false
end
return tool.Parent == LocalPlayer.Character or tool.Parent == LocalPlayer:FindFirstChildOfClass("Backpack")
end
local function claimCapturedDino(tool, dinoId, generation)
if not actionTeleport(ClaimDinosCFrame, generation) then
return false
end
local claimed = false
local deadline = os.clock() + 0.45
while actionActive(generation) and os.clock() < deadline do
local character, root, humanoid = getCharacterParts()
if not character or not root or not humanoid then
local _, _, deadHumanoid = getCharacterParts()
releaseGround(deadHumanoid)
return false
end
if not ownsCapturedDino(tool, dinoId) then
claimed = true
releaseGround(humanoid)
break
end
pcall(function()
pinToGround(humanoid)
root.AssemblyLinearVelocity = Vector3.zero
root.AssemblyAngularVelocity = Vector3.zero
if (root.Position - ClaimDinosCFrame.Position).Magnitude > 4 then
root.CFrame = ClaimDinosCFrame
end
end)
if not waitAction(0.02, generation) then
local _, _, cancelHumanoid = getCharacterParts()
releaseGround(cancelHumanoid)
return false
end
end
local _, root, endHumanoid = getCharacterParts()
releaseGround(endHumanoid)
if claimed then
return true
end
return root ~= nil and (root.Position - ClaimDinosCFrame.Position).Magnitude limit then
names[#names + 1] = "+" .. (#ids - limit)
break
end
names[#names + 1] = dinoDisplayName(dinoId)
end
return table.concat(names, ", ")
end
local function analyzeRebirth()
local summary = getRebirthSummary()
if not summary then
return nil, "Open the Rebirth menu once and try again"
end
local config = summary.rebirthConfig
if type(config) ~= "table" or type(config.RequiredDinos) ~= "table" then
local ok, definition = pcall(function()
return Rebirths.Definitions[summary.nextRebirthIndex]
end)
config = ok and definition or nil
end
if type(config) ~= "table" or type(config.RequiredDinos) ~= "table" then
return nil, "Rebirth requirements unavailable"
end
local allowed = {}
for _, dinoId in ipairs(config.RequiredDinos) do
allowed[dinoId] = true
end
local missing = {}
local seen = {}
for _, dinoId in ipairs(summary.missingDinos or {}) do
if allowed[dinoId] and not seen[dinoId] then
seen[dinoId] = true
missing[#missing + 1] = dinoId
end
end
return {
index = summary.nextRebirthIndex,
requiredCount = #config.RequiredDinos,
missing = missing,
}
end
local function collectTargetDino(generation, dinoId)
for _ = 1, 2 do
if not actionActive(generation) then
return false, "Action cancelled"
end
local model, prompt, cash = findDinoById(dinoId)
if not model then
return false, "missing"
end
if actionTeleport(function()
return resolveDinoTarget(model, prompt)
end, generation) and waitAction(0.04, generation) then
prompt = getPickupPrompt(model)
if prompt and model:GetAttribute("DinoId") == dinoId and dinoAvailable(model, prompt) then
local capturedTool = captureDino(model, prompt, generation)
if capturedTool and capturedTool:GetAttribute("DinoId") == dinoId then
if not claimCapturedDino(capturedTool, dinoId, generation) then
return false, "Claim teleport failed"
end
return true, dinoDisplayName(dinoId), cash
end
end
end
end
return false, "missing"
end
local function executeGetRebirthDino(generation)
local analysis, failure = analyzeRebirth()
if not analysis then
return false, failure
end
local missing = analysis.missing
local label = "Rebirth #" .. tostring(analysis.index or "?")
if #missing == 0 then
return false, label .. ": " .. analysis.requiredCount .. "/" .. analysis.requiredCount .. " dinos ready"
end
Library:Notify(label .. ": missing " .. #missing .. "/" .. analysis.requiredCount .. " - " .. listNames(missing, 4), 4)
local groups = {}
local order = {}
local unreachable = {}
for _, dinoId in ipairs(missing) do
local definition = Dinos.GetDefinition(dinoId)
local rarity = definition and definition.Rarity
if rarity and Teleports[rarity] then
if not groups[rarity] then
groups[rarity] = {}
order[#order + 1] = rarity
end
groups[rarity][dinoId] = true
else
unreachable[#unreachable + 1] = dinoId
end
end
if #order == 0 then
return false, "No zone available for: " .. listNames(unreachable, 4)
end
for _, rarity in ipairs(order) do
if not actionActive(generation) then
return false, "Action cancelled"
end
if actionTeleport(Teleports[rarity], generation) then
if not waitAction(0.12, generation) then
return false, "Action cancelled"
end
local allowed = groups[rarity]
local attempts = 0
while attempts < 3 do
attempts += 1
local model = waitForDino(function()
return findDinoInSet(allowed)
end, generation, 2.5)
if not model then
break
end
local dinoId = model:GetAttribute("DinoId")
if type(dinoId) ~= "string" or not allowed[dinoId] then
break
end
local ok, detail, cash = collectTargetDino(generation, dinoId)
if ok then
return true, detail, cash
end
if detail == "Action cancelled" or detail == "Claim teleport failed" then
return false, detail
end
end
end
end
return false, "Rebirth dinos not spawned yet - waiting for: " .. listNames(missing, 4)
end
local function startDinoAction(executor)
if getDinoBusy then
Library:Notify("A Dino action is already running", 2)
return
end
if type(firePrompt) ~= "function" then
Library:Notify("Executor function unavailable", 3)
return
end
getDinoBusy = true
getDinoGeneration += 1
local generation = getDinoGeneration
lastGetDinoTeleport = -math.huge
task.spawn(function()
local callOk, success, detail, cash = pcall(executor, generation)
if generation ~= getDinoGeneration then
return
end
getDinoBusy = false
if not callOk then
Library:Notify("Dino action failed unexpectedly", 3)
elseif success then
Library:Notify(tostring(detail) .. " - $" .. abbreviateNumber(cash) .. "/s", 4)
else
Library:Notify(tostring(detail), 3)
end
end)
end
local function cancelDinoAction(reason)
if not getDinoBusy then
return false
end
getDinoBusy = false
getDinoGeneration += 1
local _, root, humanoid = getCharacterParts()
if root then
pcall(function()
root.Anchored = false
end)
end
releaseGround(humanoid)
if reason then
Library:Notify(reason, 3)
end
return true
end
local function watchCharacter(character)
local humanoid = character:FindFirstChildOfClass("Humanoid") or character:WaitForChild("Humanoid", 5)
if not humanoid then
return
end
trackConnection(humanoid.Died:Connect(function()
local wasBusy = cancelDinoAction("Died - Dino action stopped")
task.spawn(function()
if forceReset() and wasBusy then
Library:Notify("Character reset", 2)
end
end)
end))
end
if LocalPlayer.Character then
watchCharacter(LocalPlayer.Character)
end
trackConnection(LocalPlayer.CharacterAdded:Connect(watchCharacter))
local respawnTag = "DeathMenu_RespawnButton"
local lastRespawnClick = -math.huge
local function effectivelyVisible(instance)
local node = instance
while node do
if node:IsA("LayerCollector") then
return node.Enabled
end
if node:IsA("GuiObject") and not node.Visible then
return false
end
node = node.Parent
end
return false
end
local function clickRespawn(button)
local fired = false
if type(getconnections) == "function" then
local ok, connections = pcall(getconnections, button.Activated)
if ok and type(connections) == "table" then
for _, connection in ipairs(connections) do
if pcall(function()
connection:Fire(1)
end) then
fired = true
end
end
end
end
if not fired and type(firesignal) == "function" then
fired = pcall(firesignal, button.Activated, 1)
pcall(firesignal, button.MouseButton1Click)
end
return fired
end
local function tryAutoRespawn()
if os.clock() - lastRespawnClick < 1.5 then
return
end
for _, button in ipairs(CollectionService:GetTagged(respawnTag)) do
if button:IsA("GuiButton")
and button:IsDescendantOf(LocalPlayer)
and button.Active
and effectivelyVisible(button)
and clickRespawn(button) then
lastRespawnClick = os.clock()
return
end
end
end
local respawnAccumulator = 0
trackConnection(RunService.Heartbeat:Connect(function(delta)
respawnAccumulator += delta
if respawnAccumulator < 0.2 then
return
end
respawnAccumulator = 0
pcall(tryAutoRespawn)
end))
trackConnection(CollectionService:GetInstanceAddedSignal(respawnTag):Connect(function()
task.delay(0.1, function()
pcall(tryAutoRespawn)
end)
end))
UtilityGroup:AddButton("Force Reset", function()
cancelDinoAction("Dino action stopped")
task.spawn(forceReset)
end)
local FarmGroup = MainTab:AddLeftGroupbox("Farm", "pickaxe")
FarmGroup:AddDropdown("GetDinoZone", {
Text = "Rarity",
Values = ZoneNames,
Default = 1,
Multi = false,
Callback = function(value)
selectedZone = value
end,
})
FarmGroup:AddButton("Get Dino", function()
local zone = selectedZone
if not Teleports[zone] then
Library:Notify("Invalid rarity", 2)
return
end
startDinoAction(function(generation)
return executeGetDino(generation, zone)
end)
end)
FarmGroup:AddButton("Get Rebirth Dinos", function()
startDinoAction(executeGetRebirthDino)
end)
SaveManager:SetLibrary(Library)
SaveManager:IgnoreThemeSettings()
SaveManager:SetFolder("Dig for Dinos")
SaveManager:SetIgnoreIndexes({ "MenuKeybind" })
ThemeManager:SetLibrary(Library)
ThemeManager:SetFolder("Dig for Dinos")
local ConfigGroupbox = SettingsTab:AddLeftGroupbox("Configuration", "folder-cog")
ConfigGroupbox:AddInput("SaveManager_ConfigName", {
Text = "Config name",
Placeholder = "My Config",
})
ConfigGroupbox:AddButton("Create config", function()
local name = Library.Options.SaveManager_ConfigName.Value
if name:gsub(" ", "") == "" then
Library:Notify("Invalid config name (empty)", 2)
return
end
local success, err = SaveManager:Save(name)
if not success then
Library:Notify("Failed to create config: " .. err)
return
end
Library:Notify(string.format("Created config %q", name))
Library.Options.SaveManager_ConfigList:SetValues(SaveManager:RefreshConfigList())
Library.Options.SaveManager_ConfigList:SetValue(nil)
end)
ConfigGroupbox:AddDivider()
ConfigGroupbox:AddDropdown("SaveManager_ConfigList", {
Text = "Config list",
Values = SaveManager:RefreshConfigList(),
AllowNull = true,
})
ConfigGroupbox:AddButton("Load config", function()
local name = Library.Options.SaveManager_ConfigList.Value
local success, err = SaveManager:Load(name)
if not success then
Library:Notify("Failed to load config: " .. err)
return
end
Library:Notify(string.format("Loaded config %q", name))
end)
ConfigGroupbox:AddButton("Overwrite config", function()
local name = Library.Options.SaveManager_ConfigList.Value
local success, err = SaveManager:Save(name)
if not success then
Library:Notify("Failed to overwrite config: " .. err)
return
end
Library:Notify(string.format("Overwrote config %q", name))
end)
ConfigGroupbox:AddButton("Delete config", function()
local name = Library.Options.SaveManager_ConfigList.Value
local success, err = SaveManager:Delete(name)
if not success then
Library:Notify("Failed to delete config: " .. err)
return
end
Library:Notify(string.format("Deleted config %q", name))
Library.Options.SaveManager_ConfigList:SetValues(SaveManager:RefreshConfigList())
Library.Options.SaveManager_ConfigList:SetValue(nil)
end)
ConfigGroupbox:AddButton("Refresh list", function()
Library.Options.SaveManager_ConfigList:SetValues(SaveManager:RefreshConfigList())
Library.Options.SaveManager_ConfigList:SetValue(nil)
end)
local AutoloadLabel = ConfigGroupbox:AddLabel("Current autoload config: " .. SaveManager:GetAutoloadConfig(), true)
ConfigGroupbox:AddButton("Set as autoload", function()
local name = Library.Options.SaveManager_ConfigList.Value
local success, err = SaveManager:SaveAutoloadConfig(name)
if not success then
Library:Notify("Failed to set autoload config: " .. err)
return
end
Library:Notify(string.format("Set %q to auto load", name))
AutoloadLabel:SetText("Current autoload config: " .. name)
end)
ConfigGroupbox:AddButton("Reset autoload", function()
local success, err = SaveManager:DeleteAutoLoadConfig()
if not success then
Library:Notify("Failed to reset autoload config: " .. err)
return
end
Library:Notify("Set autoload to none")
AutoloadLabel:SetText("Current autoload config: none")
end)
local MenuGroup = SettingsTab:AddRightGroupbox("Menu", "wrench")
MenuGroup:AddLabel("Menu bind"):AddKeyPicker("MenuKeybind", {
Default = "RightControl",
NoUI = true,
Text = "Menu keybind",
})
MenuGroup:AddButton("Unload", function()
Library:Unload()
end)
SaveManager:SetIgnoreIndexes({ "SaveManager_ConfigList", "SaveManager_ConfigName", "MenuKeybind" })
Library.ToggleKeybind = Library.Options.MenuKeybind
ThemeManager:ApplyToTab(SettingsTab)
SaveManager:LoadAutoloadConfig()
Library:OnUnload(function()
getDinoBusy = false
getDinoGeneration += 1
for _, connection in ipairs(activeConnections) do
pcall(function()
connection:Disconnect()
end)
end
table.clear(activeConnections)
table.clear(dinoModels)
if type(getgenv) == "function" then
getgenv().UniverseLibrary = nil
end
print("Script desvinculado correctamente.")
end)
No comments yet. Be the first!