DiSlord Posted June 3, 2011 Share Posted June 3, 2011 Есть такой код: Code: local buff = object.GetBuffInfo(buffId) if buff == nil then ... бафф слетел сделать чтото end В случае если баффа нет (он пропал при окончании и мне надо выдать сообщение), но вот только при этом в mods.txt спамит такую ошибку: Game::LuaObjectGetBuffPart: Cannot get buff, details: int __cdecl Game::LuaObjectGetBuffPart(bool &,const struct GMUIHelper::IBuffInfo *&,struct lua_State *) ЗЫ а то даж руки опускаються что либо делать, ну до чего кривой функционал предоставлен Quote Link to comment Share on other sites More sharing options...
Nikon Posted June 4, 2011 Share Posted June 4, 2011 Тебе ж ясно-понятно написали, что не могут выдать инфу по несуществующему бафу функцией GetBuffInfo() buffId откуда берется? Ты его запомнил и пытаешся обрабатывать в ивенте EVENT_OBJECT_BUFFS_CHANGED? Смотри все бафы на аватаре (object.GetBuffs()) и ищи там свой buffId. Не найдешь - выдавай мессагу что баф скончался ЗЫ. А конкретно по теме топика: выполняй функции в потоках - никаких ошибок в логе не увидишь, даже если их будет море Quote Link to comment Share on other sites More sharing options...
DiSlord Posted June 5, 2011 Author Share Posted June 5, 2011 Мне нужны баффы не только на аватаре, но и в пати/рейде, ну и некоторых мобов. Смысл ошибки мне понятен (да я запомнил бафф и объект при его появлении, и когда произошло изменение баффов в ивенте EVENT_OBJECT_BUFFS_CHANGED на этом объекте, пытаюсь проверить существует ли он еще, если нет то сделать чтото), но вот нафига при этом чтото писать в файл? просто думал что есть аналог try/catch. А вот что за потоки? Я не большой спец в lua, так почутка интересуюсь.. PS да я уже пришел к тому что приходится искать бафф при помощи object.GetBuffs(), это медленней, но чтож делать как обычно через костыль.. Quote Link to comment Share on other sites More sharing options...
Nikon Posted June 5, 2011 Share Posted June 5, 2011 Quote: есть аналог try/catch. Чего нет - того нет.Ты пытаешься получить информацию о бафе, которого нет - тебе и выдается ошибка. Чего здесь неправильного?Quote: А вот что за потоки? Можно пользоваться стандартной библиотекой coroutineЕсли совсем просто - в функции, обрабатывающей ивент пишешь что то типа:Code: coroutine.resume ( coroutine.create ( function (params)----тут твой код. params - параметры, приходящие с ивентом--end),params) Создается поток, запускается, отрабатывается код, поток умирает. БОльшая часть ошибок в потоке, если они есть, в лог не пишетсяНикто, правда, этой библиотекой не пользуется Quote Link to comment Share on other sites More sharing options...
Recommended Posts