Changelogs
store: corrige la errata "Sacedorte" e iguala el ancho del cuadro de ítem
15 de julio de 2026 a las 08:54adevopg · 1752e74
Dos arreglos pendientes que quedaron señalados: 1. "Sacedorte" era una errata de "Sacerdote" en tres categorías (3-10, 4-10 y 19-9; la 20-9 estaba bien). Se veía así en la web en español. Corregido en la BD y, sobre todo, en el seed `store_catalog.sql`, que la traía 3 veces: sin eso, reconstruir la BD la resucitaba. Regenerado store_category_en.sql (217 nombres distintos en vez de 218: las dos grafías ya son una). Un escaneo por parecido contra los términos oficiales de los DB2 confirma que era la única errata; el resto de casi-coincidencias son plurales legítimos ("Espadas" vs el "Espada" del juego). 2. El cuadro del ítem medía 160px y el del store original 200. Igualado. Solo afecta a /store: send-gift fija las columnas de su rejilla a 160px y hace width:auto, y se ha comprobado que sigue midiendo 160. Con solo cambiar la anchura se quedaba en 200 en vez de 214: el tema se diseñó para el content-box del navegador y el preflight de Tailwind mete border-box, así que el padding y el borde dejaban de sumar (el mismo problema que ya estaba arreglado para los inputs). Se restaura content-box solo en la tienda, porque en la rejilla de send-gift desbordaría las columnas. Medido en el navegador: el cuadro pasa a 214px de ancho, que es lo que mide el del original (213 en la captura). send-gift sigue en 160.
store: categorías en inglés (términos oficiales sacados de los DB2)
15 de julio de 2026 a las 08:45adevopg · bb0f4f2
Cierra el idioma de /en/store: los nombres de ítem ya salían en inglés (2daf920), pero el árbol de categorías seguía en español y la tienda se veía a medias. Los términos DEL JUEGO no se traducen a mano, se sacan del cliente, para que casen con lo que ve un jugador en inglés: - ChrClasses -> clases (Brujo = Warlock, Pícaro = Rogue...) - ItemSet -> sets (Vestiduras de la Némesis = Nemesis Raiment, Las diez tormentas = The Ten Storms, Atavío viento abisal = Netherwind Regalia). Casando sin distinguir mayúsculas: las categorías capitalizan distinto que los ItemSet. - ItemSubClass-> tipos de arma (Armas de asta = Polearms, Varitas = Wands) - home_item_data -> lo que no es ItemSet. Los sets de PvP de WotLK no son ItemSets reales, así que "Gladiador furioso" = "Furious Gladiator" sale de los nombres bilingües de sus propios ítems. Solo se traduce a mano lo que la tienda se inventó y no existe en el juego (Items de leveo = Leveling Items, Moneda de transfiguración = Transmog Currency), más las fórmulas (Nivel de objeto N = Item Level N, Set de banda tier N = Tier N Raid Set). Los ~45 nombres que son solo un código ("11-1") y los que ya estaban en inglés ("Tier 7.1 (PvE)") se dejan igual. wdc_db2.py aprende a leer strings de tablas no sparse: el valor guardado no es un índice a la string table sino un offset relativo a la posición del propio campo. Verificado con ChrClasses (las 10 clases en ambos idiomas). Revisadas las 218 a mano. Corregida una que me había inventado: "Equipo de Batalla del Iluminado de la Fuente del Sol" no es "Sunwell Radiance" (eso es un buff): "Iluminado" es Lightbringer en el ItemSet y "Fuente del Sol" es Sunwell según sus ítems -> "Sunwell Lightbringer Battlegear". OJO, bug de datos preexistente: "Sacedorte" (errata de "Sacerdote") en las categorías 3-10, 4-10 y 19-9; el 20-9 sí está bien. Se ve así en español. El name_en va a "Priest"; la errata en español NO se toca.
store: nombres de ítem en el idioma de la web (desde home_item_data)
15 de julio de 2026 a las 08:31adevopg · 2daf920
El catálogo original solo tiene el nombre en español, así que /en/store venía mostrando los ítems en español. Ahora salen de `home_item_data` (extraída de los DB2 del cliente, commit 4ba9c42), que es el único sitio con el nombre en inglés. - getStoreCatalog(locale) hace LEFT JOIN con home_item_data y elige name_es o name_en. Si falta el nombre en ese idioma se cae al del catálogo, que siempre está, así que ningún ítem puede quedarse sin nombre. - La columna se elige de una lista cerrada ('en' -> name_en, resto -> name_es): nunca se interpola el locale crudo, que viene de la URL. - /api/store/catalog recibe el locale por query: la ruta no cuelga de [locale]. Verificado en los dos idiomas: 45327 sale "Grito de la sirena" en /es y "Siren's Cry" en /en. El árbol sigue devolviendo las 3068 filas y ninguna sin nombre (el JOIN no duplica: `entry` es clave primaria). Pendiente: los nombres de las CATEGORÍAS siguen solo en español (home_store_category.name), así que /en/store se ve a medias. No son datos del juego, así que los DB2 no ayudan: hay que traducir 218 nombres distintos.
sql: datos de ítems del cliente 3.4.3 extraídos de los DB2 (es/en)
15 de julio de 2026 a las 08:24adevopg · 4ba9c42
En 3.4.3 `item_template` ya no existe: los datos del juego viven en ficheros DB2 del cliente, y aquí acore_world está vacío. Se extraen a `home_item_data` (44873 ítems): nombre es/en, calidad, nivel de objeto, tipo de inventario y displayId. No hay ninguna librería en PyPI que lea WDC4 (wdbx, dbc-extract3, wow-db2 no existen), así que el lector va incluido en sql/db2/: - `wdc_db2.py`: WDC3/WDC4 con registros fijos (bitpacked, common y pallet). - `itemsparse.py`: ItemSparse es una tabla *sparse*, que es otro mundo: los locstring van inline y terminados en \0, así que desplazan todo lo que va detrás y los offsets de field_storage_info no valen. Hay que recorrer los campos en orden, y el fichero no dice cuáles son strings: eso sale de las definiciones oficiales de WoWDBDefs (ItemSparse.dbd, incluido), casando el layout_hash del propio fichero (D532973D = 3.4.3). - `db2_to_sql.py`: genera sql/item_data.sql. Regenerable y multi-locale: basta con dejar el ItemSparse.db2 de cada idioma en /root/<locale>/. Verificado: los 3068 ítems de la tienda están cubiertos; 2949 nombres (96%) coinciden literalmente con el catálogo antiguo y los 119 restantes son revisiones de traducción de Blizzard, no fallos del parser ("Bordón de Luz" -> "Batuta de Luz"). El ítem 45327 sale q4 / ilvl 238 / "Siren's Cry", idéntico a lo que devuelve wowhead. La distribución de calidad es realista (53 legendarios, 23 artefactos). Ojo: la tabla está cargada pero TODAVÍA no la usa ningún código de la web.
store: previsualización del render del ítem al pasar el ratón
15 de julio de 2026 a las 08:07adevopg · 14ebd1e
Replica el preview del store original: un icono en el cuadro del ítem que, al pasar el ratón, muestra el render del objeto. El CSS ya estaba en el tema (nw-st-tooltip-w / nw-st-img-tooltip / nw-img-display, copiado del original); solo faltaban el markup y las imágenes. - Los 545 PNG se sirven desde nw-images/nw-displays/ en vez de enlazar al servidor original, para no depender de un tercero que puede cortarlo. - Solo lo llevan los ítems equipables (610 de 3068): el resto no tiene apariencia, igual que en el original. El dato ya estaba en la columna `preview` de home_store_item y llegaba hasta el componente sin usarse. - El icono va con `fas`, no con el `fa` suelto del original: cargamos Font Awesome 6, donde solo .fas/.fa-solid activan la fuente, y el `fa` de FA4/5 no pintaría nada sin el shim de compatibilidad. Descartado el visor 3D de wowhead: zamimg sirve el meta del modelo con lista blanca de orígenes (403 desde nuestro dominio, 200 solo desde wowhead.com), así que solo funcionaría proxeando sus assets para saltarse esa comprobación. Verificado en el navegador: oculto por defecto, visible en hover, imagen 200.


