触发原理与脚本位置 捡取物品触发功能通过QFunction-0.txt脚本文件实现。当玩家捡取地面物品时,系统自动检测该物品是否在触发列表中,若存在则执行对应脚本段。触发脚本位于Mir200\Envir\MapQuest_def\QFunction-0.txt文件中,使用[@PickUpItemX]格式定义,X为物品数据库中StdIndex字段数值。M2Server选项-功能设置-其他控制中需开启捡取物品触发功能。
基础触发脚本结构 最简单的捡取触发脚本示例:
[@PickUpItem1]
#ACT
SENDMSG 0 玩家[<$USERNAME>]捡取了屠龙!
物品数据库中StdIndex为1的物品被捡取时,发送全服公告。SENDMSG 0表示发送全服黄色公告,<$USERNAME>为玩家角色名变量。脚本必须放在QFunction-0.txt文件中,物品StdIndex需与脚本段编号对应。
多物品触发设置 多个物品共享同一触发脚本时使用范围检测:
[@PickUpItem1]
[@PickUpItem2]
[@PickUpItem3]
#ACT
SENDMSG 0 玩家[<$USERNAME>]捡取了高级武器!
物品StdIndex为1、2、3时均执行相同脚本。也可使用条件判断区分不同物品:
[@PickUpItem1]
#ACT
MOV P0 1
GOTO @PickUpCheck
[@PickUpItem2]
#ACT
MOV P0 2
GOTO @PickUpCheck
[@PickUpCheck]
#IF
EQUAL P0 1
#ACT
SENDMSG 0 玩家[<$USERNAME>]捡取了屠龙!
#IF
EQUAL P0 2
#ACT
SENDMSG 0 玩家[<$USERNAME>]捡取了开天!
MOV P0 1将物品标识存入变量,GOTO跳转到公共处理段,EQUAL P0 1判断具体物品。
条件判断与限制 添加捡取条件限制,如等级、职业、地图等:
[@PickUpItem1]
#IF
CHECKLEVELEX < 40
#ACT
SENDMSG 0 玩家[<$USERNAME>]等级不足40,无法捡取屠龙!
TAKE 屠龙 1
#ELSEACT
SENDMSG 0 玩家[<$USERNAME>]成功捡取屠龙!
CHECKLEVELEX < 40检测玩家等级小于40,条件成立时TAKE 屠龙 1收回物品并发送提示。等级足够时发送成功消息。
职业限制脚本 限制特定职业捡取物品:
[@PickUpItem1]
#IF
CHECKJOB Warrior
#ACT
SENDMSG 0 战士玩家[<$USERNAME>]捡取了屠龙!
#ELSEACT
SENDMSG 0 非战士玩家试图捡取屠龙!
TAKE 屠龙 1
CHECKJOB Warrior检测战士职业,非战士职业捡取时收回物品。CHECKJOB Wizard检测法师,CHECKJOB Taoist检测道士。
时间间隔控制 防止频繁捡取触发,添加时间间隔检测:
[@PickUpItem1]
#IF
CHECK [捡取冷却] 1
#ACT
SENDMSG 0 捡取过于频繁,请稍后再试。
TAKE 屠龙 1
BREAK
#ELSEACT
SET [捡取冷却] 1
DelayCall 5000 @重置冷却
SENDMSG 0 玩家[<$USERNAME>]捡取了屠龙!
[@重置冷却]
#ACT
SET [捡取冷却] 0
CHECK [捡取冷却] 1检测冷却标记,SET [捡取冷却] 1设置标记,DelayCall 5000五秒后执行@重置冷却段清除标记。BREAK终止脚本执行。
变量记录与统计 记录玩家捡取特定物品数量:
[@PickUpItem1]
#ACT
INC P10 1
SENDMSG 0 玩家[<$USERNAME>]第<$STR(P10)>次捡取屠龙!
INC P10 1增加捡取计数,<$STR(P10)>显示当前次数。P10为个人变量,角色下线后仍保存。
地图限制触发 特定地图内捡取才触发提示:
[@PickUpItem1]
#IF
EQUAL <$MAP> 3
#ACT
SENDMSG 0 玩家[<$USERNAME>]在盟重土城捡取了屠龙!
#ELSEACT
SENDMSG 0 玩家[<$USERNAME>]捡取了屠龙!
EQUAL <$MAP> 3检测当前地图编号,3为盟重土城。不同地图显示不同提示消息。
组队捡取共享 组队状态下捡取触发队伍提示:
[@PickUpItem1]
#IF
CHECKGROUP
#ACT
GROUPMSG 0 队员[<$USERNAME>]捡取了屠龙!
#ELSEACT
SENDMSG 0 玩家[<$USERNAME>]捡取了屠龙!
CHECKGROUP检测玩家是否有队伍,GROUPMSG 0发送队伍消息。组队时通知队友,非组队时发送全服公告。
捡取记录日志 将捡取信息写入日志文件:
[@PickUpItem1]
#ACT
SENDMSG 0 玩家[<$USERNAME>]捡取了屠龙!
WRITELINE ..\QuestDiary\捡取日志.txt [<$DATETIME>] <$USERNAME> 捡取屠龙
WRITELINE将记录写入QuestDiary目录下的捡取日志.txt文件,格式为[时间] 角色名 捡取物品。便于管理员查询物品流向。
物品绑定触发 捡取时自动绑定物品给玩家:
[@PickUpItem1]
#ACT
SENDMSG 0 玩家[<$USERNAME>]捡取了绑定屠龙!
SetIconFlag 1 1
SetIconFlag 1 1将物品栏第一格物品设置为绑定状态。参数1为物品位置,1为绑定标志。绑定后物品无法交易、丢弃、存仓。
随机奖励触发 捡取物品时概率获得额外奖励:
[@PickUpItem1]
#ACT
SENDMSG 0 玩家[<$USERNAME>]捡取了屠龙!
RANDOM 10
#IF
SMALL <$STR(N0)> 3
#ACT
GAMEGOLD + 100
SENDMSG 0 幸运降临!额外获得100元宝!
RANDOM 10生成0-9随机数,SMALL <$STR(N0)> 3检测小于3即30%概率。条件成立时GAMEGOLD + 100增加元宝。
任务物品检测 捡取任务物品触发任务进度更新:
[@PickUpItem100]
#ACT
SENDMSG 0 玩家[<$USERNAME>]获得了任务物品!
SET [任务进度] 1
SENDMSG 0 任务进度更新!
SET [任务进度] 1设置任务进度标记。配合任务脚本检测标记值推进任务流程。
极品装备提示 捡取装备时检测极品属性并特别提示:
[@PickUpItem1]
#ACT
GetUserItemValue 1 0 P20
#IF
LARGE P20 5
#ACT
SENDMSG 0 玩家[<$USERNAME>]捡取了极品屠龙!攻击+<$STR(P20)>
#ELSEACT
SENDMSG 0 玩家[<$USERNAME>]捡取了屠龙。
GetUserItemValue 1 0 P20读取物品栏第一格装备的攻击属性值,LARGE P20 5检测攻击大于5。极品装备发送特别公告,普通装备普通提示。
颜色区分提示 不同品质物品使用不同颜色消息:
[@PickUpItem1]
#ACT
SENDMSG 1 玩家[<$USERNAME>]捡取了普通屠龙!
[@PickUpItem2]
#ACT
SENDMSG 4 玩家[<$USERNAME>]捡取了稀有屠龙!
[@PickUpItem3]
#ACT
SENDMSG 5 玩家[<$USERNAME>]捡取了史诗屠龙!
SENDMSG 1发送灰色消息,SENDMSG 4发送粉色消息,SENDMSG 5发送红色消息。通过颜色区分物品稀有度。
数量累计提示 捡取多个相同物品时累计提示:
[@PickUpItem1]
#ACT
INC P30 1
#IF
EQUAL P30 10
#ACT
SENDMSG 0 玩家[<$USERNAME>]已累计捡取10把屠龙!
MOV P30 0
#ELSEACT
SENDMSG 0 玩家[<$USERNAME>]捡取了屠龙,累计<$STR(P30)>把。
INC P30 1增加计数,EQUAL P30 10检测达到10把时发送累计公告并重置计数。未达到时显示当前累计数量。
时间分段提示 不同时间段捡取显示不同提示:
[@PickUpItem1]
#IF
HOUR 6
MIN 0
HOUR 12
MIN 0
#ACT
SENDMSG 0 玩家[<$USERNAME>]清晨捡取了屠龙!
#IF
HOUR 12
MIN 0
HOUR 18
MIN 0
#ACT
SENDMSG 0 玩家[<$USERNAME>]午后捡取了屠龙!
#ELSEACT
SENDMSG 0 玩家[<$USERNAME>]夜晚捡取了屠龙!
检测小时与分钟判断时间段,6-12点为清晨,12-18点为午后,其他时间为夜晚。不同时间段使用不同提示文案。
首捡特别提示 服务器首次捡取某物品特别公告:
[@PickUpItem1]
#IF
CHECK [全服首捡] 0
#ACT
SET [全服首捡] 1
SENDMSG 0 全服首把屠龙被玩家[<$USERNAME>]捡取!
#ELSEACT
SENDMSG 0 玩家[<$USERNAME>]捡取了屠龙。
CHECK [全服首捡] 0检测全局标记,0表示未触发过。首次捡取时SET [全服首捡] 1设置标记并发送全服首捡公告。后续捡取普通提示。
怪物关联提示 捡取特定怪物掉落物品时提示怪物信息:
[@PickUpItem1]
#ACT
SENDMSG 0 玩家[<$USERNAME>]捡取了赤月恶魔掉落的屠龙!
脚本中直接写入怪物名称。如需动态获取,需配合怪物死亡触发记录变量。
区域限制触发 特定坐标区域内捡取才生效:
[@PickUpItem1]
#IF
InRange 330 320 10
#ACT
SENDMSG 0 玩家[<$USERNAME>]在安全区捡取了屠龙!
#ELSEACT
SENDMSG 0 玩家[<$USERNAME>]在野外捡取了屠龙!
InRange 330 320 10检测玩家是否在以330,320为中心10格范围内。安全区内与野外显示不同提示。
触发效果扩展 捡取时附加视觉或声音效果:
[@PickUpItem1]
#ACT
SENDMSG 0 玩家[<$USERNAME>]捡取了屠龙!
PlayEffect 1 330 320 5
PlayEffect 1 330 320 5在坐标330,320播放1号特效5秒。需在M2Server中预先配置特效编号。
多条件组合检测 综合多个条件决定是否触发:
[@PickUpItem1]
#IF
CHECKLEVELEX > 35
CHECKJOB Warrior
CHECKGUILD
EQUAL <$MAP> 3
CHECKGAMEGOLD > 1000
#ACT
SENDMSG 0 符合条件的战士玩家[<$USERNAME>]捡取了屠龙!
#ELSEACT
SENDMSG 0 玩家[<$USERNAME>]捡取了屠龙,但不符合特别条件。
同时检测等级大于35、战士职业、有行会、在盟重土城地图、元宝大于1000。全部满足时发送特别提示。
脚本调试方法 测试捡取触发脚本时使用GM命令辅助。@ReloadQFunction重载QFunction-0.txt脚本。@ViewP0查看变量P0值。@SetP0 1设置变量值。@Make 屠龙 1生成测试物品。捡取后观察M2Server控制台输出,确认脚本执行。修改脚本后及时重载,避免重启服务端。
最终脚本部署 在QFunction-0.txt中添加捡取触发脚本段,保存文件。M2Server控制台点击选项-功能设置-其他控制,勾选启用捡取物品触发。重启M2Server或使用@ReloadQFunction命令重载脚本。测试物品捡取,确认触发正常。根据需求调整提示内容、条件限制、变量记录等功能。定期检查日志文件,监控物品捡取情况。

