[bug] P1: реальные носители и совместимый боезапас для ударов по ПУ; убрать фантомное ПВО #118
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
🤖 Filed by Codex, AI-агент Владимира (chexit).
Требование Владимира — P1
Игрок отдаёт приказ на ответный удар вручную. Ракета должна стартовать с собственного боеготового комплекса с совместимым боеприпасом и допустимым режимом наземного удара, а не из позиции игрока. По умолчанию выбирать среди пригодных комплексов тот, у которого больше всего уже заряженных и доступных для такого удара ракет.
Уточнение Владимира от 1 ноября 2026: никакого перехвата условным «ПВО у ПУ» по голой вероятности. Либо удалить этот механизм до реализации, либо разместить возле вражеских площадок реальные игровые комплексы и моделировать их работу. Также нужен различимый тип ударного боеприпаса: обычный счётчик ракет ПВО не делает любую установку средством наземного удара.
Что происходит сейчас
Проверена актуальная main
1a693763fdf98916a39b394bb512340cc84bac87. Команда в lib.rs:2211 иAct::Strikeв map.rs:1045 передают вsim.order_strikeкоординаты игрока. В strike.rs:569 дальность считается от них,start = from + Y * 1.5; используются глобальныйstrikes.stockи модель/звук Kalibr. Подходящий собственный комплекс не выбирается, его наличие, боеготовность и физический боезапас не требуются.Итог: игрок получает переносную условную пусковую; перемещение игрока меняет точку старта и доступность цели по дальности, а расстановка техники для ответного удара не имеет значения. В kimi-work добавлены коллизии/recording этого Flight, но исходная привязка к игроку не исправлена.
Ожидаемое поведение
/airdef strike <ПУ>и кнопка карты сохраняют ручной приказ. РЛС предоставляет разведданные; автоматическое принятие решения об ударе не вводить этой задачей.Приёмка
Убрать условное ПВО противника — входит в этот же issue
Сейчас
cover_of()назначает площадке класс прикрытия по seed, аland_strike()применяетTUNE.cover_pи объявляет ракету сбитой без физического перехватчика. Это обнаружено в main вsim/strike.rs::cover_of/land_strike; таблица вероятностей не является моделью работающего вражеского комплекса.Допустимы два варианта реализации:
cover_pповерх него. Комплексы видимы/разведываемы, уничтожаемы, конечны по боезапасу и живут согласованно с охраняемой площадкой. Их активность, ракеты и исходы видны в live/replay. Исключить двойной перехват: и физической ракетой, и старой вероятностью.Если полная механика выходит за рамки ближайшего исправления, сначала выбрать отключение. Сохранение старой вероятности как скрытого fallback не считается выполнением.
Различимый боезапас и логистика — предложенное развитие
Владимир предпочитает подготовку совместимого боекомплекта через склад и ТЗМ, а не превращение любых зенитных ракет в наземные нажатием кнопки. Типы/режимы учитывать поштучно: боеприпас может иметь воздушный, наземный либо оба подтверждённых режима. Отдельная специальная ударная ракета не является универсальным обязательным требованием для всех комплексов — она нужна там, где этого требует подтверждённый профиль. Нельзя ни объявлять любой перехватчик ударным, ни выдумывать новый strike-only тип там, где допускается соответствующий режим существующего боеприпаса. Полная поездка склад–ТЗМ–носитель — игровой план логистики, а не утверждение о точном реальном порядке снабжения.
Базовый контракт совместимости и раздельного учёта боезапаса нужен уже при исправлении P1. Полную автоматизацию логистики можно реализовать следующим этапом, явно отметив этот остаток в checklist; до неё не эмулировать отсутствующую ракету универсальным stock или произвольной моделью. Если корректного совместимого боеприпаса пока нет, этот вариант удара остаётся недоступным с объяснением.
Предлагаемый игровой сценарий:
Выбор носителя: сначала только реально боеготовые установки с уже загруженным подходящим боеприпасом, затем максимум его свободного количества (после резервов). Если таких нет — предложить/поставить в очередь подготовку с понятным состоянием, а не объявлять пустой носитель готовым или выбирать машину по общему количеству несовместимых ракет.
Проверка реальных наземных возможностей: исправление прежнего списка исключений
Проверен весь боевой каталог main
1a693763fdf98916a39b394bb512340cc84bac87: Patriot/PAC-3, Гепард, Панцирь-С1, С-400/48Н6, С-500/77Н6, IRIS-T SLM, NASAMS/AMRAAM, Бук-М2/9М317, Тор-М2/9М338 и P1-SUN (sim/units.rs,sim/mod.rs). РЛС, склад, ТЗМ, РЭБ и прожектор не являются носителями ракет в этом каталоге.Коррекция Codex: прежнее именное исключение Гепарда и Панциря было внесено без достаточной проверки и снято. Ниже различаются подтверждённая функция, официальное публичное заявление и отсутствие найденного подтверждения. Это исследование для игровых ограничений, а не полноценная инструкция применения или воспроизведение реальных систем управления.
Практический вывод для каталога: нужны отдельные режимы наземного пушечного огня, управляемого ракетного огня по подходящей обнаруживаемой цели и координатного удара. Связывать их с боеприпасом, конфигурацией комплекса и доступностью нужного способа целеуказания. Погрешность разведки, видимость и возможность конкретного режима — разные проверки. Величины игровых дистанций отдельно обосновать масштабом мира; воздушная дальность не становится наземной автоматически.
Отсутствие найденного подтверждения не является доказательством отсутствия возможности. Но неподтверждённую способность нельзя включать под видом реализма: новый источник должен менять проверяемую таблицу capabilities, а не именной blacklist. Необязательная игровая условность может быть предложена отдельно и явно обозначена; Владимир её по умолчанию не разрешал.
Дополнительная приёмка после уточнений
Interceptedот cover и сообщений о фантомном ПВО при любых seed/классах ПУ; прежние настройки/сейвы не включают его обратно.Checklist для исполнения
Связано: #101 (исходная механика), #106, #109, #113, #117, #91, #88. Сохранение вражеских ПУ между налётами остаётся отдельным вопросом.
[bug] P1: ответные удары по ПУ должны запускаться с боеготового комплекса, а не от игрокаto [bug] P1: реальные носители и совместимый боезапас для ударов по ПУ; убрать фантомное ПВО🤖 Agent: Codex — по уточнению Владимира обновлены заголовок и основной текст этого же P1. Добавлены: отключение фантомного cover_p либо полноценные физические защитники; явная совместимость носителя/боеприпаса/режима, без автоматического допуска Гепарда, Панциря и неподтверждённого С-500; подготовка типизированного боекомплекта через склад/ТЗМ с возможностью загрузить его до боя. Максимум боезапаса при выборе считается по уже заряженным совместимым свободным ракетам. Для наземных возможностей реальных прототипов разделены подтверждённые сведения, публичные заявления и игровой дизайн. Полная автоматизация логистики выделена следующим этапом, но отсутствие боеприпаса не разрешено подменять магическим stock.
🤖 Agent: Codex — исправление моего предыдущего уточнения по замечанию Владимира. Снят внесённый без достаточного исследования именной запрет Гепарда/Панциря. Проверены все 10 боевых типов текущего каталога; в основной текст добавлена таблица с первоисточниками и степенью подтверждения. Гепард имеет подтверждённый пушечный наземный режим; Панцирь — пушечный и официальное заявление пресс-службы о ракетном поражении наземных целей; Бук-М2Э прямо заявлен Рособоронэкспортом для наземных радиоконтрастных целей. Для С-400 добавлено конкретное официальное сообщение о применении ударного варианта с оговоркой достоверности источника. Для остальных не выдаётся отсутствие найденного подтверждения за доказательство невозможности. Разведены пушечный, управляемый по обнаруживаемой наземной цели и координатный режимы; отдельная strike-only ракета не навязывается всем системам как универсальное требование. Остальные требования P1 и удаление/замена фантомного прикрытия сохранены.
🤖 Agent: Codex — работа Владимира (chexit).
Обязательная часть: полностью удалён seed-only cover_of/cover_p interception. Никакое виртуальное ПВО площадки больше не уничтожает ракету и не создаёт Intercepted/сообщение. 30 seed regression проверены.
Production player-launch отклонён: без реализованного подтверждённого coordinate-strike loadout нет ракеты от игрока, списания generic stock или его автоматического пополнения. В map/README причина объяснена: исторический запас — только совместимость формата. Flight/collision/recording regressions сохранены через явный test-only synthetic launcher.
Честный остаток P1: физический носитель с muzzle/подготовкой, typed ammunition/reservation/reload/supply и выбор по доступному совместимому запасу ещё не реализованы. Ни S-400, ни Бук, ни прочая техника не получают наземный режим по аналогии или произвольный Kalibr. Пока корректного сочетания в каталоге нет, режим недоступен, как предусмотрено требованием.
Issue оставлен открытым согласно просьбе автора.
🤖 Agent: Codex, при участии GPT-6.1 Terra и GPT-6 Luna. Продолжение в
kimi-work: код.Ручной
/airdef strikeтеперь запускает отдельный игровой RM48U-профиль из физического готового С-400. Выбор: наибольший загруженный ударный боезапас → расстояние → стабильный ID. Боеприпас расходуется сразу один раз, позиция игрока не определяет старт; moving/reloading/cooldown/неисправная пусковая исключаются. Четыре ячейки делятся между ПВО и ударными ракетами.ground-stockявно задаёт sandbox-запас склада (по умолчанию 0);ground-load/ground-unloadобменивают по одной ракете, сохраняя снятые ракеты ПВО на складе. Данные сохраняются, обычное снабжение не заполняет занятые RM48U ячейки.Есть отдельный model ID, холодный выброс, задержка двигателя/дыма, carrier ID в записи и корректная относительная сетка сэмплов от точки muzzle. Неизвестное фантомное ПВО по-прежнему удалено. Проверены conservation, отказ без склада/носителя, выбор носителя, запрет повторного расхода, save/parser/dirty mark, replay ignition/smoke; настоящий WASM fixture проверяет загрузку/возврат через команды.
Это игровой профиль по ведомственному сообщению, а не независимая сертификация или реальные параметры оружия. Остались автоматическая доставка RM48U через ТЗМ, дополнительные подтверждённые профили (включая разбор Бука) и игровая визуальная приёмка самого пуска. Issue не закрываю.
🤖 Agent: Codex, with GPT-6.1 Terra and GPT-6 Luna.
RM48U orders now reserve the actual S-400 carrier and a loaded cell, animate that cell lid, then spend ammunition exactly once at ejection. Invalidated preparation cancels without spending; pending orders do not resume after world reload. Physical RM48U accelerates after ejection. Transport/replenishment of strike rounds through the TZM remains outstanding.
Pushed code in
966b52fand visual verification/docs in2689d93on kimi-work. Core: 169 passed, 7 ignored; 4 scenarios passed. Adapter: 53 tests, 1 boundary test and 4 scenarios passed. Actual WASM contract: 21 steps passed. Implementation and checksIssue state intentionally unchanged.
🤖 Agent: Codex, with three GPT-6.1 Terra agents.
Добавлена физическая доставка одной RM48U из конечного запаса склада через ТЗМ к С-400. Вытесненная ракета ПВО возвращается грузом ТЗМ на склад; generic reload не создаёт ударный боезапас. Заявка, груз и марш сохраняются; оперативное задание восстанавливается после загрузки. Проверены реальное движение Sim.step на плоском WorldSource, передача/возврат, истощение, прерывание, несовместимость, заполненные ячейки, unload, разрушение/repair и полный state_text → apply_state с завершением маршрута.
Неподтверждённые профили Бука и других носителей не добавлялись. Обратный автоматический вывоз RM48U от удалённого носителя и отдельная UI-отмена заявки пока отсутствуют; ground-unload требует склад рядом. Полная визуальная приёмка пуска и сложного маршрута остаётся.
Published on kimi-work through 6e2d661; current docs/handoff:
e70d7a6. Combined checks: core release 187 passed + 4 scenarios (7 ignored); adapter 56 + 1 boundary + 4 scenarios; actual WASM 24 steps. Technical handoff, limits and reproduction. Issue state intentionally unchanged.🤖 Agent: Codex, with GPT-6.1 Terra and GPT-6 Luna.
Обратный вывоз RM48U от удалённого С-400 теперь автоматизирован (
bb931ab,e9fbaba, b0085cb; интеграционное исправление910f02c). ground-unload вдали создаёт резерв одной ракеты от пуска; ТЗМ физически забирает её и возвращает на конечный склад. Ground-cancel отменяет ожидающую доставку/вывоз без телепортации уже забранного груза. Два типизированных места RM48U/48Н6 учитываются отдельно от существующих generic reload-пакетов.Проверены полное движение Sim.step, save/restore до и после забора, резерв от запуска, отмена, ёмкость, движение/повреждения носителя и ТЗМ, уничтожение/repair. Потеря ракеты с отказавшими ячейками сбрасывает резерв и не создаёт отвергаемый loader-ом save. В формат справа добавлены поля30 ground_return и31 return_cargo, старые saves default=false.
Объединённые core release190+4 и mod60+1boundary+4 прошли. Сложный игровой рельеф и полная визуальная приёмка пуска остаются; неподтверждённые носители не добавлялись. Handoff и команды.
Issue state intentionally unchanged.
🤖 Agent: Codex.
Published
cbd6067andab737e7: clarified empty typed stock after a user placed a depot next to S-400 and ground-load still failed. Default depot has 0 RM48U; generic reload stock is separate. The error now identifies the nearby empty depot and gives ground-stock syntax; its map card displays typed stock. No ammunition is created by loading or moving the depot. Added core conservation/error regression and actual WASM adjacent-empty-depot feedback assertion (27-step light fixture passed).Added ground strike guide: own unit IDs versus enemy site IDs, stock setter semantics, one missile per load, shared cells, automatic launch reconnaissance, strike selection, remote delivery/return/cancellation. Issue remains open.
🤖 Agent: Codex — повторное ревью
kimi-work@61aaa0bf359026711ba811a7f7e9877ce253ead2.Отдельный подтверждённый блокер ТЗМ оформлен в #128: невыполнимый возврат RM48U перехватывает свободные машины и блокирует независимые поставки. Native-проверка с контрольным сценарием приложена там.
Ещё небольшой остаток требования «по умолчанию выбирать носитель с наибольшим доступным совместимым запасом»:
order_strikeисключает последнюю зарезервированную под вывоз ракету при проверке пригодности, но сортирует по сыромуground_rounds, без вычетаu32::from(ground_return).Воспроизведено отдельным native-тестом: обе исправные С-400 имеют по 2 RM48U, у ближайшей 1 зарезервирована заявкой
unload_ground_round, у дальней резервирования нет. Свободный запас соответственно 1 и 2.order_strikeвыбирает ближайшую из-за равенства raw stock. Пример: цель z=500; носители z=400 и z=200; склад далеко, свободная ТЗМ присутствует, cooldown=0. Фактический picked ID совпадает с первым носителем.Предлагаю при выборе считать свободный запас
ground_rounds.saturating_sub(u32::from(ground_return)), а затем применять существующие distance/id tie-breakers. При появлении других резервов учитывать их тем же единым расчётом. Приоритет этого остатка P3; текущий выбор не создаёт боезапас и не разрешает запуск зарезервированной последней ракеты. Новую issue-дубликат #118 не создаю.Основная физическая цепочка «совместимый носитель → подготовка → вылет → расход typed ammunition» присутствует, в отличие от старого пуска от игрока. Новые замечания не означают, что основное исправление отсутствует.