SkillAgentSearch skills...

Munition AutoPatcher VC

No description available

Install / Use

/learn @shkond/Munition AutoPatcher VC
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

Munition AutoPatcher vC

Fallout 4武器自動パッチツール - WPF MVVM実装

概要

このツールは、Fallout 4の武器MODに対して、弾薬マッピングの設定を自動生成するためのWPFアプリケーションです。Mutagenを使用してプラグインから武器データを抽出し、弾薬とのマッピングを行い、2つの出力形式をサポートします:

  • ESPパッチモード(デフォルト): ESL-flagged ESPパッチを生成し、武器レコード(WEAP)に直接弾薬マッピングを適用
  • INIモード: RobCo Patcherの設定ファイル(INI)を生成

機能

  • 設定画面: ゲームデータパスの設定、出力パスの設定、マッピング戦略の設定
  • 武器データ抽出: Mutagenを使用したプラグインからの武器データ抽出(実装済み)
    • 自動的にゲームのインストールを検出
    • ロードオーダーを考慮した武器レコードの読み込み
    • WinningOverridesを使用した競合解決
    • 武器の名前、ダメージ、発射速度、デフォルト弾薬などを抽出
  • マッピング画面: 武器と弾薬のマッピング管理、マッピング生成
  • 出力生成: 2つの出力モードをサポート(実装済み)
    • ESPパッチモード(デフォルト): ESL-flagged ESPパッチファイル生成
      • MunitionAutoPatcher_Patch.esp として出力
      • 確認済みの武器→弾薬マッピングを直接WEAPレコードに適用
      • 必要なマスター参照を自動的に含める
    • INIモード: RobCo Patcher用の設定ファイル生成
      • タイムスタンプ付きINIファイル生成
      • 手動マッピングフラグのサポート
      • ディレクトリの自動作成
  • ログ/ステータス: リアルタイムログ表示とステータス表示

技術スタック

  • .NET 8.0
  • WPF (Windows Presentation Foundation)
  • MVVM (Model-View-ViewModel) パターン
  • Microsoft.Extensions.DependencyInjection (DI)
  • Microsoft.Extensions.Hosting
  • Mutagen.Bethesda.Fallout4 (0.51.5) - プラグイン読み込みとデータ抽出

プロジェクト構造

