Jump to content
Alloder.pro  about Allods with love 😱
Search In
  • More options...
Find results that contain...
Find results in...

Servers monitoring and the Addons Editor

We present you two legends. All dreams come true.

Servers monitoring The Addons Editor

Digest April

We talk about what was done and updated in the past month. We help keep abreast of events.

Read more

Game tooltips

Tooltips provide a way for 3rd party fansites and extensions to display detailed information on mouseover.

Read more

itemLib.GetBonus( itemid ), innateStats


user02
 Share

Recommended Posts

Добрый деь.

 

Подскажите, пожайлуйста, кто-нибудь разбирался как теперь получать текущее значение основных стат, которые дает экиперовка.

 

В текущем мануале ничего нового не написано, но с ведением 7.0 старый способ перестал работать, т.е.

local itemInfo    = itemLib.GetBonus( itemid ) or nil
if itemInfo then
    for u, p in pairs( iteminfo.innateStats ) do
        items[ p.sysName ] = (items[ p.sysName ] or 0) + p.effective
    end
end

Пересмотрел все поля iteminfo.innateStats, они все почему-то равны 0.

 

В iteminfo.specStats данные значения есть, только идентифицировать к чему относится не возможн для основных полей (решимость, беспощадность и т.п.) p.name пусто.

 

Есть у кого, какие-идей что не так?

 

 

Ответ:

Нужно добавить подсчет "Основных стат" через iteminfo.specStats. Для поиска названий использовать p.tooltipName..

 

Коротко

1. Если статы в группе с мгуществом и выносливостью, то используется подсчет через iteminfo.innateStats

2. Если статы в группе Специальные статы, то использовать подсчет через iteminfo.specStats. При этом для полноты имен нужно использовать p.tooltipName., вместо p.name.

Edited by user02
Link to comment
Share on other sites

Есть

local itemInfo    = itemLib.GetBonus( itemid ) or nil
if itemInfo and iteminfo.innateStats then
    for u, p in pairs( iteminfo.innateStats ) do
        if p.effective>0 then
             items[ p.sysName ] = (items[ p.sysName ] or 0) + p.effective
        end
    end
end
Link to comment
Share on other sites

Не совсем ясно, что тут сильно изменилось.. когда там 0... Тем не менее, это не привело к правильности подсчета стат моего персонажа....

 

Более того такое ощущение, что этот подсчет не работает только для астральных шмоток (71). Пробовал одевать другие шмотки (не астральные) расчет работает.

 

Вопрос открыт как считать основные статы (решимость, беспощадность) для астральной экиперовки...

Edited by user02
Link to comment
Share on other sites

Есть такая штука ENUM

ENUM_InnateStats_Plain --Мастерство
ENUM_InnateStats_Rage --Решимость
ENUM_InnateStats_Finisher --Беспощадность
ENUM_InnateStats_Lethality --Ярость
ENUM_InnateStats_Vitality --Стойкость
ENUM_InnateStats_Lifesteal --Кровожадность

 

if p.sysName=="ENUM_InnateStats_Plain" then
items[ p.sysName ] = (items[ p.sysName ] or 0) + p.effective -- считаем мастерство
end

 

А вот со спец статами есть загвоздка

 
     -- Шанс крит. урона
     -- Сила крит. урона
     -- Двойная атака
     -- Физический урон
     -- Стихийный урон
     -- Божественный урон
     -- Природный урон
     -- Ярость
     -- Стремительность
    
     -- Живучесть
     -- Осторожность
     -- Физическая защита
     -- Стихийная защита
     -- Божественная защита
     -- Природная защита
     -- Упорство
     -- Незыблемость
     -- Сосредоточенность
     for kkk,vvv in pairs( iteminfo.specStats ) do
      if vvv.value>0 then
      array[slot][tostring(TipStata[FromWS(vvv.tooltipName)])]=vvv.value
      end
     end

А именно получение название стата по tooltipName

Link to comment
Share on other sites

Если честно тебя каежтся немного не туда понесло :)

 

Во первых, конструкция:

for u, p in pairs( iteminfo.innateStats ) do 

end

Переберает все основные статы!

 

Во вторых, я же говорю такая конструкция работает для не астральной экиперовки... Для астральной экиперовки там будут только 0.

Link to comment
Share on other sites

Если честно тебя каежтся немного не туда понесло :)

 

Во первых, конструкция:

for u, p in pairs( iteminfo.innateStats ) do 

end

Переберает все основные статы!

 

Во вторых, я же говорю такая конструкция работает для не астральной экиперовки... Для астральной экиперовки там будут только 0.

Перебирает все основные статы верно.

А про specStats ответил, потому что в первом посте про эту таблицу упомянуто.

 

Тут 2 проблемы: 1) Приходит информация с нулями от тех характеристик, которых на вещи нет

2) в specStats по полю name выдает пустоту у стата решимость, поэтому нужно использовать tooltipName

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

 

Всё работает с любой экипировкой.

 

Вообще конструкция items[ p.sysName ] = (items[ p.sysName ] or 0) + p.effective вызывает вопрос, а что она должна хранить и где объявлена эта переменная-массив.

Link to comment
Share on other sites

Проблемы?! :)

1. Нули о статах, которых нет это не проблема, Они ничего не меняют сточки зрения статистики (а + 0 = а)

2. Про тоолтип интересно... Надо проверить но в документации про это нет...

specStats : table[1,..] of tables - различные спец-статы:
id: SpecialStatId - идентификатор стата
name : WString - имя спец-стата
value : number (float) - значение спец-стата
type: number(ENUM_SpecialStatType) - класс характеристика

Конструкция нормально просто сумирует значения...

 items[ p.sysName ] = (items[ p.sysName ] or 0) + p.effective

Link to comment
Share on other sites

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

 

Должно работать. Надо проверять LogInfo(p.sysName, ":", p.effective)

У меня в аддоне EquipStats похожий код работает. Правда сначала сохраняются в массив [слот]->[стат] и потом циклом всё суммируется.

 

Надеюсь массив items={} объявлен не где-нибудь в цикле)))

Link to comment
Share on other sites

Насколько я понял в игре есть два типа расположения стат. Если Беспощадночть и т.п. располагаются в группе с мощностью и выносливностью, то нужно использовать iteminfo.innateStats, Если в группе спец статы, то iteminfo.specStats.

 

Кратко:

1. Не астральные используют методику подсчета через iteminfo.innateStats

2. Астральные используют методику подсчета через iteminfo.specStats

 

Для работы со спец статами лучше использовать не p.name, а p.tooltipName.

Link to comment
Share on other sites

Верно.

Астральные используют и innateStats и specStats

Только астральные в innateStats используется для подсчета могущества и выносливости :)

 

PS: По мне это все как-то криво.. могли конечно и причесать) Хотя конечно, я так понимаю, они боялись, что что-нибудь сломается и просто рядом велосипед стат построили новый :)

 

Тема закрыта :)

Link to comment
Share on other sites

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

By using our site you agree to the Terms of Use