tarchilar 发表于 2025-12-6 22:03:18

求助,看看这个代码错在哪里,无法导入

-- 暗影牧师全自动攻击脚本(主动寻敌+死亡拾取+持续攻击)
-- ===================== 核心配置(仅改这里)=====================
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()

lbabey 发表于 2025-12-6 23:04:31

用AI 写的这个 没什么用
自己看下用事件写,目标死亡或者击杀的事件则用 一键拾取的 物品
选怪 用宏就行了

落叶无痕 发表于 2025-12-7 00:22:26

AI 会调用一些没有的或者没解锁的 语法,我是给他一个能用的脚本,然后让他改别的职业,说清楚需求,还是能用的

老血 发表于 2025-12-7 12:07:42

好比用机器人去自己修车子 就算他会 你也得安排机器人告诉他引擎盖从哪来打开

xiaoyao1 发表于 2025-12-8 16:01:36

真的好骨感。。。。。。。。

冬哥哥到此一游 发表于 2025-12-8 17:54:16

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]
查看完整版本: 求助,看看这个代码错在哪里,无法导入