Track vote subjects and authoritative player scores in game state

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <[email protected]>
This commit is contained in:
Debian
2026-09-18 12:19:29 +02:00
co-authored by Sisyphus
parent 38f1446cde
commit be7c3aec56
+44
View File
@@ -124,6 +124,29 @@ class PlayerTracker:
"""Get clean (color-code-stripped) names of all tracked players"""
return [strip_color_codes(name) for name in self.server_info.players]
def set_score(self, name, score):
"""Set a player's authoritative score (from PLAYER_STATS / LIVESTATS)"""
clean_name = strip_color_codes(name)
if name in self.server_info.players:
self.server_info.players[name]['score'] = str(score)
return True
for player_name in self.server_info.players:
if strip_color_codes(player_name) == clean_name:
self.server_info.players[player_name]['score'] = str(score)
return True
return False
def update_livestats(self, clean_name, score, dealt, taken, ping):
"""Update live score/damage/ping from a LIVESTATS console print (clean name)"""
for player_name, player_data in self.server_info.players.items():
if strip_color_codes(player_name) == clean_name:
player_data['score'] = str(score)
player_data['ping'] = str(ping)
player_data['dealt'] = str(dealt)
player_data['taken'] = str(taken)
return True
return False
def remove_player(self, name):
"""Remove player from tracking"""
clean_name = strip_color_codes(name)
@@ -223,6 +246,26 @@ class EventDeduplicator:
return False
class VoteTracker:
"""Tracks cast subjects of the running vote; reset on each vote call"""
def __init__(self):
self.subjects = []
def on_call(self):
self.subjects = []
def on_cast(self, subject):
self.subjects.append(subject)
def result_annotation(self):
"""The cast subject when every cast agreed, else None (multi-option votes:
the winner is unknowable from broadcasts)"""
if self.subjects and all(s == self.subjects[0] for s in self.subjects):
return self.subjects[0]
return None
class GameState:
"""Main game state container"""
@@ -230,3 +273,4 @@ class GameState:
self.server_info = ServerInfo()
self.player_tracker = PlayerTracker(self.server_info)
self.event_deduplicator = EventDeduplicator()
self.vote_tracker = VoteTracker()