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"""
|
"""Get clean (color-code-stripped) names of all tracked players"""
|
||||||
return [strip_color_codes(name) for name in self.server_info.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):
|
def remove_player(self, name):
|
||||||
"""Remove player from tracking"""
|
"""Remove player from tracking"""
|
||||||
clean_name = strip_color_codes(name)
|
clean_name = strip_color_codes(name)
|
||||||
@@ -223,6 +246,26 @@ class EventDeduplicator:
|
|||||||
return False
|
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:
|
class GameState:
|
||||||
"""Main game state container"""
|
"""Main game state container"""
|
||||||
|
|
||||||
@@ -230,3 +273,4 @@ class GameState:
|
|||||||
self.server_info = ServerInfo()
|
self.server_info = ServerInfo()
|
||||||
self.player_tracker = PlayerTracker(self.server_info)
|
self.player_tracker = PlayerTracker(self.server_info)
|
||||||
self.event_deduplicator = EventDeduplicator()
|
self.event_deduplicator = EventDeduplicator()
|
||||||
|
self.vote_tracker = VoteTracker()
|
||||||
|
|||||||
Reference in New Issue
Block a user