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

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

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

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

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

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

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

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

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

Подробнее

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

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

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

Подскажите, в чем ошибка


Unicorn79

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

Раньше была функция object.AttachVisibleObject( objectId, index, visObjectOrAliasId, position, directionAnchorObjId ), но ей запретили пользоваться с версии 4.0.04.

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

И все таки я смог прицепить VisObject. Вот доказательство - подсвеченный аукционер в Новограде.

 

ee78d9428c67.jpg

 

Но раз "никак", значит "никак". Оставим все в секрете.

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

Это точно "VisObject прикрепленный к юниту"? Прикрепи к идущему стражнику...

 

П.С. и прикрепи какой-нибудь трехмерный VisObject :)

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

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

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

 

 

 

Это точно "VisObject прикрепленный к юниту"?

 

 

Нет, к координатам юнита.

 

Error: addon MyAddon: 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 *))

 

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

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

Error: addon MyAddon: 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 *))

 

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

 

Скорее всего такого баффа не существует. Лучше все-таки привести пример кода. Как можно более полный.

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

Вероятно бафф уже исчез и инфо получить нельзя.

Хотя если верить этому алгоритму и весь код в одной функции, просто перебор всех юнитов и баффов на них, то никаких ошибок быть не должно

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

Упростил код до минимума - потестить.

 

function OnBuffAdded ( buffs )
  for i in buffs do
    local buffInfo = object.GetBuffInfo( buffs )
-- это место вызывает ошибку
      if buffInfo then
       ...........

      end

  end

end

 

common.RegisterEventHandler( OnBuffAdded, 'EVENT_OBJECT_BUFF_ADDED' ) 

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

Нет, к координатам юнита.

Если он прикреплен используя функцию маркера мув ту клик, то это дикий костыль.

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

Упростил код до минимума - потестить.

 

function OnBuffAdded ( buffs )

  for i in buffs do

    local buffInfo = object.GetBuffInfo( buffs ) -- это место вызывает ошибку

      if buffInfo then

       ...........

      end

  end

end

 

common.RegisterEventHandler( OnBuffAdded, 'EVENT_OBJECT_BUFF_ADDED' ) 

 

Странный код. В EVENT_OBJECT_BUFF_ADDED приходит табличка с двумя полями, objectId и index, но не лист с буффами. См. документацию.

В этом коде цикл for..each пройдется и по index, а такого баффа точно нет.

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

А еще приходит buffId, хоть в документации этого и не написано. Т.е. правильно будет так

function OnBuffAdded ( params )
    local buffInfo = object.GetBuffInfo( params.buffId )
    if buffInfo then
        ...........
    end
end

 

 

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

Не знал такую особенность for.

Кстати, если использовать params.objectId то ошибка остается, а вот если params.buffId, то все работает красиво.

Век живи, век учись. Спасибо, коллеги!

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

Кстати, если использовать params.objectId то ошибка остается, а вот если params.buffId, то все работает красиво.

Вероятно потому что ObjectId это ИД объекта (юнита) а не баффа? И функции для работы с баффами с ним не работают?

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

А еще приходит buffId, хоть в документации этого и не написано...

 

Кривожопая документация какая-то. А потом люди циклами по ивентам бегают.

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

nicorn79, on 04 Nov 2013 - 16:52, said: Кстати, если использовать params.objectId то ошибка остается, а вот если params.buffId, то все работает красиво. Вероятно потому что ObjectId это ИД объекта (юнита) а не баффа? И функции для работы с баффами с ним не работают?

 

То есть, вы хотите сказать, что в качестве objectId  приходит что вздумается? То идентификатор юнита, то баффа? Пишу же, ЧЕРЕЗ РАЗ.

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

То есть, вы хотите сказать, что в качестве objectId  приходит что вздумается? То идентификатор юнита, то баффа? Пишу же, ЧЕРЕЗ РАЗ.

Слов "через раз" я в сообщениях выше не увидел.

Приведенный выше кусок кода должен выдавать ошибку каждый раз, на мой беглый взгляд.

Событие EVENT_OBJECT_BUFF_ADDED содержит таблицу с 3 параметрами.

ObjectId

BuffId

index

Т.е. этот код

function OnBuffAdded ( buffs )
  for i in buffs do
    local buffInfo = object.GetBuffInfo( buffs[i] ) -- это место вызывает ошибку
      if buffInfo then
       ...........
      end
  end
end

common.RegisterEventHandler( OnBuffAdded, 'EVENT_OBJECT_BUFF_ADDED' ) 

должен отработать как

    local buffInfo = object.GetBuffInfo( buffs[ObjectId] )

    local buffInfo = object.GetBuffInfo( buffs[buffId] )

    local buffInfo = object.GetBuffInfo( buffs[index] )

Т.е. 3 раза вызвать object.GetBuffInfo, при этом 2 раза из трех параметр будет неверен и/или не являться идентификатором баффа.

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

Вот только в документации этого нет, вот и возникает путаница.

 

попробуйте прологировать код

 

local buffInfo = object.GetBuffInfo( buffs[ObjectId] ) в логе чередуются индентификаторы баффа (!!!)  и ошибка!

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

при этом 2 раза из трех параметр будет неверен и/или не являться идентификатором баффа.

 

Точнее будет сказать, что иногда 1 параметр вызывает ошибку, иногда 2. См мой пост выше.

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

Идентификатор есть некое число. Вполне вероятно что порой идентификаторы существующих баффов и идентификаторы существующих юнитов совпадают. Попробуй сравнивать ObjectId и BuffId в одном и том же событии.

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

Уже пробовал выводить object.GetName () .... "Астральная мощь III"  ну никак не является именем юнита.

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

Уже пробовал выводить object.GetName () .... "Астральная мощь III"  ну никак не является именем юнита.

 

object.GetName( objectId ) - добывает имена интерактивных объектов по их id, в том числе и мобов, игроков и пр. Но никак не баффов.

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

Код

function BuffAdded(params)
LogInfo("Object ", object.GetName(params.objectId))
LogInfo("Buff ", object.GetName(params.buffId))
end
common.RegisterEventHandler(BuffAdded, "EVENT_OBJECT_BUFF_ADDED")

Выдаёт в лог следующее:

 

Info: addon TestingButton: Object панДимон
Error: addon TestingButton: UI::LuaObjectGetName: interactive object not found: 16218, details: int __cdecl UI::LuaObjectGetName(struct lua_State *)
Info: addon TestingButton: Buff
Info: addon TestingButton: Object ЛордДжулиан
Error: addon TestingButton: UI::LuaObjectGetName: interactive object not found: 16306, details: int __cdecl UI::LuaObjectGetName(struct lua_State *)
Info: addon TestingButton: Buff
Info: addon TestingButton: Object пПанацеЯя
Error: addon TestingButton: UI::LuaObjectGetName: interactive object not found: 16307, details: int __cdecl UI::LuaObjectGetName(struct lua_State *)
Info: addon TestingButton: Buff
Info: addon TestingButton: Object пПанацеЯя
Error: addon TestingButton: UI::LuaObjectGetName: interactive object not found: 16308, details: int __cdecl UI::LuaObjectGetName(struct lua_State *)
Info: addon TestingButton: Buff
 

Т.е. все работает как я предполагал. Астральная мощь III не является именем юнита, но она явно получена не через object.GetName(params.objectId)

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

  • 5 недель спустя...

Т.е. 

 

LogInfo("Object ", object.GetName(params.objectId))
LogInfo("Buff ", object.GetBuffInfo(params.buffId).name)

 

Никогда не будит давать ошибку?

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

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

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

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

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

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

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

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

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

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