Entrada del blog
v2.7.0 trae localización completa al español, personalización de colores del tema, un panel lateral acoplable para notas y recordatorios dentro del juego, y audio personalizado para alertas de jefes — además de varias mejoras de calidad de vida en todas las pestañas.
v2.7.0 es una versión enfocada en personalización. Las adiciones principales son una traducción completa al español, personalización de colores por tema, un panel lateral acoplable de notas para tareas y recordatorios gestionados por el jugador, y la posibilidad de importar audio personalizado para las alertas de jefes. La app sigue siendo portátil, sin instalación, y corre sobre el mismo stack Tauri + Svelte 5 que las versiones anteriores.
La interfaz completa ahora soporta español — alrededor de 345 cadenas traducidas que cubren cada pestaña, toast, diálogo, fecha y número. En el primer arranque, la app detecta el idioma del sistema mediante @tauri-apps/plugin-os y lo usa; en arranques posteriores lee la preferencia guardada. Cambiar entre inglés y español ocurre en vivo y sin recargar la página, gracias a una runa $state conectada al getLocale() de paraglide-js para que Svelte vuelva a renderizar las plantillas afectadas automáticamente. Los números respetan el formato del idioma (en español, `.` como separador de miles y `,` decimal) y las fechas usan abreviaturas localizadas. Las marcas, los nombres propios de BDO, las variantes de barcos y los nombres de NPCs se mantienen en inglés por diseño.
Ajustes → Pantalla ahora tiene un bloque Personalizar Colores con tres ranuras de previsualización en vivo: Primario (botones, CTAs, pestañas activas), Acento (anillos de foco, destellos del pulso neón) y Brillo Dorado (anillo de estado activo, controles deslizantes). Un control deslizante de Intensidad de Brillo (0–200%) actúa como multiplicador sobre la variable CSS del brillo neón, permitiéndote atenuar los brillos del tema Obsidian sin pasar por completo al Claro, o agregar un brillo suave al modo Claro. Cada ranura ofrece un selector de color nativo, seis presets compartidos (morado, cian, dorado, verde neón, rojo anaranjado, rosa) y un reset por ranura que solo aparece cuando hay personalización. Obsidian Oscuro y Claro mantienen sets de overrides separados. Los cambios se aplican al instante mediante propagación en vivo de variables CSS — sin recargar, sin parpadeo.
Un nuevo panel acoplable de notas se abre desde un botón de Nota en la esquina superior derecha del área de contenido principal. El panel aparece con un fondo desenfocado y oscurecido y se cierra con ESC, el ícono de cerrar o haciendo clic afuera. Las categorías viven en un espinazo vertical de colores — seis tonos sticky (ámbar, violeta, cian, rosa, lima, pizarra) — toca para filtrar, toca de nuevo el estante activo para limpiar. Soporta tres tipos de notas: notas de texto con clamp de tres líneas que se expande al editar, listas de tareas con múltiples ítems, y recordatorios que disparan un toast junto al sonido existente de alerta de jefes a la hora indicada. Una línea de comando inferior acepta comandos slash (`/todo`, `/remind`, `/note`) o texto plano, y Ctrl+K la enfoca desde cualquier parte del panel. El `#tag` al final del texto se captura automáticamente. Seis categorías por defecto — Jefes, Trueque, Crafteo, Recordatorios, Diarias, General — se crean en una instalación nueva y son totalmente renombrables.
Ahora puedes importar cualquier archivo de audio (mp3, wav, ogg, m4a, aac, flac, máx. 10 MB) para reemplazar el beep sintetizado integrado de dos tonos. Ajustes → Jefes tiene una nueva subsección de Sonido de Alerta Personalizado con botones Elegir archivo…, Vista Previa y Reset. El botón Vista Previa es un toggle reproducir/detener — los clips largos importados se pueden auditar y detener sin esperar a que terminen, y un tinte dorado marca el estado de reproducción. Los archivos importados se copian al directorio de datos de la app como `boss_alert_sound.<ext>` con whitelist de extensiones y manejo seguro contra path-traversal del lado de Rust. El beep sintetizado original sigue siendo el fallback cuando no hay nada importado.
Varias correcciones menores se incluyen junto a las funciones principales. El fondo animado de hexágonos se removió por completo — fue un experimento interesante, pero rara vez se notaba y consumía CPU innecesario para lo que era pura decoración. El manejo de altura se rehízo en todas las pestañas para que las listas de ingredientes, inventario y botín escalen 1:1 con la ventana, en lugar de quedar topadas en max-heights fijos. Las etiquetas del mapa de Trueque ya no quedan tapadas por nodos adyacentes — el z-index ahora depende del estado del nodo (abierto > último-visitado > visitado > no-visitado). Y el diálogo de confirmación de eliminar nota se reescribió para usar el confirm asíncrono de Tauri, ya que `window.confirm()` no bloquea de forma confiable desde dentro de un panel portal en overlay.
Notificaciones nativas del SO — Cuando la app esté desenfocada, las alertas importantes (apariciones de jefes, recordatorios disparados) van a aparecer a través del sistema de notificaciones del SO en lugar de solo toasts dentro de la app. El pipeline actual de toasts ya centraliza los eventos de alerta, así que conectarlo con @tauri-apps/plugin-notification es básicamente pedir permiso una vez y agregar un check del estado de enfoque.
Recordatorios recurrentes — El sistema actual de recordatorios es de un solo disparo. El siguiente paso es agregar agendado diario, semanal y por intervalos personalizados, con el flag `fired` del recordatorio reseteándose en cada ciclo. El modelo de datos ya soporta timestamps nulables, así que el cambio es básicamente una máquina de estado más un dropdown en la UI.
Arrastrar para reordenar notas — Los estantes de notas y las tarjetas individuales van a soportar reordenamiento por drag-and-drop. El orden actual es fijo (fijadas primero, luego por updated descendente), así que esto abre la puerta a un ordenamiento por prioridad curado por el usuario. svelte-dnd-action o un wrapper DnD HTML5 hecho a mano son ambas opciones sobre la mesa.
Precios en vivo del mercado — Traer los precios en vivo del mercado de BDO le va a permitir al planificador de crafteo mostrar márgenes de ganancia ("¿vale la pena craftear o comprar?") y al rastreador de farmeo mostrar plata/hora real desde el botín registrado. El backend de Rust ya hace fetching HTTP para los anuncios, así que el pipeline de datos es directo — la pregunta que queda es contra qué API de la comunidad conectarse.