Хто обчислює AI в MMO?


30

Я будую MMO і хочу додати NPC. Вся справа в тому, що я не знаю базового дизайну. Що означає розрахунки, клієнти чи сервер? Я б зрозумів, як сервер обчислює події та реакції, але коли справа доходить до наведення маршруту та позиції та руху гравця, хто це обчислює?

Хто обчислює AI сервер або клієнт? Я не міг уявити, як сервер обчислює обчислення маршруту, положення, рух тощо. Будь ласка, мені потрібна допомога, щоб зрозуміти це, дякую, будь-що допоможе.


2
Обережно зі своєю термінологією - наприклад, NPC не є гравцями.
Кілотан

Відповіді:


25

У більшості ММО в ці дні з безпеки є зроблено що-небудь важливе на сервері. Ви не можете сильно завантажувати клієнта, саме тому однією з перших речей є AI-підпрограми. Я думаю, що більшість розробників вважають, що сторона клієнта є хакейною, як правило, не винятком.

Badumna Scalify ( http://www.scalify.com/badumna.php ) намагається завантажити частину його на клієнтів, щоб вони виконали розрахунки на стороні клієнта і надіслали один одному; деякі дані також надсилаються авторитетному партнеру для перевірки перед передачею клієнтам, подібно до виділеного сервера. Проблема полягає в тому, що ВСІ дані в багатокористувацькій грі ОБОВ'ЯЗКОВО надсилаються через авторитетного партнера, якщо ви хочете запобігти обману. Я виховував Бадумну так, як це здавалося найближчим до того, що ви можете хотіти, але навіть це не зможе зловити шахраїв - це може зловити дещо, але все критичне (тобто все, дуже багато) повинно бути зроблено серверно, сторона.

Я можу розгорнути деякі з Badumna, тому що це все-таки може бути корисним (але я закликаю вас переглядати, не завантажуючи нічого важливого для клієнтів, тому що клієнти будуть обманювати).

Badumna пропонує гібридну архітектуру для операцій з даними. Він забезпечує повний контроль розробнику при вирішенні питання про те, що є критичним (і повинно бути перевірено), а що ні (і так може бути надіслане децентралізованою мережею).

Якщо MMO вимагає підтвердження кожного біта інформації, тоді Badumna буде функціонувати як клієнт-серверне рішення. Однак я вважаю, що існують різні категорії додатків MMO з різними вимогами. Наприклад, досить часто у ММО з'являються зони бойових дій, де гравці, ймовірно, обманюють, і тому кожен шматочок інформації повинен бути перевірений. Однак є також зони, де гравці можуть лише ходити / бігати / танцювати / спілкуватися. Такі зони не потребують повної перевірки і можуть використовувати децентралізовану мережу Бадумна та користуватися масштабністю, яку вона може запропонувати.

По-друге, Badumna надає додаткові функції безпеки, до яких розробники можуть отримати доступ, такі як захист ідентичності (щоб користувачі не могли претендувати на когось іншого), проксі-скарга (дозволяючи клієнтам налаштовуватися повідомляти зловмисних / обманних гравців довіреному джерелу) та чорний список (заборона зловмисним гравцям від ігор).

Я не дуже багато досліджував Бадумну, тому, можливо, є проблеми та особливості, про які я не знаю, але, принаймні, я коротко поглянув на це.

tl; dr: клієнт дійсно повинен бути лише клавіатурою та мишкою, підключеною до Інтернету.


9

Коротка відповідь полягає в тому, що для стандартного MMO обчислення AI завжди виконує сервер.

У деяких іграх клієнт намагатиметься передбачити AI, так що, схоже, NPC будуть реагувати швидше, але це лише ілюзія; справжній NPC завжди контролюється сервером.


5

MMO - це сервер, що знаходиться у відкритому доступі до Інтернету. Все, що ви хочете мати можливість повністю контролювати, не повинно бути доступним для населення, інакше ви ризикуєте дозволити зловмиснику контролювати NPC. Якщо ви не робите якесь шифрування ваших команд (що вплине на продуктивність), ви не можете довіряти клієнту, що він працює лише власним кодом.

Прогнозувати рухи NPC для клієнта для компенсації відставання - чудова ідея; ви теоретично можете включити в програму клієнта стільки поведінки AI, скільки вам потрібно, і дозволити їм періодично синхронізуватись, але дозволяючи клієнтові диктувати поведінку NPC, це надасть клієнтові потенціал возитися з ігровим світом. Якщо клієнт децинхронізується з ігрового світу на сервері, тоді ви отримаєте неконтрольовані недоброякісні NPC.

Насправді це прикро, тому що розподіл AI на клієнтів може вплинути на масштабованість.


2
Шифрування здебільшого марно - клієнту необхідно вміти розшифровувати все, що йому надіслано, і клієнт може бути реверсованим. У кращому випадку шифрування сповільнить те, хто створює обманного клієнта.
Адам

2

Зазвичай сервер повинен обчислювати або підтверджувати всі дані, передані або отримані від клієнта. Але це залежить від того, наскільки ви можете довіряти клієнту і наскільки важливий цей розрахунок. Іноді основний розрахунок може бути зроблений на клієнті, і сервер може мати можливість використовувати простий метод для перевірки отриманих даних.


1

На основі інших відповідей стратегія "вивантажувати та перевіряти" справді може бути корисною в ситуаціях, коли перевірка простіша, ніж оригінальний розрахунок (або коли для виловлювання шахраїв буде достатньо лише випадкових перевірок на місці).

Наприклад, якби у вас був клієнт зробити A * переадресування та надіслати результати на сервер, все, що потрібно було б зробити, це перевірити, чи: a) шлях дійсний, і b) немає коротшого шляху. Перевірка дійсності шляху повинна бути простою, а перевірити оптимальність може бути простіше, ніж знайти оптимальний шлях для початку, оскільки тепер у вас є верхня межа довжини шляхів, які вам потрібно перевірити. (Зокрема, якщо клієнт повертає прямолінійний шлях, очевидно, це оптимально, наскільки це справедливо.) Якщо чесно, я не маю уявлення, чи корисний би цей конкретний трюк на практиці, але я не бачу принципової перешкоди йому.

Однак зауважте, що якщо ви завантажите AI NPC для клієнтів, то зламаний клієнт може потенційно використовувати його для попереднього прогнозування поведінки NPC. Для деяких видів ігор чи ситуацій це може бути серйозною проблемою.


1

Напевно, найкраще мати кілька простих процедур AI та критично важливих ігор на серверній стороні, одночасно обробляючи складні неігрові операції на стороні клієнта.

Наприклад, сервер знає, де знаходиться ворожий NPC і де знаки гравця. Коли персонаж гравця потрапляє в діапазон NPC, може бути проведений розрахунок на стороні сервера, щоб побачити, чи повинен NPC атакувати гравця, і може бути проведена проста маршрутизація маршруту, щоб визначити, скільки часу знадобиться NPC, щоб досягти гравця.

Після переходу NPC в стан атаки клієнт може розібратися з анімацією та дрібнозернистим пошуком шляху. Коли NPC достатньо близький до клієнта для нападу на сервер, він може виконати розрахунки, щоб побачити, чи потрапила атака, яка шкода була і т. Д. ...

Ви хочете переконатися, що будь-які обчислення, які справді впливають на результат гри, обробляються сервером і передаються клієнтові, тоді як некритичні розрахунки здійснюються клієнтом.

У найпростішому випадку ви будете підтримувати клієнта в синхронізації з тим, де він очікує, що сервер буде, сервер перевірить, а потім клієнт розрахує знову.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.