求助,看看这个代码错在哪里,无法导入
-- 暗影牧师全自动攻击脚本(主动寻敌+死亡拾取+持续攻击)-- ===================== 核心配置(仅改这里)=====================
local MAIN_SKILL = "噬灵疫病" -- 主攻技能(必须和游戏内完全一致)
local LOOT_ITEM_NAME = "一键拾取" -- 拾取物品名称(背包复制)
local LOOT_ITEM_ID = 60003 -- 拾取物品ID
local SCAN_RANGE = 30 -- 主动寻敌范围(码)
local SCAN_INTERVAL = 1 -- 主动寻敌间隔(秒)
-- ===================== 全局变量(无需修改)=====================
local lastScanTime = 0 -- 上次主动寻敌时间
-- ===================== 核心工具函数 =====================
-- 1. 目标死亡检测
local function IsTargetDead()
return UnitExists("target") and UnitIsDeadOrGhost("target")
end
-- 2. 死亡自动拾取(简化版)
local function LootDeadTarget()
if IsTargetDead() then
BeeRun("/cleartarget")
BeeRun("/targetenemy ") -- 选中最近尸体
if UnitExists("target") and UnitIsDeadOrGhost("target") then
-- 强制拾取(跳过背包校验,直接用)
BeeRun("/use " .. LOOT_ITEM_NAME)
BeeRun("/use item:" .. LOOT_ITEM_ID)
BeeRun("/cleartarget")
end
lastScanTime = 0 -- 拾取后立即触发寻敌
return true
end
return false
end
-- 3. 主动360°寻敌(核心:无目标时主动找)
local function ActiveFindEnemy()
local currentTime = GetTime()
-- 控制寻敌频率,避免刷屏
if currentTime - lastScanTime < SCAN_INTERVAL then
return false
end
lastScanTime = currentTime
-- 步骤1:先转向身后,覆盖360°
BeeRun("/run SetFacing(180)")
BeeRun("/run C_Timer.After(0.1, function() end)")
-- 步骤2:遍历附近所有目标(优先攻击范围内)
for i = 1, 40 do -- 扩大遍历数量,确保覆盖
local unitID = "target" .. i
if UnitExists(unitID)
and UnitIsEnemy("player", unitID)
and not UnitIsDeadOrGhost(unitID)
and CheckInteractDistance(unitID, 4) -- 攻击距离内
then
BeeRun("/target " .. unitID)
BeeRun("/face target")
return true
end
end
-- 步骤3:兜底:找最近的敌对目标(全局)
BeeRun("/cleartarget")
BeeRun("/targetenemy ") -- 强制找活的敌对目标
if UnitExists("target") and not UnitIsDeadOrGhost("target") then
BeeRun("/face target")
return true
end
return false
end
-- 4. 强制攻击(无拦截,保证释放)
local function ForceAttack()
-- 无目标时先主动寻敌
if not UnitExists("target") or UnitIsDeadOrGhost("target") then
ActiveFindEnemy()
return
end
-- 1. 维持暗影形态
local buffs = BeeUnitBuffList("player")
if not BeeStringFind(buffs, "暗影形态", 1) then
BeeRun("/cast 暗影形态")
end
-- 2. 强制面向目标(关键:避免脱战/放不出技能)
BeeRun("/face target")
-- 3. 启用平砍兜底
BeeAttack(0)
BeeRun("/run SetCVar(\"autoAttack\", 1)")
-- 4. 暴力释放主攻技能(服务器自动处理CD)
BeeRun("/cast " .. MAIN_SKILL)
end
-- ===================== 核心逻辑(主动攻击+拾取)=====================
local function AutoFight()
-- 优先级1:目标死亡→拾取
if LootDeadTarget() then
return
end
-- 优先级2:无论是否有目标,强制攻击/寻敌(核心:主动攻击)
ForceAttack()
end
-- 启动脚本(魔蜂高频执行,主动寻敌+持续攻击)
AutoFight()
用AI 写的这个 没什么用
自己看下用事件写,目标死亡或者击杀的事件则用 一键拾取的 物品
选怪 用宏就行了 AI 会调用一些没有的或者没解锁的 语法,我是给他一个能用的脚本,然后让他改别的职业,说清楚需求,还是能用的 好比用机器人去自己修车子 就算他会 你也得安排机器人告诉他引擎盖从哪来打开 真的好骨感。。。。。。。。 SetFacing(180) 不存在
WoW API 里没有 SetFacing(),只有 SetFacing(GetAngles()) 而且需要 Unit* 系列,
想“原地转 180°”只能用下面这种硬件点击方案:
lua
复制
-- 用鼠标右键瞬间转 180°(相对当前朝向)
local angle = GetPlayerFacing() + math.pi -- +π = 180°
FaceDirection(angle, true) -- 第二个参数 true = 立即转,无渐变
C_Timer.After(0.1, function() end) 写在 /run 里会语法错误
/run 后面只能跟单行 Lua,不能出现未闭合的 function() end;
而且魔蜂的 BeeRun 本质就是 SendChatMessage,走 /run 长度限制 255,
真要用定时器就在 Lua 文件里写,别塞进 BeeRun。
UnitExists(unitID) 的 unitID 只能是系统内置字符串
target1..target40 这种写法客户端不认,会永远返回 nil。
想枚举附近敌人只能:
用 nameplate1..nameplate40(姓名板,需要玩家把血条打开)
或者 mouseover + /targetenemy 循环,
最稳的办法就是反复 /targetenemy 三次,每次 GetPlayerFacing()+2π/3 转 120°,
把 360° 扫一圈即可。
页:
[1]