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

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

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

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

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

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

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

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

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

Подробнее

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

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

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

помогите расшифровать ошибку


icreator

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

Code:
 Game::LuaObjectGetBuffPart: Cannot get buff, details: int __cdecl Game::LuaObjectGetBuffPart(bool &,const struct GMUIHelper::IBuffInfo *&,struct lua_State *,bool (__cdecl *)(class nstl::basic_string<char> &,class Lua::State &,class Lua::Table &,struct GMUIHelper::ISpellDescHelper *))


это при вызове функции object.GetBuffInfo( buffId ) тут:
Code:
for ownerId, buffs in pars.objects do
--LogToChat( FromWS(object.GetName( ownerId )))
for buffId in buffs do
info = buffId and object.GetBuffInfo( buffId )
if info then 
findBuff ( ownerId, info, fltr )
--if info.remainingMs+50 > info.durationMs then
if buffsShowFilter( info ) then
--- отразим все что с продолжительностью более 10сек
userMods.SendEvent("EVENT_EMOTE_TEXT", { id = ownerId, image = info.texture, text = info.name } )
elseif info.stackCount == info.stackLimit then
--LogToChat(FromWS(info.name))
end
end
end
end
Ссылка на комментарий
Поделиться на другие сайты

Чо тут расшифровывать то?

Функция object.GetBuffInfo не может взять информацию о бафе с таким ИД

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

Стандартная проблема для тех кто работает с object.GetBuffInfo.

Нужно быть очень осторожным с полученным buffId.

Рекомендую оборачивать такие функции в подпрограммы.

Очень рекомендую, так как в твоих аддонах, icreator, очень много ошибок кривой реализации большинства функций самими разработчиками АО.

Клиента АО под рукой нет, но вроде бы код ниже работает, стараюсь не использовать object.GetBuffInfo, используй unit.GetBuff.

Code:
function AvatarBuffs()

  common.LogInfo( "common", "===AvatarBuffs===" )

local buffCount = unit.GetBuffCount( avatar.GetId() )

common.LogInfo( "common", "buffCount: "..buffCount )

for index = 0, buffCount - 1 do

local buff = unit.GetBuff( avatar.GetId(), index )

common.LogInfo( "common", "index: "..index.." buff.name: "..userMods.FromWString( buff.name ) )

end

end

ЗЫ: Прочти личку.

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

Quote:
Рекомендую оборачивать такие функции в подпрограммы.

И чем оно поможет, если ИД бафа взят в другой функции и в другое время?
Quote:
Клиента АО под рукой нет, но вроде бы код ниже работает, стараюсь не использовать object.GetBuffInfo, используй unit.GetBuff

И? Нафига это ей? Ничем не поможет.
Она где то набрала ИД (и не обязательно с Аватара) и считает, что они никуда не делись и никуда не денутся
--
С object.GetBuffInfo нет никаких проблем.
Тк. в АО все ИД, какие только можно, динамические, нужно брать ИД бафов и использовать их сразу же
Ссылка на комментарий
Поделиться на другие сайты

Quote:
И чем оно поможет, если ИД бафа взят в другой функции и в другое время?

Избавляет от спама в mods.txt, если ошибки вызываются на стороне разработчиков игры.
Quote:
Тк. в АО все ИД, какие только можно, динамические, нужно брать ИД бафов и использовать их сразу же

В том то вся проблема, при попытки выполнить следующий код, скорее всего, возникнет ошибка:
Code:
Global( "buffId ", nill )

function OnEventObjectBuffAdded( eventParams )
 buffId =  eventParams.buffId
 test()
end

function test( )
--Пытаемся получить объект по ID
 local buff = object.GetBuffInfo( buffId )
end
common.RegisterEventHandler( OnEventObjectBuffAdded, "EVENT_OBJECT_BUFF_ADDED" )


По-этому, безопаснее получить ID аватара/игрока, и смотреть его текущие бафы, чем работать с ID бафами.
Ссылка на комментарий
Поделиться на другие сайты

Quote:
Избавляет от спама в mods.txt, если ошибки вызываются на стороне разработчиков игры.

Ошибок со стороны разработчиков игры нет. :)
Есть неправильное использование функций разработчиков игры
Quote:
В том то вся проблема, при попытки выполнить следующий код, скорее всего, возникнет ошибка:

Почему у меня не возникает ошибок? (к примеру, аддон HealerProc работает с бафами; как раз этот эвент и эта функция в нем)
Quote:
По-этому, безопаснее получить ID аватара/игрока, и смотреть его текущие бафы, чем работать с ID бафами .

Эта... а у текущих бафов игрока ты чо получаешь изначально? Не ИД разве?
ИД бафов динамические: сейчас есть такой баф, через секунду его нет
Поэтому нужно обрабатывать бафы (получать инфрормацию по ним) сразу же после получения ИД этих бафов
Ссылка на комментарий
Поделиться на другие сайты

Не буду мешать специалисту, в решении проблемы автора этого поста.

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

Собственно, ответ на вопрос топика был уже дан во 2-м посте

Как автор будет решать проблемы возникновения ошибки - это уже другой вопрос

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

The tabled event parameter objects is passed from EVENT_OBJECT_BUFFS_ELEMENT_CHANGED.

Table: objects = {objectId = {buffId = true/false},...}

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

Еще раз, откуда берется эта переменная? Получается в этом же цикле из игрового события? Или хранится где-нибудь в памяти некоторое время?

Вполне возможно что переменная передается через userMods.SendEvent() и приходит в аддон уже в следующий кадр.

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

Quote:
Вполне возможно что переменная передается через userMods.SendEvent() и приходит в аддон уже в следующий кадр.


Все ивенты, включая посланные из скрипта, обрабатываются в том же кадре, покуда стек ивентов не опустеет. Игру можно намертво остановить аддоном, посылая ивент в его же собственном обработчике.
Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

получается что для обновления бафа нужно всегда бегать по бафам аватара?

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

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

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

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

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

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

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

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

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

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