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

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

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

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

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

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

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

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

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

Подробнее

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

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

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

itemLib.GetBonus( itemid ), innateStats


user02

Рекомендуемые сообщения

Добрый деь.

 

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

 

В текущем мануале ничего нового не написано, но с ведением 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.

Изменено пользователем user02
Ссылка на комментарий
Поделиться на другие сайты

Есть

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
Ссылка на комментарий
Поделиться на другие сайты

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

 

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

 

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

Изменено пользователем user02
Ссылка на комментарий
Поделиться на другие сайты

Есть такая штука 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

Ссылка на комментарий
Поделиться на другие сайты

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

 

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

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

end

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

 

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

Ссылка на комментарий
Поделиться на другие сайты

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

 

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

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 вызывает вопрос, а что она должна хранить и где объявлена эта переменная-массив.

Ссылка на комментарий
Поделиться на другие сайты

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

 

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

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

 

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

Ссылка на комментарий
Поделиться на другие сайты

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

 

Кратко:

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

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

 

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

Ссылка на комментарий
Поделиться на другие сайты

Верно.

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

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

 

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

 

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

Ссылка на комментарий
Поделиться на другие сайты

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

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

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

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