MunitionAutoPatcher/
├── Models/                          # データモデル (9ファイル)
│   ├── AmmoCategory.cs
│   ├── AmmoData.cs
│   ├── ConfirmationContext.cs       # 確認コンテキスト
│   ├── ExtractionContext.cs         # 抽出コンテキスト
│   ├── FormKey.cs
│   ├── OmodCandidate.cs
│   ├── StrategyConfig.cs
│   ├── WeaponData.cs
│   └── WeaponMapping.cs
├── ViewModels/                      # ビューモデル
│   ├── AmmoViewModel.cs
│   ├── MainViewModel.cs
│   ├── MapperViewModel.cs
│   ├── SettingsViewModel.cs
│   ├── ViewModelBase.cs
│   └── WeaponMappingViewModel.cs
├── Views/                           # ビュー (XAML + Code-behind)
│   ├── InputDialog.xaml
│   ├── MainWindow.xaml
│   ├── MapperView.xaml
│   └── SettingsView.xaml
├── Services/                        # サービス層
│   ├── Helpers/                     # レガシーヘルパー (※段階的廃止予定)
│   │   ├── CandidateEnumerator.cs
│   │   ├── DiagnosticWriter.cs      # static版 (Implementations版へ移行推奨)
│   │   └── ReverseMapBuilder.cs
│   ├── Interfaces/                  # サービスインターフェース (17ファイル)
│   │   ├── IAmmunitionChangeDetector.cs
│   │   ├── ICandidateConfirmer.cs   # 候補確認戦略
│   │   ├── ICandidateProvider.cs    # 候補提供戦略
│   │   ├── IConfigService.cs
│   │   ├── IDiagnosticWriter.cs     # 診断出力サービス
│   │   ├── IEspPatchService.cs      # ESPパッチ生成
│   │   ├── ILinkResolver.cs         # リンク解決
│   │   ├── ILoadOrderService.cs
│   │   ├── IMutagenAccessor.cs      # Mutagen境界API
│   │   ├── IOmodPropertyAdapter.cs  # OMODプロパティアダプタ
│   │   ├── IOrchestrator.cs
│   │   ├── IPathService.cs          # パス解決サービス
│   │   ├── IRobCoIniGenerator.cs
│   │   ├── ITypedAmmunitionChangeDetector.cs
│   │   ├── IWeaponDataExtractor.cs  # 武器データ抽出
│   │   ├── IWeaponOmodExtractor.cs
│   │   └── IWeaponsService.cs
│   └── Implementations/             # サービス実装 (30ファイル)
│       ├── AttachPointConfirmer.cs  # アタッチポイント確認
│       ├── CobjCandidateProvider.cs # COBJ候補提供
│       ├── ConfigService.cs
│       ├── DiagnosticWriter.cs      # DI対応版診断出力
│       ├── EspPatchService.cs       # ESPパッチ生成実装
│       ├── FormKeyNormalizer.cs     # FormKey正規化
│       ├── IMutagenEnvironment.cs
│       ├── IMutagenEnvironmentFactory.cs
│       ├── IResourcedMutagenEnvironment.cs
│       ├── LinkCacheHelper.cs
│       ├── LinkResolver.cs          # リンク解決実装
│       ├── LoadOrderService.cs
│       ├── MutagenAccessor.cs       # Mutagen境界API実装
│       ├── MutagenEnvironmentFactory.cs
│       ├── MutagenV51Detector.cs
│       ├── MutagenV51EnvironmentAdapter.cs
│       ├── MutagenV51OmodPropertyAdapter.cs
│       ├── NoOpMutagenEnvironment.cs
│       ├── OmodResolutionDiagnostics.cs
│       ├── OrchestratorService.cs
│       ├── PathService.cs           # パス解決実装
│       ├── ReflectionFallbackDetector.cs
│       ├── ResourcedMutagenEnvironment.cs
│       ├── ReverseMapBuilder.cs
│       ├── ReverseMapConfirmer.cs   # 逆参照確認
│       ├── ReverseReferenceCandidateProvider.cs # 逆参照候補提供
│       ├── RobCoIniGenerator.cs
│       ├── WeaponDataExtractor.cs   # 武器データ抽出実装
│       ├── WeaponOmodExtractor.cs   # オーケストレータ
│       └── WeaponsService.cs
├── Commands/                        # コマンドハンドラ
│   ├── AsyncRelayCommand.cs
│   └── RelayCommand.cs
├── Converters/                      # 値変換
│   ├── BoolToVisibilityConverter.cs
│   └── InverseBoolConverter.cs
├── Utilities/                       # ユーティリティ
│   └── RepoUtils.cs
├── App.xaml.cs                      # アプリケーションエントリポイント + DI設定
├── AppLogger.cs                     # ロギング
└── DebugConsole.cs                  # デバッグコンソール

tests/                               # テストプロジェクト (4プロジェクト)
├── ConfirmerTests/                  # 確認ロジックテスト
├── IntegrationTests/                # E2E統合テスト
├── LinkCacheHelperTests/            # LinkCacheヘルパーテスト
└── WeaponDataExtractorTests/        # 武器データ抽出テスト

ビルド方法

前提条件

  • .NET 8.0 SDK以降
  • Windows 10/11
  • Visual Studio 2022 または Visual Studio Code(推奨)

ビルドコマンド

# ソリューションディレクトリで
dotnet restore
dotnet build

実行方法

