Дампы расширенной статистики сервера позволяют выявить и собрать
доказательства на читеров, использующих трейнеры которые не выявляются
стандартными проверками и не блокируются программой S.T.A.L.K.E.R. -
КОНТРОЛЕР.
Внимание!!!
Тесирование читов производилось только и игре S.T.A.L.K.E.R. - Чистое
небо. Предполагается что и в остальных играх эти способы выявления
читеров будут работать, но без гарантии.
Где брать дампы?
На сервере нужно выполнить три команды:
sv_dump_online_statistics_period 1 sv_statistic_collect 1 sv_statistic_save
Дампы будут появляться в папке app_data\logs\mp_stats\servername\games\dmp_date_time.ltx
С каждым новым матчем формируется новый дамп и в течении всего матча
периодически обновляется. Дампы с предыдущих матчей сохраняются навсегда
и больше не обновляются. Голосования на рестарт и быстрый рестарт
стирают в дампе всю информацию за матч в котором было произведено
голосование. В связи с этим могут возникнуть проблемы на серверах с
бесконечными или слишком длинными матчами, в которых очень часто
голосуют за рестарт.
Структура дампа
Дампы
имеют формат ini-файла. В нем присутствует множество секций и
параметров, рассмотрение которых не входит в рамки данной статьи.
Рассмотрим необходимые для выявления читеров секции и параметры.
В секциях типа: [wpn_usage_player_1], [wpn_usage_player_2], [wpn_usage_player_3], [wpn_usage_player_№] записана различная статистическая информация, а так же имя и хеш игрока.
Пример:
[wpn_usage_player_1] NumWeapons = 3 TotalShots = 151 dwCurrentTeam = 0 dwNumRespawned_0 = 1 dwNumRespawned_1 = 0 dwNumRespawned_2 = 0 dwTotalAliveTime_0_sec = 534 dwTotalAliveTime_1_sec = 0 dwTotalAliveTime_2_sec = 0 dwTotalMoneyRound_0 = 0 dwTotalMoneyRound_1 = 0 dwTotalMoneyRound_2 = 0 m_dwArtefacts_0 = 0 m_dwArtefacts_1 = 0 m_dwArtefacts_2 = 0 name = Игрок player_unique_digest = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Секции типа: [wpn_usage_player_1_wpn_№] [wpn_usage_player_2_wpn_№] [wpn_usage_player_3_wpn_№]
содержат информацию о каждом выстреле игрока. Записываются только те
выстрелы, которые попали по другим игрокам. Выстрелы, выпущенные мимо, в
дамп не записываются
Пример:
[wpn_usage_player_1_wpn_0] NumHits = 51 hit_0_BoneID = 8 hit_0_BoneName = bip01_r_calf hit_0_Deadly = off hit_0_TargetName = Игрок1 hit_0_pos_0 = 185.560333, 1.429093, 394.317017 hit_0_pos_1 = 196.117340, 0.273462, 383.978210 hit_10_BoneID = 2 hit_10_BoneName = bip01_pelvis hit_10_Deadly = off hit_10_TargetName = Игрок2 hit_10_pos_0 = 208.859207, 1.526525, 384.264618 hit_10_pos_1 = 215.355499, 0.859685, 384.848511 .............. wpn_inv_name = st_wpn_ak74 wpn_name = mp_wpn_ak74
Имя и хеш ищем в секции [wpn_usage_player_1] статистика его выстрелов будет в соответствующих секциях [wpn_usage_player_1_wpn_№].
Расшифровки параметров секции [wpn_usage_player_№_wpn_№] NumHits - количество попаданий по другим игрокам. hit_№* - номер выстрела.
Обратите
внимание, что в дампе выстрелы сортируются не по порядку! Первый
выстрел может быть в начале секции, второй в конце, а пятый в середине.
Для выявления читеров выстрелы рассматриваются по порядку номеров! |
hit_№_BoneName - часть тела в которую попала пуля (английский язык). Расшифровок значений пока нет. hit_№_Deadly = on - убит. hit_№_Deadly = off - ранен. hit_№_TargetName - имя игрока в которого попали. hit_№_pos_0 - координаты стрелявшего hit_№_pos_1 - координаты игрока в которого попали. wpn_inv_name или wpn_name - оружие из которого стреляли.
Выявление читеров При помощи дампов можно выявить три вида читерства
1. Повышенная убойность
Данный вид читерства характеризуется тем что игрок очень быстро убивает всех с 1-2 выстрелов. При этом в дампе:
hit_1_Deadly = on
повторяется много раз подряд. У честного игрока значения on off чередуются неравномерно.
Этот пример показывает что игрок сделал 9 выстрелов подряд из АК-74 по ногам! и все насмерть и ни одного ранения. Все hit_№_Deadly = on.
hit_0_BoneID = 7 hit_0_BoneName = bip01_r_thigh hit_0_Deadly = on hit_0_TargetName = Игрок1 hit_0_pos_0 = 197.926224, 1.428149, 387.359863 hit_0_pos_1 = 231.442490, 1.587824, 358.763458 hit_1_BoneID = 4 hit_1_BoneName = bip01_l_calf hit_1_Deadly = on hit_1_TargetName = Игрок2 hit_1_pos_0 = 253.418869, 1.428569, 331.178314 hit_1_pos_1 = 267.846100, 0.470899, 318.418121 hit_2_BoneID = 8 hit_2_BoneName = bip01_r_calf hit_2_Deadly = on hit_2_TargetName = Игрок3 hit_2_pos_0 = 282.204437, 1.528498, 308.319916 hit_2_pos_1 = 286.616302, 0.536856, 306.086060 hit_3_BoneID = 2 hit_3_BoneName = bip01_pelvis hit_3_Deadly = on hit_3_TargetName = Игрок4 hit_3_pos_0 = 284.420593, 1.528576, 308.264923 hit_3_pos_1 = 330.873566, 0.850453, 310.277802 hit_4_BoneID = 7 hit_4_BoneName = bip01_r_thigh hit_4_Deadly = on hit_4_TargetName = Игрок5 hit_4_pos_0 = 274.682098, 1.528496, 304.402405 hit_4_pos_1 = 322.492310, 0.871055, 306.561432 hit_5_BoneID = 4 hit_5_BoneName = bip01_l_calf hit_5_Deadly = on hit_5_TargetName = Игрок6 hit_5_pos_0 = 272.349213, 1.529605, 303.760254 hit_5_pos_1 = 281.832092, 0.329878, 306.473877 hit_6_BoneID = 2 hit_6_BoneName = bip01_pelvis hit_6_Deadly = on hit_6_TargetName = Игрок7 hit_6_pos_0 = 279.346954, 1.527995, 304.792450 hit_6_pos_1 = 324.089142, 0.986841, 307.733704 hit_7_BoneID = 3 hit_7_BoneName = bip01_l_thigh hit_7_Deadly = on hit_7_TargetName = Игрок8 hit_7_pos_0 = 284.231995, 1.528740, 311.496063 hit_7_pos_1 = 288.546173, 0.868448, 278.322876 hit_8_BoneID = 2 hit_8_BoneName = bip01_pelvis hit_8_Deadly = on hit_8_TargetName = Игрок9 hit_8_pos_0 = 270.904449, 1.527727, 305.348328 hit_8_pos_1 = 337.397400, 0.928955, 304.220093 wpn_dwBleedKills = 0 wpn_dwBulletsFired = 14 wpn_dwExplosionKills = 0 wpn_dwHitsScored = 9 wpn_dwKillsScored = 9 wpn_dwNumBought = 1 wpn_dwRoundsFired = 14 wpn_inv_name = st_wpn_ak74 wpn_name = mp_wpn_ak74
Соответственно если читер убивает с 2 выстрелов, то значения hit_№_Deadly будут равномерно чередоваться. Например:
hit_0_Deadly = on hit_1_Deadly = off hit_2_Deadly = on hit_3_Deadly = off hit_4_Deadly = on
Доказать три выстрела уже сложнее.
Убивать
с одного выстрела можно. Например если убитые игроки были ранены или
это были хедшоты, глазшоты итп, обращайте внимание на BoneName. Два-три
убийства подряд еще не не читер.
Читер - это если слишком много hit_№_Deadly = on подряд с попаданиями (hit_№_BoneName) ниже шеи. |
2. Повышенная скорость пули
Данная
опция трейнера вызывает в дампе небольшую аномалию. При тестировании
игрок был убит 13 раз, но среди статистики выстрелов hit_№_Deadly = on
встречается всего 2 раза. Но не эта аномалия характеризует читера.
Главной особенностью является, то что у читера несколько выстрелов
подряд имеют одинаковые координаты, и при этом у всех выстрелов одинаковые BoneName и TargetName.
То есть игрок стреляет в одну точку. Даже при тестировании макросов с
пониженной отдачей, без читов, дробные части координат (числа после
запятой) в hit_№_pos_1 получаются у всех выстрелов разные. А без макросов даже целые части чисел-координат различаются на несколько единиц.
Если координаты одинаковые только в hit_№_pos_0 - это НЕ читер!
Пример участка дампа с одинаковыми координатами.
hit_13_BoneID = 4 hit_13_BoneName = bip01_l_calf hit_13_Deadly = off hit_13_TargetName = игрок hit_13_pos_0 = 262.166809, 1.526330, 301.075836 hit_13_pos_1 = 266.344360, 0.182356, 293.195221 hit_14_BoneID = 4 hit_14_BoneName = bip01_l_calf hit_14_Deadly = off hit_14_TargetName = игрок hit_14_pos_0 = 262.166809, 1.526330, 301.075836 hit_14_pos_1 = 266.344360, 0.182356, 293.195221 hit_15_BoneID = 4 hit_15_BoneName = bip01_l_calf hit_15_Deadly = off hit_15_TargetName = игрок hit_15_pos_0 = 262.166809, 1.526330, 301.075836 hit_15_pos_1 = 266.344360, 0.182356, 293.195221 hit_16_BoneID = 4 hit_16_BoneName = bip01_l_calf hit_16_Deadly = off hit_16_TargetName = игрок hit_16_pos_0 = 262.166809, 1.526330, 301.075836 hit_16_pos_1 = 266.344360, 0.182356, 293.195221 hit_17_BoneID = 4 hit_17_BoneName = bip01_l_calf hit_17_Deadly = off hit_17_TargetName = игрок hit_17_pos_0 = 262.166809, 1.526330, 301.075836 hit_17_pos_1 = 266.344360, 0.182356, 293.195221 Здесь
показана только часть дампа. Во всем дампе каждые 5 выстрелов были с
одинаковыми координатами. Соответственно у каждой пятерки выстрелов
координаты были разные. Внимание! Совпадения координат могут быть и у честных игроков, но не так часто как у читеров.
3. Несколько пуль в одном выстреле
Способ выявления ничем не отличается от способа с повышенной скоростью пули. Точно так же почти у всех выстрелов hit_№_Deadly=off,
не смотря на то что читером было убито на много больше игроков. Так же
совпадение координат у нескольких выстрелов подряд и одинаковые BoneName и TargetName.
Единственная разница может возникнуть в количестве одинаковых
выстрелов. У данной опции трейнера устанавливается определенное
количество пуль на выстрел, то есть сколько у читера выставлено столько и
будет совпадающих групп выстрелов. Если например читер выставил 2 пули,
то одинаковые выстрелы будут парами, если 3 то тройками.
В любом
случае даже если игрок не пользуется трейнерами и читами, а совпадение
координат у групп выстрелов наблюдается слишком часто, значит
используется какя-то антиотдача.
4. Красный экран
hit_4_BoneName = bip01_r_thigh hit_4_Deadly = on hit_4_TargetName = ИГРОК hit_4_pos_0 = 28.843910, 0.544642, -30.403458 hit_4_pos_1 = 27.075558, 0.599800, -23.347607 hit_5_BoneID = 7 hit_5_BoneName = bip01_r_thigh hit_5_Deadly = on hit_5_TargetName = ИГРОК hit_5_pos_0 = 28.843910, 0.544642, -30.403458 hit_5_pos_1 = 27.075558, 0.599800, -23.347607
Тоже задачка из разряда: найди 10 отличий. Характеризуется тем, что во всех вытрелах hit_4_Deadly = on, равны координаты и TargetName и BoneName.
Выявляется стандартными средствами администрирования, поэтому в ЧН и ЗП
не стоит обращать внимания. А вот в ТЧ нет никаких стандартных средств
выявления читеров.
Автор: Максим Максимов (Бармен) Принимали участие в тестировании: Ститч, Geka, а так же случайно залетевший читер с ником Эдемка-Бурятия. Техподдержка и обсуждение статьи на нашем форуме.
При копировании статьи прямая активная ссылка на www.mpnetworks.ru с указанием автора обязательна.
|