Jump to content

Digest Jan-Feb

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

January February

Servers monitoring and the Addons Editor

We present you two legends. All dreams come true.

Servers monitoring The Addons Editor

Game tooltips

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

Read more

The Addons Updater

Let us to introduce the addons updating software and to share the details

Read more Download

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


icreator

Recommended Posts

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
Link to comment
Share on other sites

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

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

Link to comment
Share on other sites

Guest welldotru

Стандартная проблема для тех кто работает с 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

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

Link to comment
Share on other sites

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

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

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

Guest welldotru
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 бафами.
Link to comment
Share on other sites

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

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

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

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

Guest welldotru

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

Link to comment
Share on other sites

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

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

Link to comment
Share on other sites

The tabled event parameter objects is passed from EVENT_OBJECT_BUFFS_ELEMENT_CHANGED.

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

Link to comment
Share on other sites

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

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

Link to comment
Share on other sites

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


Все ивенты, включая посланные из скрипта, обрабатываются в том же кадре, покуда стек ивентов не опустеет. Игру можно намертво остановить аддоном, посылая ивент в его же собственном обработчике.
Link to comment
Share on other sites

  • 2 weeks later...

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

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.

×
×
  • Create New...

Important Information

By using our site you agree to the Terms of Use