# ソリューションディレクトリで
dotnet run --project MunitionAutoPatcher/MunitionAutoPatcher.csproj

または Visual Studio で F5 キーを押して実行します。

CI / Continuous Integration

このリポジトリを CI パイプライン(例: GitHub Actions)で扱う際の推奨コマンドと注意点を示します。

  • 推奨コマンド(ビルド / テスト / 公開):
# 依存復元
dotnet restore

# ソリューションを Release ビルド
dotnet build MunitionAutoPatcher.sln -c Release

# テスト(全テストプロジェクトを実行)
dotnet test -c Release --no-build --verbosity normal

# または個別のテストプロジェクトを実行する場合
dotnet test tests/IntegrationTests/IntegrationTests.csproj -c Release --verbosity normal
dotnet test tests/LinkCacheHelperTests/LinkCacheHelperTests.csproj -c Release --verbosity normal
dotnet test tests/WeaponDataExtractorTests/WeaponDataExtractorTests.csproj -c Release --verbosity normal

# 形式整形(任意)
dotnet format

# 発行(パッケージ化が必要な場合)
dotnet publish MunitionAutoPatcher/MunitionAutoPatcher.csproj -c Release -r win-x64 --self-contained false

注意: 本プロジェクトは WPF (.NET on Windows) を使っているため、GUI に依存するテストや実行は Linux ランナー上で失敗する可能性があります。フルテストを CI 上で実行する場合は runs-on: windows-latest を使うことを推奨します。

簡単な GitHub Actions の例:

name: CI
on: [push, pull_request]
jobs:
   build:
      runs-on: windows-latest
      steps:
         - uses: actions/checkout@v4
         - name: Setup .NET
            uses: actions/setup-dotnet@v3
            with:
               dotnet-version: '8.0.x'
         - name: Restore
            run: dotnet restore
         - name: Build
            run: dotnet build MunitionAutoPatcher.sln -c Release --no-restore
         - name: Test
            run: dotnet test -c Release --no-build --verbosity normal

ポイント:

  • WPF やプラットフォーム固有ライブラリ(Mutagen 等)を使うため、Windows ランナーでのテスト実行が最も互換性が高いです。
  • ヘッドレス環境で GUI に依存するテストを実行する必要がある場合は、該当テストをカテゴリーやタグで分離し、CI ではスキップするか専用ジョブを用意してください。

使用方法

  1. 設定画面:

    • ゲームデータパス(Fallout4の Data フォルダ)を設定
    • 出力パスを設定(オプション)
    • マッピング戦略を選択
    • 「武器データ抽出を開始」ボタンをクリック
  2. マッピング画面:

    • メニューから「マッピング」を選択
    • 「マッピング生成」ボタンをクリックして武器と弾薬のマッピングを生成
    • マッピングテーブルで確認・編集
    • 「INI生成」ボタンをクリックして設定ファイルを生成(INIモードの場合)
  3. 出力モードの設定:

    出力モードは設定ファイル config/config.json で制御されます:

    {
      "output": {
        "mode": "esp",
        "directory": "artifacts"
      }
    }
    
    • output.mode: 出力形式を指定

      • "esp" (デフォルト): ESL-flagged ESPパッチを生成
      • "ini": RobCo Patcher INIファイルを生成
    • output.directory: 出力先ディレクトリ

      • デフォルト: "artifacts" (リポジトリルート相対)
      • 絶対パスまたは相対パスを指定可能

    確認: output.mode"esp" に設定されていること、output.directory が実行ユーザーから書き込み可能なディレクトリ(絶対パスまたはリポジトリルート相対)に設定されていることを確認してください。例: "output": { "mode": "esp", "directory": "artifacts" }

    ESPモード(デフォルト)の動作:

    • 確認済みの武器→弾薬マッピングから MunitionAutoPatcher_Patch.esp を生成
    • パッチは ESL-flagged(ESPFE)として出力され、ロードオーダーの負荷を最小化
    • 参照される全てのFormKey(武器と弾薬)のマスター参照を自動的に含める
    • デフォルト出力先: artifacts/MunitionAutoPatcher_Patch.esp

    INIモードへの切り替え:

    • config/config.json"mode": "ini" に設定
    • 従来のRobCo Patcher INI出力を使用する場合に選択
  4. ログ確認 / 統合ログ出力:

    • UIログ: 画面下部のログパネルで処理状況を確認できます(AppLogger のイベント購読により表示)。
    • ファイル出力: すべての UI ログは非同期で artifacts/munition_autopatcher_ui.log に追記されます(起動時に新規ヘッダで上書きして開始します)。
    • ILogger → AppLogger の転送: アプリは ILogger 出力を AppLogger に転送する AppLoggerProvider をホストに登録しています。これにより、ILogger<T> を使って出力された Debug/Information/Error 等のメッセージは UI パネルと artifacts/munition_autopatcher_ui.log に統合されます。
    • デバッグ/コンソール: Debug ビルド時は DebugConsole によりコンソールが割り当てられ、コンソールにもログが表示されます。LogDebug レベルのメッセージを常に確認したい場合はホストのロギング設定で最小ログレベルを Debug にしてください。
    • ログの確認 (PowerShell):
      • リアルタイム追跡: Get-Content -Path .\artifacts\munition_autopatcher_ui.log -Wait -Tail 200
      • TEMP の per-run ログを探す: Get-ChildItem $env:TEMP -Filter "munition_autopatcher_ui_*.log" | Select-Object -Last 5

