# Miyamap

Addon educativo para World of Warcraft Retail/Midnight que reemplaza el minimapa por un mapa de zona compacto e interactivo.

## Funciones incluidas

- Interfaz bilingüe automática: configuración, instrucciones, avisos, tooltips, rutas y comandos aparecen en español para `esES`/`esMX` y en inglés para los demás clientes.
- Reemplazo del minimapa original, activado por defecto y reversible.
- La primera vez que se entra en una mazmorra pregunta si se usará Miyamap o el minimapa original, mostrando antes las ventajas y limitaciones de cada opción.
- La elección queda guardada y la pregunta no vuelve a aparecer; un botón permanente permite alternar después entre Miyamap y el minimapa de Blizzard.
- El botón de cambio permanece visible en ambos modos y usa las dimensiones nativas del aro de Blizzard para mantener alineados borde, fondo e icono.
- Un único botón moderno abre un contenedor adaptable con los botones de otros addons; todos se mantienen ordenados dentro del contenedor tanto con Miyamap como con el minimapa de Blizzard.
- Acceso al Folio Omnium de la expansión actual, con el icono y la disponibilidad controlados por el botón oficial de Blizzard.
- Tres accesos compactos junto al mapa: addons, Folio Omnium y controles del mapa.
- El menú del mapa reúne Adds, Jefes, Rutas MDT y la interfaz gráfica de configuración.
- Capa opcional de servicios cercanos: integra sobre Miyamap los puntos nativos del minimapa para bancos, transfiguración, subastas, buzones y los demás filtros de rastreo activos de Blizzard.
- La capa de servicios se puede activar o desactivar desde el engranaje y desde la configuración completa, sin mostrar una segunda textura de terreno.
- Vista nativa de recolección opcional: usa el minimapa real de Blizzard a tamaño completo para mostrar en vivo las menas y hierbas detectadas cerca.
- Antes de activarla por primera vez explica sus ventajas y limitaciones; la elección queda guardada y se puede cambiar desde el engranaje o la configuración completa.
- La vista de recolección se pausa dentro de mazmorras y otras instancias para conservar los adds, jefes, rutas y pisos de Miyamap.
- Al cerrar o pausar la vista de recolección, Miyamap vuelve a la posición exacta que tenía antes de activarla, incluso después de un `/reload`.
- La tecla de la vista de hierbas y menas puede asignarse o borrarse directamente desde la configuración de Miyamap y también aparece en **Opciones → Teclas → AddOns → Miyamap**.
- Botón junto al minimapa en el modo de ventana independiente.
- Entrada en el compartimento de addons de Blizzard.
- Texturas reales del mapa de la zona actual.
- Capa de exploración del personaje, igual que en el mapa mundial de Blizzard.
- Misiones activas, disponibles y listas para entregar.
- Las misiones normales, recurrentes azules, de campaña, importantes, legendarias y meta usan la clasificación y los atlas actuales de Blizzard, incluidos sus estados activos y de entrega. Las diarias, semanales y de reinicio programado también usan el icono azul completo de Blizzard cuando el cliente informa una clasificación base normal. Las ofertas recibidas mediante la API de tareas o la lista de visibilidad forzada se identifican como misiones y no como objetivos adicionales.
- Misiones de mundo y objetivos adicionales.
- Los eventos, abismos, carreras, misiones de mundo y puntos de interés conservan el icono nativo dentro del aro correspondiente para mejorar su lectura sobre el mapa.
- Eventos, abismos, carreras de surcacielos y centros de misiones.
- Entradas de mazmorra/banda, raros, tesoros y puntos de interés.
- Jefes de mazmorra y banda en su piso correspondiente, con retrato, nombre, descripción y estado derrotado.
- Control rápido dentro del menú del mapa para mostrar u ocultar los jefes de mazmorra.
- Adds individuales con retrato, fuerzas enemigas, patrullas y avisos de hechizos interrumpibles.
- Capa y control independientes para mostrar u ocultar los adds sin afectar a los jefes.
- Biblioteca de rutas exportadas por MDT: admite varias rutas por mazmorra, selectores de dungeon/ruta y una selección recordada para cada instancia.
- Cada ruta puede renombrarse desde el selector para distinguir variantes de una misma mazmorra.
- La ruta elegida muestra color y número de pull sobre cada add y jefe incluido.
- Los adds eliminados durante la ruta quedan en plomo mediante el evento de bajas y el estado de sus placas de nombre, tanto en M+ como en mítica normal; el progreso se reinicia al comenzar una piedra o manualmente.
- Puntos de vuelo, excavaciones arqueológicas y accesos entre mapas.
- Destinos indicados por guardias, con el nombre e icono oficial de banco, transfiguración, subastas y otros servicios.
- El destino indicado por un guardia desaparece automáticamente al llegar a menos de 25 yardas.
- Tooltips con objetivos y tiempo restante; clic izquierdo para seguir un punto.
- Seis niveles de zoom con la rueda del ratón o los botones `+` y `-`.
- Zoom independiente por mapa: al entrar en una zona nueva comienza con un encuadre normal.
- Arrastre del mapa con el botón izquierdo.
- Centrado en el jugador con clic derecho o con el botón `C`.
- Centrado automático al entrar o cambiar de piso en una instancia, con varios reintentos mientras WoW termina de cargar el mapa.
- Seguimiento continuo cuando la instancia entrega coordenadas; si Blizzard las protege, el piso cambia automáticamente a vista completa para mantener siempre visible la flecha.
- Coordenadas y dirección del jugador.
- Marcador del punto de ruta de Blizzard.
- Marcador nativo del cadáver en el lugar de la muerte, visible mientras corresponde y retirado automáticamente al resucitar.
- Marcadores nativos de los miembros del grupo o banda, con colores de clase y soporte dentro de instancias.
- Posición del jugador y del grupo dentro de mazmorras mediante conversión de coordenadas mundiales cuando la API normal del mapa no responde.
- Flecha nativa `UnitPositionFrame`, incluso cuando Blizzard protege por completo las coordenadas Lua de una instancia.
- Calibración manual por piso cuando Blizzard protege la posición: clic derecho sobre la flecha la centra y guarda el punto para futuras entradas.
- Tamaño de la flecha del jugador ajustable y guardado entre sesiones.
- Formas cuadrada y circular, marco configurable y perfiles normal, compacto y mini.
- El modo cuadrado usa todo el marco para el mapa, sin cabecera, pie, contador de zoom ni botones superpuestos.
- Tamaño y distancia configurables para los botones de otros addons.
- Columnas preferidas y posición del contenedor configurables; la cuadrícula reduce o aumenta sus columnas automáticamente cuando el espacio de la pantalla lo requiere.
- Tamaño, opacidad, bloqueo y posición guardados entre sesiones.
- El mapa y sus accesos usan la misma capa visual baja que el minimapa de Blizzard, de modo que bolsas y otras ventanas de interfaz aparecen correctamente por encima.
- Al usar el minimapa normal, el botón de Miyamap queda por encima del propio minimapa, puede arrastrarse y recuerda su posición sin afectar su ubicación junto a Miyamap.
- Con el minimapa de Blizzard sólo permanece el botón azul de addons; Folio y controles del mapa se reservan para Miyamap.
- El botón azul de Blizzard y el grupo de accesos de Miyamap son independientes: cada modo guarda su propia posición y mover uno no desplaza el otro ni el minimapa original.

## Instalación manual

1. Cierra World of Warcraft por completo.
2. Copia la carpeta `Miyamap` a:

   ```text
   C:\Program Files (x86)\World of Warcraft\_retail_\Interface\AddOns\
   ```

3. Comprueba que el archivo `.toc` quede exactamente en:

   ```text
   ...\Interface\AddOns\Miyamap\Miyamap.toc
   ```

   Evita una carpeta duplicada como `Miyamap\Miyamap\Miyamap.toc`.

4. Abre WoW. En la pantalla de personajes, entra en **AddOns** y activa **Miyamap**.
5. Entra con un personaje y escribe `/mzm`.

La base de enemigos viene incluida en Miyamap. No hace falta instalar, activar ni abrir Mythic Dungeon Tools. Miyamap conserva siempre el mapa normal de Blizzard y usa calibraciones estáticas medidas contra el arte oficial de cada piso. Los adds solo se dibujan dentro de instancias de grupo compatibles.

Si copias o modificas archivos mientras WoW está abierto, ejecuta `/reload` dentro del juego.

## Uso

- Botón del minimapa o `/mzm`: mostrar u ocultar.
- Botón azul de addons: abrir o cerrar el contenedor adaptable.
- Botón del Folio: abrir el Folio Omnium de la expansión actual.
- Botón de engranaje: abrir el menú de controles del mapa.
- Menú del mapa: mostrar u ocultar Adds, Jefes y servicios cercanos, activar la vista nativa de recolección, gestionar Rutas MDT o abrir la configuración completa.
- Configuración de Miyamap: asignar o borrar directamente la tecla de la vista de hierbas y menas.
- Arrastrar cualquiera de esos botones: mover el conjunto.
- `/mzm replace`: alternar entre este mapa y el minimapa original.
- Rueda del ratón: cambiar zoom.
- `Ctrl` + rueda del ratón: agrandar o reducir el marco en pasos de 10.
- Arrastrar dentro del mapa: desplazarse manualmente.
- Clic derecho dentro del mapa: volver a seguir al jugador.
- En una instancia con posición protegida: clic derecho sobre tu flecha para guardar el centro; `Shift` + clic derecho fuerza la calibración si el widget no detecta el cursor.
- Arrastrar el título: mover la ventana.
- `Shift` + arrastrar dentro del mapa: moverlo, especialmente en el modo circular sin cabecera.

### Comandos

```text
/mzm
/mzm help
/mzm recoleccion
/mzm config
/mzm size 320
/mzm forma circular
/mzm marco 5
/mzm botones
/mzm iconos 28
/mzm distancia 5
/mzm columnas 4
/mzm ruta
/mzm ruta on
/mzm ruta off
/mzm ruta reset
/mzm ruta borrar
/mzm moverboton reset
/mzm perfil compacto
/mzm flecha 18
/mzm alpha 0.9
/mzm lock
/mzm replace
/mzm button
/mzm adds
/mzm debug
/mzm reset
```

El modo circular admite tamaños de `120` a `650`; el cuadrado, de `220` a `650`. La flecha admite valores de `8` a `40`, los botones de addons de `18` a `48` y la opacidad de `0.35` a `1`.

## Cómo está construido

Un addon básico de WoW necesita como mínimo un manifiesto y un archivo Lua. Esta versión usa varios módulos para que cada responsabilidad quede aislada:

```text
Miyamap/
├── Namespace.lua      # constantes, estado compartido y datos guardados
├── Localization.lua   # textos automáticos en inglés y español
├── Coordinates.lua    # mapas y posición normalizada, incluida la de instancias
├── DungeonData.lua     # base integrada de enemigos de las mazmorras compatibles
├── DungeonBossData.lua # referencias de jefes conservadas con la base integrada
├── DungeonMapTransforms.lua # conversión y máscara visual por piso
├── DungeonEnemies.lua  # lectura y conversión de coordenadas individuales
├── Markers.lua        # jugador, grupo, enemigos, misiones, POI y transportes
├── MapView.lua        # mosaicos, exploración, zoom y desplazamiento
├── AddonButtons.lua   # detección, contenedor y restauración de botones de addons
├── UI.lua             # ventana, minimapa, botones y modo de reemplazo
├── Options.lua        # interfaz gráfica de configuración
├── Commands.lua       # comandos /mzm
├── Miyamap.toc
└── Core.lua
```

`Core.lua` solamente inicializa los módulos y distribuye los eventos de WoW.

### El archivo TOC

`Miyamap.toc` es el manifiesto. Indica la versión de interfaz compatible, el nombre mostrado por WoW, los datos persistentes y los archivos Lua que deben cargarse:

```toc
## Interface: 120007
## Title: Miyamap
## SavedVariables: MapaEnMiniaturaDB

Namespace.lua
Localization.lua
Coordinates.lua
DungeonData.lua
DungeonBossData.lua
DungeonMapTransforms.lua
DungeonEnemies.lua
Markers.lua
MapView.lua
AddonButtons.lua
UI.lua
Options.lua
Commands.lua
Core.lua
```

Cuando Blizzard publique otra versión puede ser necesario actualizar `Interface`. También puedes activar **Cargar AddOns antiguos** temporalmente desde la pantalla de personajes.

### El archivo Lua

`Core.lua` realiza estas tareas:

1. Espera el evento `ADDON_LOADED`.
2. Crea la ventana con `CreateFrame`.
3. `Coordinates.lua` obtiene el mapa actual con `C_Map.GetBestMapForUnit("player")`.
4. `MapView.lua` carga siempre los mosaicos oficiales mediante `C_Map.GetMapArtLayers` y `C_Map.GetMapArtLayerTextures`.
5. Primero se intenta obtener la posición con `C_Map.GetPlayerMapPosition`.
6. En instancias donde esa llamada no responde, se convierte `UnitPosition` usando el tamaño y las coordenadas mundiales del piso.
7. `DungeonData.lua` aporta las posiciones y retratos sin depender de otro addon en tiempo de ejecución.
8. `DungeonBossData.lua` y `DungeonEnemies.lua` emparejan los NPC de los jefes con la Guía de aventuras y calculan una conversión alineada por ejes hacia el mapa oficial; nunca modifican la posición del jugador.
9. `Markers.lua` dibuja los retratos y consulta las APIs de misiones, encuentros, POI, viñetas y transportes.
10. `AddonButtons.lua` conserva el aspecto y la posición originales, normaliza los iconos dentro de celdas uniformes y calcula una cuadrícula adaptable.
11. `Options.lua` proporciona una ventana gráfica para modificar las preferencias sin comandos.
12. Las opciones continúan guardándose en `MapaEnMiniaturaDB`.

## Limitaciones conocidas

- Algunas instancias protegen tanto la posición normalizada como las coordenadas mundiales. Blizzard permite dibujar la flecha nativa, pero impide que un addon use ese valor para mover otro frame. En esos pisos hay que calibrar una vez con clic derecho sobre la flecha; el punto queda guardado para próximas entradas.
- Blizzard no expone a Lua las coordenadas de las menas, hierbas ni servicios rastreados. Miyamap reutiliza el minimapa nativo: en la capa de servicios oculta su terreno y conserva sólo los puntos cercanos; la vista de recolección a tamaño completo mantiene el terreno para ofrecer el mismo radar que Blizzard.
- Algunas zonas especiales no contienen texturas de mapa utilizables; el addon intenta subir al mapa padre.
- Otros addons de interfaz pueden mover u ocultar el botón. El comando `/mzm` siempre permite abrir el visor.
- Si otro addon ya guarda los botones en su propio contenedor, este addon no se los quitará para evitar conflictos; seguirá mostrando el botón de ese contenedor cuando esté anclado al minimapa.
- Se reproducen las capas principales disponibles mediante la API pública. Algunos elementos internos del mapa grande, como áreas coloreadas de objetivos, widgets especiales y ciertos filtros de Blizzard, no se pueden clonar de forma idéntica en un mapa personalizado.
- Los adds usan posiciones planificadas incluidas con esta versión. Con una ruta seleccionada, las bajas se infieren del evento de muerte de unidades y de las placas visibles; la base de posiciones debe actualizarse cuando cambien las mazmorras.
- Las posiciones se calibran por `mapID` contra el arte oficial y cada piso tiene una máscara propia para impedir que aparezcan grupos de otro nivel o sobre zonas vacías.
- Murder Row no incluye adds en esta versión porque la fuente 6.1.20 todavía no proporcionaba sus registros de enemigos.

## Licencia y atribución

Miyamap se distribuye bajo GPLv2. La base compacta de `DungeonData.lua` y `DungeonBossData.lua` fue adaptada de Mythic Dungeon Tools 6.1.20, también GPLv2; consulta `THIRD_PARTY_NOTICES.md` y `LICENSE`.

## Desarrollo y pruebas

Después de cambiar `Core.lua`:

1. Guarda el archivo.
2. Copia la versión modificada a la carpeta `Interface\AddOns` si trabajas desde otra ubicación.
3. Ejecuta `/reload` en WoW.
4. Si aparece un error Lua, activa los errores con:

   ```text
   /console scriptErrors 1
   /reload
   ```

Para desactivarlos de nuevo:

```text
/console scriptErrors 0
/reload
```
