Как я могу реализовать многопользовательскую маскировку с помощью визуальных средств, которые противостоят взлому на стороне клиента?


19

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

Теперь я специально упоминаю эти игры, потому что обе они по-разному реализовали стелс. У LoL есть скрытность с двумя возможными состояниями: вы либо полностью видимы, либо совершенно невидимы. HotS, с другой стороны, реализует скрытность таким образом, что вы можете сказать, мерцая в воздухе:

Герои Шторма-невидимки

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

Когда вы реализуете скрытность способом LoL, вы можете просто прекратить отправку координат игрока другим клиентам. Когда персонаж игрока нарушает скрытность, сервер может снова транслировать местоположение. Тем не менее, с моделью HotS, в воздухе, где персонаж движется, можно увидеть мерцание. Это означает, что сервер должен отправлять местоположение игрока другим клиентам. Это означает, что игроки, которые изменяют текстуру или модель или даже сам код игры, могут сделать механику плаща бесполезной. Вот ветка на досках HotS по этому поводу.

Мой вопрос заключается в том, есть ли какой-нибудь способ реализовать маскировку (с «мерцанием», как у HotS), не имея проблемы с тем, что хитроумные игроки могут модифицировать игру (данные) и «побить систему». Возможно ли это, а если нет, как другие многопользовательские игры с этой механикой справляются с этим? Является ли только стиль невидимости LoL не поддающийся проверке?

Я думал о том, чтобы сервер время от времени отправлял фиктивные «плащевые» локации, но это также вредит честным игрокам, которые просто обращают внимание, так что это не сработает.


Связана ссылка , но я не спрашиваю о столкновении с другими (которые могут быть обработаны сервером), а скорее отображает скрытые юниты.
Underflow

Это плохое предложение, но вы можете выполнить весь графический рендеринг на сервере, а затем транслировать экран каждого игрока своим клиентам. Они только отправляют ввод, вы только отправляете вывод. Клиент представляет собой тонкую оболочку, которая просто отображает видео и воспроизводит аудио.
user137

Филипп получил очень хорошую идею там. Я хочу добавить, что вы все еще должны знать о ограничивающих прямоугольниках и их пересечении с выстрелами умений и т. Д. Если вы отправляете ограничивающие рамки, умный кодер может перепроектировать, какой персонаж невидим (если есть разные герои). Если у вас есть какие-либо эффекты, которые срабатывают при попадании, вам нужно будет отправить что-нибудь вроде окна или хотя бы положения и масштаба эффекта. Имейте в
виду,

Вы не можете фактически реализовать маскировку в стиле 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-> Это относится ко всей игровой механике, а не только к этой конкретной.
С. Тарык Четин

12
Относительно последнего абзаца: имейте в виду, что когда невидимый игрок - единственное , что вызывает подобные вещи, вы предоставляете информацию, полезную для хаков. Но вы также можете запускать каждый из них время от времени через случайные события или действия других игроков. Это будет генерировать шум, который отвлекает внимание от взлома и имеет приятный побочный эффект, который делает среду более живой и динамичной.
Филипп

2
Это очень интересная идея, спасибо! В случае «следов» это может даже вознаградить игроков-невидимок «пройти по» (старым) стопам их цели, делая подкрадывание к другим более реалистичным (то есть идущим сзади). Даже если кто-то сделает текстуры шагов (или что у вас) более очевидными, их включение (возможно) только обновит продолжительность отображения.
Underflow

3
Конечно, в этом случае можно было сделать хак на стороне клиента, чтобы показать, какие треки свежие.
Чт

3
Хак на стороне клиента может выделить следы, созданные в регионах, которые не соответствуют местоположению игрока.
Эдвард Коффи

31

Если вы посмотрите на бесчисленные другие вопросы о предотвращении мошенничества в многопользовательских играх, представленные на этом сайте, вы легко увидите, что на самом деле не существует технических мер для предотвращения мошенничества на стороне клиента.

Все, что вы можете сделать, это предоставить меньше информации о скрытой сущности. Все, что нужно знать клиенту для получения эффекта искажения, - это то, что в этой позиции что- то скрыто. Но ему не нужно знать что-то конкретное об этом, например, что это такое, сколько у него осталось здоровья и что он делает сейчас. В зависимости от вашей игры, это само по себе может изменить игровой дефицит информации для игрока.


6
С «меньшим количеством информации» также приходит «менее точная информация». Выберите смещение (скажем) 10 футов в одном случайном направлении, которое сохраняется на стороне сервера, и отправьте это местоположение вместо этого. В случайных встречах добавьте ложных мерцающих персонажей: «Вы видели это? Я думал, что что-то там увидел».
Keeta - восстановить Монику

2
@Keeta, если вы используете это, вы захотите сделать некоторое сглаживание (то есть, не генерировать полностью случайное значение каждый раз) либо с фильтром сигналов, либо с какой-то случайной прогулкой по направлению к объекту. Если он слишком нервный, то это действительно очевидно для глаз, поэтому вам нужно сбалансировать способность игрока быть скрытым во время движения и быть скрытым, оставаясь неподвижным. Последнее будет и должно быть более эффективным.
Нейт Даймонд,

