Skip to content

Adaptación del sistema de emparejamiento glicko a Sourcepawn

License

Notifications You must be signed in to change notification settings

lechuga16/Glicko_SourcePawn

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Glicko SourcePawn

SourceMod License

Una implementación completa del algoritmo Glicko Rating System para SourcePawn/SourceMod, diseñada para sistemas de clasificación competitiva en juegos de Valve.

🌟 Características

  • ✅ 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

📚 Documentación

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.

Referencias Adicionales

🚀 Instalación

  1. Copia include/glicko.inc a tu carpeta scripting/include/
  2. Incluye la biblioteca en tu plugin: #include <glicko>
  3. Compila tu plugin normalmente

Archivos del Proyecto

  • include/glicko.inc - Biblioteca principal con todas las funciones Glicko
  • glicko_test.sp - Plugin de pruebas con simulaciones aleatorias avanzadas
  • glicko_example.sp - Ejemplo de implementación completa para uso real

💡 Uso Básico

Inicializar un Jugador

PlayerInfo player;
Glicko_InitializePlayer(player);

Actualizar Rating Después de una Partida

PlayerInfo player, opponent;
// ... inicializar jugadores ...

// El jugador ganó contra el oponente
Glicko_UpdateRating(player, opponent, Result_Win);

Actualizar Rating con Múltiples Partidas

PlayerInfo player;
PlayerInfo opponents[3];
MatchResults results[3] = {Result_Win, Result_Loss, Result_Loss};

Glicko_UpdateRatingMultiple(player, opponents, results, 3);

Calcular Probabilidad de Victoria

float winChance = Glicko_GetWinProbability(player1, player2);
PrintToChat(client, "Probabilidad de ganar: %.1f%%", winChance * 100.0);

⚙️ Configuración

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>

📋 API Completa

Funciones Principales

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

Funciones de Bajo Nivel

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

Estructura PlayerInfo

enum struct PlayerInfo
{
    float rating;      // Rating Glicko
    float deviation;   // Desviación del rating
    int gamesplayed;   // Número de partidas jugadas
}

Resultados de Partida

enum MatchResults
{
    Result_Loss = 0,   // Derrota
    Result_Draw = 1,   // Empate
    Result_Win = 2     // Victoria
}

🎮 Ejemplos y Pruebas

Plugin de Pruebas (glicko_test.sp)

El plugin de pruebas incluye funcionalidad completa para probar y demostrar el sistema Glicko:

Comandos Disponibles:

  • sm_glicko_run - Prueba con jugadores predefinidos (demostración de fórmulas)
  • sm_glicko_random - Simulación aleatoria con reporte detallado
  • sm_glicko_multiple [1-10] - Múltiples simulaciones aleatorias consecutivas

Características de las Simulaciones:

  • 🎲 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

Ejemplo de Salida de sm_glicko_random:

┌─────────────────────────────────┐
│      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%

Ejemplo Completo (glicko_example.sp)

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

🐛 Depuración y Pruebas

Función de Depuración de la Biblioteca

La biblioteca incluye una función de depuración que muestra todos los cálculos paso a paso:

Glicko_DebugCalculation(player, opponent, result);

Plugin de Pruebas Interactivo

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 consecutivas

Análisis de Salida

Las 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

📈 Mejoras Implementadas

Versión 2.1

  • ✅ 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

Versión 2.0

  • ✅ 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

Correcciones de Errores

  • ✅ Corregida la fórmula de RD en comentarios
  • ✅ Uso correcto de INITIAL_DEVIATION en lugar de valor hardcodeado
  • ✅ Validación de entrada en todas las funciones

🤝 Contribuciones

Las contribuciones son bienvenidas. Por favor:

  1. Fork el repositorio
  2. Crea una rama para tu feature (git checkout -b feature/nueva-caracteristica)
  3. Commit tus cambios (git commit -am 'Agrega nueva característica')
  4. Push a la rama (git push origin feature/nueva-caracteristica)
  5. Abre un Pull Request

📄 Licencia

Este proyecto está licenciado bajo la GNU General Public License v3.0 - consulta el archivo LICENSE para más detalles.

📞 Soporte


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.

About

Adaptación del sistema de emparejamiento glicko a Sourcepawn

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published