# HG changeset patch # User souliane # Date 1384702246 -3600 # Node ID c9792d0be499a6fd8fc3e1dfcb5247859bdd0828 # Parent 3344f1d8a232496d26cfa1ffa12c9a674ab16108 plugins (tools): collective games (with no opponent, like radiocol) were handled like other games diff -r 3344f1d8a232 -r c9792d0be499 src/tools/plugins/games.py --- a/src/tools/plugins/games.py Sun Nov 17 16:23:29 2013 +0100 +++ b/src/tools/plugins/games.py Sun Nov 17 16:30:46 2013 +0100 @@ -30,7 +30,8 @@ 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 @@ 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 @@ 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 @@ """ _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 @@ 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 @@ 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 @@ 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"""