plugins (tools): collective games (with no opponent, like radiocol) were handled like other games
This commit is contained in:
parent
13624c417a
commit
3be7c13314
1 changed files with 13 additions and 13 deletions
|
|
@ -30,7 +30,8 @@ class RoomGame(object):
|
|||
def __init__(self, host, plugin_info, ns_tag, player_init_data={}, options={}):
|
||||
"""
|
||||
@param host
|
||||
@param name: the name of this name
|
||||
@param plugin_info: PLUGIN_INFO map of the game plugin
|
||||
@ns_tag: couple (nameservice, tag) to construct the messages
|
||||
@param player_init_data: dictionary for initialization data, applicable to each player
|
||||
@param options: dictionary for game options
|
||||
"""
|
||||
|
|
@ -38,14 +39,11 @@ class RoomGame(object):
|
|||
self.name = plugin_info["import_name"]
|
||||
self.ns_tag = ns_tag
|
||||
self.player_init_data = player_init_data
|
||||
self.collectiveGame = self.player_init_data is {}
|
||||
self.collectiveGame = self.player_init_data == {}
|
||||
self.options = options
|
||||
self.games = {}
|
||||
self.waiting_inv = {} # Invitation waiting for people to join to launch a game
|
||||
|
||||
# args: room_jid, referee, players, profile
|
||||
host.bridge.addSignal("%sGo" % self.name, ".plugin", signature='ssass')
|
||||
|
||||
def prepareRoom(self, other_players, profile_key='@NONE@'):
|
||||
"""Prepare the room for a game: create it and invite players.
|
||||
@param other_players: list for other players JID userhosts
|
||||
|
|
@ -62,9 +60,10 @@ class RoomGame(object):
|
|||
players.append(_jid.userhost())
|
||||
|
||||
def roomJoined(room):
|
||||
"""@param room: instance of wokkel.muc.Room"""
|
||||
_room = room.occupantJID.userhostJID()
|
||||
if self.collectiveGame is True or other_players == [] and _jid in [user.entity for user in room.roster.values()]:
|
||||
self.createGame(_room.userhost(), None if self.collectiveGame is True else players, profile_key=profile)
|
||||
self.createGame(_room.userhost(), [] if self.collectiveGame is True else players, profile_key=profile)
|
||||
else:
|
||||
self.waiting_inv[_room] = (time(), players) # TODO: remove invitation waiting for too long, using the time data
|
||||
for player in other_players:
|
||||
|
|
@ -103,9 +102,10 @@ class RoomGame(object):
|
|||
"""
|
||||
_room_jid = room.occupantJID.userhostJID()
|
||||
if self.collectiveGame is True:
|
||||
if _room_jid in self.games and self.games[_room_jid]["referee"] == room.occupantJID.full():
|
||||
room_s = _room_jid.userhost()
|
||||
if room_s in self.games and self.games[room_s]["referee"] == room.occupantJID.full():
|
||||
#we are in a radiocol room, let's start the party !
|
||||
mess = self.createGameElt(JID(_room_jid + '/' + user.nick))
|
||||
mess = self.createGameElt(JID(room_s + '/' + user.nick))
|
||||
mess.firstChildElement().addChild(self.__create_started_elt())
|
||||
self.host.profiles[profile].xmlstream.send(mess)
|
||||
return True
|
||||
|
|
@ -131,7 +131,7 @@ class RoomGame(object):
|
|||
self.createGame(_room_jid.userhost(), players, profile_key=profile)
|
||||
return True
|
||||
|
||||
def createGame(self, room_jid, players=None, profile_key='@NONE@'):
|
||||
def createGame(self, room_jid, players=[], profile_key='@NONE@'):
|
||||
"""Create a new game
|
||||
@param room_jid: jid of the room
|
||||
@param players: list of players nick (nick must exist in the room)
|
||||
|
|
@ -142,14 +142,14 @@ class RoomGame(object):
|
|||
if not profile:
|
||||
error(_("profile %s is unknown") % profile_key)
|
||||
return
|
||||
if room in self.games:
|
||||
warning(_("%s game already started in room %s") % (self.name, room))
|
||||
return
|
||||
room_nick = self.host.plugins["XEP-0045"].getRoomNick(room, profile)
|
||||
if not room_nick:
|
||||
error('Internal error')
|
||||
return
|
||||
referee = room + '/' + room_nick
|
||||
if room in self.games:
|
||||
warning(_("%s game already started in room %s") % (self.name, room))
|
||||
return
|
||||
self.games[room] = {'referee': referee}
|
||||
self.games[room].update(self.options)
|
||||
if self.collectiveGame is True:
|
||||
|
|
@ -172,7 +172,7 @@ class RoomGame(object):
|
|||
self.games[room].update({'players': players, 'status': status, 'players_data': players_data})
|
||||
|
||||
def createCollectiveGame(self, room_jid, profile_key='@NONE@'):
|
||||
return self.createGame(self, room_jid, players=None, profile_key=profile_key)
|
||||
return self.createGame(self, room_jid, players=[], profile_key=profile_key)
|
||||
|
||||
def playerReady(self, player, referee, profile_key='@NONE@'):
|
||||
"""Must be called when player is ready to start a new game"""
|
||||
|
|
|
|||
Loading…
Reference in a new issue