首页 > 解决方案 > WoW Lua - 如何在 1.13 (Classic) 中获得法术等级

问题描述

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

/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 的法术等级?

我正在开发的模组(LunarSphere)从法术书中得到了拖累。

我将它与按钮 SetAttribute 一起使用:

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

对于最高等级或

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

对于特定等级

谢谢!

标签: luaworld-of-warcraft

解决方案


它们只是不同的咒语。对于某些我们倾向于将它们视为同一咒语的不同等级的事物来说,这让我们感到尴尬。

作为插件提供的整体服务的一部分,您可能必须创建排名法术的数据库并在您自己的表中进行查找。

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/

以下是当前版本的《魔兽世界》经典版的客户端 SpellName 表示例:

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

这是来自同一魔兽经典版本的法术表:

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 个法术。如果您只担心玩家的咒语,您可以制作一个迷你预建列表存储为您自己的插件的表格,它只会是数百个表格。您可以拥有基本英文名称和排名的最小和最大字段。

我认为循环中的“GetSpellSubtext”在您的本地客户端上吐出一个 Lua 表,结合这些表和滚动一个小型数据库可能会为您打破日志堵塞。


推荐阅读