刚才心血来潮在一个不可描述服玩了个猎人,结果新手装有点强力,宝宝根本拉不住,必须误导,然后找了几个魔蜂误导帖子,结果都不尽如意,要么存在潜在的错误,仇恨 >= 某个等级时可能会报错attempt to compare number with nil,要么无视仇恨值CD到了就直接施放误导。所以干脆重新弄一个,试了下,结果还行。
最主要解决方向为了确保仇恨值变量在被使用时总是有一个有效的数值(或者至少是一个明确的nil值),我们需要在获取UnitThreatSituation的返回值后进行检查。如果UnitThreatSituation返回nil,我们应该处理这种情况,以避免后续的比较操作。以下是弄完后的代码,增加了对仇恨变量是否为nil的检查,也解决了道CD就放的问题。
[Lua] 纯文本查看 复制代码 -- 获取团队成员数量
local numMembers = GetNumPartyMembers();
-- 判断是否在组队状态
local inGroup = numMembers > 0;
-- 根据条件选择目标
local targetIndicator;
if numMembers == 0 then
targetIndicator = "[@pet]";
elseif inGroup and UnitExists("focus") then
targetIndicator = "[@focus]";
else
targetIndicator = "[@pet]";
end
-- 获取玩家对目标的威胁情况
local threatLevel = UnitThreatSituation("player", "target");
-- 检查是否满足施放误导的条件 threatLevel >= 0 (0 无仇恨 1轻度绿色 2中等橙色, 3重度红色)
if threatLevel ~= nil and threatLevel >= 0 then
if BeeUnitAffectingCombat() and (UnitExists("pet") or UnitExists("focus")) and BeeUnitMana("player", p) > 9 and BeeSpellCD("误导") == 0 then
local target = (targetIndicator == "[@pet]") and "pet" or "focus";
-- 检查误导技能是否在范围内并且目标可见
if IsSpellInRange(GetSpellInfo("误导"), target) == 1 and UnitIsVisible(target) then
RunMacroText("/cast " .. targetIndicator .. " 误导");
end
end
end
|