Una implementación completa del algoritmo Glicko Rating System para SourcePawn/SourceMod, diseñada para sistemas de clasificación competitiva en juegos de Valve.
- ✅ Implementación completa del algoritmo Glicko 1
- ✅ Funciones de alto nivel para facilidad de uso
- ✅ Sistema de validación de datos
- ✅ Funciones de depuración y utilidad
- ✅ Plugin de pruebas con simulaciones aleatorias avanzadas
- ✅ Reportes visuales compatibles con todas las consolas de servidor
- ✅ Simulaciones múltiples para análisis estadístico
- ✅ Ejemplo práctico de implementación
- ✅ Documentación detallada
- ✅ Período de calificación configurable
- ✅ Cálculo de probabilidades de victoria y confiabilidad
Esta biblioteca está basada en los documentos oficiales del Dr. Mark E. Glickman y proporciona una implementación robusta del sistema de clasificación Glicko para entornos SourceMod.
- Copia
include/glicko.inca tu carpetascripting/include/ - Incluye la biblioteca en tu plugin:
#include <glicko> - Compila tu plugin normalmente
include/glicko.inc- Biblioteca principal con todas las funciones Glickoglicko_test.sp- Plugin de pruebas con simulaciones aleatorias avanzadasglicko_example.sp- Ejemplo de implementación completa para uso real
PlayerInfo player;
Glicko_InitializePlayer(player);PlayerInfo player, opponent;
// ... inicializar jugadores ...
// El jugador ganó contra el oponente
Glicko_UpdateRating(player, opponent, Result_Win);PlayerInfo player;
PlayerInfo opponents[3];
MatchResults results[3] = {Result_Win, Result_Loss, Result_Loss};
Glicko_UpdateRatingMultiple(player, opponents, results, 3);float winChance = Glicko_GetWinProbability(player1, player2);
PrintToChat(client, "Probabilidad de ganar: %.1f%%", winChance * 100.0);Puedes personalizar los parámetros del sistema definiendo las siguientes constantes antes de incluir la biblioteca:
#define INITIAL_RATING 1200.0 // Rating inicial (default: 1500.0)
#define INITIAL_DEVIATION 400.0 // Desviación inicial (default: 350.0)
#define MEAN_DEVIATION 60.0 // Desviación objetivo (default: 50.0)
#define EVALUATION_PERIOD 10 // Período de calificación (default: 5)
#include <glicko>| Función | Descripción |
|---|---|
Glicko_InitializePlayer(PlayerInfo player) |
Inicializa un jugador con valores por defecto |
Glicko_UpdateRating(PlayerInfo player, PlayerInfo opponent, MatchResults result) |
Actualiza el rating después de una partida |
Glicko_UpdateRatingMultiple(PlayerInfo player, PlayerInfo[] opponents, MatchResults[] results, int numMatches) |
Actualiza el rating con múltiples partidas |
Glicko_GetWinProbability(PlayerInfo player1, PlayerInfo player2) |
Calcula la probabilidad de que player1 gane |
Glicko_GetReliability(PlayerInfo player) |
Obtiene la confiabilidad del rating (0.0-1.0) |
Glicko_IsPlayerQualifying(PlayerInfo player) |
Verifica si el jugador está en período de calificación |
Glicko_ValidatePlayer(PlayerInfo player) |
Valida los datos del jugador |
Para usuarios avanzados que necesiten cálculos específicos:
| Función | Descripción |
|---|---|
Glicko_q() |
Constante q del algoritmo |
Glicko_c() |
Constante c del algoritmo |
Glicko_g(PlayerInfo player) |
Función g(RD) |
Glicko_e(PlayerInfo player, PlayerInfo opponent) |
Función de expectativa E |
Glicko_d(float sum_d) |
Cálculo de la desviación d |
enum struct PlayerInfo
{
float rating; // Rating Glicko
float deviation; // Desviación del rating
int gamesplayed; // Número de partidas jugadas
}enum MatchResults
{
Result_Loss = 0, // Derrota
Result_Draw = 1, // Empate
Result_Win = 2 // Victoria
}El plugin de pruebas incluye funcionalidad completa para probar y demostrar el sistema Glicko:
sm_glicko_run- Prueba con jugadores predefinidos (demostración de fórmulas)sm_glicko_random- Simulación aleatoria con reporte detalladosm_glicko_multiple [1-10]- Múltiples simulaciones aleatorias consecutivas
- 🎲 Generación Aleatoria: Jugadores con ratings realistas (800-2200)
- 📊 Reportes Visuales: Tablas con formato ASCII para máxima compatibilidad
- 🧮 Proceso Detallado: Muestra cálculos paso a paso con constantes y probabilidades
- 📈 Análisis Avanzado: Confiabilidad, estados de jugador y probabilidades actualizadas
- 🔄 Simulaciones Múltiples: Ejecuta hasta 10 partidas consecutivas para análisis
┌─────────────────────────────────┐
│ JUGADORES GENERADOS │
├─────────────────────────────────┤
│ Jugador 1: │
│ Rating: 1350 │
│ RD: 120 │
│ Partidas: 8 │
│ │
│ Jugador 2: │
│ Rating: 1580 │
│ RD: 85 │
│ Partidas: 15 │
│ │
│ Resultado: J1 VICTORIA │
└─────────────────────────────────┘
🧮 PROCESO DE CÁLCULO:
Constantes:
q = 0.005756
c = 34.640545
Jugador 1 vs Jugador 2:
g(RD_opp) = 0.946821
E(J1,J2) = 0.321456
d = 287.45
Prob. victoria J1: 32.1%
Consulta glicko_example.sp para ver una implementación completa que incluye:
- Sistema de comandos para consultar ratings
- Persistencia de datos entre conexiones
- Rankings de jugadores
- Funciones de administración
- Ejemplos de integración con eventos del juego
La biblioteca incluye una función de depuración que muestra todos los cálculos paso a paso:
Glicko_DebugCalculation(player, opponent, result);Para pruebas y análisis detallado, utiliza el plugin glicko_test.sp:
// Compilar y cargar el plugin
sm plugins load glicko_test
// Ejecutar pruebas en el servidor
sm_glicko_run // Prueba con jugadores predefinidos
sm_glicko_random // Simulación aleatoria detallada
sm_glicko_multiple 5 // 5 simulaciones aleatorias consecutivasLas simulaciones proporcionan:
- Datos Iniciales: Ratings, desviaciones y partidas jugadas
- Proceso de Cálculo: Constantes del sistema, funciones g(RD), E, d, y probabilidades
- Resultados Finales: Cambios en ratings con valores absolutos y relativos
- Análisis Post-Partida: Confiabilidad, estado del jugador y nuevas probabilidades
- ✅ Plugin de pruebas integrado con simulaciones aleatorias avanzadas
- ✅ Reportes visuales con formato Unicode y tablas
- ✅ Análisis detallado paso a paso de cálculos Glicko
- ✅ Simulaciones múltiples para análisis estadístico
- ✅ Funciones de estado y confiabilidad del jugador
- ✅ Generación de jugadores aleatorios con valores realistas
- ✅ Funciones de alto nivel para facilitar el uso
- ✅ Sistema de validación de datos
- ✅ Cálculo de probabilidades y confiabilidad
- ✅ Funciones de depuración detalladas
- ✅ Ejemplo práctico completo
- ✅ Documentación mejorada
- ✅ Constantes de validación
- ✅ Corrección de errores en fórmulas
- ✅ Corregida la fórmula de RD en comentarios
- ✅ Uso correcto de
INITIAL_DEVIATIONen lugar de valor hardcodeado - ✅ Validación de entrada en todas las funciones
Las contribuciones son bienvenidas. Por favor:
- Fork el repositorio
- Crea una rama para tu feature (
git checkout -b feature/nueva-caracteristica) - Commit tus cambios (
git commit -am 'Agrega nueva característica') - Push a la rama (
git push origin feature/nueva-caracteristica) - Abre un Pull Request
Este proyecto está licenciado bajo la GNU General Public License v3.0 - consulta el archivo LICENSE para más detalles.
- Issues: GitHub Issues
- Discusiones: GitHub Discussions
Nota: Esta biblioteca proporciona las funciones básicas para implementar Glicko. La integración específica con tu modo de juego (persistencia de datos, eventos, etc.) debe ser implementada según tus necesidades particulares.