脚本基础

触发系统

系统梳理 Blue 引擎的触发标签体系,包括 QFunction 功能触发、QMapEvent 地图事件、QManage 登录触发和 Robot 机器人触发。

触发系统是 Blue 引擎脚本开发的核心机制。当特定游戏事件发生时,引擎会自动执行对应的脚本标签,无需玩家手动触发。

触发系统架构

Blue 引擎的触发系统由以下几个核心文件组成:

脚本文件作用
QFunction-0.txt功能脚本,处理玩家行为、装备操作、技能、交易等触发事件
QManage.txt登录脚本,人物每次登录时执行,也承载服务器启停和数据存取触发
QMapEvent-0.txt地图事件脚本,处理地图坐标范围触发
QChatMission-0.txt聊天栏和任务导航专用功能脚本
RobotManage.txt机器人专用脚本,配合 Robot_def 目录使用
MapQuest.txt杀怪/拾取触发配置文件

QFunction 触发标签

人物行为触发

触发标签触发时机
@PlayLevelUp人物升级时
@PlayDie人物死亡时
@ONLOGOUT_SOFTCLOSING小退触发(安全区内有效)
@ONLOGOUT_OFFLINEPLAYING大退触发(安全区内有效)
@QueryUserState查看别人装备时,$PARAM(1) 为被查看的角色名
@KickDoubleConnect被顶号时

大退、小退触发默认只在安全区内有效;在 !Setup.txt 中写入 QUITGAMEWIDETRIGGER=1 后,非安全区下线同样会触发 [@ONLOGOUT_OFFLINEPLAYING] 与 [@ONLOGOUT_SOFTCLOSING],该开关默认为 0。

复活触发

触发标签触发时机关键参数
@OnRevive复活成功时$PARAM(3) 角色名、$PARAM(4) 地图、$PARAM(5) X、$PARAM(6) Y、$PARAM(8) 1 人物 / 60 英雄
@OnItemDamageRevive复活且消耗装备持久时$PARAM(0) 装备位置、$PARAM(1) 装备名、$PARAM(7) 装备ID、$PARAM(9) 剩余持久

装备触发

触发标签触发时机说明
@TakeOnX穿戴装备时X 为装备位置
@TakeOffX脱下装备时X 为装备位置
@HeroTakeOnX英雄穿戴装备时X 为装备位置(0~16),写在 QFunction-0.txt 中
@HeroTakeOffX英雄取下装备时X 为装备位置(0~16),在 [@HeroTakeOff3] 中可以检测到脱下的旧装备
@DropItem人物死亡掉落物品时$PARAM(1) 物品名、$PARAM(2) Looks、$PARAM(3) 角色名、$PARAM(4) 地图名、$PARAM(5) X、$PARAM(6) Y
@DroppingItem丢弃/掉落物品之前$PARAM(0) 1000 死亡 / 2000 手动 / 0~16 装备位
@ProduceItem物品出产时需物品 RareItem 含 128
@EvalEquipSucceed鉴定装备成功时可临时使用 GetEquipProps、UpgradeDlgItem(位置 10000)等命令,注意用法,防止死循环
@SECRETPROPERTY_SKILL鉴定出特殊技能时解读出特殊技能时同时赋予 S98 技能名、S99 装备名;目前支持五岳独尊、召唤巨魔、神龙附体、倚天辟地
@RefineItem_Succeed淬炼成功时可临时使用 GetEquipProps
@SwitchFashion切换时装时$PARAM(0) 0 隐藏 / 1 外显
@OnCursingWeapon武器诅咒时$PARAM(0) 武器名、$PARAM(1) 幸运、$PARAM(2) 诅咒

技能触发

触发标签触发时机关键参数
@MagSelfFuncX释放技能时(X 为技能ID)$PARAM(0) 0 玩家 / 1 英雄
@MagTagFuncX技能命中目标时(X 为技能ID)$PARAM(3) 攻击者角色名

物品使用触发

