我正在尝试编写一个宏,将/use
结合在一个小饰品上,然后调用WoW API并输出一些数据。
/use 14
/run local d=string.format("%.2f",GetDodgeChance()); print("Dodge Trinket used, dodge at:",d);
这工作得很好,除了似乎有一个使用饰品的时间问题,然后从API获得更新的闪避机会。当我点击一次,饰品激活它显示闪避几率没有饰品buff。如果我立即再次点击,它就会显示正确的值,包括buff。
是否有一些时间问题,如第一个/use
命令不触发,直到宏结束?我如何确保GetDodgeChance()
呼叫包括饰品buff?
你的游戏客户端需要发送饰品使用到服务器,并得到确认,你收到buff,改变你的状态。
但是,可以使用C_Timer延迟代码的执行。在
你的例子将变成:
/use 14
/run C_Timer.After( 0.5, function() local d=string.format("%.2f",GetDodgeChance()); print("Dodge Trinket used, dodge at:",d) end)
具有半秒延迟,这应该足够长,以使Dodge函数返回正确的(=预期)值,并显示为"几乎即时"。对人类的感知。
当然你可以调整这个值,试试更短的延迟,如0.1秒也应该足够长,计算是正确的,但这涉及到与服务器通信,它可能正常工作很短的时间价值的99%的延迟,然后有一个随机小滞后尖峰,甚至你注意在游戏,但信息迷和改变了道奇机会达到你的客户几毫秒太晚了。