1. ホーム
  2. lua

[解決済み] WoW Lua - 1.13でスペルランクを取得する方法 (クラシック)

2022-02-16 22:47:13

質問

呪文のランクを取得したいのですが、GetSpellInfoは第2パラメータ(rank)を返しません。実行すると

/dump GetSpellInfo( 5782 )

私は

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

呪文とランクの組み合わせは、それぞれ固有のIDを持っているようです。

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)

IDで指定したスペルランクを取得するにはどうしたらいいですか?

私が開発しているMOD(LunarSphere)は、スペルブックからドラッグを取得します。

それをボタンのSetAttributeで使っているんです。

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

最高ランクの場合や

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

特定のランクについて

ありがとうございます。

解決方法は?

異なる呪文に過ぎない。そのため、同じ呪文の異なるランクと見なしがちなある種のものには厄介なことになります。

ランク付けされた呪文のDBを作成し、アドオンが提供するサービス全体の一部として、独自のテーブルでルックアップを行う必要がありそうです。

<ブロッククオート

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

rank (string) - 呪文のツールチップにあるランク行、例えば "Rank 2" です。他の分類 (召喚術の場合は "Summon" のような) を返します。 の呪文)、またはランクがない場合は空文字列となる。

つまり、その呪文のために行を追加したい場合、その行をUIに表示するためだけのものです。

UI API の多くのものと同様に、それらは UI をサポートするために存在するだけで、ほとんどは実用的で WoW UI 機能を表示または実行するために必要なものだけです。

local subTextOrRank = GetSpellSubtext(spellId)

これは、新しいエンジンがスペル情報と共に返さないかもしれないランクの表示行を取得します。'GetSpellSubtext'は、呪文がクライアントにキャッシュされているかどうか、またはそれが毎回動作するのを見て終わるかもしれない場合、ランクテキストを返すかどうかを指定します。

私は過去にこの呪文リストをクイックリファレンスとして使用したことがあります。

<ブロッククオート

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

クライアントが静的に利用可能なデータに関する多くの質問に答えるため。

https://wow.tools/dbc/

以下は、現在のバージョンのWoW ClassicにあるクライアントのSpellNameテーブルの例です。

<ブロッククオート

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

同じWoW Classic版のSpellテーブルを紹介します。

<ブロッククオート

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

ここでは、文字通りUIに必要なものを表にしたもので、これ以上複雑で深い意味はないことがわかるでしょう。

また、リストを読み進めていくと、基本的に手作業で行われているため、間違いがあったり、ランクの説明欄には役立つが一貫性が損なわれるテキストがあったりすることが想像できます。これは、もしあなたがプログラム上の目的でテーブルの文字列フィールドに依存しようとしているならば、ランクに関するテストに例外を意識して追加する必要があることに注意することが重要です。


ロード時にスペルリストをロールオーバーして、その場でランクリストを作成することもできますが、そのテーブルには21,000ものスペルがあることに留意してください。もし、あなたがプレイヤーの呪文だけを心配しているなら、あなた自身のアドオン用のテーブルとして保存されたミニ構築済みリストを作ることができ、それは数百のテーブルだけになるでしょう。また、"Spirit "は "Spirit "ではなく、"Spirit "です。

私は、'GetSpellSubtext'をループして、ローカルクライアントでLuaテーブルを吐き出し、テーブルと組み合わせて小さなDBをロールバックすることで、ログジャムを解消することができると思います。