Скрипт: простой инвентарь на сервере
Инвентарь живёт на сервере: клиент только просит показать содержимое и использовать предмет. Список допустимых предметов задан на сервере, поэтому «выдать себе меч» не получится.
Куда положить
ServerScriptService, тип объекта Script
Что должно быть в проекте
- В ReplicatedStorage RemoteEvent с именем InventoryUse
- В ReplicatedStorage RemoteEvent с именем InventoryChanged
Код
local Players = game:GetService("Players")local ReplicatedStorage = game:GetService("ReplicatedStorage")local useEvent = ReplicatedStorage:WaitForChild("InventoryUse")local changedEvent = ReplicatedStorage:WaitForChild("InventoryChanged")local ITEMS = {potion = { title = "Зелье", heal = 30 },apple = { title = "Яблоко", heal = 10 },}local MAX_SLOTS = 12local bags = {}local function give(player, itemName: string): booleanlocal bag = bags[player.UserId]if not bag or not ITEMS[itemName] or #bag >= MAX_SLOTS thenreturn falseendtable.insert(bag, itemName)changedEvent:FireClient(player, bag)return trueenduseEvent.OnServerEvent:Connect(function(player, slot)if typeof(slot) ~= "number" thenreturnendlocal bag = bags[player.UserId]local itemName = bag and bag[slot]local item = itemName and ITEMS[itemName]if not item thenreturnendlocal character = player.Characterlocal humanoid = character and character:FindFirstChildOfClass("Humanoid")if not humanoid or humanoid.Health <= 0 thenreturnendhumanoid.Health = math.min(humanoid.MaxHealth, humanoid.Health + item.heal)table.remove(bag, slot)changedEvent:FireClient(player, bag)end)Players.PlayerAdded:Connect(function(player)bags[player.UserId] = {}end)Players.PlayerRemoving:Connect(function(player)bags[player.UserId] = nilend)return { give = give }
Клиент присылает только номер слота. Что в этом слоте лежит и что оно делает — знает сервер.
На что обратить внимание
- Список ITEMS — то, что меняют под свою игру; предмета нет в списке — выдать его нельзя
- Инвентарь стоит сохранять вместе с остальным прогрессом через DataStore
- Показывать содержимое удобно тем же интерфейсом, что в заготовке про UI