Cambios en los complementos de Battle for Azeroth


Con el lanzamiento de la beta de Battle for Azeroth, al equipo de interfaz de usuario de WoW le gustaría recalcar los próximos cambios que afectarán a los desarrolladores de complementos. Muchos de estos cambios ya están implementados en los reinos de la beta, mientras que otros no lo estarán hasta el parche preliminar de Battle for Azeroth.

Si no sois desarrolladores de complementos, es probable que esta lista no os resulte interesante:

Cambios a eventos en el registro de combate

Los eventos COMBAT_LOG_EVENT & COMBAT_LOG_EVENT_UNFILTERED ya no tienen carga útil de evento. Para obtener la información transmitida antes con estos eventos, utilizad la función CombatLogGetCurrentEventInfo.

Cambios a la API del sistema de hechizos

Debido a una modificación que hicimos en el backend, los eventos y la API del sistema de hechizos tienen varios cambios importantes. Seguid leyendo si queréis usar la API de hechizos o los eventos en los complementos.

Ahora los campos de texto de los hechizos, como la descripción o el subtexto del nombre, se cargan por petición, excepto el nombre del hechizo. Esto afecta a las siguientes funciones:

  • Nombre de la función -- Valor de retorno afectado
  • GetActiveArtifactByRace -- #5 (descripción del hechizo)
  • GetArtifactInfoByRace -- #5 (descripción del hechizo)
  • GetRecipeDescription -- #1 (descripción del hechizo)
  • GetSelectedArtifactInfo -- #5 (descripción del hechizo)
  • GetSpellBookItemName -- #2 (subtexto del nombre del hechizo)
  • GetSpellDescription -- #1 (descripción del hechizo)
  • GetTrainerServiceAbilityReq -- #1 (subtexto del nombre del hechizo)
  • GetTrainerServiceDescription -- #1 (descripción del hechizo)

Si llamas a estas funciones, el valor de retorno puede ser cero o vacío, ya que los datos no están disponibles en el momento de la llamada. Ofrecemos una interfaz en Lua (SpellMixin) que aplaza una llamada hasta que los datos estén disponibles. Esta interfaz permite llamar a las funciones de la lista anterior sin el riesgo de recibir datos vacíos.

local spell = Spell:CreateFromSpellID(spellID);
spell:ContinueOnSpellLoad(function()
spellButton:SetText(GetSpellDescription(spell:GetSpellID());
end);

La llamada SetText es inmediata si el texto del hechizo está cargado y disponible. Si no, se retrasa hasta que carguen los datos.

Si necesitáis cancelar una petición en cualquier momento, usad esta interfaz:
local spell = Spell:CreateFromSpellID(spellID);
local spellDataLoadedCancelFunc = spell:ContinueWithCancelOnSpellLoad(function()
button:SetText(GetSpellDescription(spell:GetSpellID());
end);


Cuando vayáis a cancelar la petición, llamad a la función de cancelación:

if spellDataLoadedCancelFunc then
spellDataLoadedCancelFunc();
spellDataLoadedCancelFunc = nil; -- ¡Por seguridad!
end

Además de las funciones ContinueOnSpellLoad, SpellMixin ofrece las siguientes funciones miembro para consultar diferentes campos de texto de los hechizos:

  • GetSpellID() La ID del hechizo asociada con esta SpellMixin.
  • GetSpellName() El nombre del hechizo.
  • GetSpellSubtext() El subtexto del nombre del hechizo (suele ser el rango del hechizo).
  • GetSpellDescription() La descripción del hechizo.
Se debe llamar a estas funciones desde el cuerpo de función capturado, como en los ejemplos anteriores. A continuación podéis ver el primer ejemplo, simplificado con estas funciones.
local spell = Spell:CreateFromSpellID(spellID);
spell:ContinueOnSpellLoad(function()
spellButton:SetText(spell:GetSpellDescription());
end);



Cambios en las funciones

  • GetSpellInfo - el segundo parámetro antes devolvía Spell.nameSubtext -- ahora devuelve cero.
  • GetTrainerServiceInfo - ha perdido el segundo parámetro (nameSubtext).
  • GetShapeshiftFormInfo - ha perdido el segundo parámetro (nombre).
  • GetMacroSpell - ha perdido los dos primeros parámetros (nombre y nameSubtext).
  • GetPetActionInfo - ha perdido el segundo parámetro (nameSubtext).
  • GetPossessInfo - el segundo parámetro ha cambiado del nombre del hechizo a la ID del hechizo.
  • CancelUnitBuff - ya no es compatible con la cancelación por el nombre del hechizo.
  • UnitBuff - ha perdido el segundo parámetro (nameSubtext). Además, ya no es compatible con las consultas por el nombre del hechizo.
  • UnitDebuff - ha perdido el segundo parámetro (nameSubtext). Además, ya no es compatible con las consultas por el nombre del hechizo.
  • UnitAura - ha perdido el segundo parámetro (nameSubtext). Además, ya no es compatible con las consultas por el nombre del hechizo.
  • UnitCastingInfo - ha perdido el segundo parámetro (nameSubtext).
  • UnitChannelInfo - ha perdido el segundo parámetro (nameSubtext).
  • GameTooltip:GetSpell - ha perdido el segundo parámetro (nameSubtext).
  • GetAuraInfo - ya no es compatible con las consultas por el nombre del hechizo.
  • GetItemSpell - ha perdido el segundo parámetro (nameSubtext).
  • GetSpellLink - ya no devuelve el enlace de habilidad de oficio como segundo parámetro (ver GetSpellTradeSkillLink más abajo).

Funciones eliminadas:

  • FindSpellOverrideNameByName
  • FindBaseSpellNameByName
  • SearchGuildRecipes

Funciones añadidas:

  • CancelPetPossess
  • FindSpellOverrideByID
  • FindBaseSpellByID
  • DoesSpellExist
  • GetSpellTradeSkillLink
  • GetSpellSubtext

Cambios de evento:

  • UNIT_SPELLCAST_SUCCEEDED - ya no proporciona el nombre y rango del hechizo.
  • UNIT_SPELLCAST_FAILED_QUIET - ya no proporciona el nombre y rango del hechizo.
  • UNIT_SPELLCAST_INTERRUPTED - ya no proporciona el nombre y rango del hechizo.
  • UNIT_SPELLCAST_START - ya no proporciona el nombre y rango del hechizo.
  • UNIT_SPELLCAST_FAILED - ya no proporciona el nombre y rango del hechizo.
  • UNIT_SPELLCAST_STOP - ya no proporciona el nombre y rango del hechizo.
  • UNIT_SPELLCAST_DELAYED - ya no proporciona el nombre y rango del hechizo.
  • UNIT_SPELLCAST_CHANNEL_START - ya no proporciona el nombre y rango del hechizo.
  • UNIT_SPELLCAST_CHANNEL_UPDATE - ya no proporciona el nombre y rango del hechizo.
  • UNIT_SPELLCAST_CHANNEL_STOP - ya no proporciona el nombre y rango del hechizo.

Cambios en el mapa del mundo

El mapa del mundo se ha reescrito casi por completo, y la API del mapa se ha eliminado. La vamos a reemplazar, pero ahora mismo estamos en plena transición. worldMapAreaID, dungeonMapID y dungeonFloor se han eliminado y reemplazado por uiMapID. Hemos incluido una asignación entre los datos antiguos y los nuevos en AddOns/Blizzard_Deprecated/UIMapIDToWorldMapAreaID.lua para ayudaros a traducir los datos.

Documentación de evento

Además de la función y la documentación de la API de tabla, ahora todos los eventos y su carga útil están documentados. Se puede acceder a la documentación en el juego con el comando /api. Podéis encontrar los archivos de la documentación sin procesar en /AddOns/Blizzard_APIDocumentation. Se ha exportado a través del comando existente «ExportInterfaceFiles code».

Vamos a reemplazar el marco del estado del mundo por componentes de la IU (entre otras muchas cosas)

Los componentes de la IU son un nuevo sistema que hemos implementado para llevar a cabo una amplia variedad de tareas de la IU. Por lo tanto, ya no necesitamos WorldStateFrame y lo vamos a eliminar por completo. Los eventos del estado del mundo se enviarán como antes, así que no os preocupéis si dependéis de ellos. Hay nuevos eventos y funciones de la API del sistema de componentes de la IU. Podéis verlos en la carpeta de documentación UIWidgetManagerDocumentation.lua. Si queréis más información, mirad los archivos lua y xml en la carpeta \AddOns\Blizzard_UIWidgets.

Chat de voz

¡El nuevo sistema de chat de voz ya está disponible! La documentación para la API del chat de voz está en la carpeta normal de documentación, como se ha mencionado antes.

VoiceActivityManager es un sistema de Lua que os permite registraros para crear marcos de notificaciones cuando un miembro del chat de voz empiece a hablar. Para ello, podéis usar los métodos RegisterFrameForVoiceActivityNotifications y UnregisterFrameForVoiceActivityNotifications .

Colecciones de agrupaciones

PoolCollections es un nuevo sistema de Lua que permite registrar agrupaciones para crear macros con diferentes plantillas y diferentes tipos, y no hace falta mantener una agrupación para cada uno. Funciona casi de la misma forma que las agrupaciones, pero tenéis que aseguraros de llamar a CreatePool antes de intentar crear un objeto de un tipo concreto. Aquí tenéis un ejemplo de cómo utilizar PoolCollections:

-- Primero, creáis PoolCollection y llamáis a CreatePool para cada tipo de plantilla que vayáis a crear.
self.myPools = CreatePoolCollection();
self.myPools:CreatePool("FRAME", parent, "FrameTemplateA");
self.myPools:CreatePool("FRAME", parent, " FrameTemplateB");
self.myPools:CreatePool("BUTTON", parent, "ButtonTemplateA");
self.myPools:CreatePool("BUTTON ", parent, " ButtonTemplateB");



-- A partir de ahí, crear cualquiera de esas plantillas es tan fácil como llamar a Acquire en PoolCollection.
local frame1 = self.myPools:Acquire("FrameTemplateA");
local frame2 = self.myPools:Acquire("FrameTemplateB");
local frame3 = self.myPools:Acquire("FrameTemplateB");
local button1 = self.myPools:Acquire("ButtonTemplateB");
local button2 = self.myPools:Acquire("ButtonTemplateA");



-- Y cuando hayáis acabado con los marcos, podéis soltar cada uno de ellos uno por uno o usar ReleaseAll.
self.myPools:Release(frame3);
self.myPools:ReleaseAll();

Cambios a Texture object API

  • Ahora la función SetRotation(radians) hace rotar los vértices de las texturas en lugar de modificar sus coordenadas.
  • Se ha añadido la función GetRotation.
  • Ya no se destruirán las coordenadas de la textura establecidas por SetTexCoord al establecer la rotación.
  • Al contrario que la antigua API, las rotaciones se mantendrán tras los cambios de las delimitaciones.
  • Las texturas creadas en XML se pueden iniciar ya rotadas con el atributo «rotación», que se especifica en grados.

Otros cambios a Frame API

  • Ahora Texture, FontString y Line se pueden adaptar directamente con las nuevas funciones SetScale, GetScale y GetEffectiveScale.
  • Ahora el atributo XML de modelo «scale» se llama «modelScale».

Otros cambios

  • Ahora al tratar de registrar o anular el registro de un evento desconocido se generará un error de Lua.
  • Hemos introducido varias mejoras de rendimiento en el procesamiento de delimitaciones.
  • Es menos probable que el procesamiento de delimitaciones falle al resolver un rectángulo recto.
  • Ahora xpcall acepta argumentos como lo hace pcall.
  • Se ha renovado el sistema de alertas, lo que permite que haya múltiples alertas independientes/áreas de aviso en la IU. También hemos añadido un nuevo tipo intrínseco llamado ContainedAlertFrame para las alertas.
  • Ahora los menús contextuales pueden tener un marco personalizado incrustado.
  • Ahora GetItemInfo respeta el nivel de enlace del jugador para el precio de venta.

¡Muchas gracias!

Fuente: BLIZZ

Back to top