Controles de juego limpio para partidas PvP
Un juego de palabras solo es bueno si tu oponente lo es. Esto es lo que hacemos para que ese oponente no sea un programa de resolución.
Última actualización: 17 de abril de 2026 · Por Kurt Bijl

Las jugadas se verifican en nuestros servidores, no en tu móvil
Las jugadas online en WordSalvo se envían a través de una transacción de Firestore y se procesan con el mismo motor Dart puro que dibuja tu tablero. Las reglas de colocación, las palabras cruzadas, los multiplicadores y la validez del diccionario se aplican en el servidor. No nos fiamos de ninguna puntuación o palabra que un cliente modificado afirme haber conseguido.
El diccionario es un DAWG (grafo acíclico dirigido de palabras) compilado a partir de la misma lista de palabras que usa tu oponente. El inglés se basa en listas de la familia SOWPODS; el neerlandés usa la lista de OpenTaal. El archivo es idéntico a nivel de byte en el cliente y en el servidor, por lo que la disputa de «esa palabra no está en el diccionario» no puede deberse al dispositivo.
Los informes sobre palabras que faltan o son dudosas pasan por una cola de revisión humana (la Cloud Function `reviewWordReport`) y se incorporan en las actualizaciones del diccionario.
Las partidas PvP finalizadas se analizan en busca de patrones sospechosos
Cuando termina una partida PvP online, una Cloud Function analiza la partida en busca de patrones que sugieran el uso de un programa de resolución externo. Este control de juego limpio sirve para detectar jugadas sospechosas, no para calificar partidas de práctica ni para evaluar la calidad del juego.
Ese control (la función `fairPlayAnalysis`) ejecuta 14 señales ponderadas. Entre ellas: brillantez ≥98 % en una partida, rachas perfectas de siete o más jugadas, coeficiente de variación del tiempo de reflexión por debajo de 0,3 (los humanos están por encima de ~0,5), jugadas rápidas y precisas en menos de tres segundos con >80 % de acierto y perfección en jugadas de alta complejidad donde se encuentra el mejor movimiento entre más de 200 opciones legales. Las partidas cortas de menos de ocho jugadas tienen un multiplicador de confianza de 0,2–0,8× porque las muestras pequeñas no son fiables.
Cada señal solo importa en relación contigo. WordSalvo mantiene una media móvil de 20 partidas por jugador y busca desviaciones: superar tu propia media en más de 2,5σ llama la atención; ser un jugador fuerte de forma constante, no.

Personas reales por defecto: la IA siempre se etiqueta como IA
El matchmaking online busca en una cola de Firestore con una ventana de ±200 puntos de valoración. El oponente que devuelve es otro humano que se unió a esa cola. No creamos cuentas sintéticas, no usamos bots con nombres humanos ni inflamos el número de jugadores en la sala de espera.
Existen oponentes de IA en cuatro dificultades (fácil, medio, difícil y experto) y se ejecutan en una Cloud Function (`onAiTurn`), lo que significa dos cosas. Primero: una partida contra la IA requiere conexión a internet. Segundo: cada oponente de la IA lleva una etiqueta explícita de «IA» en la ficha de la partida y en el marcador. Si la partida no dice IA, no es la IA.

