Первый раз на сервере? Узнай как зайти →

Загрузка данных...

Патчноут

Обновление "Сезон охоты" от 10.09.2026

Прошлое обновление было целиком «под капотом» — мы разгружали сервер и ускоряли заход в игру. В этот раз работа продолжилась там же, но у неё появилась и видимая часть: вражеская пехота научилась доставать вас гранатой из-за стены, гранатомётчики перестали быть бесполезными против живой силы, а автономные FPV-дроны из простого «летит и таранит» превратились в настоящий рой со своими планами на вашу жизнь, обходом препятствий и заходом технике в корму. Если говорить в целом, то заброшенная модификация разработчиком VCOM получила новую версию, которая не только добавила новое, но и внесла большое количество оптимизаций.

Всё, что описано ниже про поведение ИИ, касается только ботов. Ничего из этого не меняет ваше собственное снаряжение, ваши дроны и вашу технику.


Из-за укрытия больше не отсидеться

Штатный ИИ ArmA стреляет только по тому, что видит. Засел противник за стеной, за бруствером, в дверном проёме — и для ботов он попросту перестал существовать: они не видят цели, значит не стреляют, значит и повода уходить с места у вас нет. Отсюда и брались бои, где половина перестрелки — это переглядывание из-за одного и того же угла.

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

Что это значит на практике: укрытие перестало быть бесплатным. Оно по-прежнему спасает от пуль, но если вы сидите за ним слишком долго и слишком предсказуемо, к вам прилетит.

Работает это в двух случаях:

  1. противник в укрытии — вас не видно, поэтому по вам не стреляет никто и ничего;
  2. скопление на виду — одиночного бойца бот достанет и из автомата, а вот нескольких, сгрудившихся в одном месте, стволом разом не накрыть. Ровно та цель, ради которой гранатомёт и придуман. Порог свой у каждого средства: подствольнику довольно пары противников рядом, дорогой выстрел из трубы тратится на скопление покрупнее.

Гранатомётчик наконец воюет против пехоты

Отдельная старая беда: боец с РПГ в руках был против пехоты бесполезен. У него в трубе кумулятивный выстрел — тот, что для брони, — и движок игры менять его отказывался. Приказать такому бойцу выстрелить по человеку тоже нельзя: команда принимается и тут же отменяется, труба показывается в руках и уходит за спину.

Мы зашли с другой стороны, ведь Арма - игра серьёзная, и если ты не нагородил костылей в скриптах чтоб это начало работать, то считай, никогда не писал код для армы. Оказалось, что боец, у которого нет ни одного противотанкового выстрела, стреляет по пехоте сам и немедленно — так же, как ведут себя одноразовые РШГ-2 с термобарическим зарядом. Значит, не нужно ничего ему приказывать: достаточно не оставить выбора.

Теперь так и происходит. Пока группа знает про пехоту поблизости и не знает про технику, у гранатомётчика временно изымаются противотанковые выстрелы — и он сам, по собственному решению движка, применяет по живой силе то, что осталось: осколочный или термобарку. Как только рядом появляется техника, весь противотанковый запас возвращается ему немедленно, целиком.

Несколько важных подробностей:

  1. фугас от кумулятива отличается по конфигу боеприпаса, а не по списку названий. Мы смотрим на радиус осколочного поражения самого заряда, поэтому механизм одинаково работает с любым модом и любым выстрелом, включая те, которых у нас ещё нет;
  2. боеприпасы ищутся не только в разгрузке, но и по «спискам» совместимости — иначе половина зарядов из RHS просто не была бы видна, и боец так и остался бы с кумулятивом;
  3. труба не тратится на одиночку: чтобы боец потратил дорогой заряд, рядом с целью должно быть несколько противников;
  4. дистанции разные: подствольник работает до 300~500 метров, большой гранатомёт — 400~700. Ближе нижней границы радиуса поражения боеприпаса никто не стреляет: осколки достанут своих.

Никакого «залпа по звонку»

Первая же проверка на живом бою показала неприятное: все группы открывали навесной огонь одновременно. Со стороны это читается как команда, которой никто не отдавал, — три-четыре гранаты в одну секунду по всему полю.

Раньше от таких совпадений спасались вероятностью: мол, пусть каждый выстрел берётся с шансом в треть. Это не помогает — совпадения просто становятся реже, но остаются такими же неестественными. Мы вероятность убрали совсем и заменили её разносом по времени и по месту:

  1. каждая группа входит в общий ритм со случайной задержкой, а не с нуля;
  2. между выстрелами одной группы проходит около 40 секунд, и эта пауза сама по себе плавает от половины до полутора своей длины;
  3. рядом со свежим выстрелом своих второй не берётся: какое-то время в радиусе 300 метров. Именно рядом — потому что совпадение в разных концах карты никто и не заметит.

