Auto Farm Dinos based on Rarity script OP
Dig for Dinos Keyless
Auto Farm Dinos based on Rarity script OP
๐Ÿ‘ค alexriderr ๐Ÿ‘ 8 views โค๏ธ 0 likes โฑ Jul 28, 2026
This keyless script helps you locate the best dinosaurs by identifying them based on their rarity, making it much easier to find valuable dinos during gameplay. It also includes World Teleport functionality, allowing you to quickly travel between different areas without manually exploring each location
โœจ Features
Find Dinos Auto Rebirth Teleport to Claim Dinos Force Reset Walk Speed World Teleport
๐Ÿ“‹ Script Code
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 <= 20 then
                result = true
                break
            end
        end
        RunService.Heartbeat:Wait()
    end
    releaseGround(lastHumanoid)
    return result
end

local function teleportTo(zone, silent)
    local target = Teleports[zone]
    if not target then
        return false
    end
    local success = pivotTo(target)
    if not silent then
        if success then
            Library:Notify("Teleported to " .. zone, 2)
        else
            Library:Notify("Character unavailable", 2)
        end
    end
    return success
end

local function teleportClaimDinos(silent)
    local success = pivotTo(ClaimDinosCFrame)
    if success then
        local deadline = os.clock() + 0.3
        while os.clock()  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 <= 18
    end
    if not silent then
        if success then
            Library:Notify("Teleported to Claim Dinos", 2)
        else
            Library:Notify("Claim teleport failed", 2)
        end
    end
    return success
end

local resetting = false

local function forceReset()
    if resetting then
        return false
    end
    resetting = true
    local _, root, humanoid = getCharacterParts()
    if root then
        pcall(function()
            root.Anchored = false
            root.AssemblyLinearVelocity = Vector3.zero
            root.AssemblyAngularVelocity = Vector3.zero
        end)
    end
    releaseGround(humanoid)
    local character = LocalPlayer.Character
    if character then
        pcall(function()
            local currentHumanoid = character:FindFirstChildOfClass("Humanoid")
            if currentHumanoid then
                currentHumanoid:SetStateEnabled(Enum.HumanoidStateType.Dead, true)
                currentHumanoid.Health = 0
                currentHumanoid:ChangeState(Enum.HumanoidStateType.Dead)
            end
        end)
        local deadline = os.clock() + 8
        while LocalPlayer.Character == character and os.clock() < deadline do
            RunService.Heartbeat:Wait()
        end
    end
    local deadline = os.clock() + 8
    while os.clock() < deadline do
        if getCharacterParts() then
            break
        end
        RunService.Heartbeat:Wait()
    end
    resetting = false
    return getCharacterParts() ~= nil
end

local WorldsLeft = MainTab:AddLeftTabbox()
local WorldsRight = MainTab:AddRightTabbox()

for index, world in ipairs(Worlds) do
    local box = index <= 4 and WorldsLeft or WorldsRight
    local subTab = box:AddTab(world.name)
    for _, zone in ipairs(world.zones) do
        local zoneName = zone[1]
        subTab:AddButton(zoneName, function()
            teleportTo(zoneName)
        end)
    end
end

local UtilityGroup = MainTab:AddRightGroupbox("Utility", "move")
UtilityGroup:AddButton("TP to Claim Dinos", function()
    teleportClaimDinos()
end)

local walkSpeedEnabled = false
local walkSpeedValue = 45
local defaultWalkSpeed

local function setWalkSpeed(value)
    local _, _, humanoid = getCharacterParts()
    if humanoid then
        humanoid.WalkSpeed = value
    end
end

trackConnection(RunService.Heartbeat:Connect(function()
    if walkSpeedEnabled then
        setWalkSpeed(walkSpeedValue)
    end
end))

local MovementGroup = MainTab:AddRightGroupbox("Movement", "gauge")
MovementGroup:AddToggle("WalkSpeedEnabled", {
    Text = "WalkSpeed",
    Default = false,
    Callback = function(value)
        walkSpeedEnabled = value
        if value then
            local _, _, humanoid = getCharacterParts()
            if humanoid and not defaultWalkSpeed then
                defaultWalkSpeed = humanoid.WalkSpeed
            end
            setWalkSpeed(walkSpeedValue)
        else
            setWalkSpeed(defaultWalkSpeed or 16)
            defaultWalkSpeed = nil
        end
    end,
})
MovementGroup:AddSlider("WalkSpeedValue", {
    Text = "Speed",
    Default = 45,
    Min = 25,
    Max = 125,
    Rounding = 0,
    Callback = function(value)
        walkSpeedValue = value
        if walkSpeedEnabled then
            setWalkSpeed(walkSpeedValue)
        end
    end,
})

local firePrompt = fireproximityprompt
local selectedZone = ZoneNames[1]
local getDinoBusy = false
local getDinoGeneration = 0
local getDinoTeleportDelay = 0.12
local lastGetDinoTeleport = -math.huge
local cachedLocalStates

local moneySuffixes = { "", "k", "m", "b", "t", "q", "qi", "sx", "sp", "oc", "no", "dc" }

local function abbreviateNumber(value)
    local number = tonumber(value)
    if not number then
        return tostring(value)
    end
    local negative = number = 1000 and index < #moneySuffixes do
        number = number / 1000
        index += 1
    end
    local text
    if index == 1 then
        text = tostring(math.floor(number + 0.5))
    else
        text = (string.format("%.2f", number):gsub("%.?0+$", ""))
    end
    return (negative and "-" or "") .. text .. moneySuffixes[index]
end

local function actionActive(generation)
    return getDinoBusy and generation == getDinoGeneration
end

local function waitAction(seconds, generation)
    local deadline = os.clock() + seconds
    while os.clock() < deadline do
        if not actionActive(generation) then
            return false
        end
        task.wait(math.min(0.04, deadline - os.clock()))
    end
    return actionActive(generation)
end

local function waitForActionCharacter(generation, timeout)
    local deadline = os.clock() + timeout
    while actionActive(generation) and os.clock()  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()  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()  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)
๐ŸŽฎ Similar Scripts
๐Ÿ’ฌ Comments (0)
Login to post a comment
No comments yet. Be the first!
Script Info
Game Dig for Dinos
TypeKeyless
Authoralexriderr
Views8
Likes0
PublishedJul 28, 2026
๐ŸŽฎ Play Game on Roblox
๐Ÿ• Recent Scripts
Naval Warfare script
Naval Warfare script
Naval Warfare โ€ข ๐Ÿ‘ 1
Keyless
PhantomHub MM2 KEYLESS OP
PhantomHub MM2 KEYLESS OP
Murder Mystery 2 โ€ข ๐Ÿ‘ 3
Keyless
Forsaken Auto Block V2 | OpenSource
Forsaken Auto Block V2 | OpenSource
Forsaken โ€ข ๐Ÿ‘ 6
Keyless
Butterfly Legends script keyless
Butterfly Legends script keyless
Butterfly Legends โ€ข ๐Ÿ‘ 5
Keyless
Claw Fishing script keyless OP
Claw Fishing script keyless OP
Claw Fishing โ€ข ๐Ÿ‘ 6
Keyless