Tool saver GUI
Key RequiredUniversal

Tool saver GUI

Universal ScriptHaidarEXEHaidarEXE 5.6K views 71 executesUpdated Mar 28, 2025
5.0/ 5(4 votes)
40100% Positive
Lua Script•256 lines (8099 chars)
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local UserInputService = game:GetService("UserInputService")

local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local backpack = player:WaitForChild("Backpack")

-- Create a folder to store our saved tools (persists through respawns)
local toolStorage = Instance.new("Folder")
toolStorage.Name = "HaidarEXE_ToolStorage"
toolStorage.Parent = ReplicatedStorage

-- GUI Setup
local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "ToolCopyGUI"
ScreenGui.ResetOnSpawn = false -- This keeps the GUI after respawning
ScreenGui.Parent = player:WaitForChild("PlayerGui")

local MainFrame = Instance.new("Frame")
local TitleLabel = Instance.new("TextLabel")
local MinimizeButton = Instance.new("TextButton")
local RestoreButton = Instance.new("TextButton")
local CopyButton = Instance.new("TextButton")
local PasteButton = Instance.new("TextButton")
local StatusLabel = Instance.new("TextLabel")

-- Main Frame (230x180 with rounded corners)
MainFrame.Name = "MainFrame"
MainFrame.Size = UDim2.new(0, 230, 0, 180)
MainFrame.Position = UDim2.new(0, 15, 0, 15)
MainFrame.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
MainFrame.BackgroundTransparency = 0.1
MainFrame.BorderSizePixel = 0
MainFrame.Parent = ScreenGui
MainFrame.Active = true

-- Add rounded corners
local corner = Instance.new("UICorner")
corner.CornerRadius = UDim.new(0, 8)
corner.Parent = MainFrame

-- Title Label
TitleLabel.Name = "TitleLabel"
TitleLabel.Size = UDim2.new(1, -40, 0, 20)
TitleLabel.Position = UDim2.new(0, 10, 0, 8)
TitleLabel.Text = "Tool Copy GUI BY HaidarEXE"
TitleLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
TitleLabel.BackgroundTransparency = 1
TitleLabel.Font = Enum.Font.SourceSansBold
TitleLabel.TextSize = 15
TitleLabel.TextXAlignment = Enum.TextXAlignment.Left
TitleLabel.Parent = MainFrame

-- Minimize Button (-)
MinimizeButton.Name = "MinimizeButton"
MinimizeButton.Size = UDim2.new(0, 25, 0, 25)
MinimizeButton.Position = UDim2.new(1, -30, 0, 5)
MinimizeButton.Text = "-"
MinimizeButton.TextColor3 = Color3.fromRGB(255, 255, 255)
MinimizeButton.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
MinimizeButton.BorderSizePixel = 0
MinimizeButton.Parent = MainFrame

-- Copy Button
CopyButton.Name = "CopyButton"
CopyButton.Size = UDim2.new(1, -20, 0, 35)
CopyButton.Position = UDim2.new(0, 10, 0, 40)
CopyButton.Text = "Copy Current Tool"
CopyButton.TextColor3 = Color3.fromRGB(255, 255, 255)
CopyButton.BackgroundColor3 = Color3.fromRGB(80, 80, 80)
CopyButton.BorderSizePixel = 0
CopyButton.Parent = MainFrame

-- Paste Button
PasteButton.Name = "PasteButton"
PasteButton.Size = UDim2.new(1, -20, 0, 35)
PasteButton.Position = UDim2.new(0, 10, 0, 85)
PasteButton.Text = "Paste Saved Tool"
PasteButton.TextColor3 = Color3.fromRGB(255, 255, 255)
PasteButton.BackgroundColor3 = Color3.fromRGB(80, 80, 80)
PasteButton.BorderSizePixel = 0
PasteButton.Parent = MainFrame

-- Status Label
StatusLabel.Name = "StatusLabel"
StatusLabel.Size = UDim2.new(1, -20, 0, 20)
StatusLabel.Position = UDim2.new(0, 10, 0, 130)
StatusLabel.Text = ""
StatusLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
StatusLabel.TextSize = 12
StatusLabel.BackgroundTransparency = 1
StatusLabel.Parent = MainFrame

-- Restore Button
RestoreButton.Name = "RestoreButton"
RestoreButton.Size = UDim2.new(0, 45, 0, 45)
RestoreButton.Position = UDim2.new(0, 15, 0, 15)
RestoreButton.Text = "+"
RestoreButton.TextColor3 = Color3.fromRGB(255, 255, 255)
RestoreButton.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
RestoreButton.BorderSizePixel = 0
RestoreButton.Visible = false
RestoreButton.Parent = ScreenGui

