Reconexão

Resumo

Define o que acontece quando um jogador perde conexão durante uma partida. Premissa: o Conduta é um jogo de leitura social com partidas curtas; fazer kick imediato quebra a partida para todos, então a regra é dar uma janela curta para o jogador voltar com tudo no lugar — voto, conduta, anotações, estado de habilidades, identidade. A partida não pausa e a votação segue em andamento (pass-through), porque parar a mesa para esperar uma reconexão punir os outros jogadores.

Esta nota registra o que foi decidido na reunião de design do card Definir fluxo de reconexão mid-match (2026-05-06).

Janela de reconexão

  • 60 segundos desde a perda de conexão detectada pelo servidor.
  • Dentro dessa janela, o jogador é considerado desconectado temporário: o assento permanece na mesa, o estado é preservado e a partida segue normalmente para os demais.
  • Após 60s sem reconexão, o jogador é considerado kickado da partida. O que acontece exatamente no kick (morte automática, substituição por bot, manutenção da carta como “ausente” até o fim) fica pendente — ver pendências.
  • O cronômetro não pausa entre fases: 60s totais a partir do drop, independente de o jogador ter caído na noite, no dia ou na votação.

Estado preservado

Tudo que o jogador tinha na partida no momento da desconexão é mantido. Isso é proposital — qualquer reset parcial criaria injustiça e abriria espaço para uso estratégico da queda de conexão.

Itens explicitamente preservados:

  • Identidade da rodada: time, conduta e função sorteados continuam atribuídos ao jogador.
  • Habilidades: cargas, cooldowns, alvos selecionados e marcações pendentes (ver Turnos).
  • Voto atual (se já registrado na fase corrente).
  • Anotações (Anotações) — texto e marcações por jogador.
  • Mute local (Mute) — lista de jogadores silenciados localmente na partida.
  • Cooldown de chat (Sanções) — se o jogador está cumprindo cooldown, ele continua valendo ao reconectar.
  • Histórico de chat da partida (público e privado liberado por habilidade).
  • Resultados de habilidades já recebidos (investigações, leituras, mensagens privadas).

A regra geral: estado de partida é canônico no servidor, então a reconexão recompõe o cliente a partir do servidor. O cliente não precisa persistir nada localmente para manter integridade.

UX do jogador que volta

  • Ao reconectar dentro da janela, o jogador vê uma tela de “Reconectando…” enquanto o cliente recompõe o estado.
  • Saindo da tela, o jogador entra na fase corrente da partida — não há replay da fase perdida nem retorno à fase em que ele caiu.
  • O jogo não rebobina o que o jogador perdeu durante a desconexão. O que pode ser reconstituído pelo histórico já visível (chat, anotações próprias, resultados de habilidade) aparece normalmente; o que era efêmero (animações de morte, popups de fase) fica perdido e não é repostado só por causa da reconexão.
  • Voto da fase atual, se já registrado antes do drop, aparece como já submetido.

Detalhamento da tela de reconexão (mensagem, animação, botão de cancelar/sair) fica pendente com a equipe de UI.

UX dos demais jogadores

  • Na carta do jogador desconectado, aparece um ícone de Wi-Fi cortado (símbolo de sinal com risco).
  • O ícone deve ser visível em todos os pontos onde o jogador é representado: lista de jogadores na mesa, HUD, modal de info, tela de votação, tela pós-partida.
  • O ícone substitui (ou se sobrepõe a) qualquer outro indicador de status que esteja na carta enquanto a desconexão estiver ativa, para que o estado seja imediatamente legível.
  • Quando o jogador reconecta, o ícone some imediatamente.
  • Quando a janela de 60s expira, o ícone é trocado pelo indicador de jogador efetivamente fora da partida (formato a definir junto com a regra de kick — ver pendências).

Comportamento em votação ativa

A regra é pass-through: a desconexão não pausa nem estende a votação, e o estado de voto do jogador passa adiante exatamente como estava no instante do drop.

  • Se o jogador já tinha registrado um voto quando caiu, esse voto continua valendo e é contabilizado normalmente na apuração.
  • Se o jogador não tinha votado, o ausente é tratado como abstenção — não conta como voto em ninguém e não impede a apuração.
  • O timer da fase (incluindo DayMiddle, ver Turnos) continua correndo normalmente. A mesa não espera o jogador voltar.
  • Ao reconectar dentro da janela e ainda na mesma fase de votação, o jogador pode alterar/registrar voto normalmente, sob o tempo restante da fase. Reconexão depois que a fase de votação terminou não permite votar retroativamente.

A escolha por pass-through em vez de “voto nulo” é deliberada: anular o voto automaticamente puniria o jogador desconectado e poderia distorcer resultados próximos. Manter o voto registrado preserva a intenção do jogador no instante do drop.

Pendências (a definir em rodadas futuras)

  • Comportamento após kick (60s): a política geral de preenchimento por bot está definida em Quórum — qualquer vaga vazia mid-match vira bot. Falta apenas confirmar se o bot herda o estado exato do slot (voto, cargas de habilidade) ou começa “limpo”.
  • Penalidade econômica/sancional para queda confirmada (sem reconexão dentro da janela). O caso de AFK por inatividade já tem auto-report definido em AFK; falta decidir se a queda de conexão sem retorno aplica o mesmo tratamento (kick + bot + auto-report) ou se segue regra própria.
  • Múltiplas desconexões na mesma partida: cada queda reinicia a janela de 60s, ou existe um teto agregado (ex.: máximo de 3 minutos somados antes de kick)?
  • Detecção do drop: heartbeat, timeout de RPC, ack de mensagens — qual sinal o servidor usa para iniciar o cronômetro de 60s.
  • Tela de “Reconectando…” — copy, animação, botão de “sair da partida” antes do fim da janela.
  • Ícone de Wi-Fi cortado — arte definitiva, posição na carta, comportamento em diferentes telas (mesa, HUD, votação).
  • Chat privado em curso (Chat privado) durante a desconexão — a janela de privado continua correndo? O parceiro vê o ícone de queda?
  • Habilidades com prompt aberto quando o jogador cai (ex.: seleção de alvo) — o prompt expira sozinho ao fim da fase ou é cancelado imediatamente no drop?

Ver Também