FAForever / FAForever/server

Incorrect Bans in Ladder Games

Open
#1,077 4 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
72
Forks
84
Avg merge
5h 11m
Merged PRs (30d)
1

Description

## Issue Summary: Incorrect Bans in Ladder Games Due to Missing PlayerOption Messages

**Problem:** Players are receiving incorrect violation bans in ladder games when connection failures occur.

**Root Cause (per @gatsik's analysis shared via Zulip):**
- Server checks `_configured_player_ids` to determine if players are "configured" before assigning violations
- `_configured_player_ids` is only populated by `set_player_option()` calls (triggered by `PlayerOption` GPGNet messages)
- Ladder games don't send `PlayerOption` messages (only custom lobbies do)
- Result: All guests in ladder games appear "unconfigured" and get violations when games fail to start, even if the failure wasn't their fault

**Code References:**
- Game configuration check: `server/games/game.py#L231` (`get_connected_players()`)
- PlayerOption handling: `server/games/game.py#L616-L621` (`set_player_option()`)
- Host exclusion logic: `server/ladder_service/ladder_service.py#L737` (`NotConnectedError`)

**Suggested Fix:**
Track actual connection status using other messages like `EstablishedPeer` instead of relying solely on `PlayerOption` messages for ladder games.

**Impact:**
All guests in failed ladder games receive violations regardless of whether they successfully connected, because they never appear in `_configured_player_ids`.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.