今後の実装予定 (TODOs)

次のPRで実装予定の機能(状態更新)

以下はコードベースの現状に合わせて状態を更新しています。

  • [ ] PR #23 — Configure repository for GitHub Copilot Coding Agent

    • 概要: リポジトリの Copilot 用ドキュメント・テンプレート・CI ワークフローを追加(.github/copilot-instructions.md, CI workflow, issue/PR テンプレート、CONTRIBUTING.md 等)。
    • アクション:
      1. 変更ファイルをレビュー(.github/ 以下、CONTRIBUTING.md, CODE_OF_CONDUCT.md, SECURITY.md, CHANGELOG.md, config/ 等)
      2. Windows 環境でビルド & テストを実行して CI 設定を検証(WPF のため Windows ランナー推奨)
      3. マージ後に DECISIONS.md に要約を追加してオンボーディング手順を明確化
    • 推奨担当: @shkond
    • リンク: https://github.com/shkond/Munition_AutoPatcher_vC/pull/23
  • [x] Mutagen統合: 実際のプラグイン読み込みと武器データ抽出 ✓ (実装済み: WeaponsService が Mutagen の GameEnvironment を使用しています)

  • [x] INI生成の実装: 実際のRobCo Patcher INIファイル生成 ✓ (実装済み: RobCoIniGenerator)

  • [x] ロードオーダー検証: 実際のプラグインロードオーダーの読み込みと検証 ✓

  • [x] 弾薬データ抽出: プラグインからの弾薬データ抽出 ✓ (部分実装/実用的: WeaponsService_ammo を構築し GetAllAmmo() で利用可能)

  • [~] 自動マッピングロジック: 名前ベース、タイプベースの自動マッピング (部分実装 — UI 側に簡易ロジックと Orchestrator のスタブが存在。高度なルールは要改善)

  • [~] マニュアルマッピング編集: UIでの手動マッピング編集機能 (実装済みの UI があるが UX/機能強化の余地あり)

  • [x] 設定の永続化: アプリケーション設定のJSON保存/読み込み ✓ (実装済み: ConfigService が設定の読み書きを行います

Related Skills

View on GitHub
GitHub Stars0
CategoryDevelopment
Updated4mo ago
Forks0

Languages

C#

Security Score

77/100

Audited on Nov 30, 2025

No findings