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:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user