Коротко: «Анти-чит та безпека» — тема 20 із 31 у програмі курсу «Roblox Studio: Pro Developer» (11–18 років, другий ступінь курсу Roblox). Суть теми в одному правилі: сервер ніколи не довіряє даним, які прислав клієнт (комп'ютер гравця), і будь-яку дію — від швидкості руху до покупки предмета — перевіряє самостійно, ще раз.

Питання «а як захистити гру від читерів» батьки й самі підлітки починають ставити не на першому занятті, а десь посеред курсу, коли гра вже працює і хочеться показати її друзям. Цього вечора зазвичай і з'ясовується, що без правильної архітектури будь-який охочий може відкрити консоль розробника в браузері й написати собі нескінченні монети за десять секунд.

Чому клієнту взагалі не можна довіряти

У Roblox, як і в будь-якій онлайн-грі, код виконується одночасно у двох місцях: на комп'ютері гравця (клієнт) і на сервері Roblox (сервер). Клієнтський код гравець теоретично може підмінити — є програми, які перехоплюють і змінюють дані, що клієнт відправляє на сервер. Якщо сервер сліпо вірить числу «швидкість гравця = 500» чи «баланс монет = 999999», яке прислав клієнт, гру зламано за хвилини. Цю межу діти проходять ще на темі 4 програми — «Клієнт-сервер архітектура», де вперше розбирають RemoteEvent і RemoteFunction як канал обміну даними, а не як джерело істини.

Де в програмі курсу вже закладено захист до теми 20

Анти-чит на 20-й темі — не перша згадка перевірки, а узагальнення того, що діти вже робили локально. На темі 6 — «DataStore: захист від втрат» — вони вчать pcall і retry-логіку, щоб збереження прогресу не ламалося від мережевого збою. На темі 13 — «Ігровий магазин: логіка» — прямо написано: «перевірка балансу на сервері, видача предмета, захист від читів». Тема 20 збирає ці окремі практики в одне системне правило.

Що саме перевіряє сервер у типовому проєкті курсу

На занятті розбирають конкретні перевірки, які стають звичкою, а не одноразовим кодом: швидкість і позицію гравця звіряють з максимально фізично можливими значеннями (sanity-check), баланс внутрішньоігрової валюти перераховують на сервері перед кожною покупкою, а не читають число, яке надіслав клієнт, і будь-яку подію від RemoteEvent обробляють з перевіркою, що гравець фізично мав змогу її викликати — наприклад, не купити предмет у магазині, до якого персонаж не підходив.

Чому це особливо важливо з монетизацією

Теми 17–19 курсу — Game Passes, Developer Products і приватні сервери — усі про гроші гравців, реальні чи внутрішньоігрові. Саме тому анти-чит розміщено відразу після них, а не десь окремо: захищати цінність, яку щойно навчилися створювати (магазин, валюту, VIP-доступ), має сенс лише тоді, коли ця цінність вже є в проєкті. Детальніше про те, як студенти доходять до першого заробітку на своїх іграх, можна прочитати в статті про шлях гри до публікації.

А що з DataStore — хіба це не той самий захист?

Частково так, і теми логічно продовжують одна одну. DataStore (теми 5–6) відповідає за те, щоб прогрес гравця не загубився технічно — через збій мережі чи вихід із гри в невдалий момент. Анти-чит (тема 20) відповідає за інше: щоб прогрес, який зберігся, був правдивим, а не підробленим клієнтом. Повну механіку збереження прогресу розбирає стаття DataStore у Roblox: щоб гра пам'ятала прогрес.

Коментар викладача курсу: «Найкращий спосіб показати дітям, навіщо потрібен анти-чит — дати їм самим "зламати" гру одногрупника через консоль браузера, з дозволу автора. Після цього пояснювати, чому "сервер не довіряє клієнту" вже не потрібно — вони щойно побачили це своїми руками».

Що відбувається, якщо анти-чит не зробити

На практичних заняттях викладачі іноді спеціально показують «дірявий» варіант магазину — той, де баланс монет зберігається і перевіряється тільки на клієнті. Учні за кілька хвилин через вбудовану консоль браузера змінюють собі баланс на будь-яке число і купують усе в магазині без жодної оплати. Цю вправу роблять із навчальним, ізольованим проєктом, а не з реальною грою з реальними гравцями — щоб побачити вразливість, а не навчитися нею користуватися на шкоду іншим.

Після цього той самий магазин переписують з перевіркою на сервері, і «злом» через консоль браузера вже не працює: сервер перераховує баланс сам, а не вірить числу з клієнта. Різниця між двома версіями одного й того самого магазину — найкращий аргумент, який дитина запам'ятовує без додаткових пояснень.

Чи стосується це лише грошей і покупок у грі

Схожа логіка валідації зустрічається і раніше в програмі, на темі 11 — «Pathfinding: розумний NPC». Там NPC переслідує гравця по карті й обходить перешкоди, і вже тоді дітей привчають не довіряти «очевидному» шляху, а перевіряти його через PathfindingService. Тема 20 переносить ту саму звичку перевірки з поведінки NPC на поведінку самого гравця.

Ні, принцип однаково працює для будь-якої дії гравця. Швидкість персонажа, кількість стрибків, шкода від зброї, час до відродження після смерті — усе це можна підмінити на клієнті так само легко, як баланс монет. Тому в програмі курсу тема 20 іде одразу після монетизації, але формулюється загальним правилом «перевіряй на сервері все, що впливає на результат гри для інших гравців», а не лише як правило про гроші.

Чи означає це, що гру взагалі неможливо зламати

Ні, і курс не обіцяє стовідсоткового захисту — такого не існує навіть у великих студій. Мета теми інша: навчити дитину базового інженерного рефлексу «не довіряй вхідним даним», який працює однаково в іграх, вебсайтах і будь-якому коді, що спілкується із зовнішнім світом. Це той самий принцип, який на курсі Minecraft + Python діти застосовують інакше — через перевірку коду перед запуском.

FAQ: анти-чит у Roblox Studio

Чи потрібно знати щось про кібербезпеку заздалегідь?

Ні. Усі навички — RemoteEvent, DataStore, перевірка балансу на сервері — вводяться поступово з перших тем ступеня «Pro Developer» (11–18 років), і тема 20 лише формалізує те, що дитина вже тренувала на практиці.

Чи вчать на цьому етапі захищатися від DDoS чи зовнішніх атак на сервер

Ні, інфраструктуру серверів Roblox захищає сама компанія Roblox, а не розробник гри. Курс зосереджений на тому, що розробник контролює сам: логіку своєї гри, свого магазину й свого RemoteEvent-коду.

Чи можна додати анти-чит у гру, яка вже опублікована без нього?

Так, і на практиці це звичайна ситуація: учні спочатку публікують чернетку гри для друзів, а захист серверної перевірки додають уже окремим кроком, коли бачать, що гра працює і варта додаткових зусиль. Головне — зберегти стару версію коду, перш ніж переписувати логіку магазину й подій.

Перший анти-чит, який дитина пише сама, зазвичай виглядає просто: сервер запам’ятовує, скільки монет було в гравця хвилину тому, і відмовляється вірити стрибку з десяти до тисячі. Цього достатньо, щоб відсікти найпростіші підробки, і достатньо, щоб зрозуміти принцип.

Для батьків, які ще вагаються між Lua в Roblox Studio і Python в іншому напрямку, різниця мов і підходів розібрана в статті «Roblox Старт чи Pro Developer: у чому різниця двох рівнів курсу».