Три вида скриптов
- Script — исполняется на сервере: раздаёт награды, считает очки, меняет мир для всех
- LocalScript — исполняется у игрока: интерфейс, камера, реакция на нажатия
- ModuleScript — не исполняется сам, а возвращает таблицу с функциями, которую подключают через require
Правило разделения
Всё, что влияет на игру, считает сервер. Клиент только показывает и спрашивает. Это не вкусовщина: код на устройстве игрока полностью в его руках, и решение, принятое там, доверять нельзя.
Практический вывод: LocalScript может попросить «дай мне монету», но начислять монету обязан сервер — и проверить, заслужена ли она.
Как выглядит серверный скрипт
local Players = game:GetService("Players")local function onPlayerAdded(player)print(player.Name .. " зашёл в игру")player.CharacterAdded:Connect(function(character)local humanoid = character:WaitForChild("Humanoid")humanoid.WalkSpeed = 20end)endPlayers.PlayerAdded:Connect(onPlayerAdded)
Скорость ходьбы ставит сервер: иначе её поменяет кто угодно.
Частые ошибки новичка
- LocalScript положили в Workspace — он там не запустится
- Обратились к объекту, который ещё не загрузился: помогает WaitForChild вместо точки
- Забыли, что цикл while true do без ожидания вешает поток — нужен task.wait()
- Меняют на клиенте то, что должен менять сервер, и удивляются, что другие этого не видят