La versión prémium no cambia nada que decida una partida
WordSalvo tiene dos opciones de pago y ninguna de ellas afecta al tablero. Una compra única de Ad-Free elimina el banner de la sala de espera y el anuncio intersticial entre partidas. La suscripción Word Master prevista desbloqueará análisis pospartida más detallados, reintentos ilimitados en el puzle diario, el Libro de Palabras, matchmaking prioritario y temas cosméticos.
Lo que la versión prémium no cambia: el sorteo de fichas (la bolsa se mezcla con `tile_bag.dart` sin comprobar derechos), el diccionario (el mismo DAWG para cada jugador en ese idioma), tu puntuación (multiplicadores calculados por el motor, sin bonificaciones ocultas) ni tu rango de matchmaking (la prioridad solo afecta a la posición en la cola, no a la valoración del oponente).
En otras palabras: dos jugadores del plan gratuito pueden llegar a lo más alto de la clasificación de un idioma solo con la aplicación instalada. El 0 % de las compras dentro de la aplicación sirven para comprar una victoria.
El chat tiene un filtro; los jugadores pueden bloquear, silenciar y denunciar
Cada mensaje de chat pasa por la Cloud Function `onChatMessage`, que aplica un filtro de toxicidad en el servidor antes de que el mensaje llegue al otro jugador. El filtro no es perfecto (ningún filtro automático lo es), por lo que cada mensaje está a un toque de ser denunciado, bloqueado o silenciado.
Las denuncias se guardan en Firestore y las revisamos. Los bloqueos son bidireccionales: un jugador bloqueado no puede invitarte, jugar contigo ni chatear contigo. Los silencios son locales y discretos. Un jugador que acumula denuncias confirmadas se gestiona manualmente: no realizamos vetos automáticos y no nos quedamos callados cuando actuamos.
Qué le pasa a un jugador marcado
El documento del veredicto de juego limpio (`games/{gameId}/analysis/fairPlay`) está bloqueado solo para Cloud Functions. Las reglas de Firestore impiden que los clientes lo lean, por lo que un jugador marcado no puede ver una puntuación y ajustarse a ella. Las medias por jugador en `users/{uid}/fairPlayBaseline/{statsKey}` solo pueden ser leídas por su propietario.
Cuando una partida se marca con alta confianza, el sistema de juego limpio le da a WordSalvo una base más clara para la revisión y la acción. Está diseñado para fomentar la confianza en el PvP sin pretender que ningún sistema antitrampas lo detecte todo.
Si crees que te han marcado por error, contacta con nosotros desde Ajustes → Ayuda. Guardamos un historial por jugador lo suficientemente largo como para explicar la decisión.
Preguntas frecuentes
- ¿Qué se considera hacer trampas en WordSalvo?
- Usar un motor externo, un programa de resolución o una herramienta de anagramas para elegir tus jugadas. Compartir una cuenta en varias partidas con valoración. Coordinarse con un oponente para perder a propósito o aumentar una valoración. Aprovechar un error para enviar un tablero no válido. El estudio normal (leer un diccionario, practicar contra la IA, aprender del análisis pospartida) no es hacer trampas.
- ¿Cómo detectáis el uso sospechoso de motores?
- Mediante el análisis de patrones sospechosos por partida, combinado con tu propia media móvil. El servidor analiza la distribución de brillantez, las rachas perfectas, la varianza del tiempo de reflexión, la velocidad frente a la precisión y la frecuencia de bingos, y luego se pregunta si esta partida está muy por encima de tu juego normal. Una sola partida brillante no es suficiente.
- ¿Hay bots que se hacen pasar por oponentes humanos?
- No. El matchmaking online devuelve jugadores reales de una cola de Firestore con una ventana de ±200 puntos de valoración. Existen oponentes de IA en nivel fácil, medio, difícil y experto, y cada uno de ellos lleva una etiqueta explícita de IA en la ficha de la sala de espera y en el marcador.
- ¿Qué pasa si me marcan por error?
- Revisamos las partidas marcadas manualmente antes de tomar cualquier medida, y te avisamos cuando actuamos; no hay vetos silenciosos. Si crees que nos hemos equivocado, contacta con nosotros desde Ajustes → Ayuda. Las medias son móviles, por lo que una partida inusualmente buena no te marcará.
- ¿Pagar por la versión prémium me da alguna ventaja?
- No. La versión prémium elimina los anuncios, añade análisis pospartida más detallados, ofrece reintentos ilimitados en el puzle diario, el Libro de Palabras y temas cosméticos. No cambia el sorteo de fichas, el diccionario, la puntuación ni el rango de habilidad del oponente. Un jugador del plan gratuito puede llegar a lo más alto de una clasificación.
- ¿El diccionario es el mismo para todos?
- Sí. Todos los jugadores de un idioma determinado juegan con la misma lista de palabras compilada en un DAWG, que se distribuye como un archivo idéntico en el cliente y el servidor. El inglés usa listas de la familia SOWPODS; el neerlandés usa OpenTaal. Los informes de palabras que faltan o son incorrectas pasan por una revisión humana.