diff --git a/lib/state.py b/lib/state.py index 8ff8a8c..2f0b587 100644 --- a/lib/state.py +++ b/lib/state.py @@ -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()