Предметы в руках: Tool, рюкзак и почему всё пропадает после смерти
Как сделать предмет, который берут в руки и которым пользуются: меч, фонарь, лейка. Разбираем Tool, Handle, Backpack и StarterGear — и почему без последнего инвентарь обнуляется на каждом респауне.
Средне 21 минута 6 шагов проверен 31 день назад
Что понадобится
Roblox Studio, понимание Script и LocalScript. Сохранение между сессиями — в отдельном гайде про DataStore.
Текст гайда «Предметы в руках: Tool, рюкзак и почему всё пропадает после смерти»
Содержание
Инвентарь в Roblox уже написан за тебя. Панель внизу экрана, выбор цифрами, перетаскивание — всё это работает из коробки, как только в рюкзаке игрока появляется объект Tool. Проблема новичков не в том, чтобы это включить, а в том, что предметы ведут себя не так, как ожидалось: пропадают, не берутся в руки или срабатывают у всех сразу.
Tool и обязательный Handle#
Tool — это контейнер. Сам по себе он невидим; видно то, что внутри. Одна деталь внутри должна называться ровно Handle — за неё персонаж и берётся. Имя чувствительно к регистру: handle не подойдёт.
| Свойство | Что делает |
|---|---|
RequiresHandle | Нужен ли Handle. Выключают только для предметов без модели |
CanBeDropped | Можно ли выбросить клавишей Backspace |
ToolTip | Подсказка, которая всплывает над иконкой в панели |
TextureId | Иконка предмета в панели |
Grip | Как предмет лежит в руке: сдвиг и поворот относительно ладони |
Меч смотрит в землю
Если предмет держится за середину или торчит вбок — правится это свойством Grip, а не поворотом Handle. Крутить саму деталь бессмысленно: движок всё равно приложит её к ладони по Grip. Проще всего подобрать значение бесплатным плагином Grip Editor из библиотеки.
Где предмет лежит#
Три места, и путать их не стоит:
Workspace— предмет лежит в мире, его можно подобрать, подойдя вплотнуюStarterPack— выдаётся каждому игроку при появлении, всегда и всемPlayer.Backpack— текущий рюкзак конкретного игрока в этой жизниPlayer.StarterGear— что вернуть игроку после смерти
Почему предмет пропадает после смерти#
Это не баг и не потеря данных. При возрождении Roblox очищает Backpack и заново наполняет его из двух мест: StarterPack (общий для всех) и StarterGear (личный). Если ты положил меч только в рюкзак, после смерти его там не будет — рюкзака больше нет.
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 три события, которые нужны почти всегда:
| Событие | Когда срабатывает |
|---|---|
Equipped | Предмет взяли в руки |
Unequipped | Убрали обратно в рюкзак |
Activated | Игрок нажал (щелчок мышью или касание экрана) |
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
Создай Tool
В Explorer добавь
Tool, внутрь положи деталь и назови её ровноHandle. -
2
Настрой вид
Задай
ToolTip, поставь иконку вTextureIdи подгониGrip, чтобы предмет лежал в руке правильно.Проверяй Grip не в редакторе, а в запущенной игре — там видно настоящую позу.
-
3
Положи в StarterPack
Перетащи
ToolвStarterPackи нажми Play: предмет должен появиться в панели внизу. -
4
Добавь действие
Вложи в
Toolскрипт и подпишись наActivated. Сервер — для урона и мира, клиент — для звука и анимации. -
5
Переживи смерть
Если предмет выдаётся по ходу игры, клади копию и в
Backpack, и вStarterGear. Проверь: убей персонажа и посмотри, вернулся ли предмет. -
6
Проверь вдвоём
Запусти тест на двух игроков и убедись, что действие видят оба, если оно должно быть общим, и только один — если личное.

Обсуждение
Пиши по делу и без личных данных. Ссылки на сторонние сайты, обмен и «бесплатные робуксы» мы скрываем — почему.
Комментарии пишут те, кто вошёл — так спокойнее всем.
ВойтиПока никто ничего не написал. Будь первым.