调试
前言:核心基于Lua5.1自建魔改,语法支持中文函数/变量名
标准可用函数 ipairs pairs tonumber tostring type function if else end等基础语法后续不再赘述
标准可用库 math string table
其它的没有引入。
output(...)
outputex(...,"C:\\log.txt"/可选)
print(...)
selfBuff()
targetBuff()
selfPos()
targetPos()
npcInfo()
doodadInfo()
最近更新
addlastskill(技能ID)
addlastskill(技能ID)--必须填写技能id【推荐】
addlastskill(技能ID, "技能名")--记录id和创建自定义中文技能名(只影响last系列的返回中文名字,没什么用),all
addlastskill(技能ID, "技能名", "cast")--只在顺发技能记录
addlastskill(技能ID, "技能名", "channel")--只在读条引导技能记录
addlastskill(53, "骑御")
addlastskill(54, "下马")
acast3(技能ID, 目标ID, 角度偏移, 是否跳过检查)
acast3("金戈回澜", 1073742659)
acast3("金戈回澜", 1073742659,180)抢外观(dwid)
--所有后果自行承担
function Main()
--挂循环里就是每隔0.15秒尝试购买1次
if gettimer("上次购买")>0.15 then
抢外观(dwid)---- 自行修改 --例子:抢外观(6310)
settimer("上次购买")
end
endexcuteMacro[[官方宏指令]]
castguide()
场景追踪点()
交互()
njd()
内劲点
tnjd()
目标内劲点
xnjd(玩家id)
x玩家的内劲点
neijing() --官方已删除
内劲能量条
tneijing() --官方已删除
目标的内劲能量条
sktest("技能名")
判断技能图标是否亮
走到目标弱点面向()
刀宗的,执行函数,自己外面加判断
last("技能名")
如果自己前一个释放的是指定技能返回真,否则返回假。
支持技能中文名/技能id,无参数调用时返回上次释放的技能中文名
只记录内置的技能信息,有需要添加新技能请在main外调用 addlastskill(技能id)
puptime()
返回千机变剩余时间, 没有千机变返回 0
markid("标记名")
返回团队中指定标记玩家的角色ID,不在团队或没有指定标记返回 0
`标记名` 是 "云朵" "小剑" "斧头" "钩子" "红鼓" "剪刀" "棒槌" "如意" "飞镖" "扇子" 之一
--有云朵标记的队友ID
local cloud_party_id = markid("云朵")
if cloud_party_id ~= 0 then
endequipName("部位", "单个或|分隔的多个装备名")
指定部位是指定名字的装备返回真。
部位是 "武器" "腰坠""大剑" 之一。
itemCount("物品名"或UIID)
返回背包中指定物品数量。
DynamicSkillHighLight 回调
如果要在宏里处理QTE,关掉自动QTE,在回调里面处理。顺便也可以输出调试信息,对照是否有问题。
--动态技能栏某个技能高亮时被调用
--nbox, 动态技能索引
--bHighLight, 高亮(true)或取消高亮(false)
function DynamicSkillHighLight(nBox, bHighLight)
print("动态技能高亮", nBox, bHighLight)
if bHighLight then
ActionClick(1, nBox)
end
end
point3(x, y, 距离, 角度, 角色ID(可选))
返回指定坐标(x, y) 到 指定角色(不指定是自己), 平移指定距离,旋转指定角度后的位置 x, y, z。
useEquip("部位")
使用指定部位装备技能。
当前支持 "腰坠" "武器",后期如有需求会扩展其它部位。
tbufflv("buff名")
获取目标 buff 等级。
没目标或目标没有指定 buff 返回 0。
xbufflv("buff名", 角色ID)
获取指定角色 buff 等级。
角色不存在或者没有指定 buff 返回 0。
setqixue(第几重, "奇穴技能名")
设置奇穴。
- 第几重:1–12
- 技能名:需要设置的奇穴。
xcasting 支持技能ID
如果技能名有重复,可以使用技能ID。
示例:
-- 自己在读条 玳弦急曲
if xcasting("2707", id()) then
end
xcasttype(角色ID)
返回指定角色读条类型:
- 0 = 不在读条
- 1 = 读条
- 2 = 引导(倒读条)
leaveFB()
在副本内离开副本,不在副本内无效果。
resetFB("副本名", "难度名")
重置副本。
只是重置,没有判断是否已有CD,貌似没CD重置也没影响。
进入副本前可调用一次,内置 2 秒 CD。
示例:
resetFB("沃石院", "5人英雄")
itemCD(物品名或ID1, ID2)
获取物品 CD 剩余时间,指定物品不存在返回 0。
- 物品名有重名时请用 ID。
示例:
-- 使用物品名
if itemCD("除滞散") <= 0 then
end
-- 使用物品ID
if itemCD(5, 40385) <= 0 then
end
usePendant()
使用腰坠技能,没有参数,合适的时候调用就行了,省的每次腰坠名字还要加好几个。
flopCard("按钮名")
试炼之地翻牌。
参数:必须是 "重新开始", "继续挑战", "退出挑战" 之一。
用于每层结束后执行指定行为,支持每关和每层两种翻牌。
panel("面板路径")
判断指定面板是否打开。
参数:面板路径,用 `光标指向UI信息` 获取,在日志窗口查看。
判断
bigtext("信息", 持续时间, 缩放)
大字提醒, 游戏窗口中间输出信息, 一般用于输出重要提醒
- 持续时间 0.5 到 10 秒之间, 缺省 2 秒
- 缩放指定字体大小 1 到 5 之间, 缺省 1.5
life()
自己气血百分比
lifevalue()
自己当前气血值
lifemax()
自己最大气血值
tlife()
目标气血百分比
tlifevalue()
目标当前气血值
tlifemax()
目标最大气血值
xlife(角色ID)
指定角色气血百分比
xlifevalue(角色ID)
指定角色当前气血值
xlifemax(角色ID)
指定角色最大气血值
mana()
自己内力百分比,蓝
manavalue()
自己当前内力值,蓝
manamax()
自己最大内力值,蓝
tmana()
目标内力百分比,蓝
tmanavalue()
目标当前内力值,蓝
tmanamax()
目标最大内力值,蓝
xmana(角色ID)
指定角色内力百分比,蓝
xmanavalue(角色ID)
指定角色当前内力值,蓝
xmanamax(角色ID)
指定角色内力最大值,蓝
das()
获取自己伤害吸收盾信息,返回: 伤害吸收百分比,伤害吸收数值, 没有返回 0, 0
tdas()
获取目标伤害吸收盾信息, 没有目标或目标没有伤害吸收盾返回 0, 0
xdas(角色ID)
获取指定角色伤害吸收盾信息, 指定角色不存在或没有伤害吸收盾返回 0, 0
tas()
获取自己治疗吸收盾信息,返回: 治疗吸收百分比,治疗吸收数值, 没有返回 0, 0
ttas()
获取目标治疗吸收盾信息, 没有目标或目标没有治疗吸收盾返回 0, 0
xtas(角色ID)
获取指定角色治疗吸收盾信息, 指定角色不存在或没有治疗吸收盾返回 0, 0
ras()
获取自己梅花三弄吸收盾信息,返回: 当前值, 最大值, 没有返回 0, 0
tras()
获取目标梅花三弄吸收盾信息, 没有目标或者目标没有吸收盾返回 0, 0
xras(角色ID)
获取指定角色梅花三弄吸收盾信息, 指定角色不存在或没有吸收盾返回 0, 0
fight()
自己战斗中
nofight()
自己没进战
tfight()
目标战斗中
tnofight()
目标没进战
horse()
自己在马上
nohorse()
自己不在马上
thorse()
目标在马上
tnohorse()
目标不在马上
xhorse(角色ID)
指定角色在马上
xnohorse(角色ID)
指定角色不在马上
qidian()
自己 禅那(少林),气点(纯阳),剑舞层数(七秀)
tqidian()
目标 禅那(少林),气点(纯阳),剑舞层数(七秀)
rage()
自己 战意(天策), 剑气(藏剑), 怒气(苍云),狂意( 霸刀), 星运(衍天), 墨意(万花), 弓箭数量(万灵)
trage()
目标 战意(天策), 剑气(藏剑), 怒气(苍云),狂意( 霸刀), 星运(衍天), 墨意(万花), 弓箭数量(万灵)
energy()
自己 神机值(唐门), 刀魂(霸刀), 格挡值(苍云), 锐意(刀宗)
tenergy()
目标 神机值(唐门), 刀魂(霸刀), 格挡值(苍云), 锐意(刀宗)
qijin()
自己 气劲(霸刀)
tqijin()
目标 气劲(霸刀)
sun()
自己 日灵,万花白棋,段氏任脉
tsun()
目标 日灵
moon()
自己 月魂,万花黑棋,段氏督脉
tmoon()
目标 月魂
sun_power()
满日
moon_power()
满月
yaoxing()
药性, 温性大于0, 寒性小于0, -5 到 5 区间
arrow(位置)
获取万灵弓箭状态, 位置 0 - 7, 返回状态参考下表
| 返回值 | 状态 |
|---|---|
| 0 | 指定位置没有弓箭 |
| 1 | 普通 |
| 2 | 金乌 |
| 3 | 空弦 |
| 4 | 金乌 + 空弦 |
beast("动物名")
获取万灵幻灵印信息。如果不指定参数, 返回已有幻灵印数量。如果指定动物名,返回是否已有指定幻灵印。
--有4个以上幻灵印
if beast() >= 4 then
end
--有飞行型幻灵印
if beast("鹰") then
end
| 动物名 | 类型 |
|---|---|
| 狼 | 追击型 |
| 虎 | 强击型 |
| 鹰 | 飞行型 |
| 熊 | 防御型 |
| 大象 | 群战型 |
| 野猪 | 控制型 |
nextbeast("动物名")
判断下一个出场的动物, 如果是指定名字返回真, 否则返回假。
--下一个出场的是鹰
if nextbeast("鹰") then
end
setbeast(表)
设置动物出场顺序。
--必须按照下面格式, 必须指定6种动物, 名字不能错不能重复, 顺序自己调整
setbeast( { "狼", "虎", "鹰", "熊", "大象", "野猪" } )
charinfo("属性")
获取自己角色信息, 属性参考下表
| 属性 | 说明 |
|---|---|
| "跳跃次数" | 当前跳了几次 |
| "最大跳跃次数" | 最大能跳几次 |
| "外功命中" | 外功命中几率, 0 - 100 数值 |
| "阴性命中" | |
| "阳性命中" | |
| "混元命中" | |
| "毒性命中" | |
| "治疗量" | |
| "破招" | 破招值 |
pose("姿态名")
自己是否指定姿态, 姿态名: "擎刀", "擎盾"
"剑舞""擎刀""擎盾""高山流水""阳春白雪""平沙落雁""梅花三弄""松烟竹雾""秀明尘身""雪絮金屏"
tpose("姿态名")
目标是否指定姿态
school("门派名")
自己是否指定门派, 门派名: 少林, 万花, 天策, 纯阳, 七秀, 五毒, 唐门, 藏剑, 丐帮, 明教, 苍云, 长歌, 霸刀, 蓬莱, 凌雪, 衍天, 药宗, 刀宗
tschool("门派名")
目标是否自定门派
xschoolname(角色ID)
获取指定角色的门派名
mount("心法名")
自己是否指定心法
tmount("心法名")
目标是否指定心法
xmount("心法名", 角色ID)
指定角色是否指定心法
xmountname(角色ID)
获取指定角色的心法名
mounttype("心法类型")
自己是否指定心法类型, 心法类型: "内功", "外功", "治疗", "天罗"
天罗是外功命中会心, 内功攻击破防
tmounttype("心法类型")
目标是否指定心法类型
state("状态列表")
自己是指定移动状态
| 状态 | 说明 |
|---|---|
| "站立" | - |
| "走路" | - |
| "跑步" | - |
| "跳跃" | - |
| "水中跳跃" | - |
| "游泳" | - |
| "水中悬浮" | - |
| "坐下" | - |
| "被击倒" | - |
| "被击退" | - |
| " 被击飞" | - |
| "眩晕" | - |
| "定身" | - |
| "锁足" | - |
| "乘坐交通工具" | - |
| "重伤" | - |
| "冲刺" | - |
| "被抓" | - |
| "滑行" | - |
| "爬起" | - |
| "滑行" | - |
| "使用轻功" | - |
| "使用轻功" | - |
| "使用轻功" | - |
| "使用轻功" | - |
| "攻击位移状态" | 使用技能僵直 |
| "被击位移状态" | 被击中僵直 |
| "技能收招状态" | - |
| "重伤位移状态" | - |
| "开始交通" | - |
| "简易飞行状态" | - |
| "简易飞行浮空状态" | - |
| "简易飞行上浮状态" | - |
| "角色闪现" | - |
| "轻功" | - |
| "轻功" | - |
| "轻功" | - |
对应的繁体: 站立, 走路, 跑步, 跳躍, 水中跳躍, 游泳, 水中懸浮, 坐下, 被擊倒, 被擊退, 被擊飛, 眩暈, 定身, 鎖足, 乘坐交通工具, 重傷, 衝刺, 被抓, 滑行, 爬起, 滑行, 使用輕功, 使用輕功, 使用輕功, 使用輕功, 攻擊位移狀態, 被擊位移狀態, 技能收招狀態, 重傷位移狀態, 開始交通, 簡易飛行狀態, 簡易飛行浮空狀態, 簡易飛行上浮狀態, 角色閃現, 輕功, 輕功, 輕功
nostate("状态列表")
自己不是指定移动状态
tstate("状态列表")
目标是指定状态
tnostate("状态列表")
目标不是指定状态
xstate("状态列表", 角色ID)
指定角色是指定状态
xnostate("状态列表", 角色ID)
指定角色不是指定状态
smid()
自己僵直ID
tsmid()
目标僵直ID
xsmid(角色ID)
指定角色僵直ID
dis()
自己到目标技能距离, 没有目标返回 0
技能距离代表的是技能的有效范围
dis2()
自己到目标平面距离, 没有目标返回 0
dis3()
自己到目标三维距离, 没有目标返回 0
xdis(角色ID)
自己到指定角色技能距离, 指定角色不存在返回 0
xxdis(角色ID1, 角色ID2)
任意两个角色之间的技能距离
pdis2(x, y)
自己到指定点的平面距离
height()
自己距离地面高度
theight()
目标距离地面高度, 没有目标或者目标不是玩家返回 0
xheight(角色ID)
指定角色距离地面高度, 指定角色不存在或者不是玩家返回 0
xheight1(角色ID)
获取指定玩家距离天花板的高度(上方障碍物),如果上方没有障碍物返回 0
可能蓬莱会用到,判断目标上方有没有障碍物
heightz()
自己和目标的高度差, 没有目标返回 0
speed(角色ID)
获取指定角色移动速度, 不指定角色,返回自己移动速度
2个返回值: xy移动速度, z移动速度
如果没有移动,xy速度和z速度都为 0
正常情况下玩家跑速为每帧 20, xy速度为 320
z 大于 0 上升, 小于 0 下降
face()
自己到目标的面向角度差, 没有目标返回 0
--目标在自己正面60度范围
if face() < 30 then
end
tface()
目标到自己的面向角度差
--自己在目标背面
if tface() > 90 then
end
xxface(角色ID1, 角色ID2)
角色1 到 角色2 的面向角度差
xxface2(角色ID1, 角色ID2)
自己到角色1和角色2的夹角角度
turn(角度, 角色ID)
面向目标或指定角色。
不是立即的,有延迟,需要立即面向并使用技能用 acast
--面向目标
turn()
--目标方向再左转30度, 角度范围 -180 到 180, 正数左转, 负数右转
turn(30)
--面向指定角色
turn(0, 角色ID)
xdir(角色ID)
指定角色到自己的方位, 返回 "前" "后" "左" "右", 指定角色不存在返回 "未知方位"
pos()
获取自己的位置, 返回 x, y, z
xpos(角色ID)
获取指定角色的位置, 返回 x, y, z
xxpos(角色ID1, 角色ID2)
获取以 角色1 为原点, 角色2 的相对平面位置,返回 x, y
x 表示 角色2 的前后位置, 为正 角色2 在 角色1 的前方, 为负 角色2 在 角色1 的后方
y 表示 角色2 的左右位置,为正 角色2 在 角色1 的左侧, 为负 角色2 在 角色1 的右侧
乱天狼之类的技能可能需要这个判断目标位置
visible()
自己到目标视线可达
novisible()
自己到目标视线不可达
tvisible()
目标到自己视线可达
tnovisible()
目标到自己视线不可达
xxvisible(角色ID1, 角色ID2)
角色1到角色2视线可达
obstacle(角色ID)
自己到指定角色之间有动态障碍物(刀墙之类), 不是特别精确有空再完善
point(原点角色ID, 距离, 旋转角度, 源角色ID, 目标角色ID)
获取一个点的坐标,成功返回 x y z ,失败返回 0 0 0
| 参数 | 说明 |
|---|---|
| 原点角色ID | 以这个角色的坐标作为原点 |
| 距离 | 原点坐标平移的距离, 必须大于等于0 |
| 旋转角度 | 如果没有后两个参数, 方向是原点角色面向加这个角度, 范围-180到180 |
| 源角色ID | 和下面参数一起指明方向 |
| 目标角色ID | - |
--目标到自己的方向, 目标前方5尺放六合独尊
--目标位置是原点, 距离5尺, 不旋转, 方向是目标到自己
castxyz("六合独尊", point(tid(), 5, 0, tid(), id()))
point2(角色ID, 距离, 旋转角度)
获取指定角色正在移动的方向(不是面向), 指定距离点坐标, 返回 x y z
调用前先判断指定角色移动速度大于0
canmove(源角色ID, 目标角色ID, 移动角色ID, 距离)
指定角色是否能向某个方向移动指定距离, 如果没有障碍物返回真,否则返回假
距离需要指定 0 到 30 尺之间数值
| 参数 | 说明 |
|---|---|
| 源角色ID | 和目标角色ID一起指明方向 |
| 目标角色ID | 和源角色ID一起指定方向 |
| 移动角色ID | 指定是谁移动 |
| 距离 | 如果不指定是源角色到目标角色的距离 |
--自己到目标的方向, 自己可移动
--放突之类的冲刺技能可以判断一下
--会防止视线可达能放技能,但是会被地面的障碍物卡住,冲不到目标身旁
if canmove(id(), tid(), id()) then
end
cannotmove(源角色ID, 目标角色ID, 移动角色ID, 距离)
指定角色不能向某个方向移动指定距离(有障碍物)
target("类型")
有目标或目标是否指定类型, 类型: "npc", "player", "boss"
notarget()
当前没有目标
--有目标
if target() then
end
--没有目标
if notarget() then
end
--目标是玩家
if target("player") then
end
name()
返回自己名字
tname("名字列表")
如果目标是指定名字返回真,否则返回假
xname(角色ID)
返回指定角色名字
id()
自己角色ID
tid()
目标角色ID, 没有目标返回 0
ttid()
目标的目标角色ID, 没有返回 0
xtid(角色ID)
指定角色的目标ID, 指定角色不存在 或 没有目标 返回 0
副本内等场景有效, 野外非当前目标不同步
settar(角色ID)
设置当前目标为指定角色, 设置成功 或 当前目标就是指定角色 返回 true, 否则返回 false
hatred()
获取目标NPC的仇恨值信息。
| 返回值 | 说明 |
|---|---|
| 1 | 仇恨最高角色ID, 没有返回 0 |
| 2 | 仇恨最高角色仇恨值, 没有返回 0 |
| 3 | 当前目标角色ID, 没有返回 0 |
| 4 | 当前目标角色仇恨值, 没有返回 0 |
| 5 | 自己仇恨值,不在仇恨列表中返回 0 |
需要打开自带仇恨统计或茗伊仇恨统计,推荐茗伊刷新速度快一些。一个NPC的仇恨总值是65535,它仇恨列表中的角色分摊这个数值。比如它仇恨列表中只有你一个人,那仇恨最高、它的目标(少数不会攻击的NPC除外,你打它不会成为它的目标,比如茶馆任务打的肉)都是你自己,3个仇恨值都是65535。NPC的当前目标不一定是仇恨最高的角色,当仇恨最高角色的仇恨值超过当前目标仇恨值120%,NPC切换目标。
rela("关系")
自己和目标是指定关系, 关系: "自己", "友好", "敌对", "中立", "队友"
xrela("关系", 角色ID)
自己和指定角色是指定关系
buff说明
- buff名列表为 "buff名1|buff名2|buff名3" 用英文竖线分隔的多个buff名或ID
- 如果参数说明为 "buff名", 只支持单个buff
- 如果buff名重复或没名字,用ID, 为字符串形式, "12345"
- 源角色ID为可选参数,需要判断是谁造成时指定
buff("buff名列表", 源角色ID)
自己有指定buff且剩余时间大于等于 0 秒
--自己有指定buff, 不判断源角色
if buff("buff名") then
end
--目标有自己的指定buff
if tbuff("buff名", id()) then
end
--自己有目标的指定buff
if buff("buff名", tid()) then
end
--目标有自己的三层急曲
if tbuffsn("急曲", id()) >= 3 then
end
nobuff("buff名列表", 源角色ID)
自己没有指定buff或剩余时间小于 -0.25 秒
tbuff("buff名列表", 源角色ID)
目标有指定buff且剩余时间大于等于 0 秒
tnobuff("buff名列表", 源角色ID)
目标没有指定buff或剩余时间小于 -0.25 秒
bufftime("buff名", 源角色ID)
返回自己指定buff剩余时间, 没有指定buff返回 -100
tbufftime("buff名", 源角色ID)
返回目标指定buff剩余时间, 没有指定buff返回 -100
xbufftime("buff名", 角色ID, 源角色ID)
返回指定角色指定buff剩余时间, 指定角色不存在或没有指定buff返回 -100
buffsn("buff名", 源角色ID)
自己指定buff层数, 没有指定buff返回 0
tbuffsn("buff名", 源角色ID)
目标指定buff层数, 没有指定buff返回 0
xbuffsn("buff名", 角色ID, 源角色ID)
指定角色buff层数, 没有指定buff返回 0
bufflv("buff名")
自己指定buff等级, 没有指定buff返回 0
buffsrc("buff名")
获取自己指定buff的源角色ID
tbuffsrc("buff名")
获取目标指定buff的源角色ID
bufftype("buff驱散类型", "buff名")
获取自己指定驱散类型buff的数量和指定buff是该类型的第几个
buff类型: 外功气劲, 外功不利效果, 阳性气劲, 阳性不利效果, 混元性气劲, 混元性不利效果, 阴性气劲, 阴性不利效果, 点穴, 点穴不利效果, 毒性气劲, 毒性不利效果, 蛊, 蛊不利效果, 药石, 药石不利效果, 辅助类食品, 增强类食品, 辅助类药品, 增强类药品, 宴席
--获取指定驱散类型buff数量
if bufftype("阳性不利效果|混元性不利效果|阴性不利效果|毒性不利效果") > 2 then
end
tbufftype("buff驱散类型", "buff名")
获取目标指定驱散类型buff的数量和指定buff是该类型的第几个
cbuff("buff名")
取消指定buff
buffis(buffid, buff等级, "类别")
buff是否某种类型,类型: "减速", "免减速", "锁足", "免锁足", "定身", "免定身", "眩晕", "免眩晕", "击倒", "免击倒", "免打断", "免击飞", "免推", "免拉", "免僵直", "封外功", "封阳性", "封混元", "封阴性", "封毒性", "封轻功", "缴械", "免沉默", "减疗", "禁疗", "无敌", "免外伤", "免内伤", "单次免伤", "不死", "减伤", "减外伤", "减内伤", "闪避", "减命中", "反伤", "反射", "吸收伤害", "吸收百分比", "伤害转移", "爆发", "治疗转移", "可偷取", "仇恨增减", "瞬发"
沉默对应封外功
buffstate("buff类别")
自己buff类别信息, 可 xx 返回 真或假,时间 返回 剩余时间, 效果 返回 0 - 100 之间数值
| 类别 | 说明 |
|---|---|
| "减速时间" | |
| "可减速" | |
| "锁足时间" | |
| "免锁足时间" | |
| "可锁足" | |
| "定身时间" | |
| "免定身时间" | |
| "可定身" | |
| "眩晕时间" | |
| "免眩晕时间" | |
| "可眩晕" | |
| "击倒时间" | |
| "免击倒时间" | |
| "可击倒" | |
| "可推" | |
| "可拉" | |
| "免拉时间" | |
| "免僵直时间" | |
| "可僵直" | |
| "僵直时间" | 被击僵直时间 |
| "位移时间" | 出招僵直时间 |
| "可打断" | |
| "沉默时间" | |
| "免沉默时间" | |
| "可沉默" | |
| "封内时间" | |
| "免封内时间" | |
| "可封内" | |
| "封轻功时间" | |
| "可封轻功" | |
| "缴械时间" | |
| "可缴械" | |
| "减疗时间" | |
| "减疗效果" | |
| "可减疗" | |
| "禁疗时间" | |
| "单次禁疗时间" | |
| "无敌时间" | |
| "免外伤时间" | |
| "免内伤时间" | |
| "单次免伤" | 返回单次免伤时间和层数 |
| "不死时间" | |
| "减伤时间" | |
| "减伤效果" | |
| "减外伤时间" | |
| "减外伤效果" | |
| "减内伤时间" | |
| "减内伤效果" | |
| "闪避时间" | |
| "闪避效果" | |
| "减命中时间" | |
| "减命中效果" | |
| "爆发时间" | 不精确,判断相关buff |
| "反伤时间" | 少林反弹 |
| "反伤效果" | |
| "反射时间" | 苍云盾立 |
| "化解时间" | 伤害吸收类buff时间 |
| "化解效果" | 伤害吸收效果 |
| "治疗转移时间" | |
| "治疗转移效果" | |
| "伤害转移时间" | |
| "伤害转移效果" | |
| "仇恨增减效果" | |
| "可平沙" | |
| "可鸿蒙" | |
| "免下马时间" | |
| "禁锢时间" | |
| "免持续治疗时间" | |
| "免持续伤害时间" | |
| "免减伤时间" | |
| "免护盾时间" |
tbuffstate("buff类别")
目标buff类别信息, 如果当前没有目标, 可xx 返回 false, xx时间 返回 -100, xx效果 返回 0
xbuffstate("buff类别", 角色ID)
指定角色buff类别信息, 如果指定角色不存在, 可xx 返回 false, xx时间 返回 -100, xx效果 返回 0
casting("技能名列表")
自己是否在读条, 如果不指定技能名, 在读条返回读条技能名,不在读条返回 false
castleft()
读条剩余时间
castpass()
已读时间
castprog()
读条百分比
casttarget()
获取正在读条技能的释放目标, 比如读条四象轮回, 没结束就切换了目标, 四象轮回读条结束释放时的目标并不是当前目标
返回角色ID, X, Y, Z, 根据技能类型(对目标或指定位置)判断返回值
tcasting("技能名列表")
目标是否在读条, 如果不指定技能名, 在读条返回读条技能名,不在读条返回 false
tcastleft()
目标读条剩余时间
tcastpass()
目标已读时间
tcastprog()
目标读条百分比
tcasttarget()
目标的读条目标
xcasting("技能名列表", 角色ID)
指定角色是否读条, 如果不指定技能名, 在读条返回读条技能名,不在读条返回 false
xcastleft(角色ID)
指定角色读条剩余时间
xcastpass(角色ID)
指定角色已读时间
xcastprog(角色ID)
指定角色读条百分比
xcasttarget(角色ID)
指定角色的读条目标
stopcasting()
中断自己读条、引导、蓄力技能
stopcasting(), 没有参数, 和之前行为一样,打断读条、引导、释放蓄力(相当于蓄力中松开按键释放)。
stopcasting(true), 打断蓄力,相当于蓄力过程中按Esc,蓄力中断技能不进CD,需要是可中断的蓄力技能(例如天下无狗),不可中断的蓄力技能无效。
cast("技能名"或ID, 是否对自己释放)
使用技能。
参数1: 技能名,有重名等情况用技能ID。
参数2: 可选。不指定 或 false 对目标释放, 目标是敌对且技能是增益时对自己释放。 指定为 true, 对自己释放。
返回值: 释放成功返回 true, 否则返回 false。这里的释放成功是指技能必须的各种条件(距离、内力、CD等等)本地检查通过且发送数据成功。绝大部分情况下这个返回值可以作为技能释放成功的判断条件,但是因为网络、同步延迟等原因,并不百分百精确。如果要精确判断技能释放成功在回调中处理。
cast(53)--骑御上马
fcast("技能名"或ID, 是否对自己释放)
使用技能, 忽略引导(倒读条)。参数和返回值与 cast 相同。
xcast("技能名"或ID, 角色ID, 是否忽略读条)
对指定角色使用技能。参数和返回值与 cast 相同。
acast("技能名"或ID, 角度, 角色ID, 是否忽略读条)
面向指定角色后使用技能, 不指定角色是当前目标。返回值与 cast 相同。
不指定角度或角度为 0 是正对目标,正数是正对目标再左转指定角度,负数向右
第三个参数除了角色ID,也可以指定一个表表示位置, 必须为 { nX = x, nY = y } 形式
--面向当前目标使用
acast("坚壁清野")
castxyz("技能名"或ID, x, y, z)
在指定位置使用技能。返回值与 cast 相同。
acast2("技能名"或ID, 角色ID, 距离, 角度)
智能释放位移技能, 指定角色到自己方向的 120 度范围找一个可移动指定距离(没有障碍物)的方向使用技能,主要用来放蹑云等位移技能躲避伤害或拉开距离
第二个参数除了角色ID,也可以指定一个表表示位置, 必须为 { nX = x, nY = y } 形式
距离是指离指定角色多远才可以躲开,例如风来吴山 10 尺伤害,那距离至少要 10 尺以上
第四个参数不指定或为 0,是向前移动的技能,太阴指之类向后移动的技能要指定为 180
判断障碍物需要大量计算,调用过多会卡。
--远离读条风来吴山的敌人
local v = {}
v["读条风来吴山敌人"] = enemy("平面距离<10", "读条:风来吴山")
if v["读条风来吴山敌人"] ~= 0 then
if acast2("蹑云逐月", v["读条风来吴山敌人"], 13) then
bigtext("躲风来吴山读条")
return
end
acast2("迎风回浪", v["读条风来吴山敌人"], 13, 180)
acast2("凌霄揽胜", v["读条风来吴山敌人"], 13, -90) --只是演示不推荐, 距离太近
acast2("瑶台枕鹤", v["读条风来吴山敌人"], 13, 90) --只是演示不推荐, 距离太近
end
use(...)
使用背包或装备栏物品,参数形式参考下面示例。
--使用物品,如果物品带放置类技能,对目标位置释放
use("物品名")
--如果物品带放置类技能,对自己位置释放
use("物品名", true)
--如果物品带放置类技能,对指定位置释放
use("物品名", x, y, z)
--使用物品名, 如果没有打开过背包和装备栏, 可能会有问题, 推荐使用物品ID
--按下Ctrl键后鼠标移动到物品上会显示 ID: x, xxxxx, 用ID后的两个数字作为参数
--下面三种调用形式和上面的含义相同,只是把物品名换为两个ID
use(id1, id2)
use(id1, id2, true)
use(id1, id2, x, y, z)
cdtime("技能名")
技能CD剩余时间, 包括GCD和技能自身CD
scdtime("技能名")
技能CD剩余时间, 不包括GCD
cn("技能名")
充能技能可使用次数
cntime("技能名", 是否全部)
获取技能充能剩余时间
--当次剩余时间
cntime("技能名")
--全部剩余时间
cntime("技能名", true)
od("技能名")
透支技能可使用次数
odtime("技能名")
透支剩余时间
cdleft(冷却ID)
指定冷却ID的剩余时间, 冷却ID参见下表
| 冷却ID | 说明 |
|---|---|
| 16 | 大部分门派GCD 1.5秒 |
| 590 | 丐帮GCD 0.5秒 |
| 503 | 明教GCD 1秒 |
| 804 | 苍云盾技能GCD 1秒 |
五毒宠物技能冷却ID
| 技能名(技能ID) | 冷却ID | 时间(秒) |
|---|---|---|
| 蝎蜇(2475) | 408 | 25 |
| 蝎蜇(18422) | 1264 | 20 |
| 蟾躁(2476) | 409 | 20 |
| 蟾躁(18393) | 1260 | 16 |
| 蟾噬(25032) | 1825 | 40 |
| 蟾噬(25033) | 1826 | 32 |
| 幻击(2477) | 410 | 12 |
| 幻击(18423) | 1265 | 10 |
| 影滞(2478) | 411 | 15 |
| 影滞(18424) | 1266 | 12 |
| 丝牵(2479) | 412 | 20 |
| 丝牵(18394) | 1261 | 16 |
| 丝牵(18425) | 1261 | 16 |
| 丝牵(18426) | 412 | 20 |
| 蝶鸾(3054) | 460 | 6 |
| 蝶鸾(25055) | 2084 | 8 |
| 展屏(32901) | 2488 | 30 |
cdinterval(冷却ID)
指定冷却ID的间隔时间, 例如GCD 16 的间隔时间是 1.5 秒, 受加速影响会变短
casttime("技能名")
指定技能需要的读条时间, 受加速影响
range("技能名", 是否范围技能)
获取技能释放距离(包括秘籍), 不需要目标和位置的范围技能第二个参数设置为 true
skillCoef(技能ID, 技能等级)
获取技能系数信息,3个返回值: 技能系数,技能基础数值,技能随机数值
当前只支持治疗技能
miji("技能名", "秘籍名")
指定秘籍是否激活。
--也支持直接用秘籍ID
if miji(秘籍ID) then
end
mijiactive("技能名", "秘籍名", 是否激活)
激活或禁用指定秘籍
qixue("奇穴名", 第几重)
自己是否有指定奇穴, 如果奇穴有重名才需要指定第二个参数
tqixue("奇穴名", 第几重)
目标有指定奇穴
tnoqixue("奇穴名", 第几重)
目标没有指定奇穴
xqixue("奇穴名", 角色ID, 第几重)
指定角色有指定奇穴
xnoqixue("奇穴名", 角色ID, 第几重)
指定角色没有指定奇穴
last系列只记录内置的技能信息,有需要添加新技能请在main外调用 addlastskill(技能id)
lasttime("技能名")
自己上次释放指定技能到当前的时间
tlasttime("技能名")
目标上次释放指定技能到当前的时间
xlasttime("技能名", 角色ID)
指定角色上次释放指定技能到当前的时间
qc("气场名", 角色ID, 主人ID)
指定角色周围气场, 返回: 到气场边缘距离(在圈外是正数,在圈内是负数), 气场剩余时间
角色ID指定在谁周围, 主人ID指定是谁的气场
气场名: 气场化三清, 气场生太极, 气场破苍穹, 气场冲阴阳, 气场凌太虚, 气场碎星辰, 气场吞日月, 气场镇山河
--自己周围自己的破苍穹, 获取距离和时间
--用距离可以判断是否在圈内
--用时间可以判断有没有 还剩多久
local pcqdist, pcqtime = qc("气场破苍穹", id(), id())
qctime(角色ID, 距离, 模板ID)
参数1: 指定在谁周围
参数2: 可选, 指定距离范围内
参数3: 可选, 气场模板ID
返回: 最短时间, 数量
qjcount()
气纯气剑数量
petid()
五毒宠物角色ID, 衍天连局角色ID, 没有返回 0
pettid()
宠物目标角色ID
nopet("宠物名")
没有宠物, 宠物名: "圣蝎", "风蜈", "天蛛", "灵蛇", "玉蟾", "碧蝶"
--没有任何宠物
if nopet() then
end
--没有灵蛇或天蛛
if nopet("灵蛇|天蛛") then
end
pet("宠物名")
有宠物
pupid()
唐门千机变角色ID, 没有返回 0
puptid()
千机变目标角色ID
nopuppet("千机变名")
没有指定或任何(不指定名字)千机变
千机变名: "机关千机变底座", "机关千机变连弩", "机关千机变重弩", "机关千机变火器"
puppet("千机变名")
有指定或任何(不指定名字)千机变
shadowcount(是否可用)
获取影子或飞星的数量, 可用的含义是可以使用影子对应的技能
--如果6个影子
if shadowcount() >= 6 then
end
--如果有可用的影子
if shadowcount(true) > 0 then
end
shadow("条件")
获取符合条件的可用影子或飞星信息, 返回: 技能ID, 剩余时间, 距离, 影子角色ID, 没有符合条件的可用影子返回 0
| 条件 | 说明 |
|---|---|
| 远 | 离自己较远 |
| 近 | 离自己较近 |
| 长 | 剩余时间较长 |
| 短 | 剩余时间较短 |
--使用剩余时间较短的影子对应的技能
local YZ_SkillID = shadow("短")
if YZ_SkillID ~= 0 then
cast(YZ_SkillID)
end
dengcount()
魂灯数量
lianju()
是否有连局, 有返回真, 没有返回假
ljtime()
连局剩余时间, 没有连局返回 -100
xinlianju(角色ID)
指定角色是否在自己连局中, 自己有连局 且 指定角色存在 且 在自己连局中 返回真
xnolianju(角色ID)
指定角色是否不在自己连局中, 自己有连局 且 指定角色存在 且 不在自己连局中 返回真
tfangdeng(灯3到目标的距离)
对目标放灯, 形成连局. 没有目标不放灯. 放灯有技能距离限制, 你离目标越近形成的连局越大, 所以灯1自己判断和目标的距离再放.
- 灯1, 放完3个灯能把目标圈住的合适位置.
- 灯2, 能把目标圈住的合适位置.
- 灯3, 能把目标圈住的合适位置. 没指定参数是尽可能远, 指定了参数是目标距离范围内, 用于[天网]之类的奇穴有一个灯能烧到目标.
tmovedeng(灯3到目标的距离)
有3个灯, 移离目标最近的1个灯. 不指定参数尽可能远, 指定了参数是目标距离范围内. 可以先判断目标是否在自己连局内或离目标最近的1个灯到目标的距离等等, 然后移灯.
fangdeng(灯1到自己最短距离)
对自己放灯, 形成连局.
- 灯1, 有目标目标到自己的方向, 没目标自己身后, 技能最大距离到参数指定最短距离之间合适位置放(没有障碍物的点), 如果到最短距离还没有合适的位置就不会放.
- 灯2, 尽量远的能把自己圈住的合适位置
- 灯3, 尽量远的能把自己圈住的合适位置
全局
output(
npc("没状态:重伤", "关系:敌对", "距离<20", "距离最近")
)角色查找
可使用角色查找指令查找符合条件的各种角色, 下面几个表列出了可用的条件及说明。
其中,带 最 字的条件要放在最后,并且只能用一个,如果放在前面,它后面的条件不会生效。
查找条件中的比较操作符只支持 > = < 3个单字符之一, 不支持 >= <= == ~= 。
通用条件,可用于所有类型查找
| 条件 | 说明 |
|---|---|
| "气血<0.5" | 气血百分比小于50% |
| "气血最少" | 气血百分比最少 |
| "气血最多" | 气血百分比最多 |
| "掉血最多" | 损失气血(最大-当前)最多 |
| "内力<0.3" | 内力百分比小于30% |
| "内力最少" | |
| "内力最多" | |
| "关系:敌对" | 是指定关系,"自己", "友好", "敌对", "中立", "队友" |
| "有状态:状态列表" | 是指定状态 |
| "没状态:重伤" | 不是指定状态 |
| "距离<20" | 技能距离小于20尺 |
| "距离最近" | |
| "自己距离<20" | 到自己技能距离小于20尺 |
| "平面距离<20" | 平面距离小于20尺 |
| "角色距离<20" | 三维距离小于20尺 |
| "角度<30" | 前方60度范围 |
| "到我角度<30" | 面向自己60度范围 |
| "视线可达" | |
| "可视自己" | 到自己视线可达 |
| "自己可视" | 自己到对象视线可达 |
| "名字:名字列表" | 是指定名字 |
| "buff时间:buff名或ID" | |
| "我的buff时间:buff名或ID" | |
| "buff层数:急曲>2" | 急曲层数大于2 |
| "我的buff层数:急曲>2" | 自己造成的急曲层数大于2 |
| "buff状态:减伤效果>40" | 减伤效果大于40% |
| "buff类型时间:阴性不利效果>1" | 有阴性不利效果类buff且时间大于1秒 |
| "目标是我" | |
| "不是自己" | |
| "不是目标" | |
| "ID不等于:角色ID" | 不是指定角色ID |
| "读条:四象轮回" | 正在读条四象轮回 |
| "技能释放:盾立>2" | 2秒内没放过盾立 |
| "自己连局内" | |
| "自己连局外" | |
| "骑马" "周围敌对npc最多:范围" "周围敌对玩家最多:范围" "周围掉血队友最多: 范围, 气血百分比, 低于气血百分比的队友数量" |
在马上 --20尺内周围8尺敌对npc最多的敌对npc npc("没状态:重伤", "关系:敌对", "距离<20", "周围敌对npc最多:8") --20尺内周围8尺敌对玩家最多的敌对玩家 enemy("距离<20", "周围敌对玩家最多:8") --距离自己20尺内, 周围8尺有2个以上血量小于80% party("没状态:重伤", "距离<20", "周围掉血队友最多:8, 0.8, 2") --距离自己20尺内, 周围8尺队友最多,不判断血量 party("没状态:重伤", "距离<20", "周围掉血队友最多:8, 1, 1") |
| "标记:云朵" | "云朵""小剑""斧头""钩子""红鼓" "剪刀""棒槌""如意""飞镖""扇子" |
视线可达 可视自己 自己可视 区别
以 tnpc 为例, 视线可达 是目标到NPC视线可达, 可视自己 是NPC到自己视线可达, 自己可视 是自己到NPC视线可达, 如果是查找自己周围的角色, 视线可达 和 自己可视 等价
玩家条件,不能用于NPC, 可用于玩家和队友
| 条件 | 说明 |
|---|---|
| "内功:洗髓经" | 是指定心法 |
| "有载具" | |
| "没载具" | |
| "被悬赏" | |
| "同阵营" | |
| "可选中" | |
| "可偷取:buff列表>时间" | 长歌琴音共鸣, 有指定可偷取buff且大于指定时间且是前2个 |
| "有奇穴:奇穴名" | 有指定奇穴 |
| "没奇穴:奇穴名" | 没有指定奇穴 |
| "内劲点=0" | 解控技能次数 |
队友特定条件
| 条件 | 说明 |
|---|---|
| "同组" | 和自己是同一个小队 |
| "不同组" | 和自己是不同小队 |
| "小队:1" | 1小队中成员 |
NPC特定条件
| 条件 | 说明 |
|---|---|
| "模板ID:xxx" | |
| "表现ID:xxx" | |
| "可选中" | |
| "主人:角色ID" | 主人是指定角色 |
| "强度=6" | 是副本BOSS |
| "连局" | 是连局且在里面 |
| "青山共我" | 是青山共我且在里面 |
player(...)
自己周围符合条件的玩家。
返回值1: 符合条件的角色ID, 没有返回 0, 如果有多个符合条件返回第1个
返回值2: 符合条件的角色数量
下面 enemy, party, npc 系列指令和这个返回值含义相同
enemy(...)
自己周围符合条件没重伤的敌对玩家
party(...)
自己周围符合条件的队友
npc(...)
自己周围符合条件的NPC
tplayer(...)
目标周围符合条件的玩家
tenemy(...)
目标周围符合条件没重伤的敌对玩家
tparty(...)
目标周围符合条件的队友
tnpc(...)
目标周围符合条件的NPC
xplayer(角色ID, ...)
指定角色周围符合条件的玩家
xenemy(角色ID, ...)
指定角色周围符合条件没重伤的敌对玩家
xparty(角色ID, ...)
指定角色周围符合条件的队友
xnpc(角色ID, ...)
指定角色周围符合条件的NPC
pnpc(x, y, z, ...)
指定位置周围符合条件的NPC
employer(NPCID)
获取npc的主人角色ID
地图
map("地图名")
是否在指定地图, 在返回 true, 不在返回 false
mapid()
返回当前地图ID
jjc(类型)
不指定类型,返回当前是否在JJC,JJC类型
指定类型,在JJC且是指定类型返回真
| 类型 | 说明 |
|---|---|
| 0 | 2V2 |
| 1 | 3V3 |
| 2 | 5V5 |
| 3 | 大师赛2V2 |
| 4 | 大师赛3V3 |
| 5 | 大师赛5V5 |
--在JJC
if jjc() then
end
--在 2V2 JJC
if jjc(0) or jjc(3) then
end
dungeon()
是否在副本
battle()
是否在战场
treasure()
是否在吃鸡
zombie()
是否在李渡
allbattle()
是否在所有战场,包括战场,吃鸡,李渡,JJC
moba()
是否在MOBA
移动
jump()
跳跃
movef(启停)
前进
--开始前进
movef(true)
--停止前进
movef(false)
moveb(启停)
后退
movel(启停)
左平移
mover(启停)
右平移
nomove(是否禁止)
禁止或允许移动, 禁止移动后, 前进、后退、左平移、右平移、跳 对应按键被屏蔽, 允许移动或停止运行后结束屏蔽, 用来防止某些重要的技能被打断
--禁止移动
nomove(true)
--允许移动
nomove(false)
stopmove()
停止所有移动
moveto(x, y, z)
移动到指定坐标. 距离目标位置平面距离小于1尺返回 true, 否则返回 false.
系统
keydown(索引或快捷键名)
如果参数是数值, 判断指定自定义快捷键是否按下, 用来处理手动按下快捷键才执行的操作。
有些逻辑用脚本判断比较复杂需要手动参与,用这个命令配合实现。
如果参数是字符串, 判断指定快捷键是否按下。常用快捷键名见下表
| 描述 | 键名 |
|---|---|
| 前进 | MOVEFORWARD |
| 后退 | MOVEBACKWARD |
| 左转 | TURNLEFT |
| 右转 | TURNRIGHT |
| 左平移 | STRAFELEFT |
| 右平移 | STRAFERIGHT |
| 跳跃 | JUMP |
四个快捷栏的16个按钮对应 ACTIONBAR(x)_BUTTON(y), 比如副快捷栏的第五个按钮是 ACTIONBAR2_BUTTON5
--宏运行的比较快,有公共CD的技能想手动释放, 可以判断指定快捷键是否按下优先释放
--如果自定义快捷键1按下
if keydown(1) then
cast("技能")
end
--也可以把技能放在指定的快捷栏, 按下就优先释放
--如果快捷栏1按钮5被按下
if keydown("ACTIONBAR1_BUTTON5") then
cast("技能")
end
gettimer("计时器名")
获取指定计时器从设置开始到现在过去了多少时间, 如果没有设置过指定名字计时器,返回一个很大的值
settimer("计时器名")
设置指定计时器为当前时间
deltimer(计时器名)
清除指定计时器, 相当于没有设置过这个计时器
addopt("选项名", 是否默认开启)
添加宏选项, 添加后在宏选项菜单会显示这个选项,游戏内就可以开启或关闭。
--添加一个宏选项
addopt("副本防开怪", true)
getopt("选项名")
获取宏选项状态,开启返回真,关闭返回假。
load("脚本路径")
载入脚本,一般用来载入通用模块(库)。
脚本路径是软件所在目录下的相对路径。
载入失败系统频道输出错误信息并返回 false。
载入成功返回指定脚本的返回值(一般情况下应该返回模块表),只支持1个返回值。
exit()
结束脚本当次运行, 这个命令之后的脚本不会执行。用于从多层函数调用中立即结束当次运行。
actionclick(动作栏索引,按钮索引)
点击动作栏
--点击第1排动作栏第1个按钮
actionclick(1, 1)
doodad(...)
查找符合条件的doodad, 返回: doodadID, 符合条件的数量
支持的条件参见下表
| 条件 | 说明 |
|---|---|
| "名字:名字列表" | 是指定名字 |
| "模板ID:模板ID列表" | 是指定模板ID |
| "表现ID:表现ID" | 是指定表现ID |
| "距离<6" | 距离小于6尺 |
| "可采集" | 是矿、草等生活技能可用 |
| "可拾取" | 是尸体之类自己可以拾取物品金钱 |
| "有任务" | 有任务需要采集 |
| "距离最近" | 离自己最近的一个 |
interact(NPC或DOODAD ID)
交互 NPC 或 DOODAD, ID 用 npc 或 doodad 指令获取
setglobal("全局设置选项", 是否允许)
设置全局选项, 支持的选项: "自动面向", "技能亮限制"
--如果在副本,关闭自动面向
if dungeon() then
setglobal("自动面向", false)
end
account()
获取当前游戏账号的SHA256, 如果你编写的宏只想自己或者朋友使用, 可以用这个判断,然后把宏加密。
如果要查看当前游戏账号的SHA256, 运行 Log.exe 打开日志窗口, 游戏内菜单 -> 调试信息 -> 当前账号SHA256
play("语音代码")
播放语音, 当前只支持内置的夏一可语音包
茗伊->团队监控->数据语音订阅->官方语音->夏一可语音包->点击使用
关闭窗口, 点击预览当前语音, 鼠标在语音条目上移动的时候左侧就会出现对应的语音代码, 参看下方示例
play("ChengShang_P") --承伤
play("FuYao_P") --扶摇
按钮路径()
开启通用设置中的调试信息后,执行该函数会输出鼠标当前指向的UI路径信息
clickButton("按钮路径")
点击任意可见面板上的按钮。配合上面函数使用
按钮调试("按钮路径",下层序号(可选))
特殊路径,如浪客行,执行该函数会输出鼠标当前指向的UI路径信息
按钮点击("按钮路径",下层序号(可选))
spirit(角色ID)
百战地图获取指定角色精神, 返回:当前精神, 最大精神。 获取失败(不在百战地图,指定角色不存在等)返回 -100, -100
local v = {}
v["自己当前精神"], v["自己最大精神"] = spirit(id())
v["目标当前精神"], v["目标最大精神"] = spirit(tid())
endurance(角色ID)
百战地图获取指定角色耐力, 返回:当前耐力, 最大耐力。 获取失败返回 -100, -100
dialog("对话项文本")
点击指定的对话项,文本必须完全相同包括标点符号。
如果指定的对话项不存在,没有对话项或者只有1个对话项时,和按下F的行为一致。
time(...)
获取当前时间或指定日期的UTC时间.
--不指定参数时, 返回当前时间: UTC时间(秒), 年, 月, 日, 时, 分, 秒, 周几(1-7)
local utc, year, month, day, hour, min, sec, wday = time()
--获取指定日期时间的utc时间, 年月日必须,时分秒可选
local utc = time(2024, 3, 7)
sfx()
获取全屏效果名,当前的用例是获取百战颜色。
local f = {}
function Main()
print(f["百战颜色"]())
end
--获取百战颜色,
f["百战颜色"] = function()
local tSFX = {
["HECTOBATTLE_WHITE"] = "白色",["HECTOBATTLE_YELLOW"] = "黄色",
["HECTOBATTLE_BLUE"] = "蓝色",
["HECTOBATTLE_GREEN"] = "绿色",["HECTOBATTLE_RED"] = "红色",
["HECTOBATTLE_PURPLE"] = "紫色",["HECTOBATTLE_BLACK"] = "黑色",
["HECTOBATTLE_SPIRIT"] = "精神打击",
["HECTOBATTLE_ENDURANCE"] = "耐力打击",
}
local szColor = nil
if buff("21980") then --阿修罗之眼
szColor = tSFX[sfx()]
end
return szColor or "没有"
end
回调函数(事件)
宏由一系列固定名字的回调函数组成。编写好的宏载入后,宏内的回调函数在相应条件满足时会被调用。
最基本的是 Main 函数,每个宏必须有。其它回调函数是可选的。
内存事件(默认开启):开启后使用回调函数才能读到全量周围数据,否则只能读到自己和目标的全量数据
除了 Main 函数, 其它回调函数中有些触发非常频繁,不要在里面写过多代码,否则性能可能会有问题,造成卡顿
Main()
主循环,每秒调用十几次。
function Main()
output("你好,世界!")
end
OnPrepare(CasterID, SkillName, SkillID, SkillLevel, TargetType, TargetID, PosY, PosZ, Frame, StartFrame, FrameCount)
任意角色开始读条时被调用,能拿到技能xyz的坐标,比如别人释放千机变的坐标,boss释放红圈技能的坐标,写躲避的核心
| 参数 | 说明 |
|---|---|
| CasterID | 释放者角色ID |
| SkillName | 技能名 |
| SkillID | 技能ID |
| SkillLevel | 技能等级 |
| TargetType | 目标类型, 2是一个位置 |
| TargetID | 如果目标类型是2,为x坐标, 否则为目标ID |
| PosY | y坐标 |
| PosZ | z坐标 |
| Frame | 读条持续帧数 |
| StartFrame | 开始帧 |
| FrameCount | 当前帧 |
--开始读条
function OnPrepare(CasterID, SkillName, SkillID, SkillLevel, TargetType, TargetID, PosY, PosZ, Frame, StartFrame, FrameCount)
if CasterID == id() then --如果读条的角色是自己
if TargetType == 2 then --如果目标类型是 2, 表示目标是一个位置, 例如天绝地灭之类的放置类技能
print("OnPrepareXYZ->["..xname(CasterID).."] 开始读条:"..SkillName..", 技能ID:"..SkillID..", 技能等级:"..SkillLevel..", 目标位置:"..TargetID.."|"..PosY.."|"..PosZ..", 读条帧数:"..Frame..", 开始帧:"..StartFrame..", 当前帧:"..FrameCount)
else
print("OnPrepare->["..xname(CasterID).."] 开始读条:"..SkillName..", 技能ID:"..SkillID..", 技能等级:"..SkillLevel..", 目标ID:"..TargetID..", 读条帧数:"..Frame..", 开始帧:"..StartFrame..", 当前帧:"..FrameCount)
end
end
end
OnChannel(CasterID, SkillName, SkillID, SkillLevel, TargetType, TargetID, PosY, PosZ, Frame, StartFrame, FrameCount)
任意角色开始引导时被调用(倒读条), 参数同 OnPrepare
OnCast(CasterID, SkillName, SkillID, SkillLevel, TargetType, TargetID, PosY, PosZ, StartFrame, FrameCount)
任意角色释放技能时被调用, 参数含义同 OnPrepare。
瞬发技能释放过程: 按键或者宏命令使用技能 -> 发送数据到服务端 -> 服务端检查通过后释放 -> 服务端通知客户端释放 -> OnCast 触发
读条技能释放过程: 按键或者宏命令使用技能 -> 发送数据到服务端 -> 服务端检查通过后通知客户端开始读条 -> OnPrepare 触发 -> 读条结束 -> 服务端通知客户端释放 -> OnCast 触发
OnBuff(CharacterID, BuffName, BuffID, BuffLevel, StackNum, SkillSrcID, StartFrame, EndFrame, FrameCount)
自己、自己的宠物、队友更新单个buff时被调用。
| 参数 | 说明 |
|---|---|
| CharacterID | 更新buff的角色ID |
| BuffName | buff名 |
| BuffID | buffID |
| BuffLevel | buff等级 |
| StackNum | buff层数 |
| SkillSrcID | 造成这个buff的角色ID |
| StartFrame | 开始帧 |
| EndFrame | 结束帧 |
| FrameCount | 当前帧 |
OnBuffList(CharacterID)
自己、队友、自己宠物之外的角色,不是立即同步buff。当选中时,每秒同步一次buff列表。
| 参数 | 说明 |
|---|---|
| CharacterID | 更新buff列表的角色ID |
OnQidianUpdate()
自己的气点、禅那更新时被调用。
OnYaoxingUpdate()
自己的药性更新时被调用。
OnStateUpdate(nCurrentLife, nCurrentMana, nCurrentRage, nCurrentEnergy, nCurrentSunEnergy, nCurrentMoonEnergy)
自己的状态更新时被调用。
| 参数 | 说明 |
|---|---|
| nCurrentLife | 气血 |
| nCurrentMana | 内力 |
| nCurrentRage | 战意、剑气、怒气、狂意、星运、墨意、弓箭数量 |
| nCurrentEnergy | 神机值、刀魂、格挡值、锐意 |
| nCurrentSunEnergy | 日灵 |
| nCurrentMoonEnergy | 月灵 |
OnFight(bFight)
自己进战或脱战时被调用,进战 bFight 为 true,否则为 false
function OnFight(bFight)
if bFight then
print("进战")
settimer("战斗计时器")
else
print("脱战")
end
end
OnNpcEnter(NpcID, NpcName, NpcTemplateID, NpcModelID, EmployerID, Intensity)
NPC出现时被调用。
| 参数 | 说明 |
|---|---|
| NpcID | NPC角色ID |
| NpcName | 名字 |
| NpcTemplateID | 模板ID |
| NpcModelID | 表现ID |
| EmployerID | 主人角色ID |
| Intensity | 强度 |
OnNpcLeave(NpcID, NpcName, NpcTemplateID, NpcModelID, EmployerID, Intensity)
NPC消失时被调用。 参数含义同 OnNpcEnter
OnBreak(CharacterID)
读条中断时被调用, CharacterID 为 角色ID
OnMountKungFu(KungFu, Level)
自己切换心法时被调用。
| 参数 | 说明 |
|---|---|
| KungFu | 心法ID |
| Level | 等级 |
OnMessage(szMsg, szType)
显示系统聊天信息时被调用。
| 参数 | 说明 |
|---|---|
| szMsg | 消息内容 |
| szType | 类型 |
OnSay(Name, SayText, CharacterID)
NPC喊话时被调用。
| 参数 | 说明 |
|---|---|
| Name | 喊话NPC名字 |
| SayText | 喊话内容 |
| CharacterID | 喊话NPC角色ID |
OnWarning(szText, szType)
显示警告信息时被调用。
| 参数 | 说明 |
|---|---|
| szText | 警告信息内容 |
| szType | 类型 |
OnHotkey(index, isDown)
自定义快捷键按下时被调用
--快捷键事件 开关式
--index: 1-17,写手只需要维护1-17的索引,自动适配用户设置的键位
--isDown: true按下,false松开
function OnHotkey(index, isDown)
if isDown==true then
output("按下", index)
else
output("抬起", index)
end
endOnKeyDown(nIndex)
失效
自定义快捷键按下时被调用, 参数为快捷键索引。
--用作开关的示例
local bSwitch = false --某个开关标志
function OnKeyDown(nIndex)
if nIndex == 2 then --快捷键2被按下
--切换状态
if bSwitch then
bSwitch = false
else
bSwitch = true
end
end
end
OnEnterMap(MapID, MapName)
自己进入地图时被调用。
| 参数 | 说明 |
|---|---|
| MapID | 地图ID |
| MapName | 地图名 |