本ドキュメントは、OpenSpartanのデータベースからNotionへデータを抽出・転送する際の「Flood」の内部処理ロジックおよび基本仕様を記述したものです。
1. 試合データのフィルタリング条件
Floodは、統計の正確性を担保するため、以下の条件に該当する試合を同期対象から自動的に除外(スキップ)します。
- ランクアリーナ、ランクスレイヤー、カスタムゲーム以外の試合
- 統計情報のノイズとなる恐れがあるため、ランクスナイパー、ランクダブルス、クイックプレイなどはスキップされます。
- マップ、ルールがランクマッチと異なるカスタムゲーム(オクタゴン、ゾンビなど)
- ランクマップかつランクルールのカスタムゲームは取り込まれます。
- 途中抜け・途中参加の除外
- 自身が試合の途中で参加した(Joined In Progress)試合。
- 自身が試合の途中で退出した(Quit/DNF)試合。
- 不完全な試合の除外
- 自分以外の人間プレイヤーに「途中抜け」が発生した試合(マッチングの公平性が著しく損なわれるため)。
- 試合時間が 60秒未満 の極端に短い試合。
- キル、デス、アシストがすべて 0 かつ 試合時間が 120秒未満 の試合(無効試合と判断)。
- その他
- マッチ結果のステータスが「Outcome: 4」(未完了・無効等)の試合。
2. データベース同期の基本仕様
2.1 同期モードの切り替え
config.ini 内の IsFullScanMode 設定により、処理の挙動が変化します。
- フルスキャンモード (
True): Notion側の全レコードを照合し、欠落している試合を過去に遡ってすべて同期します。初回実行時に推奨されます。
- クイックスキャンモード (
False): 直近の数件(LatestCheckCount で指定、初期設定は100件)のみを確認し、新しい試合のみを高速で同期します。日常的な運用に適しています。
2.2 パーティ人数の推論ロジック
HaloのAPIからは直接的なパーティ情報が取得できない場合があるため、Floodは独自の推論アルゴリズムを用いています。
- 推論方法: 前後の試合(最大5試合のウィンドウ)を走査し、同じチームに3回以上登場した味方プレイヤーを「パーティメンバー」と判定します。
- 遡り更新: 新しい試合が同期されるたびに、過去の試合のパーティ判定も最新の情報に基づいて再計算・修正されます。
- このパーティ判定遡り更新の件数もスキャンモードと同じ設定を参照しています。