如何修复某些自定义法术的NPC没有显示施法栏



我目前正在创建一个模块,用于在香草地下城中创建自定义boss战斗。为了在不必编辑其他生物使用的现有法术的情况下实现这一点,我一直在使用Stoneharry法术编辑器来创建老板使用的自定义法术。

我创建的咒语正是我想让它们做的,但大多数不是即时施法的咒语在老板施法时都不会显示施法计时器。

除了伤害之外,这些咒语中的一些还没有被编辑。只是一个像闪电一样的基本咒语的直接副本。我搜索了所有的属性,显示施法计时器的咒语和不显示的咒语没有区别。

是什么决定了带有的咒语是否有可见的施法条,以及如何修复没有的咒语?

除了服务器端DBC文件外,我还创建了一个自定义MPQ文件来修补我的客户端。

我找不到其中一些咒语没有显示施法栏的原因,但我确实找到了一个可以设置为强制显示施法条的标志来解决这个问题。

使用值268435456(十六进制值0x10000000(设置AttributeEx4将强制其显示。我确认这面旗帜适用于之前没有显示施法条的所有咒语。

可能是相关的,也可能是不相关的,但据我所知,3.3.5客户端和blizz自己的UI使用战斗日志中的事件来显示UI框架中的投射条等内容。而且,由于3.3.5客户端存在战斗日志被冻结和卡住的错误,有时这些东西会消失。人们也把这个著名的bug称为其他名字,比如";重新计数错误";,因为它会导致像Recount这样的插件显示错误的伤害值,因为它们停止从战斗日志中接收正确的事件。值得注意的是,尽管这个bug非常奇怪,但它并不总是完全冻结所有东西,而是仍然让一些事件通过,导致伤害计插件中的数字发生了变化,但完全错误。

我在普通暴民和老板身上也遇到了同样的问题,注意到在战斗日志错误发生后,他们中的一些人突然停止显示施放栏和buffs/debuff之类的东西。老板们仍然会制作合适的选角动画和其他东西,但他们不会显示在UI中。这就是为什么我认为;世界;由服务器发送操作码来处理,但UI框架中显示的内容来自战斗日志。

因此,首先确保您使用的是战斗日志清除插件或宏,如以下所示:
https://github.com/anzz1/CLFix
是的,我知道代码每一帧都会运行CombatLogClearEntires((,但从我测试的内容来看,我只是发现了其他很少清除日志的插件,有时还会出现战斗日志错误。只有每帧都运行它,我才不会再有任何战斗日志错误。你看,这个bug的问题是,你必须在发生之前清除日志,之后清除它通常不会有帮助,你需要重新加载整个UI。

其次,你可以通过打印战斗日志事件并比较不同的法术事件来检查你的客户端在战斗日志中看到的情况。这可以通过制作一个框架、注册COMBAT_LOG_EVENT_INFOILTED事件并打印结果来轻松实现。

像这样,只需将代码包装到一个.loa插件中,就可以看到什么:

local f = CreateFrame("Frame", nil, UIParent)
f:SetScript("OnEvent", function(self, event, ...)
-- timestamp, eventType, srcGUID, sourceName, srcFlags, destGUID, destName, destFlags, spellID, spellName, arg1, arg2, arg3, ...
print(...)
end)
f:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")

最新更新