Saltar al contenido principal

Gemas — 8 niveles XP

Componente: block_xp Community v19.0 (plugin de comunidad, sin modificaciones de código) Alcance: 1 — Gamificación Estado: Aplicado a nivel sitio (defaults de admin); los cursos heredan salvo personalización

Propósito​

Sistema de progresión por experiencia: el estudiante acumula XP por su actividad en el curso y asciende por 8 niveles temáticos ("Gemas"), cada uno con imagen propia.

Los 8 niveles​

Método de cálculo flat: umbrales fijos con incrementos constantes de 500 XP (sin curva).

NivelNombreXP mínimo
1Gema Alba0
2Gema Aqua500
3Gema Violeta1.000
4Gema Esmeralda1.500
5Gema Solar2.000
6Gema Coral2.500
7Gema Índigo3.000
8Gema Prisma3.500

Dónde vive la configuración​

A nivel sitio (aplicado): mdl_config_plugins, plugin block_xp, clave levelsdata. Los cursos cuya fila en mdl_block_xp_config tenga levelsdata vacío heredan estos defaults (fallback verificado en blocks/xp/classes/local/factory/levels_factory.php:94-116). Por eso no se necesita UPDATE por curso: basta con no personalizar niveles en el curso.

JSON aplicado (formato v2 de block_xp):

{
"v": 2,
"xp": [0, 500, 1000, 1500, 2000, 2500, 3000, 3500],
"algo": {"method": "flat", "base": 500, "coef": 1.3, "incr": 500},
"name": {"1": "Gema Alba", "2": "Gema Aqua", "3": "Gema Violeta",
"4": "Gema Esmeralda", "5": "Gema Solar", "6": "Gema Coral",
"7": "Gema Índigo", "8": "Gema Prisma"}
}
Formato de los metadatos

En el formato v2, xp es un array plano (0-based) pero name/desc se indexan por número de nivel (1-based) — ver levels_info_writer::construct_finaldata(). Si name se guarda como array plano, los nombres quedan corridos un nivel (la Gema Alba aparecería en el nivel 2).

La edición normal es vía Admin UI: Administración del sitio → Level Up XP → Niveles por defecto (/blocks/xp/index.php?_r=/admin/levels) e imágenes en .../admin/visuals.

Imágenes​

8 PNG (requierments/assets/niveles/1.png … 8.png), fondo transparente, cargadas por nivel desde la Admin UI de visuals a nivel sitio. Los cursos que heredan los niveles también heredan las imágenes.

Verificación​

-- Defaults del sitio
SELECT value FROM mdl_config_plugins WHERE plugin = 'block_xp' AND name = 'levelsdata';
-- Cursos que heredan (levelsdata vacío = hereda)
SELECT courseid, levels, levelsdata FROM mdl_block_xp_config WHERE enabled = 1;

En la UI: el bloque XP del curso debe mostrar "Nivel 1 / Gema Alba" para un estudiante nuevo y el próximo nivel a 500 XP. La presentación rediseñada (Card 1 del sidebar) se documenta en theme_cdigital.

Prerrequisito: seguimiento de finalización​

Los niveles XP funcionan sin él, pero las insignias y el Dashboard de aprendizaje no: sin seguimiento de finalización las métricas devuelven vacío y los criterios de insignia no se evalúan. Conviene comprobarlo antes de configurar la gamificación.

-- Cursos SIN seguimiento de finalización
SELECT id, fullname FROM mdl_course WHERE enablecompletion = 0 AND id <> 1;

Lo esperado es que no devuelva filas, salvo cursos descartados de forma explícita. Para habilitarlo de forma masiva:

UPDATE mdl_course SET enablecompletion = 1 WHERE id IN (<lista_de_courseids>);

Habilitar el seguimiento a nivel curso es condición necesaria pero no suficiente: cada actividad relevante necesita además sus condiciones de finalización, y las insignias que dependen de finalización de curso necesitan sus criterios definidos. Ver Insignias.

Carga de las imágenes de nivel​

Las 8 imágenes de Gema se cargan en las visuales por defecto de block_xp desde la administración del plugin. Para automatizarlo hace falta el contextid de la instancia del bloque:

SELECT bi.id AS blockinstanceid, ctx.id AS contextid, ctx.path, bi.parentcontextid
FROM mdl_block_instances bi
JOIN mdl_context ctx ON ctx.contextlevel = 80 AND ctx.instanceid = bi.id
WHERE bi.blockname = 'xp';

Es la consulta que necesita el bloque 3 de la rutina de configuración para cargar las imágenes sin pasar por la interfaz.