触发标签触发时机关键参数
@StdModeFuncX双击物品触发(X 为 AniCount)$PARAM(0) 0 玩家 / 1 英雄
@PickUpItem拾取物品时$PARAM(0) 0 非背包 / 1 背包 / 2 挖取
@MonDropItemDown怪物掉落极品时$PARAM(3) 掉落者名

商店与交易触发

触发标签触发时机关键参数
@DealingGoods商店买卖之前$PARAM(0) 0 购买 / 1 出售(需 RareItem 含 32)
@StorageItem仓库存取之前$PARAM(0) 0 存 / 1 取(需 RareItem 含 64)
@Shopping商店购物时$PARAM(4) 数量、$PARAM(5) 最大持久

寄售行触发

触发标签触发时机关键参数
@SaleOnConsignment寄售上架时$DLGITEMID 物品ID、$PARAM(0) 物品名称

英雄相关触发

触发标签触发时机
@HeroLevelUp英雄升级
@HeroDie英雄死亡(含主号击杀)
@CreateHeroOK创建英雄成功触发、召唤英雄
@HeroLogin召唤英雄触发(假人也可触发)
@HeroIPLevelUp英雄内功升级

称号触发

触发标签触发时机
@TitleChanged_XX人物改变使用称号或上线时用到称号(XX 为称号物品的 Shape)
@HeroTitleChanged_XX英雄改变使用称号或上线时用到称号(XX 为称号物品的 Shape)

XX 取称号物品 DB 中的 Shape,配置方法见 称号称谓设置。

内功触发

触发标签触发时机
@IPLEVELUP人物内功升级
@HEROIPLEVELUP英雄内功升级

怪物触发

触发标签触发时机
@KillMon杀怪触发(配合 MapQuest.txt)
@MonDrop怪物掉落触发
@OpenTreasureChest打开宝箱时
@GetButchItem怪物名字挖卧龙怪时

地图事件触发

触发标签触发时机关键参数
@EnterMap进入地图时(替代 @OnMapChanged)$PARAM(0) 是否英雄(0 人物 / 1 英雄)、$PARAM(1) 原地图、$PARAM(2) 进入地图
@LeaveMap离开地图时(替代 @OnMapChanging)$PARAM(1) 原地图、$PARAM(2) 目标地图

SetAbility 相关触发

触发标签触发时机
@SetAbility_XXSetAbility 设置时(XX 为 ID)
@ResetAbility_XXSetAbility 重置时(XX 为 ID)
@SuspendAbility_XXSetAbility 暂停时(XX 为 ID)
@ResumeAbility_XXSetAbility 恢复时(XX 为 ID)

其他触发

触发标签触发时机
@TimerX定时器触发
@WALLWARSTOPFUNC每日 22 点准时触发
@InPutStringX输入框输入内容时
@OnGetEquipPropsGetEquipProps 获取属性后
@EnableCharacterResultEnableCharacter 操作结果
@chgname_fail_name_used_0改名时在线角色名占用

QManage 触发标签

登录脚本

人物每次登录时,引擎自动执行 QManage.txt 中的 @Login 标签:

[@Login]
#IF
CheckLevelEx = 1
#ACT
GIVE 布衣 1
SENDMSG 6 欢迎来到本服!

服务器启停触发

触发标签触发时机
@OnStart服务器启动时
@OnStop服务器关闭时

数据存取触发

触发标签触发时机
@LoadDataQM 加载人物数据时(不支持英雄)
@SaveDataQM 保存人物数据时(不支持英雄)

聊天监控触发

当 !Setup.txt 中 ViewWhisper=2 时,Server 节下的聊天监控会触发 @OnMonitorChatMessage。

$CHATMSG 是聊天监控专用变量,禁止在此触发中使用任何文本操作命令。

QMapEvent 地图事件触发

QMapEvent-0.txt 用于配置地图坐标范围触发,格式如下:

地图号 坐标X 坐标Y 触发标签