Своих не накрывают

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

Заодно решилась мелочь, которая портила всю картину: из трубы нельзя стрелять лёжа. Стрелка на время выстрела принудительно поднимают с земли — и на этот момент помечают, чтобы соседние механизмы (реакция на попадание, уход в укрытие) не роняли обратно того, кого только что подняли.

Лежачих больше не добивают (Да ладно!?)

Раненый в отключке по ACE теперь снимается с прицела у всего ИИ разом — и у ванильного, и у боевого. Раньше упавший боец оставался законной целью: его продолжали расстреливать, ох уж эти 200 авульсий в торсе и 50 больших огнестрелов...

Сделано это не правкой одного мода, а отметкой на самом раненом — так закрываются все случаи сразу, включая ИИ, у которого свои правила выбора цели. Прежнее состояние запоминается и возвращается при подъёме.


Боты ивентолога теперь воюют на сервере

Тонкость, которую было почти невозможно заметить, но которая всё это время портила ивенты: ИИ, поставленный ивентологом через Zeus, считался на его личном компьютере. А боевой ИИ у нас подключён серверным модом — то есть на машине ивентолога его нет вовсе. Получалось, что боты, расставленные вручную, воевали по-ванильному: без фланговых обходов, без укрытий, без дымов, — и вдобавок нагружали чужой домашний компьютер (но если вдруг что, мы вернемся к этому вопросу...).

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

Сервер: продолжение разгрузки

Прошлый раз мы научили боевой ИИ считаться с расстоянием: рядом с игроками группы работают в полную силу, далеко — в урезанном режиме, совсем далеко — засыпают. Механизм работал, но у него нашлись два изъяна, и оба закрыты.

Группы «дребезжали» на границе. Группа, оказавшаяся ровно на пороге, переключалась туда-сюда по нескольку раз подряд, и каждое переключение стоило работы. Замер на живом бою: 12 переходов, из них 9 — метания на границе. Теперь у порога есть полоса нечувствительности, и в том же бою при 28 группах и занятой границе — ноль лишних переходов.

Спящие группы стоили дороже, чем должны. Само усыпление теперь — пауза, а не выход: раньше при каждом пробуждении с каждого бойца снимались и заново вешались по пять обработчиков событий. А дорогая проверка «пора ли просыпаться» считалась каждый кадр для каждой спящей группы — теперь раз в десять секунд. Спящих групп на карте обычно больше всего, так что экономия набегает именно здесь.

Дальше — обычная работа по цене вещей, которая на поведение ИИ не влияет вовсе:

  1. вопрос «эта сторона нам враждебна?» задавался по несколько раз в секунду на каждого бойца, идущего в укрытие, и на каждого солдата на карте при каждом поиске врага. Ответ за игру не меняется ни разу — теперь он считается один раз;
  2. список «кто услышал выстрел» рассылался всем клиентам сервера на каждый залп каждого бота. Теперь каждому уходит только то, что касается его собственных ботов;
  3. ближайший к врагу боец искался перебором всей карты со стороны противника. Теперь — по своей же группе, где он заведомо и находится;
  4. роль бойца (экипаж, пилот, обычный стрелок) определялась поиском подстроки в названии класса каждые несколько секунд. Теперь считается один раз и запоминается;
  5. минирование и подрывные заряды вырезаны из кода целиком. Проекту они не нужны давно, но выключения настройкой не хватало: она перебивалась другим значением. Теперь их просто нет — вместе с обходом конфигурации, который они за собой тянули.

FPV: дроны-камикадзе стали охотниками

Автономные дроны появились в прошлом обновлении и умели ровно одно: найти ближайшую цель и полететь в неё по прямой. Этого хватало, чтобы механика заработала, и не хватало ни на что больше — дрон врезался в первый же дом, брал цель, которой не видел, и восемь аппаратов дружно уходили в один пикап.

Теперь всё это вынесено в отдельный мод и переписано целиком. Ниже — как оно работает.

Проблема ИИ

Проблема ванильного ИИ, да и любого другого, что бы написан для игры - топорность. Ни один скрипт и ни один FSM не умеет и никогда не будет уметь быстро летать на низких высотах, крутить виражи, рыскать и совершать маневры уклонения. Именно с этим мы и столкнулись, когда решили делать ИИ для FPV дроном. Как итог: мы не двигаем аппарат руками ни на одном участке атаки, и движок тоже не двигает. Всё это происходит за счёт чистых скриптовых манипуляций над объектом. По сути, пришлось писать собственную модель симуляции полёта FPV, а ведь резкими поворотами тут не отделаешься. Инерция, дуговые полёты, ускорение, плавные повороты...Надо ли объяснять сколько строк кода это стоило?

