Espionagem

Arte de Espionagem|192

Resumo

Revela automaticamente a habilidade de um jogador vivo aleatório sem repetir alvos já observados.

Como Funciona

Esta habilidade é automática — o jogador não precisa fazer nada. No início de cada noite, o servidor escolhe aleatoriamente um jogador vivo que ainda não foi espionado e revela a habilidade dele ao espião. O processo se repete a cada noite, sempre escolhendo alguém novo, até que todos os jogadores vivos tenham sido revelados. O espião recebe duas formas de feedback, ambas privadas: a habilidade aparece exposta no card do alvo (via estado sanitizado do servidor) e uma linha no chat de sistema avisa "Você descobriu a habilidade de {alvo}.". Nenhuma mensagem pública é emitida — a revelação é exclusiva do espião e não vaza pros demais jogadores.

Leitura de Design

Produz inteligência lateral em vez de prova direta, então ajuda muito a montar perfis sem denunciar logo de cara quem é aliado ou inimigo.

Parâmetros Atuais no Projeto

CampoValor
ID técnicoEspionage
CondutaConduta Desconhecida
CategoriaInformação
Momento de usoInício da noite
Momento do efeitoImediato no início da noite
AlvoOutro jogador vivo aleatório ainda não visto
Tipo de usoAutomática
Usos1 por jogador revelado
DuraçãoInstantânea

Implementação Técnica

  • Automática. Não há ação manual — GameplayService.StartNight chama ProcessEspionage() para todos os jogadores vivos com ability.id == "Espionage" no início de cada noite.
  • Seleção do alvo: O servidor escolhe aleatoriamente um jogador vivo cujo ID ainda não esteja em spy.EspionageTargets. Isso garante que a revelação não se repita para o mesmo espião.
  • Efeito: Marca target.IsAbilityRevealedToSpy = true e adiciona o ID do alvo a spy.EspionageTargets.
  • Interação com Dupla Identidade: Quando o alvo tem Dupla Identidade, o servidor registra target.DoubleIdentityPiercedBy.Add(spy.Id). Porém, a habilidade em si não é mascarada — a Dupla Identidade só mascara conduta e time, não a identidade da habilidade.
  • Feedback privado ao espião (client-side): O servidor não emite mensagem de chat (qualquer broadcast vazaria a revelação pros não-espiões, pois o pipeline de ServerMessageResult só chega ao host). Em vez disso, GameStateManager.DetectEspionageReveals compara EspionageTargets entre snapshots do estado local e, quando um id novo aparece no espião local, dispara OnEspionageRevealed. O GameplayUIController escuta e posta no chat de sistema "Você descobriu a habilidade de {alvo}." — visível somente no cliente do espião.

Campos de PlayerData Modificados

CampoEfeito
target.IsAbilityRevealedToSpyMarcado como true quando revelado
spy.EspionageTargetsID do alvo adicionado para evitar repetição
target.DoubleIdentityPiercedByID do espião adicionado (somente se alvo tiver Dupla Identidade)

Estado no Projeto Atual

  • Implementada no começo da noite como rotina automática do servidor.
  • Se a implementação final mudar no jogo, esta nota deve acompanhar o código e não o contrário.

Ver Também