Загрузка данных


local Players = game:GetService("Players")
local StarterPack = game:GetService("StarterPack")
local TOOL_NAME = "Stunt"
-- создаём инструмент
local template = StarterPack:FindFirstChild(TOOL_NAME)
if not template then
    template = Instance.new("Tool")
    template.Name = TOOL_NAME
    template.RequiresHandle = true
    template.CanBeDropped = false
    local handle = Instance.new("Part")
    handle.Name = "Handle"
    handle.Size = Vector3.new(0.3, 0.3, 0.3)
    handle.Transparency = 1
    handle.CanCollide = false
    handle.Parent = template
    template.Parent = StarterPack
end
local function createScooter(player)
    local character = player.Character
    if not character then return end
    local humanoid = character:FindFirstChildOfClass("Humanoid")
    local hrp = character:FindFirstChild("HumanoidRootPart")
    if not humanoid or not hrp or humanoid.Health <= 0 then
        return
    end
    -- не создаём несколько самокатов одновременно
    local existing = workspace:FindFirstChild("Stunt_" .. player.UserId)
    if existing then
        existing:Destroy()
    end
    local model = Instance.new("Model")
    model.Name = "Stunt_" .. player.UserId
    local function makePart(name, size, offset, color, material, shape)
        local part = Instance.new("Part")
        part.Name = name
        part.Size = size
        part.Color = color
        part.Material = material or Enum.Material.Metal
        part.Shape = shape or Enum.PartType.Block
        part.Anchored = false
        part.CanCollide = false
        part.Position = hrp.Position + offset
        part.Parent = model
        return part
    end
    local black = Color3.fromRGB(25, 25, 30)
    local cyan = Color3.fromRGB(0, 200, 255)
    local deck = makePart(
        "Deck",
        Vector3.new(3, 0.18, 0.5),
        Vector3.new(0, -2, 0),
        black
    )
    model.PrimaryPart = deck
    local function weld(part)
        local constraint = Instance.new("WeldConstraint")
        constraint.Part0 = deck
        constraint.Part1 = part
        constraint.Parent = deck
    end
    local frontWheel = makePart(
        "FrontWheel",
        Vector3.new(0.65, 0.65, 0.25),
        Vector3.new(1.15, -2.18, 0),
        black,
        Enum.Material.Rubber,
        Enum.PartType.Cylinder
    )
    frontWheel.Orientation = Vector3.new(0, 0, 90)
    weld(frontWheel)
    local rearWheel = makePart(
        "RearWheel",
        Vector3.new(0.65, 0.65, 0.25),
        Vector3.new(-1.15, -2.18, 0),
        black,
        Enum.Material.Rubber,
        Enum.PartType.Cylinder
    )
    rearWheel.Orientation = Vector3.new(0, 0, 90)
    weld(rearWheel)
    local fork = makePart(
        "Fork",
        Vector3.new(0.12, 0.8, 0.12),
        Vector3.new(1.15, -1.55, 0),
        cyan
    )
    weld(fork)
    local stem = makePart(
        "Stem",
        Vector3.new(0.13, 1.5, 0.13),
        Vector3.new(1.15, -0.75, 0),
        black
    )
    weld(stem)
    local bar = makePart(
        "Handlebar",
        Vector3.new(1.5, 0.12, 0.12),
        Vector3.new(1.15, 0, 0),
        cyan
    )
    weld(bar)
    local stripe = makePart(
        "DeckStripe",
        Vector3.new(2.2, 0.025, 0.35),
        Vector3.new(0, -1.89, 0),
        cyan
    )
    weld(stripe)
    -- сиденье для управления
    local seat = Instance.new("VehicleSeat")
    seat.Name = "RideSeat"
    seat.Size = Vector3.new(1, 0.25, 0.7)
    seat.Transparency = 1
    seat.CanCollide = false
    seat.Anchored = false
    seat.CFrame = deck.CFrame * CFrame.new(0, 0.65, 0)
    seat.Parent = model
    weld(seat)
    -- размещаем самокат перед игроком
    local spawnCFrame = hrp.CFrame * CFrame.new(0, 0, -4)
    model:PivotTo(CFrame.new(
        spawnCFrame.Position.X,
        math.max(spawnCFrame.Position.Y, 3),
        spawnCFrame.Position.Z
    ))
    model.Parent = workspace
    -- пытаемся посадить игрока на самокат
    task.wait(0.2)
    if humanoid.Parent and seat.Parent then
        seat:Sit(humanoid)
    end
end
local function connectTool(tool)
    if not tool:IsA("Tool") or tool.Name ~= TOOL_NAME then
        return
    end
    if tool:GetAttribute("StuntConnected") then
        return
    end
    tool:SetAttribute("StuntConnected", true)
    tool.Activated:Connect(function()
        local character = tool.Parent
        local player = Players:GetPlayerFromCharacter(character)
        if player then
            createScooter(player)
        end
    end)
end
local function setupPlayer(player)
    local backpack = player:WaitForChild("Backpack")
    backpack.ChildAdded:Connect(connectTool)
    for _, item in ipairs(backpack:GetChildren()) do
        connectTool(item)
    end
    player.CharacterAdded:Connect(function()
        task.wait(1)
        for _, item in ipairs(backpack:GetChildren()) do
            connectTool(item)
        end
    end)
end
-- подключаем игроков
Players.PlayerAdded:Connect(setupPlayer)
for _, player in ipairs(Players:GetPlayers()) do
    task.spawn(setupPlayer, player)
end