Чтобы из полёта получилось попадание, точка, к которой ведут аппарат, ставится за целью, а не в неё: игра не таранит то, куда летит, — она тормозит и зависает над точкой. Целясь насквозь, мы получаем проход через цель на её высоте. Высота снижается постепенно, по мере сближения, а сама точка упреждается на скорость цели: машина на ходу иначе просто уезжает из-под аппарата.

И отдельно — то, как это выглядит с земли. Заход выгибается дугой и качается по высоте, на боевом курсе аппарат слегка рыскает, доворачивает с ограниченной скоростью и закладывает крен в развороте, а высоту сбрасывает не одним движением на рубеже атаки, а плавно, за полторы сотни метров до него. На последних метрах рыскание сходит на нет, чтобы аппарат не промазал мимо человека или техники.

Дрон видит, куда летит

Две правки, которые убрали самое глупое поведение прошлой версии.

Цель должна быть видна. Поиск целей возвращает всех, кто есть в радиусе, и укрытий не различает вовсе: человек за стеной дома и танк за гребнем холма в этом списке ничем не отличаются от стоящих в чистом поле. Дрон брал такую цель и добросовестно летел в неё по прямой — то есть в стену. Теперь цели перебираются по порядку приоритета, и первой берётся та, к которой есть прямая видимость. А если цель скрылась уже в заходе — аппарат не таранит вслепую и не бросает её сразу: набирает высоту и ходит кругом над местом, где её видели, около десяти секунд. Показалась — добивает заход, не показалась — берёт другую.

Препятствия облетаются. Аппарат смотрит вперёд лучом на столько метров, сколько пролетит за ближайшие пару секунд. Чисто — летим как летели; упёрлись — веером ищем ближайшее свободное направление и уходим туда, не меняя цели. Обойдя преграду, дрон снова видит цель и доворачивает на неё сам. Маршрут никто не строит: настоящему оператору тоже не нужен план облёта квартала, ему нужно не удариться в ближайшие пару секунд.

Кого он выбирает

У каждой цели считается счёт, и берётся цель с наименьшим. Счёт начинается с расстояния в метрах, а дальше к нему прибавляются штрафы и отнимаются надбавки — в тех же метрах. Поэтому любую настройку можно прочесть буквально: надбавка в семьсот значит «за такой целью стоит пролететь лишних семьсот метров».

  1. гусеничная техника — надбавка. Противотанковый дрон один, и потратить его на танк или БМП нужнее, чем на пикап: у колёсной машины борт пробьёт и стрелок, а гусеничную кроме дрона никто не достанет. Отличается она не списком классов — его пришлось бы вести руками под каждый мод и каждую карту, — а тем, что о машине говорит её собственная конфигурация;
  2. броня — надбавка соразмерно ей. Она делит технику внутри каждой группы: танк идёт впереди БМП, колёсный БТР — впереди бронеавтомобиля, тот — впереди грузовика;
  3. скопление пехоты — надбавка за каждого соседа в радиусе поражения заряда, но не больше чем за четверых, иначе толпа на другом конце карты перевешивала бы всё остальное. Трое в куче стоят дальней дороги больше, чем одиночка под носом;
  4. пустая техника — штраф. Рядом почти всегда есть занятая;
  5. выбитая машина — штраф. Горящий остов формально жив, стоит и тянет к себе дроны, пока рядом воюет невредимая техника. Выбитой считается та, что не ходит и не стреляет, — причём вооружение проверяется по состоянию самих башен и орудий: машина, потерявшая наводчика, но сохранившая исправную пушку, выбитой не считается.

Авиацию не берёт ни один тип дрона: он её не догоняет, а попытка выливается в погоню через всю карту. Пехоту внутри машины противопехотный дрон тоже не трогает — такую цель возьмёт противотанковый. Раненый в отключке целью не считается.

Как он бьёт

Тут всё зависит от заряда, и разница принципиальная.

Противопехотный заряд термобарический — он кладёт всех в круге радиусом с десяток метров, и подрываться вплотную ему незачем: достаточно пройти рядом. Такой дрон срабатывает на наибольшем сближении.

