Espionagem
![]()
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
| Campo | Valor |
|---|---|
| ID técnico | Espionage |
| Conduta | Conduta Desconhecida |
| Categoria | Informação |
| Momento de uso | Início da noite |
| Momento do efeito | Imediato no início da noite |
| Alvo | Outro jogador vivo aleatório ainda não visto |
| Tipo de uso | Automática |
| Usos | 1 por jogador revelado |
| Duração | Instantânea |
Implementação Técnica
- Automática. Não há ação manual —
GameplayService.StartNightchamaProcessEspionage()para todos os jogadores vivos comability.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 = truee adiciona o ID do alvo aspy.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
ServerMessageResultsó chega ao host). Em vez disso,GameStateManager.DetectEspionageRevealscomparaEspionageTargetsentre snapshots do estado local e, quando um id novo aparece no espião local, disparaOnEspionageRevealed. OGameplayUIControllerescuta e posta no chat de sistema"Você descobriu a habilidade de {alvo}."— visível somente no cliente do espião.
Campos de PlayerData Modificados
| Campo | Efeito |
|---|---|
target.IsAbilityRevealedToSpy | Marcado como true quando revelado |
spy.EspionageTargets | ID do alvo adicionado para evitar repetição |
target.DoubleIdentityPiercedBy | ID 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.