Important
📥 Descargar CarnageReporter.exe para PC (ejecutable portable, no instala nada) — o 📦 Descargar el instalador (CarnageReporter-Setup.exe) (agrega accesos directos y la opción de iniciar con Windows desde el propio instalador). Compatible con Windows 10/11 (Halo 3 MCC PC).
Note
¿Windows bloquea la descarga o aparece "Editor: Desconocido"? Es SmartScreen y es normal (el ejecutable aún no está firmado digitalmente; el código es abierto y puedes revisarlo aquí mismo).
- Al descargar: en la barra de descargas → ⋯ → Conservar → "Mostrar más" → Conservar de todas formas.
- Al abrir: clic en "Más información" → "Ejecutar de todas formas" (solo la primera vez).
Cada release publica además SHA256SUMS y SHA256SUMS.sig: los hashes de
los .exe y su firma Ed25519, para quien quiera verificar la descarga a
mano (el cliente ya lo hace solo antes de auto-actualizarse — ver
docs/release-signing.md).
🔐 Free code signing on Windows provided by SignPath.io, certificate by SignPath Foundation (en proceso de integración). Consulta la Política de Privacidad para saber qué datos procesa la aplicación.
Este proyecto es un fork mejorado del trabajo original de CYRiXplaysHalo/CarnageReporter. Se ha rediseñado para ofrecer una arquitectura más robusta, integración con Supabase para estadísticas históricas y un dashboard web completo.
Carnage Reporter automatiza el seguimiento de tus partidas de Halo 3 en MCC PC (Customs y Matchmaking), extrayendo estadísticas detalladas que el juego normalmente sobreescribe.
El ecosistema se divide en tres componentes principales que trabajan en armonía:
Es un ejecutable ligero que corre en segundo plano mientras juegas:
- Monitoreo en Tiempo Real: Vigila la carpeta temporal de MCC en busca de los archivos
.xmlque el juego genera tras cada partida. - Persistencia: Antes de que MCC los borre, el cliente los captura y procesa.
- Sincronización: Envía los datos extraídos automáticamente a nuestro servidor central.
El cerebro del sistema, encargado de procesar la "carnicería":
- Procesamiento de Datos: Recibe el XML, lo parsea y extrae cada baja, muerte, asistencia y medalla.
- Renderizado Dinámico: Utiliza un motor de renderizado (Puppeteer) para crear una imagen resumida (PNG) profesional de la partida.
- Notificaciones: Publica automáticamente los resultados en canales de Discord y grupos de WhatsApp.
- Base de Datos: Almacena cada estadística en Supabase de por vida.
Una interfaz moderna construida en React para la comunidad:
- Leaderboards: Clasificación en tiempo real de los mejores jugadores basada en métricas MLG.
- Historial Global: Visualiza el total de bajas, muertes y eficiencia de toda la comunidad.
- Perfiles: Consulta tus estadísticas personales y evolución a lo largo del tiempo.
Si deseas correr el proyecto desde el código fuente o contribuir:
-
Clonar el repo:
git clone https://github.com/iChocko/CarnageReporter.git
-
Instalar dependencias:
npm install
-
Variables de entorno: Configura un archivo
.envbasado en.env.example(todas las variables están documentadas ahí):API_KEY=una-cadena-aleatoria-larga SUPABASE_URL=https://tu-proyecto.supabase.co SUPABASE_KEY=tu_service_role_key DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/...
-
Ejecutar:
- Cliente:
npm start - Servidor:
node server/index.js - Dashboard:
cd dashboard && npm run dev
- Cliente:
-
Compilar el cliente (.exe de Windows):
./build_client.sh # o directamente: cd client && npm install && npm run build
Genera
client/dist/CarnageReporter.execon@yao-pkg/pkg(fork mantenido depkg, targetingnode22-win-x64). Verdocs/sea-fallback.mdpara la alternativa con Node SEA si el empaquetador deja de funcionar.Instalador (.exe → Setup.exe):
client/installer/CarnageReporter.iss(Inno Setup 6) empaqueta el.exeya compilado enCarnageReporter-Setup.exe(accesos directos de menú Inicio, tarea opcional "Iniciar con Windows", desinstalador que limpia el arranque automático). Se compila coniscc client/installer/CarnageReporter.iss— no se puede probar en macOS/Linux, solo se valida por revisión y en CI (windows-latest, donde Inno Setup ya viene preinstalado).El ejecutable (y
node client/carnage_client.jsen desarrollo) acepta además de--background:--version: imprime la versión y sale (código 0).--selftest: corre el parser XML real contra un fixture interno y sale 0/1 — útil para verificar un build recién compilado sin tener un XML real de una partida.--status: imprimestatus.jsonsi existe (o consulta la instancia corriendo en127.0.0.1:47613como respaldo) y sale (código 0).--enable-autostart/--disable-autostart: activa o desactiva el arranque automático con Windows sin pasar por el menú interactivo.--drain-now: reintenta de inmediato lo que esté en la cola de envío (spool), sin esperar al timer de 60s ni a que llegue una partida nueva.--rollback(Fase B5): revierte a la versión anterior guardada comoCarnageReporter.prev.exejunto al exe (se crea automáticamente en cada auto-actualización exitosa). Falla con un mensaje claro si no hay ninguna versión anterior que restaurar. El menú interactivo también ofrece esta opción ([R] Revertir) cuando detecta una actualización reciente.
Auto-actualización verificada (Fase B5): desde v1.7 el cliente ya no instala un
.exedescargado sin más — antes de reemplazar nada, verifica el SHA256 del.execontraSHA256SUMSdel release y la firma Ed25519 deSHA256SUMScontra una clave pública embebida en el propio cliente. Si el release no publica esos dos archivos, o cualquiera de las dos verificaciones falla, la actualización se cancela y el ejecutable en uso queda intacto. También respetaETag/304 Not Modifiedy el rate-limit de la API de GitHub (se salta la revisión hasta que expire, en vez de seguir insistiendo). Detalle completo endocs/release-signing.md.Dónde vive cada cosa (desde v1.7 / Fase B3):
settings.json, la bitácora (carnage_client.log), la cola de reportes pendientes/fallidos (spool/),status.json,instance.json,update.log,update-state.jsony los.exedescargados en verificación (updates/<version>.exe.part→.exe) ya NO viven junto al exe sino en%LOCALAPPDATA%\CarnageReporter(oCARNAGE_DATA_DIRsi lo defines). Elconfig.json/config.gen.jscon la API key, el propio.exey su respaldoCarnageReporter.prev.exe(para--rollback) sí siguen junto al exe. Unsettings.json/carnage_autostart.vbsde una instalación anterior se migra (copia) automáticamente la primera vez que corre esta versión.Reportes robustos (spool): un XML que no se pudo enviar (sin conexión, servidor caído) se mueve a
spool\pending\y se reintenta con backoff creciente (5s, 15s, 1m, 5m, 15m, hasta 1h) durante 7 días antes de archivarse enspool\failed\. Sobrevive a que cierres el programa o se reinicie Windows a la mitad.CARNAGE_LOG_LEVEL=debug(osettings.json: { "logLevel": "debug" }) agrega detalle extra a la bitácora.
- Autor Original: CYRiXplaysHalo (Idea inicial y estructura de captura XML).
- Mantenedor Actual: iChocko.
- Comunidad: Gracias a todos los jugadores que contribuyen con su data para hacer de Halo 3 un juego eterno.
Hecho con ❤️ para la comunidad de Halo.