WoW Lua - 如何在1.13版(Classic)中获取法术等级

我正在尝试获取一个法术的等级,但是GetSpellInfo不返回第二个参数(等级)。 如果我运行:

/dump GetSpellInfo( 5782 )

我得到

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

每种法术和等级的组合似乎都有一个唯一的ID:

5185 = 治疗之触 (等级1)
5186 = 治疗之触 (等级2)
5187 = 治疗之触 (等级3)
5188 = 治疗之触 (等级4)
5189 = 治疗之触 (等级5)
6778 = 治疗之触 (等级6)
8903 = 治疗之触 (等级7)
9758 = 治疗之触 (等级8)

如何根据ID获取法术等级?

我正在开发的模组(LunarSphere)从法术书中获取一个拖动操作。

我用一个按钮的SetAttribute功能:

self:SetAttribute("*spell-S01", "治疗之触")

获取最高等级或

self:SetAttribute("*spell-S01", "治疗之触(等级3)")

获取特定等级

谢谢!

点赞
用户714557
用户714557

它们只是不同的咒语。在某些情况下,我们倾向于将它们看作是同一咒语的不同等级,这使得某些事情变得尴尬。

作为您的插件的整体服务的一部分,您可能需要制作排名法术的数据库,并在自己的表中进行查找。

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

rank(字符串)-来自法术工具提示的等级线,例如“Rank 2”。返回一些其他分类(例如召唤法术的“召唤”)或空字符串(如果没有等级)。

因此,“等级”仅用于在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,,瞬间杀死目标。我希望你感到自豪……
7
10,等级1,在目标区域投掷冰碎片$ o1冰霜伤害$ d。
11

在这里,您可以看到它们实际上制作了一个表格,显示UI所需的内容,它没有更复杂或深入。如果您计划从程序角度依赖表字符串字段,则需要注意和添加排除因等级而导致文本错误的一致性破坏。


您可以尝试在加载时通过法术列表并构建一个排名列表来进行滚动,但要注意该表中有21,000个法术。如果您只担心玩家法术,那么您可以为自己的插件制作一个存储为表的小型预构建列表,而且它只有数百个表项。您可以拥有基本英文名称以及等级的最小和最大字段。

我认为“GetSpellSubtext”在循环中将Luatable输出到本地客户端,结合表格和滚动小型DB,可能会为您打破木桩。

2019-12-30 18:32:50