@NateDiamond Да, именно так. Вот почему я утверждаю, что сервер создает конкретное смещение фактического местоположения. Затем, когда настоящий актер движется, смещение также заставит шиммер двигаться. Внимательно наблюдая за движением мерцания, вы можете определить, где находится действующий актер, но это требует некоторой работы. Если бы невидимость была реальной и вызывала это мерцание в реальной жизни, я думаю, что этот дополнительный фокус - именно то, что нужно для преодоления невидимости.
Keeta - восстановить Монику

Была интересная и единственная работающая модификация ioquake3 для создания защищенного от взлома сервера . Идея состояла в том, чтобы проверить на стороне сервера, может ли игрок A видеть другого игрока B (то есть, нет ли стен или другого разделения, блокирующего обзор), прежде чем решить, должен ли игрок A получать информацию о положении B. Это оказалось очень эффективным против Wallhacks, так как они стали бесполезными. Итак, суть в том, что единственный способ гарантировать, что никто не манипулирует данными, - это вообще не давать им никакой информации.
Габорист

@Gaborous Это дорогая проверка, особенно для каждого игрока на каждом тике. Вполне возможно, что это стоит затрат, но разработчик должен учитывать стоимость и возможности сервера.
Нейт Даймонд

1

Да, любая информация, которую вы отправляете клиенту, может показаться более очевидной, чем вы предполагали. Но вот хитрость:

Смягчить воздействие

Конечно, у клиента может быть некоторая информация, но, тщательно продумав, какой информацией вы готовы поделиться, и что игроки могут с ней сделать, вы можете, по крайней мере, смягчить влияние хаков клиента.

1. Что наблюдает игрок?

  1. Вы видите персонажа с характеристиками на месте: в этом случае у клиента будет вся информация, а хаки могут просто отменить плащ
  2. Вы видите что-то на месте: в этом случае у клиента есть информация о местоположении. Это может сделать местоположение очевидным, но другая информация все еще должна быть скрыта.
  3. Вы наблюдаете что-то, но это не на месте

а. Вы видите что-то, но оно не на месте (мост или куст движутся, но оно большое, поэтому вы не знаете, куда стремиться; шаги становятся видимыми только с задержкой в ​​2 секунды): в этом случае клиент знает только, что есть что-то, но не где / что именно.

б. Вы наблюдаете что-то по-другому (звук, если что-то находится в области; индикация близости как радар с или без направления)

Снимок экрана в вопросе кажется между 1 и 2, так как он, вероятно, основан на ограниченной информации, но вы все равно видите схему, которая может выдавать некоторую информацию.

2. Что может сделать игрок?

Предположим, вы думаете, что кто-то находится по координатам XY, что вы можете сделать? Вот несколько типичных вариантов:

нападающий

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

перемещение

  1. Когда вы начинаете двигаться, вы замечаете, что двигатель загадочным образом ведет вас в объезд
  2. Вы начинаете нормально идти к своей цели, но когда вы достигаете скрытого персонажа, вы двигаетесь вокруг него или останавливаетесь
  3. Вы не заблокированы скрытым персонажем

Если выбор маршрута обычно выполняется на стороне клиента


Спасибо за ваш вклад. В любом случае я планировал позволить людям «сталкиваться» с невидимыми персонажами, потому что это то, что сервер может рассчитывать и обрабатывать. Идея звучания аккуратна, и изменение звука тонким способом (напряжение, думаю, челюсти ) было бы круто, но разве это не было бы легко заменить, например, более громким звуковым файлом или даже голосовым файлом, говорящим, что НЕКОТОРЫЙ ЗАКРЫТЬ ЗАКРЫТ ?
Underflow

1
Еще одна идея по линии «а»: мерцание может появляться случайным образом где-то рядом с замаскированным игроком, но не в его точном местоположении. Если сервер просто отправляет позицию мерцания, клиент действительно не может сделать большой реверс-инжиниринг по этому вопросу. На самом деле, даже если скрытый игрок был полностью виден, он все равно работал бы как механик.
Джезамон,

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
Я разработал хаки на стороне клиента в прошлом. Представление о том, что шейдеры сложнее модифицировать, очень и очень вводит в заблуждение. Да, он останавливает самую основную форму атаки, но любой, у кого есть приличный гугл-фу, может разобраться с этим днем. Теперь сравните свою игру с приличным хакером и посмотрите, сколько времени потребуется, пока они не наберутся на стороне клиента.

Скопируйте и вставьте свой комментарий к каждому ответу здесь, так как все, что можно использовать на стороне клиента. Я знаю, что не так сложно модифицировать код (в играх ААА есть боты, хаки, моды), но мне легче искать полупрозрачную текстуру в файлах игры, чем искать конкретные инструкции по эффекту ряби шейдеров. Конечно, если файлы шейдера представляют собой обычный текст и едва заархивированы, то даже ребенок может сломать его. Я только что дал ответ, который может быть объединен с «меньшим количеством данных, передаваемых игроку», чтобы обеспечить достойный уровень безопасности. Я действительно не знаю, что с ним не так, поскольку он обеспечивает реальное решение
Марс

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