Противотанковый заряд кумулятивный — при подрыве из него вылетает пенетратор и идёт строго по оси заряда. Взрыв в пяти метрах от танка не делает ровно ничего. Поэтому такой аппарат теперь врезается, по положению корпуса образуется ось, по которой идёт пенетратор.

А раз бить всё равно в корпус, то небезразлично, с какой стороны. Лоб танка держит то, чего не держат борт, корма и крыша, — и настоящие расчёты заходят именно сзади и сверху, не из красоты, а потому что иначе заряд тратится впустую. Поэтому аппарат выбирает не точку на броне, а сторону подхода: точка попадания получается сама.

  1. заходит с носа — уводит заход в заднюю четверть и приходит в борт или корму;
  2. подходит с борта или кормы — так и бьёт, ничего не перестраивая;
  3. машина крутится на месте — обход не выигрывается вовсе: башня доворачивается быстрее, чем дрон успевает зайти за неё. В этом случае аппарат бьёт сверху: крыша не зависит от того, куда повёрнута машина, и брони на ней меньше всего;
  4. ближе сорока метров манёвров нет никаких. С двух-трёх десятков метров обход выглядит дико и стоит дороже любого выигрыша: аппарат разворачивается от цели и половину времени летит от неё прочь.

Решение о заходе принимается один раз и назад не отыгрывается — иначе на границе секторов аппарат начинает метаться и болтается на месте, никуда не двигаясь.

Рой Дронов не сваливается в одну машину

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

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

Отметки протухают сами: сбитый по дороге аппарат снять свою уже не может, поэтому она живёт несколько секунд и обновляется, пока он жив и держит цель.

Заодно вылечены зависания

Дроны иногда повисали боком и дёргались вперёд-назад. Причин оказалось три, и все три закрыты: проверка видимости считала технику закрытой ею же самой (точка прицеливания машины лежит внутри корпуса), приказ движку не обновлялся вслед за точкой ведения и тянул аппарат против его же скорости, а принудительный разворот корпуса носом по курсу попросту гасил движение.

Что осталось прежним

Дроны, которые бросают игроки, не изменились ни на грамм. Всё описанное касается только автономных аппаратов, которые ставит ивентолог. Ваш FPV по-прежнему полностью под вашим управлением, с терминала, как и был.


Для ивентологов

Автономные дроны вынесены в отдельные классы. В списке Zeus они называются «FPV AP (автономный, …)» и «FPV AT (автономный, …)» — отдельно для синих. Обычные FPV игроков из панели Zeus убраны: они всё равно не полетят, у них ИИ выключен намеренно, потому что ими управляет живой оператор.

Поставленный дрон сразу автономен — искать цель он начинает сам, ничего дополнительно делать не нужно. Своего интерфейса у него нет, он слушает обычные приказы:

  1. приказа нет — сам выбирает цель поблизости и идёт на таран, без цели держит круг над районом;
  2. приказ на точку — это район работы: летит туда, кружит и ищет цель там;
  3. приказ на конкретного бойца или машину — эта цель и есть цель, самодеятельность отменяется;
  4. взяли управление сами — автономность снимается целиком.

Появились два модуля. «FPV: автономный режим» включает его вручную и позволяет задать в окне цели, скорость, радиус поиска, высоту и время работы. «FPV: снять автономный режим» — выключает. Модуль забирает либо тот дрон, на который его бросили, либо синхронизированные с ним, либо — если ни того, ни другого — все FPV вокруг себя в заданном радиусе. Последнее удобно, когда дронов подняли десяток: поставить модуль в их гущу быстрее, чем синхронизировать каждый.

Дрон, не нашедший цели, снимается с карты по истечении времени работы, чтобы не копиться.

В заключение можно добавить, что это обновление полностью про ИИ, и словами не передать сколько сил и времени уходит даже не написание кода, а на его тестирование. Делать собственный ИИ в арме - сущий ад. Так или иначе - оно работает, оно оптимизировано. Более чем иначе - у нас появился собственный ИИ для FPV Дронов и это не может не радовать.

С уважением, Schaer

13

02 Комментарии 4

Рохлин А.С.
Рохлин А.С. Почётный игрок RED Main Investor
10 СЕН 2026 — 18:48
Ой мама, будет весело
Щербаков П.Н
Щербаков П.Н Почётный игрок RED Supporter
10 СЕН 2026 — 19:04
Теперь надо рыть землянки
Таранов Д.Ю.
Таранов Д.Ю. Почётный игрок RED Supporter
10 СЕН 2026 — 22:50
Похоже пора на пенсию...)))
Рохлин А.С.
Рохлин А.С. Почётный игрок RED Main Investor
12 СЕН 2026 — 00:52
Бежишь? )