Lethal Company

Lethal Company

Not enough ratings
Как девушка-призрак выбирает своих жертв
By KKRLL56
Данное руководство является переводом оригинального руководства How the Ghost Girl Picks Her Victims (Programmatically)
___
В этом руководстве вы узнаете, на что обращает внимание девушка-призрак, выбирая, выбирая свою жертву. Вся информация была взята непосредственно из кода игры.
2
4
2
   
Award
Favorite
Favorited
Unfavorite
Вступление
❗ ПРЕДУПРЕЖДАЮ, ГАЙД МОЖЕТ ИСПОРТИТЬ ВАМ УДОВОЛЬСТВИЕ ОТ ИГРЫ: ЛУЧШЕ ИССЛЕДУЙТЕ ЕЕ САМОСТОЯТЕЛЬНО 🤘


После того как почти в каждой игре на меня нападала девочка-призрак я решил провести небольшое расследование, чтобы выяснить, почему она всегда выбирает меня. Так как эта игра написана на Unity, ее код можно легко декомпилировать на C#, но для соблюдения конфиденциальности разработчиков я не буду показывать их код, а объясню, как он работает на своём примере. На самом деле результат довольно интересный и использует RNG (Рандомный генератор чисел)😁.
Часть 1 - Что влияет на скрытую стату страха
Первое, что делает Девушка, решая, на кого охотиться, - просматривает всех текущих игроков в игре и проверяет их "Уровень безумия", а также "Общее кол-во поворотов". Тот, у кого эти два показателя окажутся самыми высокими, будет сохранен в памяти игры и использован в дальнейшем.


Уровень безумия зависит от нескольких факторов, но если объяснять по-простому, это число, которое медленно увеличивается в течение игры под влиянием некоторого множителя. Более подробно я расскажу об этом стате в другом руководстве. Просто знайте, что если вы один, вы будете терять здравомыслие с разной скоростью в зависимости от местоположения, но если вы с кем-то еще (или слушаете, как кто-то говорит по рации), вы наоборот получаете здравомыслие.

"Кол-во поворотов" обновляется при каждом повороте камеры. В основном это просто поворот влево или вправо, встряхивание мыши и т. д.

Отметив, кто из игроков совершает больше всего поворотов и у кого самый высокий уровень безумия, игра начинает формировать скрытый стат. "Страх" для каждого игрока, который начинается с базового значения 80 для каждого игрока. Игра проверяет каждого игрока на следующие условия:

  • Если у игрока самый высокий уровень безумия = +50 "Страха"

  • Если у игрока самый высокий уровень поворота = +30 "Страха"

  • Получал ли игрок ранее критические ранения = +10 "Страха"

    * Критическое ранение определяется в Кодексе игры как падение ниже 20 HP.
  • В начале раунда Во время спавна девочки, (или, когда текущая цель мертва, и девочка выбирает новую цель) у игрока есть предмет стоимостью более 150 ломов? Да = +30 "Страха"


Таким образом, если вы больше всего раз поворачивались (+30), имеете критическое ранение (+10) и дорогой предмет (+30), то общее количество страха составит 150.

Данный текст стал бессмысленным после добавления примечания (см. ниже)
Все условия имеют смысл, но поскольку я всего лишь новичок в данной игре, мне все еще трудно поверить, что вы начнете раунд, держа в руках предмет стоимостью более 150 ломов (Последнее условие). Существует очень мало предметов, которые соответствуют этому условию. Но чтобы избежать попадания под данный параметр, я бы просто выбросил все предметы в начале раунда.


(Не забудьте обмануть своих друзей, заставив их держать реактивный ранец в руках, чтобы искусственно повысить их страх и увеличить их шансы быть целью призрака)
Часть 2 - RNG и как он работает
Так как это довольно стандартный код RNG, и его можно найти на форумах Unity. то я не побоюсь показать его вам (надеюсь меня не забанят :C ) Если вы не знаете, что такое RNG, то просто знайте, что чем больше у вас стат "Страха", тем выше шанс, что вы будете жертвой.

Я быстро пройдусь по нескольким переменным, чтобы код было проще понять.

randomSeed = Случайное число, от 0 до 158 + сид карты.
num = Общее кол-во скрытого стата "Страх"
num2 = Случайно число от 0.0 до 1.0
num3 = (Кол-во страха Игрока / Общее кол-во страха)

'Weight' - список статы "Страх" вашей команды.



Пора разобрать каждый участок кода, чтобы было проще понять.

1.Этот участок код просто складывает все страхи игроков и заносит значение в переменную num;

2.Если общее количество стата "Страх" меньше или равно 0, программа выбирает случайного игрока.

3.Участок кода присваивает переменной num2 плавающее значение между 0,0 и 1,0, которое в дальнейшем будет использоваться для выбора цели для призрака.

4.Этот участок кода является основой всего и принимает окончательное решение, так что позвольте мне разложить его по полочкам.

Сначала проверяется, больше ли у игрока значение "СТРАХА", если больше 0. Если да, то берется среднее значение страха и добавляется к общему количеству "усредненных" страхов. (num3)

Затем проверяется, больше или равно ли значение общего количества "усредненных" страхов (num3) случайной переменной, которую мы получили в разделе #3 (num2).

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

5. Если ему не удается выбрать игрока с помощью данного алгоритма, то он просто выбирает совершенно случайного игрока. Вы также можете заметить, что код записывает текущие значения в журнал отладки, чтобы разработчик мог проверить их позже, чтобы увидеть, какие значения (или их отсутствие) привели к такому исходу событий.
Часть 3 - Замечание
Ценное замечание от прекрасного человека


Originally posted by Очень хороший человек:
Просматривая код, я тоже немного порылся в источниках, и в вашем руководстве при проверке условий говорится следующее:
  • В начале раунда у игрока есть предмет стоимостью более 150 ломов? Если да, то к скрытому стату добавляется 30 "СТРАХА".
Я не уверен, что это так. Функция ChoosePlayerToHaunt() действительно делает эту проверку и добавляет это значение, и эта функция вызывается в функции DressGirlAI.Start() и DressGirlAI.ChooseNewHauntingPlayerClientRpc(), которая будет вызвана только в том случае, если цель преследования призрака умрет, а функция Start() вызывается при спавне девушки, а не в начале раунда.

Так что, как мне кажется, что это условие проверяется не в начале раунда, а во время спавна девочки-призрака, или когда умирает её текущая цель.
7 Comments
KKRLL56  [author] Oct 14, 2024 @ 1:41pm 
Декомпиляция
solo leveling Oct 14, 2024 @ 7:47am 
откуда код?
Просто Серёжа Oct 13, 2024 @ 8:50am 
+rep
Фиданука Япомиду Jan 16, 2024 @ 2:27pm 
имбо , +награда
4 Cheeses Jan 12, 2024 @ 10:24am 
Когда я в первый раз её увидел, понял что начал становиться натуралом...
KKRLL56  [author] Jan 9, 2024 @ 6:13am 
Всегда рад помочь :):wowsfishpalm:
Katsu Jan 9, 2024 @ 4:30am 
Спасибо помог:GhostLoveEyes:
Награду за такое выдал