Тип скрипта определяет, где выполняется код и к каким данным он имеет доступ. Правильное размещение помогает избежать ситуации, когда код выглядит корректно, но не запускается.
Чем отличаются Script, LocalScript и ModuleScript
| Тип | Где выполняется | Типичные задачи |
|---|---|---|
Script | На сервере | Правила раунда, награды, общая игровая логика |
LocalScript | На клиенте игрока | Интерфейс, камера, локальный ввод и эффекты |
ModuleScript | Там, где его вызвали | Переиспользуемые функции, конфигурации и классы |
Сервер должен оставаться источником истины для важных игровых данных. Клиент отвечает за персональное представление и ввод, но его данные нельзя принимать без проверки.
Где размещать Script в Roblox
Серверные скрипты обычно хранят в ServerScriptService. Объекты из этого контейнера не передаются клиентам, поэтому здесь удобно держать логику раундов, выдачу предметов и проверку запросов.
Script также может работать внутри некоторых объектов мира, но централизованное размещение упрощает навигацию по проекту.
-- ServerScriptService/Round.server.lua
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local roundState = ReplicatedStorage:WaitForChild("RoundState")
roundState.Value = "Preparing"
Где размещать LocalScript в Roblox
LocalScript запускается только в поддерживаемых клиентских контейнерах. Чаще всего это:
StarterPlayerScriptsдля общей клиентской логики;StarterCharacterScriptsдля поведения персонажа;StarterGuiдля интерфейса;StarterPackдля инструментов игрока.
LocalScript для интерфейса и ввода
Кнопка интерфейса должна обрабатываться на клиенте, потому что каждый игрок видит собственный экземпляр GUI.
-- StarterGui/Shop/BuyButton/Handler.client.lua
local button = script.Parent
button.Activated:Connect(function()
print("Кнопка нажата")
end)
Если после нажатия требуется изменить важные серверные данные, клиент отправляет запрос, а сервер самостоятельно проверяет условия операции.
Где размещать и как использовать ModuleScript
Модуль возвращает значение через return. Чаще всего это таблица с функциями или конфигурацией.
local NumberUtils = {}
function NumberUtils.round(value)
return math.floor(value + 0.5)
end
return NumberUtils
Модули, нужные и серверу, и клиенту, можно хранить в ReplicatedStorage. Серверные модули с закрытой логикой лучше оставить в ServerScriptService или ServerStorage.
Как выбрать тип скрипта Roblox
- Логика влияет на всех игроков или на важные данные — используйте
Script. - Поведение относится к интерфейсу, камере или локальному вводу — используйте
LocalScript. - Код нужен в нескольких местах — вынесите его в
ModuleScript. - Если сервер принимает данные клиента — всегда проверяйте их на сервере.
Такое разделение делает проект предсказуемее и создаёт основу для безопасной архитектуры.