当玩家进入指定地图的坐标范围时,自动执行对应的触发标签。

该文件还承接 MapInfo.txt 中 KILLFUNC(数字) 对应的击杀联动:地图参数写 KILLFUNC(1) 时,引擎会执行 QMapEvent-0.txt 中的 [@KillPlay1](击杀玩家)与 [@KillPlayMon1](击杀怪物)。因此 [@KillPlay数字] 属于 QMapEvent 触发,不写在 QFunction 中,详见 QMapEvent-0.txt。

MapQuest 杀怪/拾取触发

MapQuest.txt 用于配置杀怪和拾取触发:

地图号 变量 判断 角色名 物品名 执行文件名

拾取触发示例:

3 [123] 0 蛤蟆 乌木剑 QPickup1
3 [123] 0 * 屠龙 QPickup2

怪物刷新预告触发(MonGen.txt 第 12 参数):

3 333 333 蜈蚣 6 1 2 0 0 0 0 @RespawnAlert,60|@RespawnAlert,10

触发时 $PARAM(0) 为秒数、$PARAM(1) 为分钟数、$PARAM(2) 为怪物名、$PARAM(3) 为地图名、$PARAM(4) 为中心坐标 X、$PARAM(5) 为中心坐标 Y。

Robot 机器人定时触发

机器人在 Robot_def\AutoRunRobot.txt 中配置定时规则:

#AutoRun NPC SEC 10 @Robot1
#AutoRun NPC MIN 1 @Robot2
#AutoRun NPC HOUR 1 @Robot3
#AutoRun NPC DAY 1 @Robot4

支持精确到秒的时间格式:

#AutoRun NPC RUNONDAY 12:00:00 @正午触发
#AutoRun NPC RUNONWEEK 5:18:00:00 @周五18点触发

定时触发到达后,引擎会执行 RobotManage.txt 中对应的标签。

触发参数变量

通用参数

变量说明
$PARAM(0) ~ $PARAM(9)触发参数,含义随触发器不同而变化
$PARAMSTR(0) ~字符串型触发参数
$DLGITEMID对话框物品ID(64 位字符串型)

攻击触发专用变量

变量说明
$ATTINFO_NAME攻击者名称
$ATTINFO_RACE攻击者种族
$ATTINFO_ISHUMAN攻击者是否人物
$ATTINFO_ISHERO攻击者是否英雄
$ATTINFO_HITTYPE攻击类型(0 普通 / 1 暴击)
$ATTINFO_DAMAGE攻击伤害值
$ATTINFO_SKILLID攻击技能ID
$ATTINFO_MNAME攻击者主人名称

目标触发专用变量

变量说明
$TARINFO_NAME目标名称
$TARINFO_ISHUMAN目标是否人物
$TARINFO_STATID目标 StatID
$TARINFO_CX / $TARINFO_CY目标坐标

完整的攻击触发开关、$ATTINFO_* / $TARINFO_* / $T.* 变量表与脚本示例见 攻击触发 @Attack / @UnderAttack。

触发优先级和链式触发

当多个触发条件同时满足时,引擎按以下优先级处理:

  1. QFunction 中的触发标签优先级最高
  2. QMapEvent 地图事件次之
  3. QManage 登录触发在玩家进入游戏时执行
  4. Robot 定时触发按配置的时间规则独立运行

在同一个触发标签中,可以通过 GOTO 或 CALL 实现链式触发,将多个功能串联执行。

注意事项

  1. QFunction 触发标签区分大小写
  2. 触发标签不能重复定义
  3. 触发脚本中避免死循环逻辑,尤其是使用 GetEquipProps 等可能递归触发的命令
  4. @LoadData 和 @SaveData 不支持英雄,不要在其中编写繁重脚本
  5. @OnMonitorChatMessage 禁止使用任何文本操作命令
  6. QManage 登录脚本中不宜放置耗时操作
  7. 大量触发事件建议使用机器人定时器代替实时触发

相关阅读