Guest Urjin Posted July 24, 2010 Share Posted July 24, 2010 Полазил по форуму, но не нашел темы. Как узнать ObjectId вещи, на которую наведен курсор? Думал вытянуть, через событие, которое обрабатывает описание вещи, которое появляется при наведении курсора на предмет (в инвентаре, у вендора, или в аукционе), в API нашел только EVENT_SHOW_ITEMS_INFO, но ни разу не удалось вызвать с ним переменную. написано, что работает только в UIstate, может в этом дело, но я не знаю, что это такое :-( В AucCenter, вроде как это событие обрабатывается SCRIPT_REQUEST_CONTEXT_TOOLTIP, но он сейчас вообще не работает. Quote Link to comment Share on other sites More sharing options...
Guest Abagor Posted July 24, 2010 Share Posted July 24, 2010 Quote: UIstate Насколько понимаю, это означает, что работать будет только в самом интерфейсе. Например, в случае с иконкой вещи - она корректно воспроизводится на экране, но ни какую инфу по ней невозможно сохранить (ни ид, ни путь, ни саму картинку тем более).Quote: Как узнать ObjectId вещи, на которую наведен курсор? А позвольте полюбопытствовать для чего? Может есть другое решение... Quote Link to comment Share on other sites More sharing options...
SLA Posted July 25, 2010 Share Posted July 25, 2010 Может, EVENT_INGAME_UNDER_CURSOR_CHANGED ? Quote Link to comment Share on other sites More sharing options...
Nikon Posted July 27, 2010 Share Posted July 27, 2010 А дальше как? EVENT_INGAME_UNDER_CURSOR_CHANGED для интерфейса передает только 1 строчку state == "interface" и все Как бы еще узнать, что за виджет под курсором Quote Link to comment Share on other sites More sharing options...
Guest Urjin Posted July 30, 2010 Share Posted July 30, 2010 Был в командировке, прошу прощения за долгий ответ. Quote: EVENT_INGAME_UNDER_CURSOR_CHANGED - поля: state: string - может принимать следующие значения: - "interface" - курсор находится над элементом интерфейса, кроме основного 3d-view - "main_view_3d_none" - курсор находится на основном 3d-view, под ним нет юнитов - "main_view_3d_unit" - курсор находится на основном 3d-view, под ним находится юнит Для этого случая присылается дополнительное поле: unitId: ObjectId (not nil) - идентификатор юнита под курсором - "main_view_3d_device" - курсор находится на основном 3d-view, под ним находится устройство (не юниты, сундуки и пр.) Для этого случая присылаются дополнительные поля: deviceId: ObjectId (not nil) - идентификатор устройства под курсором canUse: boolean - можно ли использовать устройство в текущий момент (в частности, учитывается расстояние до него) - "main_view_3d_astral_unit" - курсор находится на основном 3d-view, под ним находится астральный юнит Для этого случая присылается дополнительное поле: unitId: ObjectId (not nil) - идентификатор астрального юнита под курсором - "main_view_3d_interactive_device_element" - курсор находится на интерактивном элементе какого-либо устройства, при работе с этим устройством. Для этого случая присылается дополнительные поля: deviceType: number (enum USDEV_...) - тип корабельного устройства Если это USDEV_SCANER, то дополнительные поля: type: number (enum HT_...) - тип хаба {HT_NONE, HT_UNKNOWN, HT_OUR, HT_ENEMYSHIP, HT_PORTAL, HT_ALLOD, HT_ISLAND} name: WString or nil - название хаба, если это HT_PORTAL т.е. если курсор находится не в окне 3Д - мы просто получим значение, что он находится в интерфейсе и все. а где он, над окном персонажа, над ActionPanel, или где-нибудь еще, вообще непонятно. потому и не подходит. Я рассматривал этот вариант. Quote: А позвольте полюбопытствовать для чего? Может есть другое решение... Я хочу на базе темы "О гармонии, или в поисках золотой середины в статах", написать аддон, который будет оценивать эффективность персонажа, и выводить в тултип (подсказку) под предметом. т.е. снимать характеристики с персонажа, и рассчитывать эти значения для одетого персонажа - легко. но самая фишка в том, чтоб понять, станет ли твой персонаж эффективнее, не покупая/ролля и примеряя вещь, а до этого. вот как-то так. UPD: потому и нужно вытягивать ObjID предмета, с него я вытяну характеристики вещи, и потом заменю на них характеристики персонажа, и перерассчитаю общую эффективность. Если есть другие идеи - буду рад. Quote Link to comment Share on other sites More sharing options...
SLA Posted July 30, 2010 Share Posted July 30, 2010 Ясно, EVENT_INGAME_UNDER_CURSOR_CHANGED для этой цели не подходит. Тогда загляни в этот ларчик Али-Бабы: Interface.1.0.03.26.2.zip Это все скрипты разработчиков из игры версии АО 1.0.03.26.2, последней версии, после которой они были зашифрованы. Если там не будет ответа, то значит, никак. Но очень велики шансы, что ответ ты там найдёшь. P.S. Прочитал отрывками статью о гармонии, ОЧЕНЬ интересно, только читается медленно Quote Link to comment Share on other sites More sharing options...
Guest Urjin Posted July 31, 2010 Share Posted July 31, 2010 Гляну, спасибо, просто есть опасение, что если его нет в нормальном АПИ, то разрабы считают, что его и не должно быть, соответственно могут отключить функционал в следующих патчах UPD: Два вопроса. 1. Есть идея. Может быть возможно как-нибудь узнать ObjId предмета под курсором мыши? тогда по kbflags можно будет назначить какой-нить хоткей и при наведении курсора на предмет нажимать его и таким образом вытягивать. 2. Я порылся в Interface.1.0.03.26.2, но там совсем все по-другому. собственно, там и был зарыт SCRIPT_REQUEST_CONTEXT_TOOLTIP, но что это за эвент такой и как он вызывается, совершенно непонятно. т.е. прописан он вот так: Code: onBase [ "SCRIPT_REQUEST_CONTEXT_TOOLTIP" ] = function( params ) а вызывается так: Code: multevent.RegisterEventHandlers( onBase ) совсем непохоже на тот вариант вызова эвентов к которому я привык. может кто-нибудь проконсультировать, как работать со скриптовыми эвентами? Quote Link to comment Share on other sites More sharing options...
Guest Abagor Posted August 5, 2010 Share Posted August 5, 2010 Quote: EVENT_SHOW_ITEMS_INFO В сообщеннии приходит список ValuedObject-ов - объектов, в которых содержится информация о предметах. Эти объекты можно добавлять в какой либо ValuedText. Возможно так прокатит (не тестил):Code: function Test(o)local oid = o.items [0] :GetId()common.LogInfo("common", "ID объекта: "..oid)endcommon.RegisterEventHandler(Test, "EVENT_SHOW_ITEMS_INFO") Должен выдать ID первого (то бишь [0]) объекта. Quote Link to comment Share on other sites More sharing options...
Guest Urjin Posted August 6, 2010 Share Posted August 6, 2010 Сейчас уезжаю в отпуск приеду - обязательно попробую Quote Link to comment Share on other sites More sharing options...
SLA Posted August 6, 2010 Share Posted August 6, 2010 SCRIPT_REQUEST_CONTEXT_TOOLTIP - это событие возникает, когда указатель мышки задержался на 1 секунду над каким-то "активным" элементом интерфейса (например, любая иконка). Раньше это событие приходило в аддоны, и мы им пользовались, чтобы показывать свои тултипы. Но когда у нас отобрали common.SendEvent(), дав нам взамен урезанный userMods.SendEvent(), пропал способ запрашивать показ подсказки. Поэтому, мы перестали пользоваться подсказками. Ну а работает ли сейчас SCRIPT_REQUEST_CONTEXT_TOOLTIP в аддонах - я не в курсе. Надеюсь, что работает, тогда всплывающие подсказки можно будет оживить, создав для этого специальный набор функций. Quote Link to comment Share on other sites More sharing options...
Guest Urjin Posted August 18, 2010 Share Posted August 18, 2010 Совет Abagor'а не сработал Народ, может подумать в другом направлении? Пусть задача так: есть конкретный предмет (необязательно в инвентаре), необходимо узнать его статы. По клику мышки, наведению курсора, чесанию правой пятки, состоянию звезд, неважно. Хоть как-нибудь Есть идеи? И еще попутно вопрос, если так - никак, может быть можно создать какой-нибудь, типа, InputBox? Куда руками забивать интересующие статы (благо их немного)? UPD: Щас додумал, (по поводу EVENT_SHOW_ITEMS_INFO) что за среда такая UIState? может все дело в том, что из нее надо как-то по-особенному извлекать инфу? Quote Link to comment Share on other sites More sharing options...
Guest Abagor Posted August 20, 2010 Share Posted August 20, 2010 Узнать бонус к статам от предмета легко. Только нужно выбрать к какому событию сие привязывать. Например, к появлению в сумке или же получать список предметов, уже надетых на персонаже, как это сделано в aGAI. Насчет моего примера - я поковыряюсь на досуге (ближайшее время не гарантирую), может все-таки заработает... Quote Link to comment Share on other sites More sharing options...
Guest Urjin Posted August 23, 2010 Share Posted August 23, 2010 Так в том-то все и дело. С надетого на себя, или появившегося в сумке предмет вообще не нужно вытягивать статы. Его можно надеть на себя, и вытянуть уже готовые эффективные статы с аватара. Но задача аддона - выяснить станет ли персонаж эффективнее от покупки/ролла этого предмета. Т.Е. до того, как ты его сроллил/купил => до того как он появился в инвентаре. Потому события, типа ...STATS_CHANGED, ...INVENTORY_CHANGED (писал по памяти - дословно не помню), не подходят (ну, т.е. STATS_CHANGED нужен, но для другого). В этом-то и заковыка, а так действительно все просто надел предмет, снял сразу статы готовые, и посчитал эффективность. Quote Link to comment Share on other sites More sharing options...
Guest Abagor Posted August 29, 2010 Share Posted August 29, 2010 Похоже событие EVENT_SHOW_ITEMS_INFO вообще не срабатывает при наведении на предмет. Видимо мы неверно толкуем описание его логики исполнения. Не работает даже простейшая конструкция вида: Code: function GetIDs(list)userMods.SetGlobalConfigSection("TestGetIDs", list.items) end -------------------------------------------------------------------------------- function Init() common.RegisterEventHandler(GetIDs, "EVENT_SHOW_ITEMS_INFO") end -------------------------------------------------------------------------------- Init() Пробежался в очередной раз взором по апи - ни чего подходящего под твои задачи не нашел Видимо придется юзать примерочные на сайтах и знать будущий лут наперед. Что, конечно, не удобно. Quote Link to comment Share on other sites More sharing options...
Guest mehael Posted August 29, 2010 Share Posted August 29, 2010 Рылся по своим целям в старом коде.. нашел кое-что для тебя )) (возможно такого ивента уже нет.. но опробуй) Quote: onEvent [ "event_loot_for_greed_need" ] = function( eventParams ) local itemInfo = avatar.GetItemInfo( eventParams.itemId ) local itemName = itemInfo.name --lootHash [ eventparams.rollid ] = itemName end Quote Link to comment Share on other sites More sharing options...
Guest Urjin Posted August 30, 2010 Share Posted August 30, 2010 Quote: local itemInfo = avatar.GetItemInfo( eventParams. ItemId) ) От тож, что для того, чтоб воспользоваться этой функцией нужен ItemId, а его нет. Я так и понял. По-ходу, тему можно закрывать. В назидание потомкам: Узнать ItemID предмета до того, как его получил - невозможно. Quote Link to comment Share on other sites More sharing options...
Guest mehael Posted August 30, 2010 Share Posted August 30, 2010 В этот ивент не приходит {ItemId} или нет самого ивента? По идее это событие EVENT_LOOT_FOR_GREED_NEED срабатывает при начале рола и Params.ItemId в него должно передаваться с сервера. Quote Link to comment Share on other sites More sharing options...
Guest fastergadgethippo Posted August 30, 2010 Share Posted August 30, 2010 У меня появился вопрос, как вытащить ID эмоций, форум пошарил, но как то не нашел, может я кривой и слепой, если есть тема то дайте ссылку... Quote Link to comment Share on other sites More sharing options...
Nikon Posted August 30, 2010 Share Posted August 30, 2010 Зачем шарить форум, если все есть в мануалах? Ищи в CategoryEmotes.html Quote Link to comment Share on other sites More sharing options...
Guest Urjin Posted August 30, 2010 Share Posted August 30, 2010 Согласен, но это - частный случай. а как быть при покупке на ауке? Хотя с другой стороны - это уже неплохо. Quote Link to comment Share on other sites More sharing options...
Nikon Posted August 30, 2010 Share Posted August 30, 2010 Quote: EVENT_LOOT_FOR_GREED_NEEDСообщение приходит при начале дележа при Greed/Need ролле:-- поляrollId: ObjectId (not nil) - уникальный идентификатор роллаitemId: ObjectId (not nil) - уникальный идентификатор айтемаcount: number (int) - количество данного айтема в стеке По крайней мере во время ролла итем можно узнатьКстати, походу при любом перемещении итемов в сумку-банк, одевание из сумки, исходный итем уничтожается, а в нужном месте появляется его копия, уже с другим ИД+ Еще информация о надетых на кого-то вещахQuote: unit.GetEquipmentItemId( unitId, slot )..-- возвращаемые значения:ObjectId - идентификатор предмета экипировки Шаримся на аукционеauction.GetAuctions()Quote: auction.GetAuctionInfo( id )..itemId: ObjectId - id предмета, выставленного на аукцион Quote Link to comment Share on other sites More sharing options...
Guest mehael Posted August 30, 2010 Share Posted August 30, 2010 Действительно, можно наставить рядом с каждой пиктограммой лота на аукционе маленький значек вопросика например с реакцией на наведение.. при наведении узнавать имя нашего значка-виджета и из него узнавать id аукционое --> id предмета как предложил Nikon.. Quote Link to comment Share on other sites More sharing options...
Guest mehael Posted August 30, 2010 Share Posted August 30, 2010 Обязательно гляньте в хелпе вкладочку CategoryEmotes.. там еще много полезной нформации ^_^ да и Ctrl+F вам в помощь. Code: local emotes = avatar.GetEmotes()for i, id in emotes do local emoteInfo = avatar.GetEmoteInfo( id ) LogInfo( emoteInfo.sysName .. " id = " .. emoteInfo.id) end ЗЫ: Этот код работает только после создания Аватара.. т.е. только после события EVENT_AVATAR_CREATED .. а я уже месяц бегаю с аддоном АвтоЭмоции.. но выкладывать не хочу, а то мир погрузится во флуд >_< ... и еще - топик для вопросов по API, а то в оффтоп идем >_> Quote Link to comment Share on other sites More sharing options...
Guest Urjin Posted August 31, 2010 Share Posted August 31, 2010 а можно по-подробнее в этом месте, как это реализовать? таким же образом можно сделать вопросики рядом с окошками с лутом, при ролле, ну и вендора так же. Quote Link to comment Share on other sites More sharing options...
Nikon Posted August 31, 2010 Share Posted August 31, 2010 Ахз. Надо экспериментировать. Смотри в доках раздел Аукционов Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.