Oberon Posted September 20, 2015 Share Posted September 20, 2015 (edited) День добрый. Только пробую делать аддоны. У меня вопрос по чату. С выводом в чат вроде бы все понятно (есть LogToChat()), а вот если нужно наоборот, выловить событие: например, как выловить надпись "[Личные]: Вы получаете добычу: ХХХХ золотом"? Нужно что бы когда выплывает это сообщение в чате, совершалось какое то действие. Не могу с этим разобраться, Edited September 20, 2015 by Oberon Quote Link to comment Share on other sites More sharing options...
LEM Posted September 20, 2015 Share Posted September 20, 2015 http://alloder.pro/md/LuaApi/EventChatMessage.html Quote Link to comment Share on other sites More sharing options...
Oberon Posted September 20, 2015 Author Share Posted September 20, 2015 http://alloder.pro/md/LuaApi/EventChatMessage.html Спасибо,) С помощью EVENT_CHAT_MESSAGE у меня выходит выловить только обычные сообщения, которые пишут в мир, например. Но мне надо конкретно "[Личные:]" поймать. Пробовал через поля msg и sender, именно этого типа сообщения не получается словить, Quote Link to comment Share on other sites More sharing options...
Artdos Posted September 20, 2015 Share Posted September 20, 2015 http://alloder.pro/md/LuaApi/EnumChatType.html Quote Link to comment Share on other sites More sharing options...
LEM Posted September 20, 2015 Share Posted September 20, 2015 Спасибо,) С помощью EVENT_CHAT_MESSAGE у меня выходит выловить только обычные сообщения, которые пишут в мир, например. Но мне надо конкретно "[Личные:]" поймать. Пробовал через поля msg и sender, именно этого типа сообщения не получается словить, Деньги приходят сюда http://alloder.pro/md/LuaApi/EventAvatarMoneyTaken.html Quote Link to comment Share on other sites More sharing options...
Oberon Posted September 20, 2015 Author Share Posted September 20, 2015 http://alloder.pro/md/LuaApi/EnumChatType.html да пробовал CHAT_TYPE_, дело в том, что EVENT_CHAT_MESSAGE попросту срабатывает только на сообщения от игроков. По событию LogInfo( params.chatType ) выдает только такие результаты: 0 - в пм 2 - обычный разговор 4 - в зону 5 - крик 6 - в мир 9 - в ги чат -2 - моб Ястреб Яскера, почему то отрицательный результат выдал на другие сообщения, уведомления, и т.п. никаких результатов, Quote Link to comment Share on other sites More sharing options...
Oberon Posted September 20, 2015 Author Share Posted September 20, 2015 (edited) Деньги приходят сюда http://alloder.pro/md/LuaApi/EventAvatarMoneyTaken.html Скриншот 2015-09-20 17.17.48.png о. хорошая идея, сейчас попробую, --------------------------- В общем, не то. Там выводится ENUM_TakeItemActionType_Loot, т.е., от обычного лута ничем не отличается, выделить не получится. А как поймать событие, когда из сумки пропадает какой-либо предмет? Вот такой, например: "Ключ от сундука" Edited September 20, 2015 by Oberon Quote Link to comment Share on other sites More sharing options...
Oberon Posted September 20, 2015 Author Share Posted September 20, 2015 (edited) В общем, не знаю я что придумать. Нужно поймать событие, не могу придумать как. Вот ситуация: Есть сундук, он находится в локации; когда его юзаешь - из инвентаря пропадает ключ ("Ключ от сундука"), получаешь какое то количество монет, в связи с чем приходит сообщение в чат ("[Личные]: Вы получаете добычу: ХХХХ золотом ХХ серебром ХХ медью"). Нужно каким то образом поймать это событие. Что попробовал: 1. Через чат, как сообщение "[Личные]: Вы получаете добычу: ХХХХ золотом" - не выходит, EVENT_CHAT_MESSAGE не срабатывает на это сообщение (как и на любые другие, кроме разговоров персонажей). 2. Через EVENT_AVATAR_MONEY_TAKEN - не подходит, т.к. не выходит "отделить" приход этих денег от любого другого поднятия лута. 3. Через EVENT_AVATAR_MONEY_TAKEN используя avatar.GetItemInfo( itemId ) предмета "Ключ от сундука" - тоже не получается, т.к. логично, что "Ключ от сундука" выпадает из инвентаря раньше, чем сработает avatar.GetItemInfo( itemId ). Идеально было бы событие, когда предмет ("Ключ от сундука") пропадает из инвентаря, но такого события я не нашел в описаниях. Есть еще какие идеи у кого то, может быть? Edited September 20, 2015 by Oberon Quote Link to comment Share on other sites More sharing options...
Artdos Posted September 20, 2015 Share Posted September 20, 2015 В общем, не знаю я что придумать. Нужно поймать событие, не могу придумать как. Вот ситуация: Есть сундук, он находится в локации; когда его юзаешь - из инвентаря пропадает ключ ("Ключ от сундука"), получаешь какое то количество монет, в связи с чем приходит сообщение в чат ("[Личные]: Вы получаете добычу: ХХХХ золотом ХХ серебром ХХ медью"). Нужно каким то образом поймать это событие. Что попробовал: 1. Через чат, как сообщение "[Личные]: Вы получаете добычу: ХХХХ золотом" - не выходит, EVENT_CHAT_MESSAGE не срабатывает на это сообщение (как и на любые другие, кроме разговоров персонажей). 2. Через EVENT_AVATAR_MONEY_TAKEN - не подходит, т.к. не выходит "отделить" приход этих денег от любого другого поднятия лута. 3. Через EVENT_AVATAR_MONEY_TAKEN используя avatar.GetItemInfo( itemId ) предмета "Ключ от сундука" - тоже не получается, т.к. логично, что "Ключ от сундука" выпадает из инвентаря раньше, чем сработает avatar.GetItemInfo( itemId ). Идеально было бы событие, когда предмет ("Ключ от сундука") пропадает из инвентаря, но такого события я не нашел в описаниях. Есть еще какие идеи у кого то, может быть? http://alloder.pro/md/LuaApi/EventContainerItemRemoved.html Quote Link to comment Share on other sites More sharing options...
LEM Posted September 20, 2015 Share Posted September 20, 2015 Опередил. Quote Link to comment Share on other sites More sharing options...
Oberon Posted September 20, 2015 Author Share Posted September 20, 2015 (edited) Спасибо. Еще вопрос. Как правильно сравнивать WString и обычный текст? обычный текст перевожу в WString, сравниваю, но результата нет. Вот как делаю: local text = params.itemObject:GetText() LogInfo( text ) ---Здесь по факту находится строка "Легендарная коробка создателя реликтов" типа WString if text == userMods.ToWString("Легендарная коробка создателя реликтов") then LogInfo( "OK!" ) end Edited September 20, 2015 by Oberon Quote Link to comment Share on other sites More sharing options...
Altair Posted September 20, 2015 Share Posted September 20, 2015 Чтобы сравнить два WString'а, надо воспользоваться функцией common.CompareWString или common.CompareWStringEx. Если нужно просто узнать равенство, то лучше WString перевести в обычную интернализованную lua-строчку (userMods.FromWString) и сравнить её со строковой константой. Quote Link to comment Share on other sites More sharing options...
Recommended Posts