Studio

Предметы в руках: Tool, рюкзак и почему всё пропадает после смерти

Как сделать предмет, который берут в руки и которым пользуются: меч, фонарь, лейка. Разбираем Tool, Handle, Backpack и StarterGear — и почему без последнего инвентарь обнуляется на каждом респауне.

Средне 21 минута 6 шагов проверен 31 день назад

Что понадобится

Roblox Studio, понимание Script и LocalScript. Сохранение между сессиями — в отдельном гайде про DataStore.

Текст гайда «Предметы в руках: Tool, рюкзак и почему всё пропадает после смерти»

Содержание

Инвентарь в Roblox уже написан за тебя. Панель внизу экрана, выбор цифрами, перетаскивание — всё это работает из коробки, как только в рюкзаке игрока появляется объект Tool. Проблема новичков не в том, чтобы это включить, а в том, что предметы ведут себя не так, как ожидалось: пропадают, не берутся в руки или срабатывают у всех сразу.

Tool и обязательный Handle#

Tool — это контейнер. Сам по себе он невидим; видно то, что внутри. Одна деталь внутри должна называться ровно Handle — за неё персонаж и берётся. Имя чувствительно к регистру: handle не подойдёт.

Свойства Tool, которые нужны сразу
СвойствоЧто делает
RequiresHandleНужен ли Handle. Выключают только для предметов без модели
CanBeDroppedМожно ли выбросить клавишей Backspace
ToolTipПодсказка, которая всплывает над иконкой в панели
TextureIdИконка предмета в панели
GripКак предмет лежит в руке: сдвиг и поворот относительно ладони

Меч смотрит в землю

Если предмет держится за середину или торчит вбок — правится это свойством Grip, а не поворотом Handle. Крутить саму деталь бессмысленно: движок всё равно приложит её к ладони по Grip. Проще всего подобрать значение бесплатным плагином Grip Editor из библиотеки.

Где предмет лежит#

Три места, и путать их не стоит:

  • Workspace — предмет лежит в мире, его можно подобрать, подойдя вплотную
  • StarterPack — выдаётся каждому игроку при появлении, всегда и всем
  • Player.Backpack — текущий рюкзак конкретного игрока в этой жизни
  • Player.StarterGear — что вернуть игроку после смерти

Почему предмет пропадает после смерти#

Это не баг и не потеря данных. При возрождении Roblox очищает Backpack и заново наполняет его из двух мест: StarterPack (общий для всех) и StarterGear (личный). Если ты положил меч только в рюкзак, после смерти его там не будет — рюкзака больше нет.

Luau
local serverStorage = game:GetService("ServerStorage")

local function giveTool(player, toolName)
    local template = serverStorage:FindFirstChild(toolName)

    if not template then
        warn("Нет предмета " .. toolName .. " в ServerStorage")
        return
    end

    -- В рюкзак — чтобы предмет появился прямо сейчас.
    template:Clone().Parent = player.Backpack
    -- В StarterGear — чтобы он вернулся после следующей смерти.
    template:Clone().Parent = player.StarterGear
end

Между сессиями это всё равно не сохранится

StarterGear живёт, пока игрок в игре. Вышел и зашёл — рюкзак снова пуст. Чтобы предмет остался навсегда, список вещей нужно сохранять в DataStore и выдавать при входе. Как это делается — в гайде про сохранение прогресса.

Действия предмета#

У Tool три события, которые нужны почти всегда:

События Tool
СобытиеКогда срабатывает
EquippedПредмет взяли в руки
UnequippedУбрали обратно в рюкзак
ActivatedИгрок нажал (щелчок мышью или касание экрана)
Luau
local tool = script.Parent
local handle = tool:WaitForChild("Handle")
local light = handle:WaitForChild("SpotLight")

light.Enabled = false

tool.Activated:Connect(function()
    light.Enabled = not light.Enabled
end)

tool.Unequipped:Connect(function()
    light.Enabled = false -- убрал фонарь — свет гаснет
end)

Клиент или сервер#

Скрипт внутри Tool может быть и обычным, и локальным, и выбор здесь не вкусовой.

  • Script (сервер) — всё, что меняет мир и влияет на других: урон, выдача монет, открытие двери, поломка ящика
  • LocalScript (клиент) — всё, что видит и слышит только владелец: анимация замаха, прицел, звук в наушниках, подсветка цели
  • если действие нужно и там, и там — клиент показывает, сервер решает

Урон только на сервере

Если здоровье снимает LocalScript, эффект увидит только сам игрок — для всех остальных цель останется целой. А если такой скрипт всё-таки шлёт на сервер «я нанёс урон», его подделают в первый же день. Сервер принимает от клиента факт нажатия, а решение о попадании и уроне принимает сам.

Подобрать предмет с земли#

Лежащий в Workspace Tool подбирается сам, когда персонаж его касается, — отдельный код не нужен. Проблема в том, что случайное касание при пробежке мимо тоже считается. Если предметы должны подбираться намеренно, положи их в ServerStorage, а в мире оставь деталь с ProximityPrompt: нажал — сервер выдал копию.

Что обычно ломается#

Симптом и причина
Что видишьСкорее всего
Предмет в панели, но в руках ничего нетДеталь внутри названа не Handle
Персонаж держит предмет бокомНе настроен Grip
После смерти рюкзак пустПредмет клали только в Backpack, без StarterGear
Действие работает у одного, не видно у другихЛогика лежит в LocalScript
Предмет подбирается сам при пробежкеОн лежит в Workspace — используй ProximityPrompt
Handle проваливается сквозь полДеталь не закреплена и не привязана к Tool правильно

Когда предмет лежит в руке правильно, следующий шаг — замах, удар или бросок: как это делается, разобрано в гайде про анимации персонажа.

Пошагово

6 шагов
  1. 1

    Создай Tool

    В Explorer добавь Tool, внутрь положи деталь и назови её ровно Handle.

  2. 2

    Настрой вид

    Задай ToolTip, поставь иконку в TextureId и подгони Grip, чтобы предмет лежал в руке правильно.

    Проверяй Grip не в редакторе, а в запущенной игре — там видно настоящую позу.

  3. 3

    Положи в StarterPack

    Перетащи Tool в StarterPack и нажми Play: предмет должен появиться в панели внизу.

  4. 4

    Добавь действие

    Вложи в Tool скрипт и подпишись на Activated. Сервер — для урона и мира, клиент — для звука и анимации.

  5. 5

    Переживи смерть

    Если предмет выдаётся по ходу игры, клади копию и в Backpack, и в StarterGear. Проверь: убей персонажа и посмотри, вернулся ли предмет.

  6. 6

    Проверь вдвоём

    Запусти тест на двух игроков и убедись, что действие видят оба, если оно должно быть общим, и только один — если личное.

Реклама · игра в Telegram Moki Blast — шарики, боссы и дуэли в Telegram Надуй щёки Моки и собери три шара одного цвета Шесть миров: от руин до Золотого города Король обезьян ждёт на 120-м уровне Дуэли с живыми игроками и турниры Играть в Telegram

Обсуждение

Пиши по делу и без личных данных. Ссылки на сторонние сайты, обмен и «бесплатные робуксы» мы скрываем — почему.

Комментарии пишут те, кто вошёл — так спокойнее всем.

Войти

Пока никто ничего не написал. Будь первым.