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


19

Я думав про те, щоб втілити стелс у багатокористувацькій грі. Це гра в стилі MOBA, тому подумайте League of Legends (LoL) та Heroes of the Storm (HotS). Кілька клієнтів підключаються до одного сервера, який передає стан гри всім клієнтам. Клієнти надсилають свої вхідні дані на сервер, що може відхилити їх при зіткненні з недійсними командами, тим самим робить обман неможливим (ну теоретично).

Зараз я згадую ці ігри спеціально, тому що обидві реалізували схованість по-різному. LoL має схованість з двома можливими станами: ви або повністю видимі, або зовсім невидимі. HotS, з іншого боку, реалізує таємницю таким чином, що ви можете переконатися мерехтінням у повітрі:

Герої Бурі невидимі

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

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

Моє запитання полягає в тому, чи є спосіб реалізувати приховування (за допомогою «мерехтіння», а-ля HotS), не маючи питання про те, що хитрі гравці можуть змінювати гру (дані) та «бити в системі». Чи можливо це, і якщо ні, як інші мультиплеерні ігри з цим механіком справляються з цим? Хіба лише стиль LoL невидимості не змінюється?

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


Пов'язане посилання - це посилання , але я не запитую про натрапляння на інших (з якими може оброблятись сервер), а лише на показ прихованих одиниць.
Underflow

Це погана пропозиція, але ви можете виконати всі графічні візуалізації на сервері, а потім транслювати кожен екран гравців своїм клієнтам. Вони надсилають лише вхід, ви надсилаєте лише вихід. Клієнт - це тонка оболонка, яка просто відображає відео та відтворює аудіо.
user137

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

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

2
@TheSpooniest: чи могли б ви пояснити, що ви маєте на увазі під « Не можете реально реалізувати маскування у стилі LoL, перестаючи надсилати координати гравця ? Якщо гравець A невидимий і сервер більше не надсилає координати гравцям B і C, сервер все ще може керуватися, наприклад, зіткненням між гравцями A і B, відмовляючись пересувати персонаж B поверх A (як би вони йшли в стіну). Якщо A (все ще невидимий) передає навик B, сервер може просто надіслати "навичку, вистрілену з позиції x, y у напрямку d від A" до B і C.
Underflow

Відповіді:


20

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

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

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


without making it easy to exploit-> Це стосується всієї ігрової механіки, не тільки цієї.
S. Tarık Çetin

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

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

3
Зрозуміло, у цьому випадку з боку клієнта може бути зроблений злом, щоб показати, які треки є свіжими.
Мухд

3
Злом клієнта може виділити сліди, створені в регіонах, які не відповідають розташуванню гравця.
Edward Coffey

31

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

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


6
З "менш інформацією" також надходить "менш точна інформація". Виберіть зсув (скажімо) 10 футів в одному випадковому напрямку, який зберігається на стороні сервера, і надішліть це місце замість цього. У випадкових інших зустрічах додайте помилкові мерехтливі символи "Ти це бачив? Я думав, що там щось бачив".
Keeta - відновити Моніку

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

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

Була цікава модифікація, і єдина, яка насправді працювала, ioquake3, щоб зробити сервер захисту від стін . Ідея полягала в тому, щоб на стороні сервера перевірити, чи може гравець A бачити іншого гравця B (тобто жодні стіни та інше розділення, що блокує погляд), перш ніж вирішити, чи повинен гравець A отримувати інформацію про позицію B. Це виявилося високоефективним проти стінки, тому що вони були марними. Отже, суть полягає в тому, що єдиний спосіб забезпечити, щоб ніхто не маніпулював даними, - це взагалі не надавати їм інформації.
габоровий

@gaborous, що це дорога перевірка, особливо для кожного гравця при кожному галочку. Це може бути дуже вагомим витратом, але розробнику доведеться враховувати вартість та можливості сервера.
Нейт Діамант

1

Так, будь-яка інформація, яку ви надсилаєте клієнту, може бути показана явніше, ніж ви планували. Але ось хитрість:

Пом'якшити вплив

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

1. Що спостерігає гравець?

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

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

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

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

2. Що може зробити гравець?

Припустимо, ти думаєш, що хтось знаходиться на координаті XY, що ти можеш зробити? Ось кілька типових варіантів:

Напади

  1. Ви можете напасти на нього так, ніби він не перекритий
  2. Ви можете напасти на нього AOA-атаками / пастками, які розблоковують його чи ні
  3. Ви можете активно розблокувати його і лише атакувати його згодом
  4. Ти не можеш напасти на нього взагалі

Переміщення

  1. Коли ви починаєте рухатись, ви помічаєте, що двигун загадково відводить вас у об’їзд
  2. Ви починаєте нормально йти до своєї мети, але, досягаючи прихованого персонажа, рухаєтесь навколо нього або зупиняєтесь
  3. Прихований персонаж вас не заблокує

Якщо вибір маршруту зазвичай робиться на стороні клієнта


Дякуємо за ваш внесок Я планував дозволяти людям так чи інакше «натикатися» на невидимих ​​символів, тому що сервер може обчислити та обробити. Звукова ідея є акуратною, а зміна звуку на тонкий спосіб (напруга, думаю, щелепи ) було б круто, але хіба це теж не можна легко замінити, наприклад, гучнішим звуковим файлом або навіть голосовим файлом, який говорить, що НЕЩЕ ОДНЕ ЗАКРІПЛЕННЯ ЗАСТАВЛЕНО ?
Underflow

1
Ще одна ідея по лінії "a": мерехтіння може з'явитися випадковим чином, десь поблизу прихованого гравця, але не в їх точному місці. Якщо сервер просто надсилає позицію мерехтіння, клієнт насправді не може зробити багато зворотної інженерії на цьому. Насправді, навіть якби гравець, який маскував, був повністю видно, він все одно функціонуватиме як механік.
Джеззамон

1
@Jezzamon так, якась механіка "переміщення" теж була б крутою. Однак у масковій ситуації, яка б не спрацювала: я не хочу карати гравців, які стоять на очах за мерехтливість; їм потрібно мати "точне" місце мерехтіння, щоб націлити, наприклад, майстер-навички.
Underflow

-2

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

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

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


3
Ви пропустили власне питання. Йшлося не про те, як технічно створити такий ефект спотворення. Йшлося про те, як дати клієнтові інформацію, де його надати, не надаючи корисної інформації, яку він може піддавати гравцеві.
Філіпп

1
Ну, я вирішити цю проблему : Which means that players that change the texture or model or even the game code itself could render the cloak mechanic useless. І я не бачу, чому я пропустив це питання whether there is some way to implement cloaking (with a 'shimmer', à la HotS), without having the issue that crafty players can modify the game (data) . A: Оголошення маскується мерехтінням, B: це важче змінити, ніж проста зміна текстури. ДЕ насправді рендерінг - інша сторона. Якщо позиція - це єдине, що нам потрібно застосувати ефект пульсації навколо, це повинні бути єдині дані, що надсилаються гравцеві.
Марс

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

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

@ Справедливість справедливо, це через те, що розробники віддалилися від витрачання ресурсів, намагаючись перестати обманювати, і замість цього витратили ресурси на дуже перекручені, незрозумілі та добре побудовані методи виявлення шахрайства та відвертого заборони гравцям, що ображають їх платформи ... (очевидно відносяться до таких систем, як VAC Steam).
Trotski94
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.