QFunction-0是引擎层级的全局功能响应脚本,所有与玩家行为挂钩的动态逻辑最终都会在这里完成判定和执行。打开Mir200\Envir\Market_Def目录,找到QFunction-0.txt,用Notepad++打开,不要用系统自带记事本,否则中文注释容易乱码。脚本自上而下分为固定段位,[@main]不是必须的,但[@PlayLevelUp]、[@KillMon]、[@Login]、[@Logout]、[@UseItem]这些标签必须严格对应引擎事件名,写错一个字母整个触发就会失效。
玩家升级触发是最常见的入口。在[@PlayLevelUp]段写入:
if
CHECKLEVEL > 35
act
SENDMSG 6 恭喜你突破35级,属性已强化!
GAMEPOINT + 5
INCABILITY 0 1 1
这里的CHECKLEVEL是等级判断条件,#act后面跟实际执行命令。SENDMSG 6代表红色系统提示,GAMEPOINT给泡点经验,INCABILITY调整攻击资质。如果想做阶梯奖励,继续叠加条件:
if
CHECKLEVEL = 40
act
GIVE 青龙战甲 1
break
break的作用是防止继续执行下面的同级判断,避免重复发奖。
杀怪触发写在[@KillMon]段。假设要做BOSS首杀公告:
if
CHECKCURRTARGETRACE = 96
CHECKCURRTARGETNAME 祖玛教主
ISFIRSTKILL
act
SENDMSG 0 【%s】成功斩杀首次出现的祖玛教主!
BROADCAST 0 全服飘雪特效
PLAYEFFECT 51 3 0 0 0 0 0
CHECKCURRTARGETRACE = 96表示当前击杀的是怪物类型,ISFIRSTKILL是引擎内置的首杀标记。如果没有这个标记,每次杀怪都会触发,那就变成刷屏脚本了。
登录触发[@Login]适合做每日签到和状态恢复。例如:
if
CHECKLOGINTIME > 20240101
CHECKDAY !DaySign
act
SETDAY DaySign
GIVE 修复神水 3
SENDMSG 6 今日首次上线,已领取签到奖励!
CHECKDAY是日期变量控制,防止一天内重复领取。如果要限制每天只能领一次,必须用SETDAY记录状态,否则重启引擎后状态丢失。
物品使用触发[@UseItem]可以实现特殊装备效果。比如佩戴传送戒指自动回城:
if
CHECKITEMTYPE 22
CHECKGROUPTEAMCOUNT < 2
act
MAPMOVE 3 330 330
elseact
SENDMSG 6 组队状态下无法使用传送戒指
CHECKITEMTYPE 22对应戒指类装备,MAPMOVE直接传送到盟重土城。如果需要在脱下装备时清除BUFF,要在[@TakeOffItem]段写对应的DECABILITY或DELSTATE命令。
变量传递是QFunction-0的核心难点。所有临时数据建议用<$STR(N)>格式,N取100以上的数值避免和系统变量冲突。例如记录连杀数:
[@KillPlayer]
act
INC <$STR(101)> 1
if
EQUAL <$STR(101)> 5
act
SENDMSG 6 你已经完成5连杀,攻击力临时提升!
INCABILITY 0 10 60
DelayCall 60000 @ClearKillBuff
这里<$STR(101)>就是连杀计数器,DelayCall用于60秒后回调[@ClearKillBuff]段清除加成,避免永久生效。
调试时务必打开M2Server的“显示调试信息”,每一条触发都会在控制台输出。如果脚本不生效,优先检查标签拼写、条件符号是否用了英文括号、变量名是否前后一致。QFunction-0不支持嵌套IF,复杂逻辑要拆分成多个独立段,通过GOTO跳转执行。所有命令必须以#开头,参数之间用空格分隔,连续两个空格会导致解析失败。掌握这套脚本后,任务系统、活动副本、属性成长、特殊技能触发都能在同一个文件里闭环实现,无需再依赖零散的NPC脚本拼凑功能。
传奇单机架设QFunction-0脚本实战:从触发机制到功能落地全解析
来源:
作者:
点击:

