LUACN论坛

 找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
热搜: YJWOW MagicStone BoL
查看: 34909|回复: 99

[原创]自定义接口2026年10月03日重大更新!

  [复制链接]
 楼主| 发表于 2026-9-11 21:27:50 | 显示全部楼层 |阅读模式
本帖最后由 chenzhouch2 于 2026-10-3 03:47 PM 编辑

CZ 系列 Lua 函数手册
适用于 Wow 3.3.5(12340)客户端 · 共 67 个 Lua 函数






统一 CZ 前缀、无下划线。DLL 放游戏根目录被动加载,进入游戏后自动注册,所有函数全局可调。

DLL 自带一个控制台窗口(见「十二、内嵌控制台界面」):进游戏自动出现、/reload 后自动重建,不需要任何额外文件。
2026年10月3号更新内容:
函数 59 → 67 个。★ 新增「自动寻路」:跑的是真实可行走路径,屏幕上有路径线,卡住会自己绕出来。
新增「自动钓鱼」「天气」两行界面开关;界面设置改成按角色记住,换号、重启、/reload 都不用重勾。
修了一大批地形卡墙问题,骑坐骑 / 飞行时寻路不再一顿一顿。
后续我准备更新几个用我写的自定义接口来适配的插件。

上次发布(9月17号)之后的改动:
9-18 新增「天气」;修正转身 / 朝向偏 90° 的问题
9-19 新增 CZtype(查单位类型);CZInfo 能认可采集物;新增「自动钓鱼」(可填鱼漂名);施法接口完善
9-20 ~ 9-22 ★ 新增自动寻路:路径线绘制、卡住自救(跳 → 扇形侧移 → 后退);连续修卡锐角墙 / 卡凹槽 / 走出凹槽又被拉回 / 拐角拐不出来 / 墙的碰撞体比看着高
9-23 CZMon / CZAoe 排除小动物;CZLookat 改为走游戏自带的转身(服务器能看到、不打断读条)
9-24 界面设置按角色记住;寻路接口精简为 4 个;修若干界面问题
9-25 寻路推进改为按移动速度自适应(跑 / 骑 100% / 骑 280% / 飞 310% 都不再停顿)
10-3 修「个别情况下进游戏完全没有界面」;重新打包






通用约定

1. GUID / token 双收
所有收“GUID 串”参数的函数(枚举类除外,它们收的是范围数字),同时接受单位 token:
  1. CZHp("target")                -- token 写法
  2. CZHp(UnitGUID("target"))      -- GUID 串写法,两者等价
复制代码

判别规则:参数含 0x 前缀或全为十六进制字符 → 按 GUID 解析;否则按 token 解析。所有 token(player、target、focus、mouseover、party1、raid12 等)都含非十六进制字符,不会误判。解析失败一律按“对象不存在”处理。

2. GUID 格式
入参十六进制串,带 0x 前缀、裸十六进制、大小写均可,例如 0x0300000002A4BC12。所有枚举函数返回值与客户端 UnitGUID 格式完全一致(0x + 16 位大写十六进制),可直接回传。

3. 编码
对象名(CZName 返回值、CZFish 入参等)为 UTF-8 字节串,游戏内中文参数直接写即可。

4. 参数省略
GUID 参数不填时各函数有自己的默认值(多为当前目标),个别必填 / 返回 nil 的在函数说明中单独标注。




一、坐标与移动

CZGetPos 获取单位坐标与朝向
参数:unit:string,可选,单位 token 或 GUID 串(规则同上)
返回值:x, y, z, r, mapID 共 5 个值;无参数或取不到对象时无返回值
  1. local x, y, z, r, map = CZGetPos("player")
  2. local tx, ty, tz = CZGetPos(UnitGUID("target"))
复制代码


CZMoveTo 命令角色跑向指定坐标(会被服务器校验路径)
参数:x, y, z(float,目的地坐标) 返回值:无
  1. CZMoveTo(1234.5, 567.8, 91.2)
复制代码


CZGoTo 瞬移到指定坐标(不走移动指令)
参数:x, y, z(float,目的地坐标) 返回值:无

CZRGoTo 瞬移到指定坐标并设朝向
参数:x, y, z:float,目的地坐标;r:float,朝向角(前方向量 (cos r, sin r),与客户端原生转向差 90°)
返回值:无

CZLookat 原地转身面朝指定点 / 对象
参数(二选一):x, y:float,目标点坐标(两参调用);unit:string,token 或 GUID 串(单参调用),转向该对象所在点
返回值:无
说明:转身走的是游戏自己的转身路径(和鼠标右键转身同一条)—— 服务器能看到、不会打断读条。角度约定和 CZGetPos 返回的 r 一致,前方向量为 (cos r, sin r)。
  1. CZLookat("target")                    -- 一步面朝当前目标
  2. CZLookat(UnitGUID("target"))
  3. local x, y = CZGetPos("target"); CZLookat(x, y)
复制代码


CZClickGo 瞬移到鼠标最后一次点击的目的地
参数:无 返回值:无

CZJump 跳跃
参数:无 返回值:无




二、目标枚举
枚举类函数收范围数字(int,码数),返回 GUID 串表(UnitGUID 同款格式)。

CZMon 范围内所有可攻击单位(怪物、敌对玩家)的 GUID,小动物不计入(兔子 / 羊 / 蟑螂这类打了没收益的)
参数:Range,不填默认 30,负数取 30
返回值:table { ["1"]="0x…", ["2"]="0x…", … };范围内没有时返回 nil
  1. local t = CZMon(35)
  2. if t then for k, v in pairs(t) do print(v, CZName(v)) end end
复制代码


CZAoe 以一个可攻击目标为圆心,统计它周围范围内其他可攻击单位的数量(不含圆心自身,不含小动物)
参数(注意顺序:距离在前):Range:int,第一位,不填默认 30,负数取 30;GUID:string,第二位,可选,圆心目标(token / GUID 串均可),不填默认当前目标
返回值:int,范围内其他可攻击单位数量
  1. local n = CZAoe(10)                   -- 当前目标 10 码内还有几个可攻击
  2. local n2 = CZAoe(15, "focus")         -- 指定 focus 为圆心
  3. local n3 = CZAoe(30, "player")        -- 以自己为圆心数周围可攻击数
复制代码


CZNpc 范围内所有不可攻击单位(友方 NPC、队友等)的 GUID
参数:Range,不填默认 30,<=0 取 30
返回值:table,同 CZMon 格式;没有时返回 nil

CZTotem 范围内属于自己的单位(宠物、图腾等)
参数:无 返回值:table,GUID 数组;没有时返回空表

CZGather 当前地图所有可采集物(矿、草、宝箱等)的 GUID
参数:无 返回值:table,GUID 数组(无距离过滤,配合 CZDist 自行筛选)




三、单位信息

CZInfo 一个对象的完整信息打包表
参数:GUID:string,token / GUID 串均可;不填返回 nil(不默认目标)
返回值:table,对象不存在时返回 nil
字段类型含义
namestring对象名(UTF-8)
hostileint1=对玩家敌对(可攻击)
deadint1=已死亡(血量≤0 或带死亡标志)
combatint1=战斗中
lootableint1=可拾取状态
hp / maxhpint当前 / 最大生命值
distfloat与玩家直线距离(码)

  1. local info = CZInfo("target")
  2. if info and info.hostile == 1 and info.dead == 0 then AttackTarget() end
复制代码

表里的字段是单位的(血量、战斗、拾取等);物件(宝箱 / 矿脉等)上这些字段没有意义,只取 name、dist 和 CZtype 即可。

CZtype 对象的类型名。单位返回生物类型(野兽 / 亡灵 / 机械 / 小动物 / 人型 / 龙类…),物件(可采集物等)返回物件类型(采集物 / 鱼群 / 门 / 集合石…)
参数:GUID,token / GUID 串均可;不填返回 nil(不默认目标)
返回值:string,类型名;参数取不到对象时返回 nil,对象没有类型(如玩家角色)时返回空串
  1. -- 站在矿槽旁列出附近的采集物:名字 + 类型
  2. local g = CZGather()
  3. for i = 1, #g do
  4.   print(CZName(g[i]), CZtype(g[i]))       -- 例: 铜矿脉   采集物
  5. end
复制代码

单位类型名(客户端本地化名字,和游戏里显示的完全一致):野兽 龙类 恶魔 元素 巨人 亡灵 人型 小动物 机械 未指定 图腾 非战斗宠物 气体云
物件类型名(共 36 项,与客户端顺序一致):
值名字值名字值名字
0门12区域伤害24战场旗杆
1按钮13镜头25鱼群
2任务给予者14静态地图物件26旗帜掉落点
3采集物15移动运输工具27小游戏
4灵魂绑定者16决斗仲裁者28彩票亭
5通用装饰17钓鱼浮标节点29占领点
6陷阱18召唤仪式台30光环生成器
7椅子19邮箱31副本难度切换器
8法术焦点20拍卖行32理发椅
9铭文21守卫岗哨33可摧毁建筑
10万能可交互物22传送门34公会银行
11固定运输工具23集合石35活板门

矿脉 / 草药 / 宝箱 / 渔点容器这类可拾取物件大多都归在采集物(具体是哪种看名字或拾取内容);鱼群是渔点,钓鱼浮标节点是鱼漂。

CZHp / CZMaxHp 目标当前 / 最大血量
参数:GUID,token / GUID 串均可 返回值:int

CZName 目标名字
参数:GUID,token / GUID 串均可 返回值:string(UTF-8)

CZCombat 目标是否在战斗中
参数:GUID,token / GUID 串均可,不填默认当前目标
返回值:int,1 = 战斗中,0 = 未在战斗

CZLooting 目标是否正在拾取中
参数:GUID,token / GUID 串均可 返回值:int,1 = 拾取中




四、距离与视线

CZDist 两对象间直线距离(码)
参数:GUID1:string,token / GUID 串均可,不填默认自己;GUID2:string,token / GUID 串均可,不填默认当前目标
  1. CZDist("player", "target")           -- 自己到目标
  2. CZDist("focus")                      -- 自己到 focus
复制代码


CZLos 目标是否在玩家视线内(自动按视高判定)。治疗用来判断队友是否卡视野
参数:GUID,token / GUID 串均可,不填默认当前目标
返回值:int,1 = 视线可达,0 = 被挡

CZLosHit 两点间视线检测,被挡时返回障碍物碰撞点。也常用来做垂直射线找脚下落点
参数:x1, y1, z1 → x2, y2, z2:起终点坐标(两点原样连线,不自动加视高;“人眼到人眼”自行 +1.3);flags:int,可选,一般不用填
返回值:los, hx, hy, hz, mask 共 5 个值
- los=1 可达(h* 为 0)
- los=0 被挡(h* = 碰撞点坐标,mask = 命中掩码)
  1. -- 垂直找脚下落点并瞬移(大跨度纵向贯穿,命中即落)
  2. local x, y, z = CZGetPos("player")
  3. local los, hx, hy, hz = CZLosHit(x + 3, y, z - 10000, x + 3, y, z + 10000)
  4. if los == 0 then CZGoTo(hx, hy, hz) end
复制代码





五、施法、光环与面向

CZCast 释放技能(需等 GCD 转完,比宏稍慢)
参数:SpellID:int,技能 ID;GUID:string,token / GUID 串均可,不填默认当前目标
返回值:int,1 = 已提交,0 = 失败,-1 = 参数无效

CZBuff 刷新目标光环缓存(后续 CZBuff* 系列都读这份缓存),每帧调用一次即可
参数:GUID,token / GUID 串均可,不填默认当前目标
返回值:int,1 = 目标身上有光环,0 = 无

CZBuffTime / CZBuffCnt 目标身上指定技能 ID 光环的剩余时间 / 层数(任意施放者)
参数:SpellID:int,技能 ID;GUID:string,token / GUID 串均可,不填默认当前目标
返回值:剩余秒数(无时限 0,不存在 -1)/ 层数(不存在 -1)

CZBuffTimeTo / CZBuffCntTo 目标身上由指定施放者施加的光环剩余时间 / 层数
参数:SpellID:int;GUID:string,目标,token / GUID 串均可;CasterGUID:string,施放者,token / GUID 串均可,不填默认自己
  1. CZBuff("target")
  2. local t = CZBuffTimeTo(47813, "target", "player")   -- 自己上的破甲还剩几秒
复制代码


CZFacing 玩家是否面向目标(0.95 弧度锥)。唯一的“面向判断”
参数:GUID,token / GUID 串均可,不填默认当前目标
返回值:int,1 = 已面向,0 = 未面向
  1. if CZFacing() == 0 then CZLookat("target") end
复制代码


CZBehind 自己是否在目标身后(目标 1.6 弧度正面锥之外)
参数:GUID,token / GUID 串均可,不填默认当前目标
返回值:int,1 = 在身后,0 = 不在

CZCastAt 对目标释放当前等待落点的法术(配合 SpellIsTargeting())
参数:GUID,token / GUID 串均可,不填默认当前目标 返回值:无
  1. if SpellIsTargeting() then CZCastAt() else BeeRun("/cast !枯萎凋零") end
复制代码





六、交互与选中

CZInteract 与对象交互(对话、开箱、采集、摸尸体等)
参数:GUID,token / GUID 串均可 返回值:int,1 = 已交互,0 = 参数无效或对象不存在

CZSelect 选中目标(采集物等无法选中的对象静默失败)
参数:GUID,token / GUID 串均可 返回值:int,1 = 调用已发出,0 = 参数无效
直接调用即可,不需要再用 CZC 包:
  1. CZSelect(UnitGUID("target"))
复制代码

返回 1 只代表调用已发出,采集物这类点不中的对象是静默失败,以游戏里的选中框为准。

CZLoot 拾取范围内可拾取的尸体,调用一次执行一次
参数:Range,不填默认 6(6 码是服务器拾取判定上限,再大服务器不认) 返回值:无

CZClick 模拟点击地形(移动需开启【界面】-【鼠标】-【点击移动】)
参数:x, y, z:float,地形坐标;type:int,1 左键(可在 AOE 施法等待时落地)/ 4 右键移动(默认)
返回值:无

CZClickObj 模拟点击指定对象(点击请求里带对象,服务端按对象处理,与按坐标点地形的 CZClick 语义不同)
参数:GUID:string,必填,token / GUID 串均可;type:int,1 左键(默认)/ 4 右键
返回值:无

CZFish 钓鱼收杆。扫描物件,指定名字的物件处于“上钩”状态时交互
参数:name,string,可选,物件名(UTF-8),不填默认 "鱼漂"
返回值:int,1 = 已交互,0 = 没找到上钩物件
  1. CZFish()            -- 默认鱼漂
  2. CZFish("鱼票")      -- 按名字匹配
复制代码

使用方法
  1. if BeeUnitCastSpellName("Player")=="钓鱼" then
  2.    CZFish()
  3. else
  4.     BeeRun("钓鱼")
  5.     BeeUnitCastSpellDelay("钓鱼",1.5);
  6. end
复制代码





七、定时任务与脚本包裹

