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

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

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

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

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

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

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

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

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

Подробнее

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

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

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

Как узнать ObjectId предмета?


Гость Urjin

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

Полазил по форуму, но не нашел темы.

Как узнать ObjectId вещи, на которую наведен курсор?

Думал вытянуть, через событие, которое обрабатывает описание вещи, которое появляется при наведении курсора на предмет (в инвентаре, у вендора, или в аукционе), в API нашел только EVENT_SHOW_ITEMS_INFO, но ни разу не удалось вызвать с ним переменную. написано, что работает только в UIstate, может в этом дело, но я не знаю, что это такое :-(

В AucCenter, вроде как это событие обрабатывается SCRIPT_REQUEST_CONTEXT_TOOLTIP, но он сейчас вообще не работает.

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

  • Ответов 56
  • Создана
  • Последний ответ

Топ авторов темы

Топ авторов темы

Quote:
UIstate

Насколько понимаю, это означает, что работать будет только в самом интерфейсе. Например, в случае с иконкой вещи - она корректно воспроизводится на экране, но ни какую инфу по ней невозможно сохранить (ни ид, ни путь, ни саму картинку тем более).

Quote:
Как узнать ObjectId вещи, на которую наведен курсор?

А позвольте полюбопытствовать для чего? Может есть другое решение...
Ссылка на комментарий
Поделиться на другие сайты

А дальше как? EVENT_INGAME_UNDER_CURSOR_CHANGED для интерфейса передает только 1 строчку state == "interface" и все

Как бы еще узнать, что за виджет под курсором

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

Был в командировке, прошу прощения за долгий ответ.

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 предмета, с него я вытяну характеристики вещи, и потом заменю на них характеристики персонажа, и перерассчитаю общую эффективность. Если есть другие идеи - буду рад.

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

Ясно, EVENT_INGAME_UNDER_CURSOR_CHANGED для этой цели не подходит.

Тогда загляни в этот ларчик Али-Бабы:

Interface.1.0.03.26.2.zip

Это все скрипты разработчиков из игры версии АО 1.0.03.26.2, последней версии, после которой они были зашифрованы.

Если там не будет ответа, то значит, никак. Но очень велики шансы, что ответ ты там найдёшь.

P.S. Прочитал отрывками статью о гармонии, ОЧЕНЬ интересно, только читается медленно :)

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

Гляну, спасибо, просто есть опасение, что если его нет в нормальном АПИ, то разрабы считают, что его и не должно быть, соответственно могут отключить функционал в следующих патчах :(

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:
EVENT_SHOW_ITEMS_INFO
В сообщеннии приходит список ValuedObject-ов - объектов, в которых содержится информация о предметах. Эти объекты можно добавлять в какой либо ValuedText.


Возможно так прокатит (не тестил):

Code:
function Test(o)
local oid = o.items [0] :GetId()
common.LogInfo("common", "ID объекта: "..oid)
end

common.RegisterEventHandler(Test, "EVENT_SHOW_ITEMS_INFO")


Должен выдать ID первого (то бишь [0]) объекта.
Ссылка на комментарий
Поделиться на другие сайты

SCRIPT_REQUEST_CONTEXT_TOOLTIP - это событие возникает, когда указатель мышки задержался на 1 секунду над каким-то "активным" элементом интерфейса (например, любая иконка). Раньше это событие приходило в аддоны, и мы им пользовались, чтобы показывать свои тултипы. Но когда у нас отобрали common.SendEvent(), дав нам взамен урезанный userMods.SendEvent(), пропал способ запрашивать показ подсказки. Поэтому, мы перестали пользоваться подсказками.

Ну а работает ли сейчас SCRIPT_REQUEST_CONTEXT_TOOLTIP в аддонах - я не в курсе. Надеюсь, что работает, тогда всплывающие подсказки можно будет оживить, создав для этого специальный набор функций.

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

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

Совет Abagor'а не сработал :(

Народ, может подумать в другом направлении?

Пусть задача так: есть конкретный предмет (необязательно в инвентаре), необходимо узнать его статы. По клику мышки, наведению курсора, чесанию правой пятки, состоянию звезд, неважно. Хоть как-нибудь

Есть идеи?

И еще попутно вопрос, если так - никак, может быть можно создать какой-нибудь, типа, InputBox? Куда руками забивать интересующие статы (благо их немного)?

UPD: Щас додумал, (по поводу EVENT_SHOW_ITEMS_INFO) что за среда такая UIState? может все дело в том, что из нее надо как-то по-особенному извлекать инфу?

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

Узнать бонус к статам от предмета легко. Только нужно выбрать к какому событию сие привязывать. Например, к появлению в сумке или же получать список предметов, уже надетых на персонаже, как это сделано в aGAI.

Насчет моего примера - я поковыряюсь на досуге (ближайшее время не гарантирую), может все-таки заработает...

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

Так в том-то все и дело. С надетого на себя, или появившегося в сумке предмет вообще не нужно вытягивать статы. Его можно надеть на себя, и вытянуть уже готовые эффективные статы с аватара. Но задача аддона - выяснить станет ли персонаж эффективнее от покупки/ролла этого предмета. Т.Е. до того, как ты его сроллил/купил => до того как он появился в инвентаре. Потому события, типа ...STATS_CHANGED, ...INVENTORY_CHANGED (писал по памяти - дословно не помню), не подходят (ну, т.е. STATS_CHANGED нужен, но для другого). В этом-то и заковыка, а так действительно все просто надел предмет, снял сразу статы готовые, и посчитал эффективность.

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

Похоже событие 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:

onEvent [ "event_loot_for_greed_need" ] = function( eventParams )

local itemInfo = avatar.GetItemInfo( eventParams.itemId )

local itemName = itemInfo.name

--lootHash [ eventparams.rollid ] = itemName

end

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

Quote:

local itemInfo = avatar.GetItemInfo( eventParams. ItemId) )

От тож, что для того, чтоб воспользоваться этой функцией нужен ItemId, а его нет. :(

Я так и понял. По-ходу, тему можно закрывать. В назидание потомкам: Узнать ItemID предмета до того, как его получил - невозможно.
Ссылка на комментарий
Поделиться на другие сайты

В этот ивент не приходит {ItemId} или нет самого ивента?

По идее это событие EVENT_LOOT_FOR_GREED_NEED срабатывает при начале рола и Params.ItemId в него должно передаваться с сервера.

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

У меня появился вопрос, как вытащить ID эмоций, форум пошарил, но как то не нашел, может я кривой и слепой, если есть тема то дайте ссылку...

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

Согласен, но это - частный случай. а как быть при покупке на ауке?

Хотя с другой стороны - это уже неплохо.

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

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 предмета, выставленного на аукцион

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

Действительно, можно наставить рядом с каждой пиктограммой лота на аукционе маленький значек вопросика например с реакцией на наведение.. при наведении узнавать имя нашего значка-виджета и из него узнавать id аукционое --> id предмета как предложил Nikon..

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

Обязательно гляньте в хелпе вкладочку 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, а то в оффтоп идем >_>

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

а можно по-подробнее в этом месте, как это реализовать?

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

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

Ахз. Надо экспериментировать. Смотри в доках раздел Аукционов

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

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

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

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

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

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

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


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

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

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