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

New program for writers

We turn from quantity to quality and tell you how we will supplement the Allods Team program with rewards in rubles.

More

The new Updater

Let us to introduce the new addon updater software and to share the details

Read more

Alloder 2.0

We have started the process of project evolve, and this relates not only, and not even primarily of the site's view

Read more

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


icreator
 Share

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

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

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

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

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...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  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