Фізичні симуляції на сервері з сотнями гравців


9

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

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

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

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

Фізика стане настільки ж складною, як демонстрація GDC 2011 Глена Фідлера , можливо навіть простішою. Однак набагато більше твердих тіл, що завжди стикаються, буде в одній сцені, і всі вони будуть видні одразу.

Мені важко отримати відповідь на цей конкретний випадок, оскільки більшість ресурсів в Інтернеті - знову ж таки, що сайт Glenn Fiedlers є чудовим - говорять про дрібномасштабну мережеву фізику (наприклад, FPS з 30 гравцями, як Halo).

Будь-які поради, веб-сайти, документи або подібне з цього питання будуть дуже вдячні.

Резюме питань, на які я хотів би відповісти:

  • Наскільки здійсненною є модель клієнт-сервер? Чи легітимним та обґрунтованим є мій потенціал обробки сервера?
  • Чи можна надійно перевірити фізичне моделювання, яке виконує клієнт на сервері? Якщо так, то як?

Я залишу це питання відкритим трохи довше, сподіваючись, що більше людей опублікує свої думки. Моя подяка висловлюється тим, хто хоч і зробив!
Леннард Фонтеййн

Поки різні клієнти є незалежними, у вас не повинно виникнути проблем із масштабуванням по горизонталі. Використовуйте щось на кшталт EC2, підводьте потужність в Інтернеті за потребою.
ipeet

1
Де проблема, якщо хтось обманює в одній грі? Дозвольте їм, краще киньте ідею лідерів та зосередьтеся на створенні веселої гри для одиноких гравців
Maik Semder

2
"Чи можливо надійно перевірити фізичне моделювання, яке виконує клієнт на сервері?" Так, це можливо підтвердити, але читаючи ваші коментарі нижче: Ваше планування видачі грошей на RL для найкращих результатів, і подібне до гри в дартс, тобто після початкової фізики кидання взяти на себе. Проблема тут менша у валідації фізики, це легко. Проблема полягає в тому, що у вас будуть шахраї, які дозволяють комп’ютерній програмі зробити кидок, щоб дати їм ідеальні бали.
Даніель Карлссон

Сертифікована фізика сервера в спільному світі цілком можлива, DCUO - хороший приклад цього. Зверніть увагу, що "сервер" насправді означає "купу серверних коробок", тоді як ви, здається, пишете в терміні "сімейство", що це одне поле, яке сидить десь. В даний час ви не можете імітувати тисячі незалежних акторів в одному фізичному просторі, тому відсутність дискусії про це; що ви можете зробити, це поширити тисячі гравців на незалежні острови симуляції, які не взаємодіють.
Патрік Х'юз

Відповіді:


5

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

Тоді ви можете вжити заходів (або заборонити шахрая, або заборонити, хто підробив помилкове повідомлення). Щоб перевірити, чи справді це повідомлення недійсне, ви можете скористатися спеціальним клієнтом чи будь-яким іншим.


3
Це насправді досить чортово розумний! Не подумав би про це, очевидно, щонайменше 2 або 3 клієнтам доведеться запустити моделювання у випадку, якщо клієнт, який працює хтось інший, його симуляція обманює - у цьому випадку сервер завжди може зробити остаточне моделювання, якщо всі клієнти повідомляють про щось дивне .
Леннард Фонтеййн

1

Ваша гра є одиночною, лише «взаємодія» з іншими гравцями - це лідери. Ви можете створити екземпляр, щоб перевірити моделювання на вашому сервері для кожного подання, вам не потрібні всі хитрощі щодо того, щоб фізика була однаковою для 30 клієнтів, тому я не думаю, що вам потрібно більше ресурсів, ніж у вас вже з тих пір фізика вже працює :).

Перевірка кожного результату буде трохи зайвою, ви можете надсилати симуляцію, стиснуту на сервер кожного разу, коли хтось надсилає бал до лідеру, а потім лише перевіряйте 5-відсоткові найкращі бали на власному сервері, а може, навіть верхній 1% чи навіть розумніші лише перевіряйте нові рейтинги та припускайте, що кожен, хто не кращий за №1, мабуть, має неперекручене моделювання.

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


Я не хочу вникати в специфіку самого геймплея, але ви можете порівняти мою гру з грою в дартс: Після того, як ви націлилися і зробили кидок, фізика переймається, і ви нічого не можете в цьому змінити. більше. Чи змінили б ці знання ваші відповіді?
Леннард Фонтеййн

Ні, це нічого не змінить :). Просто зберігайте повтори на сервері та перевіряйте лише підозрілі (наприклад, нові рекорди)
Roy T.

1

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

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

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

Таким чином, як Рой, ви в основному говорите: Тримайте його на стороні клієнта, зберігайте "повторення", коли клієнти подають бал і лише перевіряють ці повтори час від часу (не всі, невеликий відсоток). Що робити, якщо на підставі рахунку клієнт подає виплату за рахунок кредиту - частина прогресу гравця, кредити також можна придбати за реальні гроші (!!!) - ти все ж рекомендуєш такий підхід? Якщо обман дає надмірну кількість кредитів, а я підтверджую лише раз у раз, я б в основному втратив гроші. Ви, ймовірно, можете позначити людину, коли його оцінка перевищує певний поріг, але чи буде кращий спосіб?
Леннард Фонтеййн

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

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

@RoyT. Я, мабуть, це все роблю, навіть якщо я не виплачую гроші на основі кредитів (хтось неправильно читає, що я здогадуюсь?). Я маю намір проводити політику нульової толерантності, тому я просто збираю файл повтору для перевірки. Якщо це справді підозріло, я вживаю заходів.
Леннард Фонтеййн

1

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


Мені, можливо, було трохи незрозуміло. Мої ігри нададуть вам віртуальні кредити після завершення гри. Ви можете використовувати ці кредити, щоб розблокувати новий вміст, з яким можна грати. Ви також можете використовувати реальні гроші для придбання кредитів, щоб швидше розблокувати вміст (зауважте, це не Pay2Win, я ненавиджу це). Я не маю намірів виплачувати реальні гроші на основі кредитів. Однак, дартс був лише метафорою, щоб описати, як сильно впливає геймер на стан жорстких тіл, я не боюся "бойових цілей", оскільки це дасть вам 0 перевагу.
Леннард Фонтеййн
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.