diff --git a/backend/bang/game.py b/backend/bang/game.py
index ce12c68..5076096 100644
--- a/backend/bang/game.py
+++ b/backend/bang/game.py
@@ -353,7 +353,7 @@ class Game:
def can_card_reach(self, card: cs.Card, player: pl.Player, target:str):
if card and card.range != 0 and card.range < 99:
- return not any((True for p in self.get_visible_players(player) if p['name'] == target and p['dist'] >= card.range))
+ return not any((True for p in self.get_visible_players(player) if p['name'] == target and p['dist'] > card.range))
return True
def attack(self, attacker: pl.Player, target_username:str, double:bool=False, card_name:str=None):
diff --git a/backend/bang/players.py b/backend/bang/players.py
index 4eec5fa..1c54347 100644
--- a/backend/bang/players.py
+++ b/backend/bang/players.py
@@ -609,7 +609,7 @@ class Player:
self.game.next_player().equipment.append(self.equipment.pop(i))
self.game.next_player().notify_self()
break
- if any((isinstance(c, cs.Dinamite) or isinstance(c, cs.Prigione) for c in self.equipment)):
+ if any((isinstance(c, cs.Dinamite) or isinstance(c, cs.Prigione) or isinstance(self.equipment[i], tvosc.SerpenteASonagli) for c in self.equipment)):
self.notify_self()
return
for i in range(len(self.equipment)):
@@ -638,11 +638,12 @@ class Player:
print(f'Did pick {picked}')
self.sio.emit('chat_message', room=self.game.name,
data=f'_flipped|{self.name}|{picked.name}|{picked.num_suit()}')
- if picked.check_suit(self.game, [cs.Suit.SPADES]) and pickable_cards == 0:
+ if not picked.check_suit(self.game, [cs.Suit.SPADES]):
+ break
+ elif pickable_cards == 0:
self.lives -= 1
self.sio.emit('chat_message', room=self.game.name, data=f'_snake_bit|{self.name}')
- self.end_turn(forced=True)
- return
+ break
if any((isinstance(c, cs.Prigione) for c in self.equipment)):
self.notify_self()
return
diff --git a/backend/server.py b/backend/server.py
index 1190157..e443d00 100644
--- a/backend/server.py
+++ b/backend/server.py
@@ -73,7 +73,7 @@ def report(sid, text):
data = "\n".join(ses.game.rpc_log[:-1]).strip()
data = data +"\n@@@\n" +text
#print(data)
- response = requests.post("https://hastebin.com/documents", data)
+ response = requests.post("https://hastebin.com/documents", data.encode('utf-8'))
key = json.loads(response.text).get('key')
if "DISCORD_WEBHOOK" in os.environ and len(os.environ['DISCORD_WEBHOOK']) > 0:
webhook = DiscordWebhook(url=os.environ['DISCORD_WEBHOOK'], content=f'New bug report, replay at https://bang.xamin.it/game?replay={key}')
@@ -546,6 +546,16 @@ def chat_message(sid, msg, pl=None):
for cn in card_names:
ses.hand.append([c for c in cards if c.name.lower() == cn.lower() or c.name[0:-1].lower() == cn.lower()][0])
ses.notify_self()
+ elif '/equipcard' in msg:
+ sio.emit('chat_message', room=ses.game.name, data={'color': f'red','text':f'🚨 {ses.name} is in debug mode and got a card'})
+ import bang.cards as cs
+ cmd = msg.split()
+ if len(cmd) >= 2:
+ cards = cs.get_starting_deck(ses.game.expansions)
+ card_names = ' '.join(cmd[1:]).split(',')
+ for cn in card_names:
+ ses.equipment.append([c for c in cards if c.name.lower() == cn.lower() or c.name[0:-1].lower() == cn.lower()][0])
+ ses.notify_self()
elif '/getset' in msg:
sio.emit('chat_message', room=ses.game.name, data={'color': f'red','text':f'🚨 {ses.name} is in debug mode and got a card'})
cmd = msg.split()
diff --git a/frontend/src/components/Chooser.vue b/frontend/src/components/Chooser.vue
index adfef5e..22fe758 100644
--- a/frontend/src/components/Chooser.vue
+++ b/frontend/src/components/Chooser.vue
@@ -6,6 +6,7 @@
{{hintText}}
{{desc}}
@@ -29,13 +30,19 @@ export default { type: String, default: '', }, + timer: { + type: Number, + default: 0, + }, text: String, hintText: String, playAudio: Boolean, }, data: () => ({ desc: '', - realCancelText: '' + realCancelText: '', + remainingTime: 0, + intervalID: '', }), computed: { showCancelBtn() { @@ -57,6 +64,14 @@ export default { this.desc = (this.$i18n.locale=='it'?card.desc:card.desc_eng) else this.desc = this.$t(`cards.${card.name}.desc`) + }, + countDown() { + if (this.remainingTime > 0) { + this.remainingTime--; + } else { + this.select(this.cards[0]); + window.clearInterval(this.intervalID); + } } }, mounted() { @@ -70,6 +85,12 @@ export default { if (this.playAudio) { (new Audio(show_sfx)).play(); } + if (this.timer > 0) { + this.remainingTime = this.timer; + this.intervalID = window.setInterval(() => { + this.countDown(); + }, 1000); + } }, } diff --git a/frontend/src/components/Menu.vue b/frontend/src/components/Menu.vue index 7fa622d..0285674 100644 --- a/frontend/src/components/Menu.vue +++ b/frontend/src/components/Menu.vue @@ -169,6 +169,7 @@ export default { this.username = data.username this.didSetUsername = true this.discordPic = `https://cdn.discordapp.com/avatars/${data.id}/${data.avatar}.png` + localStorage.setItem('username', this.username) this.$socket.emit('set_username', {name: this.username, discord_token: localStorage.getItem('discord_token')}) }).catch(err => { console.error(err) diff --git a/frontend/src/components/Player.vue b/frontend/src/components/Player.vue index 00aa91d..a986c20 100644 --- a/frontend/src/components/Player.vue +++ b/frontend/src/components/Player.vue @@ -49,15 +49,15 @@