WoW Lua - 如何在 1.13(经典)中获得法术等级

WoW Lua - How to get the spell rank in 1.13 (Classic)

我正在尝试获取法术的等级,但 GetSpellInfo 没有 return 第二个参数(等级)。如果我 运行:

/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 并在您自己的 table 中进行查找。

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

rank (string) - The rank line from the tooltip of the spell, e.g. "Rank 2". Returns some other classification (like "Summon" for a summoning spell) or an empty string if there is no rank.

所以 "rank" 只是为了在 UI 中显示额外的一行,如果他们想为该咒语添加一行的话。

就像 UI API 中的许多东西一样,它们只是为了支持 UI 并且主要是实用的,只是展示或做 WoW 所必需的 UI功能。

local subTextOrRank = GetSpellSubtext(spellId)

这会获取排名的显示行,较新的引擎可能 return 没有拼写信息。 'GetSpellSubtext' 可能会也可能不会 return 等级文本,如果法术缓存在客户端或没有,或者你最终每次都能看到它有效。

我过去曾使用此拼写列表作为快速参考:

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

为了回答有关客户静态可用数据的许多问题:

https://wow.tools/dbc/

这是来自当前版本的 WoW Classic 的客户端 SpellName table 的示例:

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

这是来自同一 WoW Classic 版本的法术 table:

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 显示所需的内容进行了 table,而且并不比这更复杂或更深入。

如果您仔细阅读列表,可以看到或想象它基本上是手工完成的,因此可能会有错误,或者可能有有助于排名描述字段但破坏一致性的文本。重要的是要注意,如果您要依赖 table 字符串字段进行编程,您需要注意并在排名测试中添加例外情况。


您可以尝试在加载时滚动法术列表并动态构建排名列表,但请注意其中有 21,000 个法术 table。如果你只担心玩家的咒语,你可以为你自己的插件制作一个迷你的预建列表,作为 table 存储,它只会是数百个 table。您可以使用基本英文名称以及排名的最小和最大字段。

我认为 'GetSpellSubtext' 在一个循环中在您的本地客户端上吐出一个 Lua table,结合 table 并滚动一个小的 DB 可能为你打破僵局。