user02 Posted January 4, 2016 Share Posted January 4, 2016 (edited) Добрый деь. Подскажите, пожайлуйста, кто-нибудь разбирался как теперь получать текущее значение основных стат, которые дает экиперовка. В текущем мануале ничего нового не написано, но с ведением 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 January 5, 2016 by user02 Quote Link to comment Share on other sites More sharing options...
logg Posted January 4, 2016 Share Posted January 4, 2016 Есть 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 Quote Link to comment Share on other sites More sharing options...
user02 Posted January 4, 2016 Author Share Posted January 4, 2016 (edited) Не совсем ясно, что тут сильно изменилось.. когда там 0... Тем не менее, это не привело к правильности подсчета стат моего персонажа.... Более того такое ощущение, что этот подсчет не работает только для астральных шмоток (71). Пробовал одевать другие шмотки (не астральные) расчет работает. Вопрос открыт как считать основные статы (решимость, беспощадность) для астральной экиперовки... Edited January 4, 2016 by user02 Quote Link to comment Share on other sites More sharing options...
logg Posted January 4, 2016 Share Posted January 4, 2016 Есть такая штука 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 Quote Link to comment Share on other sites More sharing options...
user02 Posted January 4, 2016 Author Share Posted January 4, 2016 Если честно тебя каежтся немного не туда понесло Во первых, конструкция: for u, p in pairs( iteminfo.innateStats ) do end Переберает все основные статы! Во вторых, я же говорю такая конструкция работает для не астральной экиперовки... Для астральной экиперовки там будут только 0. Quote Link to comment Share on other sites More sharing options...
logg Posted January 4, 2016 Share Posted January 4, 2016 Если честно тебя каежтся немного не туда понесло Во первых, конструкция: 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 вызывает вопрос, а что она должна хранить и где объявлена эта переменная-массив. Quote Link to comment Share on other sites More sharing options...
user02 Posted January 4, 2016 Author Share Posted January 4, 2016 Проблемы?! 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 Quote Link to comment Share on other sites More sharing options...
logg Posted January 4, 2016 Share Posted January 4, 2016 В документации нет, уточнял у разработчиков. Должно работать. Надо проверять LogInfo(p.sysName, ":", p.effective) У меня в аддоне EquipStats похожий код работает. Правда сначала сохраняются в массив [слот]->[стат] и потом циклом всё суммируется. Надеюсь массив items={} объявлен не где-нибудь в цикле))) Quote Link to comment Share on other sites More sharing options...
user02 Posted January 5, 2016 Author Share Posted January 5, 2016 Насколько я понял в игре есть два типа расположения стат. Если Беспощадночть и т.п. располагаются в группе с мощностью и выносливностью, то нужно использовать iteminfo.innateStats, Если в группе спец статы, то iteminfo.specStats. Кратко: 1. Не астральные используют методику подсчета через iteminfo.innateStats 2. Астральные используют методику подсчета через iteminfo.specStats Для работы со спец статами лучше использовать не p.name, а p.tooltipName. Quote Link to comment Share on other sites More sharing options...
logg Posted January 5, 2016 Share Posted January 5, 2016 Верно. Астральные используют и innateStats и specStats Quote Link to comment Share on other sites More sharing options...
user02 Posted January 5, 2016 Author Share Posted January 5, 2016 Верно. Астральные используют и innateStats и specStats Только астральные в innateStats используется для подсчета могущества и выносливости PS: По мне это все как-то криво.. могли конечно и причесать) Хотя конечно, я так понимаю, они боялись, что что-нибудь сломается и просто рядом велосипед стат построили новый Тема закрыта Quote Link to comment Share on other sites More sharing options...
Recommended Posts