-- Add rounded corners to all elements
local function addCorners(instance, radius)
    local corner = Instance.new("UICorner")
    corner.CornerRadius = UDim.new(0, radius or 6)
    corner.Parent = instance
end

addCorners(CopyButton, 8)
addCorners(PasteButton, 8)
addCorners(MinimizeButton)
addCorners(RestoreButton, 8)

-- Handle character respawns
player.CharacterAdded:Connect(function(newChar)
    character = newChar
    backpack = player:WaitForChild("Backpack")
end)

-- Function to save the currently held tool
local function copyCurrentTool()
    -- Clear old saved tools
    for _, child in ipairs(toolStorage:GetChildren()) do
        child:Destroy()
    end

    -- Check if character exists and has tools
    if not character then
        StatusLabel.Text = "Character not found!"
        task.delay(2, function() StatusLabel.Text = "" end)
        return
    end

    -- Find all tools in character (including equipped ones)
    local tools = {}
    for _, item in ipairs(character:GetDescendants()) do
        if item:IsA("Tool") then
            table.insert(tools, item)
        end
    end

    -- Also check backpack
    for _, item in ipairs(backpack:GetChildren()) do
        if item:IsA("Tool") then
            table.insert(tools, item)
        end
    end

    if #tools == 0 then
        StatusLabel.Text = "No tools found!"
        task.delay(2, function() StatusLabel.Text = "" end)
        return
    end

    -- Try to find the equipped tool first
    local humanoid = character:FindFirstChildOfClass("Humanoid")
    local equippedTool = humanoid and humanoid:FindFirstChildOfClass("Tool")

    -- If no equipped tool, use the first tool found
    local toolToCopy = equippedTool or tools[1]

    -- Clone the tool to storage
    local savedTool = toolToCopy:Clone()
    savedTool.Parent = toolStorage
    if savedTool:FindFirstChild("Handle") then
        savedTool.Handle.Anchored = true
        savedTool.Handle.CanCollide = false
    end

    StatusLabel.Text = "Copied: "..toolToCopy.Name
    task.delay(2, function() StatusLabel.Text = "" end)
end

-- Function to paste the saved tool
local function pasteSavedTool()
    -- Check if we have a saved tool
    local savedTool = toolStorage:FindFirstChildOfClass("Tool")
    if not savedTool then
        StatusLabel.Text = "No tool copied yet!"
        task.delay(2, function() StatusLabel.Text = "" end)
        return
    end

    -- Create a new copy of the tool
    local newTool = savedTool:Clone()
    if newTool:FindFirstChild("Handle") then
        newTool.Handle.Anchored = false
        newTool.Handle.CanCollide = true
    end
    newTool.Parent = backpack

    StatusLabel.Text = "Pasted: "..savedTool.Name
    task.delay(2, function() StatusLabel.Text = "" end)
end

-- Button connections
CopyButton.MouseButton1Click:Connect(copyCurrentTool)
PasteButton.MouseButton1Click:Connect(pasteSavedTool)

-- Dragging Function
local function makeDraggable(gui)
    local dragging
    local dragInput
    local dragStart
    local startPos

    local function update(input)
        local delta = input.Position - dragStart
        gui.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
    end

    gui.InputBegan:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1 then
            dragging = true
            dragStart = input.Position
            startPos = gui.Position
            
            input.Changed:Connect(function()
                if input.UserInputState == Enum.UserInputState.End then
                    dragging = false
                end
            end)
        end
    end)

    gui.InputChanged:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseMovement then
            dragInput = input
        end
    end)

    UserInputService.InputChanged:Connect(function(input)
        if input == dragInput and dragging then
            update(input)
        end
    end)
end

-- Make both frames draggable
makeDraggable(MainFrame)
makeDraggable(RestoreButton)

-- Minimize/Restore functionality
MinimizeButton.MouseButton1Click:Connect(function()
    MainFrame.Visible = false
    RestoreButton.Visible = true
end)

RestoreButton.MouseButton1Click:Connect(function()
    MainFrame.Visible = true
    RestoreButton.Visible = false
end)

Features & Information

Save tools you are holding then give it to you, Idk if it was FE or not

Community Comments (1)

HaidarEXEHaidarEXEMar 28, 2025

Bruh script blox errory 404

More Scripts for Universal Scripts