CZPost 提交一次性定时任务,到时运行指定宏,运行后自动销毁
参数:time:int,毫秒;macro:string,要运行的宏代码,多行用 \n 连接
  1. CZPost(61*1000, "/use 10")
  2. CZPost(61*1000, "/cast 死亡之愿
  3. /use 10")
复制代码


CZClear 取消所有定时任务
参数:无 返回值:无

CZC 包裹执行客户端限制的 API,不弹提示和警告;第二参传全局变量名可取回脚本执行后的变量值
参数:script:string,要执行的脚本;varname:string,可选,执行后返回该全局变量的字符串值
  1. CZC("CastSpellByName('攻击')")
  2. local name = CZC("name = UnitName('player')", "name")
复制代码





八、状态存取
跨脚本调用持久,DLL 重载后复位。CZSave / CZLoad 与 CZSaveG / CZLoadG 是相互独立的两套槽位。

CZSave / CZLoad 保存 / 读取一个 int 值

CZSaveG / CZLoadG 另一组独立的 int 槽位,常用于存时间戳做节流
  1. if time() - CZLoadG() >= 30 then
  2.     DoSomething()
  3.     CZSaveG(time())
  4. end
复制代码





九、窗口

CZFlash 游戏窗口不在前台时闪烁任务栏图标提醒
参数:无 返回值:无




十、开关类功能
以下功能用 on 参数开关,进游戏即生效,不用重载。

参数:on(非 0 = 开,0 = 关;不给参数按关处理)
返回值:number,1 = 切换成功,0 = 没切成(客户端版本不符,或这个功能已被别的工具改过)
说明:切换失败时不会出任何问题,只是没生效。开与关可以随时来回切。

函数功能
CZWaterWalk(on)水上行走
CZWallClimb(on)爬墙
CZPassWall(on)穿墙
CZNoM2(on)穿物体
CZNoM2Fx(on)穿装饰
CZAirJump(on)空中跳跃
CZNoFall(on)无坠落伤害
CZAntiAFK(on)防止 AFK
CZShowLevel(on)显示等级
CZTameInfo(on)显示驯服信息


关于「穿墙 / 穿物体 / 穿装饰」这三个:它们管的是一套东西 —— 穿墙管建筑、地形主体,穿物体管树、箱子、栅栏这类常规模型,穿装饰管带粒子发光的装饰物。打开之后画面里不会有任何东西消失,只是原本过不去的地方能穿过去了。

  1. CZWaterWalk(1)   -- 开
  2. CZWaterWalk(0)   -- 关
  3. print(CZAntiAFK(1))   -- 1
  4. print(CZPassWall(1))  -- 1(穿墙)
  5. CZNoM2(1)        -- 穿物体
  6. CZNoM2Fx(1)      -- 穿装饰
复制代码


CZPlane 传送至位面 —— 只把出站坐标的 Z(服务器 / 别人看到的那个 Z)加上一个固定偏移,X/Y 仍是你的真实位置。效果是「你自己屏幕上看正常站在地面,别人和服务器看到你整体上浮或下沉了偏移量」,可用来躲指向性技能、防被拉。
参数:on(1 开 / 0 关)、dz(偏移量,正数上浮、负数下沉;关时按 0 处理)
返回值:number,当前生效的偏移量
  1. CZPlane(1, -20)      -- 开:别人看到的 Z = 真实 Z - 20
  2. CZPlane(1, 50)       -- 改成上浮 50
  3. CZPlane(0)           -- 关,恢复原样
复制代码

说明
- 偏移是恒定差值,不是固定坐标:站 z=10 填 -20,对方看到 -10;站 z=15,对方看到 -5。
- 服务端对 Z 可能有校验,先用小偏移(±20 量级)试。
- 开着的时候改 dz 立即生效,不用重编也不用退出游戏。
- CZPlane(0) 只是把偏移归零,不会关掉这个功能本身(下次调仍按新值生效)。
- 控制台窗口里有这一行(最后一行「传送至位面」):点行开 / 关,行尾显示当前偏移,右边的 - / + 每次调 5(默认 -20);开着的时候调数值立即生效。因为记录状态在 Lua,/reload 后回到默认值。




十一、其它开关与状态功能
以下功能用法与上一节相同,CZFollow 见单独说明。

CZFollow 跟随指定单位,不限队友关系(原版只能跟随队友)
参数:unit —— 单位 token("target" / "mouseover" / "raid1" …)或十六进制 GUID 串,规则与 CZGetPos / CZLookat 完全一致
返回值:number,1 = 跟随已生效,0 = 被客户端内部拒绝(状态不满足,静默失败),-1 = 参数不是有效单位或拿不到自己
  1. print(CZFollow("target"))       -- 跟随当前目标(1 = 生效)
  2. CZFollow("0xF1300080A1B2C3D4")  -- 跟随指定 GUID
  3. CZFollow("player")              -- 自己跟随自己,客户端会拒绝(返回 0)
复制代码

说明
- 跟随是客户端移动指令:目标在你身边时看不出效果,先走开一段距离再调用,看角色是否自己走回去。
- 一旦用成功过,“跟随任何人”这个限制就一直是解开的,不用每次重新解。

CZFly 切换玩家的飞行 / 正常状态。菜单里的「防止坠落」就是靠它:瞬间切到飞行、0.1 秒后切回正常,正在下坠的状态会被清掉,持续坠落就被打断。
参数:on(非 0 = 飞行,0 = 正常)
返回值:number,1 = 已切换,0 = 拿不到玩家(还没进入世界)
  1. CZFly(1)   -- 切到飞行状态
  2. CZFly(0)   -- 切回正常
复制代码

说明
- 单独调它只是改状态,不给你真正的飞行能力;本工程目前只把它当防坠落的手段用。

CZWeather 强制天气 —— 手动指定晴 / 雨 / 雪 / 沙暴。不传参数就是只读,返回当前天气。
参数:type(可省略;0 晴 / 1 雨 / 2 雪 / 3 沙暴)、intensity(可省略,强度,默认 1 = 最大)
返回值:number,调用之后读到的当前天气 0~3;还没进入世界、天气管理器没建立时返回 -1
  1. CZWeather(1)         -- 下雨
  2. CZWeather(2, 0.5)    -- 下雪,强度一半
  3. print(CZWeather())   -- 只读:现在是什么天气
复制代码

说明
- 3.3.5 客户端没把天气开放给 Lua,这里是直接写客户端自己的天气管理器,所以表现和服务端下发的天气一致。
- 强度会被客户端夹到 0 ~ 1,传大于 1 的值和传 1 等价。
- 只管这一次:客户端自己的天气演算照旧,过一会儿天气可能又自己变回去。要一直保持就在需要时反复调。
- 控制台窗口里有这一行(「天气」):行尾 - / + 在晴 / 雨 / 雪 / 沙暴之间循环,开着的时候切换立即生效;取消勾选只是不再干预,天气交回游戏自己演算。

通用注意
- 仅适用于 3.3.5(12340)客户端。
- 与其它同类工具(如 Gagarin)同时使用时,同一个功能不要两边都开,否则可能崩游戏。同一时间只用一个。




十二、内嵌控制台界面

游戏里自带一个控制台窗口,进游戏自动出现,/reload 之后会自动重建,不需要任何额外文件。


最后六行
- 自动拾取:每 0.5 秒自动拾取一次身边 6 码内的尸体
- 自动钓鱼:全自动钓鱼。没在钓就抛竿,抛出去之后等上钩,上钩自动收杆,收完接着下一杆;中途被打断(移动 / 进战斗)会自己重抛。行尾有一个按钮写着鱼漂的物件名(默认「鱼漂」)—— 不同客户端叫法不一样时点它改,改完会被记住
- 防止坠落:检测到持续下坠时自动打断
- 传送至位面:CZPlane 的入口。这行除了开关,行尾还显示当前偏移,右边的 - / + 每次调 5(默认 -20,往上步进为 -15,即上浮方向);开着的时候点 - / + 立即生效
- 天气:手动指定天气(晴 / 雨 / 雪 / 沙暴)。行尾 - / + 循环切换,开着的时候切换立即生效;关掉之后不再干预,天气交回游戏自己演算
- 停止自动寻路:不是开关,是一颗急停按钮。点一下 = CZNavStop():掐掉当前这一段寻路 + 让角色站住,不记状态 —— 下次插件再发目标照常又开始走。行尾显示当前状态(空闲 / 行走中 / 已到达 / 算不出 / 卡住 / 不可用),每 0.5 秒刷一次。路径线跟着寻路走,行走中行尾会提示画线状态:无路径线 = 这台机器拿不到 D3D 设备(寻路不受影响)
前四行在面板隐藏或收起之后照常工作。

设置按角色记住:整套设置按角色存一份,进游戏建好窗口后自动读回来 —— 不用每次启动重勾一遍。包含 10 个字节补丁开关、自动拾取 / 自动钓鱼 / 防止坠落、传送至位面的开关与偏移、天气的开关与类型、鱼漂物件名、面板位置。点任意一行、按 - / +、改鱼漂名、拖完面板,都会立刻落盘,不需要手动保存。换角色各记各的;新角色从全关开始,不会悄悄替你打开什么。想全部关掉重来:/czreset。

文件放在 <游戏根目录>\CZUI\ 下,一个角色一个 .cfg,纯文本 —— 备份 / 改默认值 / 拷给别人都可以。游戏目录不可写时保存会失败,聊天框里提示一次。

右上角那个控件是「收起」,不是「关闭」:展开时它是右上角一条 10px 的横线,点一下面板缩成 20×20 的小方框(只剩底色 + 四边线 + 正中间一个 CZ 字样);再点这个小方框还原成完整菜单,并重新刷新每个勾。拖动要从标题那条空白区按左键(行本身是按钮,会吃掉点击);面板收起成小方块时点它是“还原”而不是拖动。

出问题看 CZERR:界面没建出来时,游戏里 print(CZERR) 会给出原因,正常情况下 CZERR 是 nil。

CZUI 显示控制台窗口;窗口不存在就新建(重复调用只是重新显示出来)
参数:无 返回值:无
  1. CZUI()   -- 被收起或 /cz 隐藏之后重新打开
  2. /cz      -- 斜杠命令:显示 / 隐藏 切换
复制代码


CZState 查某个功能开关当前是开是关
参数:number idx,与下表序号一致
返回值:number,1 = 已开启,0 = 已关闭,-1 = 读不到确定状态(客户端版本不符,或这个功能被别的工具改过)
idx功能idx功能
0水上行走6显示驯服信息
1爬墙7跟随任何人
2空中跳跃8穿墙
3无坠落伤害9穿物体
4防止 AFK10穿装饰
5显示等级

  1. print(CZState(0))   -- 水上行走现在是开是关
复制代码

说明
- 读的是实际生效状态,所以 /reload 之后界面显示的和实际生效的必然一致,不会出现「界面说关着、其实还开着」。
- 界面上的勾每次点击后也会回读一次:万一切换失败(版本不符等),勾选状态会自动弹回原样。

CZSaveCfg 把一段文本按 key 写进游戏目录。界面就是靠它把设置按角色存下来的,也可以拿它存自己插件的设置
参数:key(字符串,当文件名用)、text(字符串,原样覆盖写入)
返回值:number,1 = 写成功,0 = 没写成功(游戏目录不可写、key 非法等)
说明:文件落在 <游戏根目录>\CZUI\<key>.cfg,CZUI 目录不存在会自动创建。key 里的非法文件名字符会被换成 _,所以中文也能当 key;但两个不同的名字可能被换成一模一样的文件名而互相覆盖,要稳就自己先编成 ASCII 再传(界面用的是十六进制)。内容 DLL 不看、不校验,格式随你。
  1. CZSaveCfg("myset", "a=1|b=2")
复制代码


CZLoadCfg 把 CZSaveCfg 写的那段文本读回来
参数:key(字符串) 返回值:string = 文件内容;nil = 文件不存在或读不出来
  1. local s = CZLoadCfg("myset")
  2. if s then print(s) end
复制代码





十三、自动寻路
沿导航网自动跑图。跑的是真实可行走路径,不是直线硬冲。

导航数据下载:mmaps(各张地图的导航数据)
链接:https://pan.baidu.com/s/1KayBjn4Ws13UFixZW1zS3A 提取码:6666
完整解压到游戏根目录的 mmaps 里面。如果没有mmaps目录,就自己手动创建一个。

对外只有 4 个函数:CZNavGo(开始)/ CZNavTick(状态机驱动)/ CZNavState(状态查询)/ CZNavStop(停止)。

默认就能用:不需要先在界面上打开什么。想中途停下,点控制台那一行「停止自动寻路」(= CZNavStop())。

最重要的约定:发起寻路后,必须每帧调一次 CZNavTick(),否则不会走。
  1. local drv = CreateFrame("Frame"); drv:Hide()
  2. drv:SetScript("OnUpdate", function()
  3.     if CZNavTick() ~= 1 then ... end   -- 0空闲 1移动中 2到达 3算不出 4卡住 5环境不可用
  4. end)
复制代码


路径线
路径线是寻路的附属显示,没有单独开关:DLL 在第一次真的要走路时才去挂渲染钩子,把正在走的那条路径在世界里画成一条折线(跟着地形起伏,从角色脚下一直连到终点),终点一个绿十字。
- 线是连续的一条:相邻两个路点之间都有线段相连。末点不等于终点,说明这一轮只算到中途。
- 钩子装不上(这台机器拿不到 D3D 设备)时寻路照走,只是没有线。这时 CZNavState() 的第 8 个返回值是 0,控制台「停止自动寻路」行尾会多出「无路径线」。
- 全程只读客户端,不改任何东西;算得不准只影响画出来的线,不影响寻路本身。

CZNavGo 开始沿导航网跑向指定坐标。起终点都会自动吸附到最近的可走点(终点常落在山里,会被吸到最近能站的地方)
参数:x, y, z(float,目的地坐标);mapId(number,可省略,默认当前地图)
返回值:number
返回含义建议处理
1已开始移动之后每帧调 CZNavTick()
0环境不可用(没 DLL / 该图没数据 / 还没进世界)别走,提示用户
-1参数不足(少于 3 个数字参数)不处理
-2算不出路径(起终点在导航网上不连通,例如目标在湖心岛、暴风城内城被城墙隔断)换个目标点
-3目标在别的地图(mapId 与当前地图不同)先把人弄到目标图再调

  1. local r = CZNavGo(-11000, 1500, -2)
  2. if r == 1 then
  3.     -- 开始走了,记得每帧调 CZNavTick()
  4. else
  5.     print("没走成,原因:" .. r)
  6. end
复制代码

说明:不会自动结束上一段寻路 —— 重复调用就是换目标。长距离会自动「边走边重算」,跨整张大陆(实测 23400 码)也能到。中途换地图、连续算不出路径、卡住不动,都会自动停机。

CZNavTick 驱动寻路状态机一步。每帧都要调
参数:无
返回值:number
返回含义
0没在寻路(空闲,或调过 CZNavStop)
1移动中 —— 继续每帧调
2已到达(距吸附后的终点 ≤ 4 码),已自动停机
3算不出路径,已自动停机
4卡住不动(自救阶梯走完 6 级仍出不来),已自动停机
5环境不可用,已自动停机

  1. local st = CZNavTick()
  2. if st == 2 then print("到了") elseif st ~= 1 then print("停了:" .. st) end
复制代码

说明
- 没在寻路时调用它没有副作用(恒返回 0),可以放心每帧调。
- 卡住时会发生什么:1.2 秒内位移不足 1 码就算卡住,然后按阶梯自救 —— 原地跳一下 → 前左 45° → 前右 45° → 纯左 → 纯右 → 后退 4 码,每一级挪完都重算一次路径。6 级全走完还出不来才返回 4,整套大概十几秒。
- 为什么要自救:台阶 / 门槛这类地方导航网认为能走、客户端却爬不上去,这时光重算路径毫无用处(起点没变,算出来还是同一条),必须先把人挪开。
- 移动指令不是定时重发的:只有目标点变了、或者人明显停住了、或者距上次下发超过 2 秒,才会再发一条,避免反复重置客户端的移动状态机(角色直着走、转弯不平滑)。

CZNavStop 停止寻路 —— 和控制台「停止自动寻路」按钮是同一个动作
参数:无 返回值:number,恒为 1
说明:会让角色真的站住(清状态机 → 清路点(路径线消失)→ 撤掉客户端手里那条移动指令)。不记状态:下次 CZNavGo 照常放行,没有「关了要记得开」这回事。玩家自己手动移动之前,建议先调一次。

CZNavState 读当前寻路状态。纯查询 —— 不改状态,也不推进状态机
参数:无
返回值(10 个):state, 当前路点下标, 本轮路点总数, 距终点直线距离, 起点到终点直线距离, 已重算轮数, 地图号, 路径线可用, 当前移动速度, 当前推进阈值
  1. local st, idx, cnt, remain, total, replans, mapId, lineOk, speed, reach = CZNavState()
  2. -- "行走中 3/12 · 剩 128 码";lineOk == 0 时补一句「无路径线」
复制代码

说明
- state 与 CZNavTick 的返回值同一套编码。不在寻路时,剩余距离返回 0,其余字段保留上一次的值。
- 第 8 个 路径线可用:1 = 渲染钩子已装好(正常);0 = 还没装好、或这台机器拿不到 D3D 设备装不上。它只表示线能不能画,和寻路能不能走无关。
- 第 9 个 当前移动速度(码/秒):客户端本帧的实际移动速度,跑速约 7。读不到时返回 0(还没进世界等),寻路会退回跑速基准值工作。
- 第 10 个 当前推进阈值(码):本帧「走到了当前路点」的判定距离。它随移动速度线性放大 —— 跑速 0.8 码,骑 100% 坐骑约 1.6 码,骑 280% 坐骑约 3.0 码。高速下阈值必须跟着放大,否则客户端真实的停点误差会超过阈值,每到一个路点都要白白多停一下。

游客,如果您要查看本帖隐藏内容请回复


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?加入我们

x
回复

使用道具 举报

 楼主| 发表于 2026-9-11 23:39:12 | 显示全部楼层
小妖冰冰 发表于 2026-9-11 11:13 PM
大佬,这个是自动解锁游戏,还是未解锁的?如果解锁了的话会,站城里站一会儿就封号..

你没用过包裹函数吗你看一下关于CZC的介绍。
回复 支持 1 反对 0

使用道具 举报

发表于 2026-9-11 21:39:25 | 显示全部楼层

666
大佬出手就是不凡
回复 支持 反对

使用道具 举报

发表于 2026-9-11 22:08:25 | 显示全部楼层
不错不错!
回复 支持 反对

使用道具 举报

发表于 2026-9-11 22:16:41 | 显示全部楼层
早前谁也弄过一个这个 好像过期了
回复 支持 反对

使用道具 举报

发表于 2026-9-11 22:20:56 | 显示全部楼层
大佬NB,点赞
回复 支持 反对

使用道具 举报

 楼主| 发表于 2026-9-11 22:22:24 | 显示全部楼层
xunqitt 发表于 2026-9-11 10:16 PM
早前谁也弄过一个这个 好像过期了

早前的那个过期了,然后被我破解了,发在另外一个帖子上。我现在发的这个是增强版的。
回复 支持 反对

使用道具 举报

发表于 2026-9-11 22:23:11 | 显示全部楼层
不明觉厉,不是学计算机的,看都看不懂
回复 支持 反对

使用道具 举报

发表于 2026-9-11 22:35:52 | 显示全部楼层
没看懂……看看到底是什么
回复 支持 反对

使用道具 举报

发表于 2026-9-11 23:13:24 | 显示全部楼层
本帖最后由 小妖冰冰 于 2026-9-11 11:47 PM 编辑

大佬,这个是自动解锁游戏,还是未解锁的?如果解锁了的话会,站城里站一会儿就封号..

用不了啊,大佬,游戏启动就白屏,就连大部分服的登录器都启动不了,不通过登录器启动直接用wow.exe启动就白屏
白屏后游戏关掉,wow.exe进程就在后台挂起,不允许结束,也不允许删出wow.exe
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

小黑屋|手机版|Archiver|LUACN论坛

GMT+8, 2026-10-10 01:52 AM , Processed in 0.135809 second(s), 8 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表