双击物品触发脚本是传奇服务端中实现会员卷、经验卷、传送石、自动回收、赞助礼包等功能的核心技术。整个机制的本质是:物品数据库中把某个物品标记为可触发类型,玩家双击该物品时引擎根据编号找到QFunction-0.txt中对应的标签段执行脚本命令。搞清这条链路之后,剩下的就是按需求写功能逻辑。下面从数据库配置到脚本编写逐步拆解。
物品数据库的关键字段配置
触发类物品的核心标识是STDMODE字段。在StdItems.DB中找到需要添加触发功能的物品记录,把STDMODE修改为31。这个值告诉引擎该物品属于脚本触发类型,双击时不执行默认的药品或装备逻辑,而是跳转到QFunction脚本中查找对应的处理段。
AniCount字段决定触发编号。把AniCount设置为一个1到999之间的数字,这个数字将用于匹配QFunction-0.txt中的标签名。例如AniCount设为200,引擎就会去找[@StdModeFunc200]这个标签。每件触发类物品的AniCount值必须唯一,不能与服务器中已有的其他31类物品重复,否则双击时会触发错误的脚本段。建议在设置前先查看服务器中已经使用了哪些编号,避开已占用的值。
Source字段控制消耗方式。Source设为0表示物品使用后消失(消耗型),设为1表示物品按次数消耗,每次使用降低1点持久,持久用完物品才消失,同时物品图标上会红字显示剩余次数。对于一次性使用的物品如经验卷、礼包等设为0;对于可以多次使用的传送石、喇叭等设为1,并在DuraMax字段中填入最大使用次数。
Shape字段在GEE引擎中还有额外的控制作用。Shape设为50表示物品使用一次后消失,Shape设为51表示物品可以一直使用直到手动删除。如果使用Shape=51,需要在脚本中手动执行物品回收命令,否则物品不会自动消耗。Source字段设为-2时,物品可以放入物品栏,不受等级限制,适合低等级玩家使用的触发类道具。
对于BLUE引擎,Reserved字段需要额外处理。设置StdMode=31且Reserved=99时,物品才支持双击触发脚本功能,使用一次掉一点持久。
QFunction-0.txt脚本文件的编写
脚本文件路径固定在Mirserver\Mir200\Envir\Market_Def\QFunction-0.txt。31类触发物品的双击脚本只能写在这个文件里,写到其他脚本文件中引擎不会执行。打开文件后,在合适的位置添加触发段,标签格式为[@StdModeFuncX],其中X就是物品数据库中AniCount字段的值。
基础的双击触发脚本结构如下:
```
[@StdModeFunc200]
#IF
#ACT
sendmsg 6 触发成功
```
这个最简单的结构用于验证配置是否生效。如果双击物品后聊天框显示“触发成功”,说明数据库和脚本已经正确对接。
带消耗和奖励的完整脚本示例。以双击金条获得100万金币为例:
```
[@StdModeFunc200]
#IF
NOT CHECKBAGSIZE 4
#ACT
MESSAGEBOX 你背包满了
break
#ELSEACT
linkbagitem <$UseItemMakeIndex>
dellinkitem 1
give 金币 1000000
sendmsg 6 你使用金条获得了100万金币
break
```
这段脚本的逻辑是:先检测背包是否有足够空间,背包满时弹出提示并中断操作,物品不会被消耗。背包空间足够时,用linkbagitem关联当前触发的物品,dellinkitem命令删除关联的物品,然后发放奖励。用<$UseItemMakeIndex>获取当前使用物品的ID来精准定位,比直接用物品名称更安全,避免了物品名称重复导致的误删问题。
GEE引擎中标签名有所不同。GEE引擎的人物触发使用[@StdModeFuncExX],英雄触发使用[@HeroStdModeFuncExX],其中的X对应物品的AniCount值。脚本编写方式与GOM引擎基本一致,但部分命令存在差异,例如添加BUFF的命令在GOM引擎中是ADDBUFF,在GEE引擎中需要用SETBUFF。
BLUE引擎的标签格式为[@STDMODEFUNCXXX],大小写不敏感但标签名中的数字必须与AniCount一致。BLUE引擎的防刷机制需要注意,双击触发类物品如果脚本中不做物品存在检测,玩家可以通过发包工具绕过客户端限制,反复触发脚本获得奖励而不消耗物品。正确的写法是在#IF段中用CHECKITEM命令检测玩家背包中是否确实存在该物品,确认存在后再在#ACT段中用TAKE命令扣除,不要依赖引擎自动消耗。
双击弹出输入框的进阶用法
实现双击物品弹出文字输入框,玩家输入内容后根据输入值执行不同的逻辑,这在万里传音、自定义密令等场景中很常用。核心命令是INPUTTEXT或INPUT,不同引擎的命令名称和参数格式有差异。
GOM引擎的实现写法:
```
[@StdModeFunc6]
#ACT
INPUTTEXT “请输入要发送的内容:” @SendMsg 20 253
BREAK
[@SendMsg]
#IF
EQUAL <$STR(S$INPUT)> “”
#ACT
SENDMSG 6 输入内容不能为空
BREAK
#ELSEACT
SENDMSG 1 {★全服公告★}玩家〖<$USERNAME>〗广播:<$STR(S$INPUT)>
TAKE 万里传音卷 1
```
INPUTTEXT命令后面的参数依次是提示文字、跳转标签、最大字符数(1个汉字算2个字符)、文字颜色代码。玩家输入的内容存储在S$INPUT变量中,在后续的跳转标签中通过<$STR(S$INPUT)>读取。跳转标签段中先检测输入是否为空,为空则提示并中断操作,输入了内容则执行广播并扣除物品。
BLUE引擎的输入命令是INPUT,需要配合CALL调用。HERO引擎使用GETVALIDSTR命令并需要额外的验证模块。脚本编写前需要确认当前引擎版本支持的输入命令类型,避免写出引擎无法识别的命令。
敏感词过滤和防刷设计
触发类物品如果不做防刷处理,很容易被恶意利用。高价值奖励物品的触发脚本必须加上多层检测。
敏感词过滤。在QFunction脚本中调用CHECKTEXTLIST命令检测玩家输入的内容是否包含违禁词:
```
#IF
CHECKTEXTLIST ..\QuestDiary\屏蔽词.txt <$STR(S$INPUT)>
#ACT
SENDMSG 6 包含违禁词汇,请重新输入
GOTO @StdModeFunc6
```
屏蔽词.txt文件放在QuestDiary目录下,每行一个词条。玩家输入的内容如果匹配到文件中的任意一个词条,就会跳转回上一步要求重新输入。
使用频率限制。通过个人变量记录上次使用的时间,用当前时间和上次时间的差值判断是否在冷却期内:
```
#IF
CHECK [111] 1
#ACT
MESSAGEBOX 操作过于频繁,请稍后再试
BREAK
#ACT
SET [111] 1
DELAYGOTO 300000 @ClearCD
[@ClearCD]
#ACT
SET [111] 0
```
这段逻辑使用个人变量111作为冷却标记,玩家使用时将标记设为1,同时启动一个30万毫秒(5分钟)的延迟跳转,时间到达后把标记重置为0。冷却期内再次使用时检测到标记为1,直接提示并中断操作。
物品存在性验证。在触发段的#IF中检查玩家背包中是否确实有该物品,防止通过发包直接调用脚本标签:
```
#IF
CHECKITEM 万里传音卷 1
#ACT
;后续逻辑
#ELSEACT
SENDMSG 6 物品不足
BREAK
```
多引擎适配的注意事项
GOM引擎和GEE引擎的31类物品触发机制基本相同,数据库配置的STDMODE和AniCount字段含义一致,脚本标签名在GEE引擎中多了一个Ex后缀,从[@StdModeFuncX]变为[@StdModeFuncExX]。部分脚本命令的名称也有差异,编写时需要对照对应引擎的命令手册确认。
BLUE引擎的标签格式为[@STDMODEFUNCXXX](全大写),和GOM的[@StdModeFunc200]格式不同。BLUE引擎的防刷检测要求更严格,所有双击触发类物品都必须在脚本中主动检测物品存在并手动扣除,不能依赖引擎的自动消耗机制。
HERO引擎和LEG引擎的行会数据管理以文件操作为主,31类物品的触发机制同样通过STDMODE=31和AniCount字段实现,脚本标签格式和GOM引擎一致。
触发不生效的常见排查
双击物品后没有任何反应,按以下顺序排查。
第一,确认QFunction-0.txt文件编码为ANSI格式。用UTF-8格式保存的文件,引擎读取时会把BOM头当作脚本内容的一部分,导致标签识别失败。用Notepad++打开文件,在编码菜单中确认当前显示“ANSI”,如果不是,选择“转为ANSI编码”后保存。
第二,检查标签名中的数字是否与物品AniCount完全对应。AniCount是200,标签名就必须是[@StdModeFunc200],数字差一位或标签名拼写错误都会导致引擎找不到对应的处理段。
第三,确认QFunction-0.txt中不存在重复的标签名。同一个标签名出现两次,引擎只会执行其中一个,另一个被忽略。
第四,检查物品的STDMODE是否为31。STDMODE被其他数值覆盖后,双击物品会执行默认的药品或装备逻辑,不会跳转到QFunction脚本。
第五,修改数据库或脚本后需要重新加载。数据库修改后在M2Server控制台的物品设置中执行重新加载物品数据库,脚本修改后执行重新加载脚本,两项都执行完毕后再测试。只保存文件不执行重载操作,引擎读的还是内存中的旧数据。
传奇双击物品自动触发指定脚本功能数据库配置与QFunction脚本编写全解
来源:
作者:
点击:

