# Mapa en Miniatura

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

## Funciones incluidas

- Reemplazo del minimapa original, activado por defecto y reversible.
- Un único botón moderno abre un contenedor adaptable con los botones de otros addons; todos se normalizan visualmente y, al desactivar el reemplazo, vuelven intactos a su minimapa original.
- Botón compacto de engranaje para abrir la interfaz gráfica de configuración.
- 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.
- Misiones de mundo y objetivos adicionales.
- 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.
- Botón rápido para mostrar u ocultar los jefes de mazmorra.
- Puntos de vuelo, excavaciones arqueológicas y accesos entre mapas.
- 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.
- Coordenadas y dirección del jugador.
- Marcador del punto de ruta de Blizzard.
- 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.

## 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 **Mapa en Miniatura**.
5. Entra con un personaje y escribe `/mzm`.

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 de engranaje: abrir la interfaz de configuración.
- Botón de calavera: mostrar u ocultar los jefes de mazmorra.
- 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 config
/mzm size 320
/mzm forma circular
/mzm marco 5
/mzm botones
/mzm iconos 28
/mzm distancia 5
/mzm columnas 4
/mzm moverboton reset
/mzm perfil compacto
/mzm flecha 18
/mzm alpha 0.9
/mzm lock
/mzm replace
/mzm button
/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
├── Coordinates.lua    # mapas y posición normalizada, incluida la de instancias
├── Markers.lua        # jugador, grupo, 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: Mapa en Miniatura
## SavedVariables: MapaEnMiniaturaDB

Namespace.lua
Coordinates.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 sus mosaicos 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. `Markers.lua` coloca los marcadores y consulta las APIs de misiones, encuentros, POI, viñetas y transportes.
8. `AddonButtons.lua` conserva el aspecto y la posición originales, normaliza los iconos dentro de celdas uniformes y calcula una cuadrícula adaptable.
9. `Options.lua` proporciona una ventana gráfica para modificar las preferencias sin comandos.
10. 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.
- 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.

## 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
```
