fix lobby error

This commit is contained in:
Alberto Xamin 2020-11-26 00:19:27 +01:00
parent b06d7efa40
commit 7936fdf649
No known key found for this signature in database
GPG Key ID: 4F026F48309500A2
3 changed files with 32 additions and 29 deletions

View File

@ -54,7 +54,7 @@ def disconnect(sid):
@sio.event @sio.event
def create_room(sid, room_name): def create_room(sid, room_name):
while len([g for g in games if g.name == room_name]): while len([g for g in games if g.name == room_name]):
room_name += '_1' room_name += f'_{random.randint(0,100)}'
sio.leave_room(sid, 'lobby') sio.leave_room(sid, 'lobby')
sio.enter_room(sid, room_name) sio.enter_room(sid, room_name)
g = Game(room_name, sio) g = Game(room_name, sio)
@ -79,7 +79,7 @@ def join_room(sid, room):
sio.leave_room(sid, 'lobby') sio.leave_room(sid, 'lobby')
sio.enter_room(sid, room_name) sio.enter_room(sid, room_name)
while len([p for p in games[i].players if p.name == sio.get_session(sid).name]): while len([p for p in games[i].players if p.name == sio.get_session(sid).name]):
sio.get_session(sid).name += '_1' sio.get_session(sid).name += f'_{random.randint(0,100)}'
games[i].add_player(sio.get_session(sid)) games[i].add_player(sio.get_session(sid))
advertise_lobbies() advertise_lobbies()

View File

@ -41,7 +41,27 @@ class Card(ABC):
return f'{self.name} {char}{self.number}' return f'{self.name} {char}{self.number}'
return super().__str__() return super().__str__()
def play_card(self, player, against): def play_card(self, player, against):#self --> carta
if self.is_equipment:
if self.is_weapon:
has_weapon = False
for i in range(len(player.equipment)):
if player.equipment[i].is_weapon:
player.game.deck.scrap(player.equipment[i])
player.equipment[i] = self
has_weapon = True
break
if not has_weapon:
player.equipment.append(self)
elif self.name in [c.name for c in player.equipment if not isinstance(c, Dinamite)]:
for i in range(len(player.equipment)):
print('tipo',type(self))
if type(player.equipment[i]) == type(self):
player.game.deck.scrap(self.equipment[i])
player.equipment[i] = self
break
else:
player.equipment.append(self)
contro = f' contro {against}' if against else '' contro = f' contro {against}' if against else ''
player.sio.emit('chat_message', room=player.game.name, player.sio.emit('chat_message', room=player.game.name,
data=f'{player.name} ha giocato {self.name}{contro}.') data=f'{player.name} ha giocato {self.name}{contro}.')
@ -83,6 +103,13 @@ class Prigione(Card):
self.desc = "Equipaggia questa carta a un altro giocatore, tranne lo Sceriffo. Il giocatore scelto all'inizio del suo turno, prima di pescare dovrà estrarre: se esce Cuori scarta questa carta e gioca normalmente il turno, altrimenti scarta questa carta e salta il turno" self.desc = "Equipaggia questa carta a un altro giocatore, tranne lo Sceriffo. Il giocatore scelto all'inizio del suo turno, prima di pescare dovrà estrarre: se esce Cuori scarta questa carta e gioca normalmente il turno, altrimenti scarta questa carta e salta il turno"
self.need_target = True self.need_target = True
def play_card(self, player, against):
if against != None and not isinstance(player.game.get_player_named(against).role, r.Sheriff):
player.sio.emit('chat_message', room=player.game.name,
data=f'{self.name} ha giocato {self.name} contro {against}.')
player.game.get_player_named(against).equipment.append(self)
player.game.get_player_named(against).notify_self()
return False
class Remington(Card): class Remington(Card):
def __init__(self, suit, number): def __init__(self, suit, number):

View File

@ -251,32 +251,8 @@ class Player:
return return
card: cs.Card = self.hand.pop(hand_index) card: cs.Card = self.hand.pop(hand_index)
print(self.name, 'is playing ', card, ' against:', against) print(self.name, 'is playing ', card, ' against:', against)
if isinstance(card, cs.Prigione) and not isinstance(self.game.get_player_named(against).role, r.Sheriff): did_play_card = card.play_card(self, against)
self.sio.emit('chat_message', room=self.game.name, if not card.is_equipment:
data=f'{self.name} ha giocato {card.name} contro {against}.')
self.game.get_player_named(against).equipment.append(card)
self.game.get_player_named(against).notify_self()
elif card.is_equipment:
if card.is_weapon:
has_weapon = False
for i in range(len(self.equipment)):
if self.equipment[i].is_weapon:
self.game.deck.scrap(self.equipment[i])
self.equipment[i] = card
has_weapon = True
break
if not has_weapon:
self.equipment.append(card)
elif card.name in [c.name for c in self.equipment if not isinstance(c, cs.Dinamite)]:
for i in range(len(self.equipment)):
if type(self.equipment[i]) == type(card):
self.game.deck.scrap(self.equipment[i])
self.equipment[i] = card
break
else:
self.equipment.append(card)
else:
did_play_card = card.play_card(self, against)
if did_play_card: if did_play_card:
self.game.deck.scrap(card) self.game.deck.scrap(card)
else: else: