Roblox · Интерфейсы
Свой хотбар вместо стандартного рюкзака: 9 ячеек внизу экрана с картинками предметов и номерами. 1–9 или клик — взять, ещё раз — убрать. Предмет в руке подсвечен.
Синим — что нужно создать.
StarterGui └─ HotbarGui (ScreenGui) — ResetOnSpawn выкл. ├─ Bar (Frame) — UIListLayout горизонтальный │ └─ Sample (TextButton) — шаблон, Visible выкл. │ ├─ Icon (ImageLabel) │ ├─ ToolName (TextLabel) — имя, если нет картинки │ └─ Key (TextLabel) — номер └─ HotbarLocal (LocalScript) StarterPack └─ Меч, Факел, Яблоко (Tool) — для проверки
Где: StarterGui → HotbarGui · LocalScript
Зачем: Хотбар на 9 ячеек.
-- игроки
local Players = game:GetService("Players")
-- стандартный интерфейс
local StarterGui = game:GetService("StarterGui")
-- клавиатура
local UIS = game:GetService("UserInputService")
-- этот игрок
local player = Players.LocalPlayer
-- полоса ячеек
local bar = script.Parent:WaitForChild("Bar")
-- шаблон ячейки
local sample = bar:WaitForChild("Sample")
-- ячеек
local SLOTS = 9
-- клавиши 1–9
local KEYS = {Enum.KeyCode.One, Enum.KeyCode.Two, Enum.KeyCode.Three, Enum.KeyCode.Four, Enum.KeyCode.Five, Enum.KeyCode.Six, Enum.KeyCode.Seven, Enum.KeyCode.Eight, Enum.KeyCode.Nine}
-- обычная ячейка
local NORMAL = Color3.fromRGB(40, 40, 50)
-- предмет в руке
local EQUIPPED = Color3.fromRGB(80, 160, 255)
-- инструменты в порядке получения
local order = {}
-- ячейки
local slots = {}
-- прячем стандартный рюкзак Roblox
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.Backpack, false)
-- создаём ячейки
for i = 1, SLOTS do
-- копия шаблона
local slot = sample:Clone()
-- имя
slot.Name = "Slot" .. i
-- по порядку
slot.LayoutOrder = i
-- номер клавиши
slot.Key.Text = tostring(i)
-- шаблон был скрыт
slot.Visible = true
-- в полосу
slot.Parent = bar
-- запоминаем
slots[i] = slot
-- конец цикла
end
-- обновить список инструментов
local function Collect()
-- что есть сейчас
local current = {}
-- рюкзак и руки
for _, holder in ipairs({player:FindFirstChildOfClass("Backpack"), player.Character}) do
-- есть
if holder then
-- всё внутри
for _, tool in ipairs(holder:GetChildren()) do
-- инструменты
if tool:IsA("Tool") then current[tool] = true end
-- конец перебора
end
-- конец проверки
end
-- конец перебора
end
-- с конца списка
for i = #order, 1, -1 do
-- пропавшие убираем
if not current[order[i]] then table.remove(order, i) end
-- конец цикла
end
-- все текущие
for tool in pairs(current) do
-- новые — в конец
if not table.find(order, tool) then table.insert(order, tool) end
-- конец перебора
end
-- конец функции
end
-- перерисовать ячейки
local function Refresh()
-- актуальный список
Collect()
-- персонаж
local character = player.Character
-- каждая ячейка
for i, slot in ipairs(slots) do
-- её инструмент
local tool = order[i]
-- картинка (TextureId у Tool)
slot.Icon.Image = tool and tool.TextureId or ""
-- нет картинки — пишем имя
slot.ToolName.Text = (tool and tool.TextureId == "") and tool.Name or ""
-- в руке — подсветка
slot.BackgroundColor3 = (tool and tool.Parent == character) and EQUIPPED or NORMAL
-- пустая — бледнее
slot.BackgroundTransparency = tool and 0.1 or 0.5
-- конец перебора
end
-- конец функции
end
-- взять или убрать предмет из ячейки i
local function Toggle(i)
-- инструмент
local tool = order[i]
-- персонаж
local character = player.Character
-- Humanoid
local humanoid = character and character:FindFirstChildOfClass("Humanoid")
-- пусто или погиб
if not tool or not humanoid or humanoid.Health <= 0 then return end
-- уже в руке
if tool.Parent == character then
-- убираем
humanoid:UnequipTools()
-- в рюкзаке
else
-- берём
humanoid:EquipTool(tool)
-- конец проверки
end
-- конец функции
end
-- каждая ячейка
for i, slot in ipairs(slots) do
-- клик или касание
slot.Activated:Connect(function() Toggle(i) end)
-- конец перебора
end
-- нажали клавишу
UIS.InputBegan:Connect(function(input, processed)
-- печатаем в чате
if processed then return end
-- это 1–9?
local i = table.find(KEYS, input.KeyCode)
-- ячейка с этим номером
if i then Toggle(i) end
-- конец функции
end)
-- следим за рюкзаком или персонажем
local function Watch(holder)
-- появился предмет
holder.ChildAdded:Connect(Refresh)
-- пропал предмет
holder.ChildRemoved:Connect(Refresh)
-- сразу
Refresh()
-- конец функции
end
-- новый рюкзак (после возрождения)
player.ChildAdded:Connect(function(child)
-- следим
if child:IsA("Backpack") then Watch(child) end
-- конец функции
end)
-- новый персонаж
player.CharacterAdded:Connect(Watch)
-- рюкзак уже есть
if player:FindFirstChildOfClass("Backpack") then Watch(player:FindFirstChildOfClass("Backpack")) end
-- персонаж уже есть
if player.Character then Watch(player.Character) endЗапусти Play (или Run) и убедись: