Перейти к содержанию

Дайджесты за январь-февраль

Обновления гайдов и аддонов

Январь Февраль

Мониторинг серверов и редактор аддонов

Представляем вам две легенды. То, о чем можно было только мечтать, стало реальностью.

Мониторинг серверов Редактор аддонов

Подсказки из игры на вашем сайте

Теперь вы можете отображать сведения о внутриигровых элементах простым наведением курсора мыши.

Подробнее

Апдейтер аддонов

Представляем вам программу для автообновления аддонов и делимся подробностями.

Подробнее Скачать


1 изображение

Информация о файле

(Для разработчиков аддонов)

LibGS (LibGearScore) - библиотека инспектирования персонажей игроков.

Рекомендуется использовать в аддонах, которые показывают гирскор, руны, и прочие характеристики экипировки персонажей игроков.

Библиотека берет на себя всё общение с API игрового клиента (avatar.StartInspect, avatar.EndInspect, EVENT_INSPECT_STARTED, EVENT_INSPECT_FINISHED), скрывая от аддона особенности их работы, самостоятельно решая возможные конфликты между аддонами, и выдает в аддон результат инспектирования в удобном виде.

Прошу разработчиков принять участие в тестировании :)

Если кто-то увидит или наткнется на какой-либо баг, огромная просьба писать сюда.

Если есть предложения по работе аддона, фичам и содержанию таблицы, то тоже пишите сюда.

Библиотека позаимствовала многие идеи из аддона TPI и немного из LibreGS, так что их авторам look_at_you_ и vitaliy75 огромное спасибо за вклад.

По умолчанию библиотека автоматически считает гирскор текущей цели и присылает в аддон через эвент или callback-функцию.

Во избежании самопроизвольно открывающегося окна инспектирования рекомендуется пользоваться данной библиотекой (в особенности это касается аддона NewTarget3DPvP, с которым наблюдаются кофликты).

Поддерживает функцию unit.GetGearScore, добавленную в хотфиксе 6.0.00.36.

 

На данный момент отсутствует подсчет гирскора для версий Аллодов 1.1-4.x. Если кто может, пожалуйста, поделитесь формулой или исходником.

Как пользоваться:

Опускаю подробности о добавлении скрипта в AddonDesc.(UIAddon).xdb...

Существует несколько вариантов использования библиотеки:

  • Если ваш аддон только для инспектировния текущей цели аватара, то необходимо выполнить следующие действия:

I. Инициализировать библиотеку любым из следующих способов:

  • Вызвать функцию GS.Init: 
    if GS.Init then GS.Init() end
  • Вызвать функцию GS.EnableTargetInspection:
    GS.EnableTargetInspection( true )
    Платным аддонам рекомендуется это делать после прохождения проверки системы привязки к нику персонажа.

II. Обеспечить прием данных любым из следующих способов:

  • Подписаться на сообщение LIBGS_GEARSCORE_AVAILABLE
    common.RegisterEventHandler( ShowGearScore, "LIBGS_GEARSCORE_AVAILABLE" )
  •  Установить функцию обратного вызова
    GS.Callback = ShowGearScore

ShowGearScore - функция вашего аддона, которая будет отображать гирскор в нужное окно.

Имя функции может быть любое.

В этой функции необходимо проверять, что сообщение пришло для вашего юнита.

ShowGearScore должна быть уже объявлена на момент попытки её использования.

Например:

function ShowGearScore( params )
  if params.unitId == avatar.GetTarget() then
    if params.gearscore then
      MyWidget:SetClassVal("style", params.gearscoreStyle)
      MyWidget:SetVal("gs", tostring(params.gearscore))
      MyWidget:Show(true)
    else
      MyWidget:SetClassVal("style", "tip_white")
      MyWidget:SetVal("gs", "N/A")
      MyWidget:Show(true)
    end
  end
end

Аддону следует позаботиться о том, чтобы скрывать интерфейс в случае переключения таргета на НПС или сброса таргета, т.к. LibGS не присылает в этих случаях никаких сообщений.

function onTargetChaged(params)
  local unitId = avatar.GetTarget()
  if not unitId or not object.IsUnit( unitId ) or not unit.IsPlayer( unitId ) or unit.IsPet( unitId ) then
    MyWidget:Show(false)
  end
end
  • Если ваш аддон для инспектировния любых юнитов (без выделения юнита в таргет), то для получения гирскора вышеуказанным способом необходимо вызвать функцию GS.RequestInfo:
GS.RequestInfo ( unitIdToInspect )

И в ShowGearScore, соответственно, сделать: 

if params.unitId == unitIdToInspect then ...

В данном случае инициализировать библиотеку не обязательно, но желательно, несмотря на то, что она может инициализировать себя сама.

На данный момент существует проблема особенность: если пользователь открыл встренное в клиент окно инспектирования, то инспектирование любого юнита не будет произведено, пока окно не будет закрыто.

Стоит подождать следующих версий, в которых эта проблема будет решена.

  • Если ваш аддон не предназначен для инспектировния текущей цели аватара, то рекомендуется отключить функцию автоматического инспектирования:
GS.EnableTargetInspection( false )

Описание функций:

 

  • GS.Init ( EnableTargetAutoInspection, SkipInitialTargetInspection )

Инициализирует библиотеку.

Параметры функции аналогичны параметрам функции GS.EnableTargetInspection.

 

  • GS.EnableTargetInspection ( Enable, SkipInitial )

Включает/отключает автоматическое инспектирование при смене цели аватара.

Параметры:

1. Enable: boolean

true/nil - Включить авто-испектирование

false - Выключить авто-испектирование

 

2. SkipInitial: boolean

Имеет смысл только при Enable=true/nil.

По умолчанию, при перезагрузке аддона через меню дополнений LibGS автоматически проинспектирует текущую цель аватара.

SkipInitial позволяет пропустить инспектирование, например, если библиотека инциализируется не с начала работы аддона.

true - Пропустить инспектирование

false/nil - Инспектировать текущую цель

Следует помнить, что при перезагрузке всех аддонов, другие аддоны могут запрашивать инспектирование цели при инициализации, что приведет к приходу соообщения LIBGS_GEARSCORE_AVAILABLE раньше, чем может ожидаться.

Функция аддона, получающая результат инспектирования (ShowGearScore) должна учитывать это.

 

  • GS.RequestInfo ( unitId )

 

Запрашивает инспектирование юнита

Параметры:

unitId: ObjectId

Id юнита, которого надо происпектировать.

 

  • LIBGS_GEARSCORE_AVAILABLE ( params )

Глобальное сообщение с результатами инспектирования, посылаемое из ведущей LibGS после завершения инспектирования.

Следует помнить, что если аддон подписывается на сообщение LIBGS_GEARSCORE_AVAILABLE, то сообщение может приходить даже если аддон не запрашивал инспектирование какого-либо юнита.

Также следует помнить, что при перезагрузке всех аддонов, другие аддоны могут запрашивать инспектирование цели при инициализации, что приведет к приходу дополнительных сообщений LIBGS_GEARSCORE_AVAILABLE.

Функция аддона, получающая результат инспектирования (ShowGearScore) должна учитывать это.

 

  • GS.Callback ( params )

Функция аддона, которая будет вызвана из локального экземпляра LibGS при получении сообщения LIBGS_GEARSCORE_AVAILABLE.

Аддон устанавливает это поле при необходимости, если не желает получать результат инспектирования через сообщение LIBGS_GEARSCORE_AVAILABLE.

 

В качестве параметра в обработчик LIBGS_GEARSCORE_AVAILABLE (и в GS.Callback, если задана) передается таблица со следующими полями:

unitId                  - ObjectId - Id юнита для которого подсчитан гирскор
rank                    - number - ранг умения аватара Пристальный взгляд (0..6)
inspected               - boolean - можно ли происпектировать юнит частично или полностью (ранг достаточно высок) (false, true)
reliable                - boolean - полностью ли происпектирован юнит (ранг достаточно высок) (false, true)

Поля gearscore* могут отсутствовать, если у аватара недостаточный ранг умения (inspected==false).
gearscore               - number - гирскор юнита
gearscoreLevel          - number - средний уровень экипировки юнита, кроме драконьего облика (1..66)
gearscoreQuality        - number - "актуальность" экипировки юнита - среднее качество, скорректированное с учетом разницы уровня игрока и экипировки, кроме драконьего облика (1..8 соответствует значениям между ITEM_QUALITY_JUNK..ITEM_QUALITY_RELIC)
gearscoreStyle          - string - рекомендуемый стиль для отображения значения гирскора ('Junk'..'Relic')

Поля equipment* могут отсутствовать, если у аватара недостаточный ранг умения (inspected==false).
equipmentLevel          - number - средний уровень экипировки юнита, кроме драконьего облика (1..66)
equipmentQuality        - number - среднее качество экипировки юнита, кроме драконьего облика (1..8 соответствует значениям между ITEM_QUALITY_JUNK..ITEM_QUALITY_RELIC)
equipmentStyle          - string - рекомендуемый стиль для отображения среднего качества экипировки ('Junk'..'Relic')

Поля runes* могут отсутствовать, если у аватара недостаточный ранг умения (inspected==false), или находимся на Pay-To-Play сервере.
runes                   - таблица, индексированная по [DRESS_SLOT_*RUNE*], элемент - таблица с полями:
    runeScore           - number - бонус к урону или лечению, даруемый данной руной в данный момент, в зависимости от того, куда она вставлена (0..??
    runeQuality         - number - ступень руны (0..13)
    runeStyle           - string - рекомендуемый стиль для отображения ступени ('Junk', 'Common'..'Legendary')
runesQuality            - number - средняя ступень всех рун (0..13)
runesQualityOffensive   - number - средняя ступень всех рун в атакующих слотах (0..13)
runesQualityDefensive   - number - средняя ступень всех рун в защитных слотах (0..13)
runesScoreOffensive     - number - общий бонус всех рун в атакующих слотах (0..??
runesScoreDefensive     - number - общий бонус всех рун в защитных слотах (0..??
runesStyle              - string - рекомендуемый стиль для отображения runesQuality ('Junk', 'Common'..'Legendary')
runesStyleOffensive     - string - рекомендуемый стиль для отображения runesQualityOffensive ('Junk', 'Common'..'Legendary')
runesStyleDefensive     - string - рекомендуемый стиль для отображения runesQualityDefensive ('Junk', 'Common'..'Legendary')

Некоторые поля fairy* могут отсутствовать в зависимости от версии игрового клиента.
fairy                   - string - ступень покровителя для отображения ('-', 'I'..'V')
fairyLevel              - number - уровень покровителя (1..65)
fairyQuality            - number - ступень покровителя (0..5)
fairyScore              - number - [AO 3-4] бонус характиристики, даруемый покровителем (0..???)
fairyScoreStat          - number - [AO 3-4] тип характиристики (INNATE_STAT_*)
fairyScorePower         - number - [AO 5-6] бонус могущества (0..???)
fairyScoreDamage        - number - бонус к урону (0..250%)
fairyScoreHeal          - number - бонус к лечению (0..250%)
fairyStyle              - string - рекомендуемый стиль для отображения ступени покровителя ('Junk', 'Goods'..'Epic')

Поля *Style можно напрямую передавать в функцию MyTextView:SetClassVal().

Пример аддона LibreGS, переделанного под использование LibGS. Можно также обратить внимание на onTargetChaged, скрывающий интерфейс аддона:

--------------------------------------------------------------------------------
-- GLOBALS
--------------------------------------------------------------------------------

local ouText=nil
local vtHello=nil

--------------------------------------------------------------------------------
-- EVENT HANDLERS
--------------------------------------------------------------------------------

function onSize(params)
 local pco=widgetsSystem:GetPosConverterParams()
 local plc=mainForm:GetPlacementPlain()
 plc.alignY=WIDGET_ALIGN_LOW
 plc.highPosY=0
 plc.posY=0
 plc.sizeY=157
 plc.alignX=WIDGET_ALIGN_LOW
 plc.posX=380
 plc.sizeX=400
 mainForm:SetPlacementPlain(plc)
end

function onTargetChaged(params)
 local tid=avatar.GetTarget()
 if not tid or not unit.IsPlayer(tid) then
  mainForm:Show(false)
 end
end

function ShowGearScore(params)
  if params.unitId == avatar.GetTarget() then
    ouText:SetVal("ttt",userMods.ToWString(tostring(math.floor(params.gearscore+0.5))))
    mainForm:Show(true)
  end
end

--------------------------------------------------------------------------------
-- INITIALIZATION
--------------------------------------------------------------------------------
function Init()
 if GS.Init then GS.Init() end
 onSize(nil)
 mainForm:SetPriority(7000)
 mainForm:SetTransparentInput(true)
 mainForm:Show(true)

 ouText=mainForm:GetChildChecked("ouText",false)
 vtHello=common.CreateValuedText()
 vtHello:SetFormat(userMods.ToWString([[<html><log fontsize="20"><r name="ttt"/></log></html>]]))
 ouText:SetValuedText(vtHello)
 ouText:Show(true)
 local plc=ouText:GetPlacementPlain()
 plc.posX=0
 plc.posY=0
 ouText:SetPlacementPlain(plc)
 
 ouText:SetBackgroundColor( { r = 0.1; g = 0.1; b = 0.05; a = 0.9 } )
 
 common.RegisterEventHandler( onTargetChaged, "EVENT_AVATAR_TARGET_CHANGED")
 common.RegisterEventHandler( ShowGearScore, "LIBGS_GEARSCORE_AVAILABLE")
 common.RegisterEventHandler( onSize, "EVENT_POS_CONVERTER_CHANGED")
 
end
--------------------------------------------------------------------------------
Init()
--------------------------------------------------------------------------------

Что нового в версии 2014-11-14   Просмотр изменений

Размещено

  • Исправлен баг с инспектированием их двух и более аддонов

×
×
  • Создать...

Важная информация

Пользуясь сайтом, вы принимаете Условия использования