WoW Lua - Как получить ранг заклинания в версии 1.13 (классика)

Пытаюсь получить ранг заклинания, но GetSpellInfo не возвращает второй параметр (ранг). Если я бегу:

/dump GetSpellInfo( 5782 )

я получил

[1]="Fear"
[3]="136813"
[4]="1500"
[5]="0"
[6]="20"
[7]="5782"

Кажется, что каждая комбинация заклинания и ранга имеет уникальный идентификатор:

5185 = Healing Touch (rank1)
5186 = Healing Touch (rank2)
5187 = Healing Touch (rank3)
5188 = Healing Touch (rank4)
5189 = Healing Touch (rank5)
6778 = Healing Touch (rank6)
8903 = Healing Touch (rank7)
9758 = Healing Touch (rank8)

Как мне получить ранг заклинания с учетом идентификатора?

Мод, над которым я работаю (LunarSphere), получает перетаскивание из книги заклинаний.

Я использую это с помощью кнопки SetAttribute:

self:SetAttribute("*spell-S01", "Healing Touch")

За высшее звание или

self:SetAttribute("*spell-S01", "Healing Touch(rank 3)")

Для определенного ранга

Спасибо!


person Leonardo    schedule 29.12.2019    source источник


Ответы (1)


Это просто разные заклинания. Это делает неудобным некоторые вещи, когда мы склонны рассматривать их как разные ранги одного и того же заклинания.

Скорее всего, вам придется создать базу данных ранжированных заклинаний и выполнить поиск в ваших собственных таблицах как часть общей услуги, предоставляемой вашим аддоном.

https://wowwiki.fandom.com/wiki/API_GetSpellInfo

rank (строка) — строка ранга из всплывающей подсказки заклинания, например. «Ранг 2». Возвращает некоторую другую классификацию (например, «Призыв» для заклинания призыва) или пустую строку, если нет ранга.

Таким образом, этот «ранг» предназначен только для отображения дополнительной строки в пользовательском интерфейсе, если они хотят добавить ее для этого заклинания.

Как и многие вещи в API пользовательского интерфейса, они предназначены только для поддержки пользовательского интерфейса и в основном прагматичны и просто необходимы для отображения или выполнения функций пользовательского интерфейса WoW.

local subTextOrRank = GetSpellSubtext(spellId)

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

Я использовал этот список заклинаний для быстрой справки в прошлом:

http://kyle.13th-floor.org/wow/spells/spells

ID, NameSubtext_lang, Description_lang, AuraDescription_lang
1
3
4
5, , Instantly Kills the target. I hope you feel good about yourself now.....
7
10, Rank 1, Ice shards pelt the target area doing $o1 Frost damage over $d.
11
4_0. текст

Для ответа на многие вопросы о данных, которые клиент имеет в наличии статически:

https://wow.tools/dbc/

Вот пример клиентской таблицы SpellName из текущей версии WoW Classic:

https://wow.tools/dbc/?dbc=spellname&build=1.13.3.32836#search=&page=1

Вот таблица заклинаний из той же версии WoW Classic:

https://wow.tools/dbc/?dbc=spell&build=1.13.3.32836#search=&page=1

ID, NameSubtext_lang, Description_lang, AuraDescription_lang
1
3
4
5, , Instantly Kills the target. I hope you feel good about yourself now.....
7
10, Rank 1, Ice shards pelt the target area doing $o1 Frost damage over $d.
11

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

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


Вы можете попытаться просмотреть список заклинаний при загрузке и создать ранговый список на лету, но имейте в виду, что в этой таблице 21 000 заклинаний. Если вы беспокоитесь только о заклинаниях игрока, вы можете создать заранее созданный мини-список, хранящийся в виде таблицы для вашего собственного аддона, и это будет таблица только из сотен. У вас может быть базовое английское имя и минимальное и максимальное поле для ранга.

Я думаю, что 'GetSpellSubtext' в цикле, чтобы выплюнуть таблицу Lua на вашем локальном клиенте, в сочетании с таблицами и прокаткой небольшой базы данных может сломать для вас застревание в журнале.

person Celess    schedule 30.12.2019
comment
Большое спасибо за ваш ответ! Я думаю, что я мог бы уйти, используя GetSpellBookItemName, так как я обрабатываю событие выпадения, у меня есть доступный идентификатор слота книги заклинаний, а GetSpellBookItemName вернет ранг заклинания в spellSubName. - person Leonardo; 31.12.2019