In tourney rooms, send a message in the chat when the ready status changes.

This commit is contained in:
Morgan Bazalgette 2017-09-09 12:25:51 +02:00
parent 48534bb551
commit 3ed837dc96
No known key found for this signature in database
GPG Key ID: 40D328300D245DA5
3 changed files with 49 additions and 3 deletions

View File

@ -14,3 +14,8 @@ def handle(userToken, _):
slotID = match.getUserSlotID(userID) slotID = match.getUserSlotID(userID)
if slotID is not None: if slotID is not None:
match.toggleSlotReady(slotID) match.toggleSlotReady(slotID)
# If this is a tournament match, we should send the current status of ready
# players.
if match.isTourney:
match.sendReadyStatus(match)

View File

@ -815,3 +815,36 @@ class match:
for _slot in self.slots: for _slot in self.slots:
if _slot.status == slotStatuses.READY: if _slot.status == slotStatuses.READY:
_slot.status = slotStatuses.NOT_READY _slot.status = slotStatuses.NOT_READY
def sendReadyStatus(self):
chanName = "#multi_{}".format(self.matchID)
# Make sure match exists before attempting to do anything else
if chanName not in glob.channels.channels:
return
totalUsers = 0
readyUsers = 0
for slot in match.slots:
# Make sure there is a user in this slot
if slot.user is None:
continue
# In this slot there is a user, so we increase the amount of total users
# in this multi room.
totalUsers += 1
if slot.status == slotStatuses.READY:
readyUsers += 1
message = "{} users ready out of {}.".format(readyUsers, totalUsers)
if totalUsers == readyUsers:
message += " All users ready!"
# Check whether there is anyone left in this match.
if totalUsers == 0:
message = "The match is now empty."
chat.sendMessage("FokaBot", chanName, message)

View File

@ -321,9 +321,12 @@ class token:
chat.joinChannel(token=self, channel="#multi_{}".format(self.matchID)) chat.joinChannel(token=self, channel="#multi_{}".format(self.matchID))
self.enqueue(serverPackets.matchJoinSuccess(matchID)) self.enqueue(serverPackets.matchJoinSuccess(matchID))
# Alert the user if we have just joined a tourney match
if match.isTourney: if match.isTourney:
# Alert the user if we have just joined a tourney match
self.enqueue(serverPackets.notification("You are now in a tournament match.")) self.enqueue(serverPackets.notification("You are now in a tournament match."))
# If an user joins, then the ready status of the match changes and
# maybe not all users are ready.
match.sendReadyStatus(match)
def leaveMatch(self): def leaveMatch(self):
""" """
@ -354,6 +357,11 @@ class token:
# Set slot to free # Set slot to free
match.userLeft(self) match.userLeft(self)
if match.isTourney:
# If an user leaves, then the ready status of the match changes and
# maybe all users are ready. Or maybe nobody is in the match anymore
match.sendReadyStatus(match)
def kick(self, message="You have been kicked from the server. Please login again.", reason="kick"): def kick(self, message="You have been kicked from the server. Please login again.", reason="kick"):
""" """
Kick this user from the server Kick this user from the server