Convite de Amigo para Sala

Resumo

Define como um jogador convida um amigo para a sala em que está. Depende de Amigos. O fluxo é direto — convidar pelo perfil, notificação dupla (push + in-app) — e o convite não reserva vaga: a sala continua sendo preenchida normalmente até as 12 posições; se completar com humanos antes do amigo aceitar, o convite vira inválido. TTL fixo de 5 minutos.

Distinto de Fila em Grupo: convidar para sala puxa um amigo para uma sala/lobby que já existe (sem reserva); a fila em grupo entra no matchmaking já como party. São dois caminhos diferentes de “jogar com amigos” — a conciliação dos dois na UI é pendência aberta lá.

Esta nota registra as decisões do card Definir convite de amigo para sala (2026-05-12) e a decisão extra sobre ciclo de vida de salas para controle de custo.

Fluxo do convite

  1. Jogador A entra em uma sala (lobby de matchmaking ou sala pós-partida via “Voltar ao Lobby” em Pós-Partida).
  2. A abre o perfil do amigo B — ponto de entrada padrão para qualquer ação social entre amigos (ver Amigos).
  3. A clica em Convidar.
  4. B recebe simultaneamente:
    • Push notification no device, no formato padrão de push do app.
    • Notificação in-app, caso B esteja com o jogo aberto.
  5. B aceita o convite → entra na sala de A, ocupando uma vaga humana (substituindo um bot, se houver — ver Quórum).
  6. B ignora ou deixa expirar → nada acontece; A não recebe feedback explícito além de eventualmente perder o convite ativo pela expiração do TTL.

Texto exato das notificações, comportamento da UI in-app (toast, modal, badge na caixa de pedidos de Amigos) e deep linking direto do push para a tela de aceite ficam pendentes.

Capacidade — sem reserva

A sala não reserva vaga para o convidado. Decisão explícita: o convite é uma chamada, não uma reserva.

  • Se outros humanos entrarem na sala pelo matchmaking enquanto o convite está ativo, eles ocupam as vagas livres normalmente.
  • Não existe slot “guardado” para o amigo enquanto o convite está pendente.
  • A consequência aceita é que o amigo pode chegar tarde e não encontrar lugar — ver próxima seção.

A escolha de não reservar foi feita para não bloquear o matchmaking dos outros jogadores: reservar vaga atrasaria o início da partida toda vez que alguém esquecesse de aceitar.

Sala cheia → convite inválido

Se a sala atingir 12 vagas humanas antes do amigo aceitar (matchmaking completou com outros jogadores reais), o convite deixa de ser aceitável:

  • O amigo, ao tentar aceitar, recebe mensagem de “sala cheia” e o convite é descartado.
  • Não há fila de espera, não há substituição de outro humano pelo convidado.
  • Como o sistema de Quórum preenche com bots, o cenário “sala cheia de humanos” só acontece quando o matchmaking efetivamente entrega 12 jogadores reais — geralmente uma boa notícia para a experiência de partida, mas que custa o convite específico.

Esse comportamento é uma consequência direta da decisão de não reservar vagas. Se no futuro reservar vagas virar prioridade, esta nota precisa ser revisitada.

TTL — 5 minutos

  • O convite fica ativo por 5 minutos a partir do envio.
  • Após esse tempo, o convite expira mesmo se a sala ainda tiver vaga.
  • A janela de 5 min foi escolhida para cobrir o caso típico (amigo viu o push em até alguns minutos) sem deixar convites antigos poluindo o estado da caixa de notificações.

Comportamento se A sair da sala antes do TTL expirar (o convite vira inválido imediatamente? ainda redireciona B para algum lugar?), múltiplos convites simultâneos para o mesmo amigo, e disparo de novo convite após expiração — ficam pendentes.

Ciclo de vida da sala — cleanup de salas vazias

Decisão tomada fora do escopo direto do card mas registrada aqui porque afeta diretamente o que acontece com salas onde convites podem ser enviados.

  • Se manter salas de lobby abertas tiver custo de infraestrutura (instâncias do Cloud Code, conexões persistentes, etc.), o jogo precisa de um sistema que delete a sala e remova os jogadores quando ela ficar vazia ou abandonada — para poupar gastos.
  • O critério exato de “vazia/abandonada” e o tempo de tolerância antes da deleção ficam pendentes com o time técnico.
  • Esta regra vale tanto para o lobby de matchmaking quanto para o lobby pós-partida criado pelo botão “Voltar ao Lobby” de Pós-Partida.

Esta decisão vai além do escopo de convite e provavelmente justifica uma nota dedicada de Ciclo de Vida da Sala quando o tema for retomado — incluindo regras de timeout, salas sem host (cruzamento com Migração de Host), e salas só com bots após múltiplas saídas.

Pendências (a definir em rodadas futuras)

  • Copy e UX da notificação (push + in-app), incluindo deep link para tela de aceite.
  • Comportamento ao convidar amigo que já está em outra sala ou em partida ativa: bloquear o envio? Permitir e exibir aviso?
  • Convites simultâneos: posso convidar múltiplos amigos de uma vez? Existe limite de convites ativos por sala?
  • A sai da sala antes do TTL expirar: o convite expira automaticamente ou aponta para outro lugar?
  • Novo convite após expiração ou recusa — existe cooldown anti-spam?
  • Sala cheia ao aceitar: mensagem padrão de erro, e se há alternativa proposta (matchmaking normal?).
  • Convite cruzando com Voltar ao Lobby: amigo aceita convite que aponta para sala que acabou de ser convertida em lobby pós-partida — fluxo é transparente?
  • Ciclo de vida da sala (cleanup): critério de inatividade, tempo de tolerância antes da deleção, comportamento se há convite ativo apontando para sala que vai ser deletada.
  • Bots permanecem no lobby durante a janela de convite ou são adiados até o início do matchmaking?

Ver Também