Seed the player roster from a status dump on connect and map change
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <[email protected]>
This commit is contained in:
@@ -19,6 +19,7 @@ POLL_TIMEOUT = 100
|
||||
QUIT_CONFIRM_TIMEOUT = 3.0 # Seconds to confirm quit (Ctrl-C twice)
|
||||
RESPAWN_DELAY = 3.0 # Seconds before players respawn after death
|
||||
STATUS_OUTPUT_WINDOW = 1.5 # Seconds a 'status' command echo suppresses its chunked table output
|
||||
STATUS_SEED_WINDOW = 2.0 # Seconds the roster seeder collects the 'status' dump after connect
|
||||
STATS_CONNECTION_DELAY = 0.5 # Initial stats connection delay
|
||||
|
||||
# UI dimensions
|
||||
|
||||
@@ -400,6 +400,8 @@ class EventParser:
|
||||
# in CA it is damage-based, so sync it instead of accumulating deltas
|
||||
if data.get('SCORE') is not None:
|
||||
self.game_state.player_tracker.set_score(name, data['SCORE'])
|
||||
if 'TEAM' in data:
|
||||
self.game_state.player_tracker.update_team(name, data['TEAM'])
|
||||
|
||||
weapon_data = data.get('WEAPONS', {})
|
||||
accuracies = calculate_weapon_accuracies(weapon_data)
|
||||
|
||||
+19
-8
@@ -101,14 +101,25 @@ class PlayerTracker:
|
||||
return self.player_teams.get(name)
|
||||
|
||||
def add_player(self, name, score='0', ping='0'):
|
||||
"""Add player to server's player dict if not exists"""
|
||||
# Use original name with color codes as key
|
||||
if name not in self.server_info.players:
|
||||
self.server_info.players[name] = {
|
||||
'score': score,
|
||||
'ping': ping
|
||||
}
|
||||
logger.debug(f'Added player: {name}')
|
||||
"""Add player to server's player dict if not exists. A seeded clean-name
|
||||
entry is upgraded to the color-coded name (preserving score/ping) instead
|
||||
of duplicating the roster entry."""
|
||||
if name in self.server_info.players:
|
||||
return
|
||||
clean_name = strip_color_codes(name)
|
||||
for player_name in list(self.server_info.players.keys()):
|
||||
if player_name != name and strip_color_codes(player_name) == clean_name:
|
||||
existing = self.server_info.players.pop(player_name)
|
||||
existing.setdefault('score', score)
|
||||
existing.setdefault('ping', ping)
|
||||
self.server_info.players[name] = existing
|
||||
logger.debug(f'Upgraded roster entry {player_name} -> {name}')
|
||||
return
|
||||
self.server_info.players[name] = {
|
||||
'score': score,
|
||||
'ping': ping
|
||||
}
|
||||
logger.debug(f'Added player: {name}')
|
||||
|
||||
def get_players_by_team(self):
|
||||
"""Get players organized by team"""
|
||||
|
||||
Reference in New Issue
Block a user