传奇服务端脚本是构建游戏世界、控制怪物行为、管理物品交易及实现复杂玩法的核心代码。掌握标准脚本命令(Script Commands)是架设和管理传奇服务器的基础。脚本通常位于服务器端的MapInfo.txt、Monster.txt或独立的脚本文件(如QFunction.txt、Manage_Q.txt)中。以下深入解析常用命令体系、语法结构及实际应用场景,帮助管理者高效构建游戏内容。
基础对话与界面控制命令是脚本的骨架。#ACT 标签用于标识动作执行段,紧随其后的命令将按顺序运行。#SAY 命令用于在对话框中显示文本,支持换行符 和颜色代码 (n为0-255的数字)。例如:#SAY 欢迎来到玛法大陆点击我开始冒险。#CLOSE 用于关闭当前对话窗口,结束交互。#GOTO 实现脚本内的跳转,格式为 #GOTO @标签名,常用于构建多级菜单或条件分支后的流程指向。@标签 定义跳转的目标位置,必须以@开头。
变量操作与数据存取是脚本逻辑的灵魂。局部变量使用 A0 到 A9 表示整数,S0 到 S9 表示字符串;全局变量使用 G0 到 G9(整数)和 G100 以上(部分引擎支持更多)。赋值命令 CALC 用于数学运算,如 CALC A0 = A0 + 1 实现计数累加。MOV 命令用于数据移动,如 MOV S0 玩家名字。CHECK 系列命令用于条件判断,是脚本分支的关键。CHECKLEVEL 检查等级,CHECKGOLD 检查金币,CHECKITEM 检查背包物品,CHECKVAR 检查变量值。格式通常为 #IF 下接判断条件,满足则执行 #ACT 内容,否则执行 #ELSEACT 内容。
物品管理与交易控制命令频繁用于任务系统。GIVE 命令给予玩家物品,格式 GIVE 物品名 数量,如 GIVE 屠龙刀 1。TAKE 命令收回物品,格式 TAKE 物品名 数量,常用于任务消耗品扣除。CHANGEITEMEFFECT 可修改物品属性,如调整持久力或附加属性。OPENMERCHANTBIGDLG 打开大型商城对话框,允许玩家直接购买指定列表物品。BUILDLIST 用于动态生成列表内容,常配合商城或排行榜使用。CLEARITEM 清空背包中特定物品,防止玩家堆积任务道具。
地图传输与坐标操作命令控制玩家流动。MAPMOVE 强制将玩家移动到指定地图和坐标,格式 MAPMOVE 地图号 X Y。RANDOMMOVE 将玩家随机移动到当前地图的某个安全点。GOMAP 直接跳转到特定地图名称。MONCLEAR 清理当前地图所有怪物,常用于活动开始前重置场景。FILLIN 和 FILLOUT 用于在地图上填充或清除特定地形元素(视引擎版本而定)。SETONOFF 和 SETONTIME 用于控制地图机关或活动的开启与定时关闭。
怪物控制与刷新命令构建动态世界。MONGEN 命令在脚本中动态生成怪物,格式 MONGEN 怪物名 数量 地图号 X Y。KILLMON 立即杀死指定范围内的怪物。CHANGEMOBCOUNT 调整某类怪物的最大刷新数量。MOBPLACE 在特定坐标放置一只怪物,常用于任务BOSS召唤。ACTMON 让怪物执行特定动作,如播放特效或移动。通过脚本控制怪物刷新,可实现“限时活动”、“世界BOSS倒计时”等复杂玩法,无需重启服务器即可生效。
行会与婚姻关系处理命令增强互动性。CREATEGUILD 允许玩家创建行会,需配合金币和等级检查。ADDBULLY 和 DELBULLY 处理行会成员加入与踢出。CHECKGUILD 验证玩家是否属于特定行会。MAKEPOSS 和 BREAKPOSS 处理结婚申请与离婚逻辑。GUILDNOTICE 向全行会发送系统公告。这些命令使得行会战、沙巴克攻城及夫妻任务能够通过脚本自动化管理,减少人工干预。
任务状态与标志位管理命令记录进度。SET 命令设置任务标志(Flag),格式 SET [数字],如 SET 10 表示完成任务第10步。CLEAR 清除标志,如 CLEAR 10 用于重置任务。CHECK 检查标志状态,如 CHECK 10 判断玩家是否已完成该步骤。标志位通常存储在数据库的特定字段中,永久保存。利用标志位组合,可构建多分支剧情任务,根据玩家之前的选择触发不同的后续脚本。
时间控制与定时器命令实现自动化运维。DELAY 命令在脚本执行中插入延迟,单位通常为毫秒,用于模拟对话节奏或技能冷却。TIMER 启动一个计时器,到达设定时间后触发指定标签。KILLTIMER 停止正在运行的计时器。ISDAY、ISHOUR 等命令判断当前系统时间,用于开启“双倍经验时段”、“夜间活动”等时间敏感型玩法。例如:#IF CHECKHOUR 20 #ACT GOTO @NightEvent 可实现每晚8点自动激活特殊事件。
高级逻辑与自定义函数扩展功能。CALL 命令允许脚本调用其他脚本文件中的公共模块,实现代码复用。RETURN 从被调用的脚本返回。BREAK 强行中断当前脚本循环。EXEC 执行外部批处理文件或系统命令(需谨慎使用)。部分引擎支持 SQL 相关命令,直接读写数据库,实现全服排行榜、跨服数据同步等功能。SENDMSG 向全服、行会或特定玩家发送自定义颜色的系统消息,格式 SENDMSG 6 恭喜玩家 [%s] 获得屠龙刀,其中 %s 代表变量替换。
常见错误排查与调试技巧。脚本编写中最常见的错误是标签缺失、变量未初始化或语法拼写错误。若脚本不生效,首先检查服务端控制台(M2Server)的输出日志,通常会报错提示具体的行号和错误类型。确保 #IF、#ACT、#ELSE 等标签独占一行且前后无多余空格。变量使用前最好先赋值或检查,避免空值导致逻辑混乱。测试新脚本时,建议在测试服进行,利用 GM 指令强制触发脚本节点,快速验证逻辑闭环。
不同引擎版本的命令差异需注意。虽然大多数命令在HERO、GOM、GEE、BLUE等主流引擎中通用,但部分高级命令(如界面自定义、粒子特效控制)存在差异。编写前应查阅对应引擎的官方命令字典。例如,GOM引擎支持更丰富的图片对话框命令 OPENMERCHANTBIGDLG 带参数更多,而老版本引擎可能仅支持纯文本。保持脚本的兼容性,尽量使用基础通用命令,可减少更换引擎时的迁移成本。
实战案例:构建一个简单的杀怪任务。
需求:玩家击杀10只沃玛卫士,回城领取奖励。
脚本逻辑:
在 QFunction.txt 中设置怪物死亡触发:[@KillMonster],判断怪物名为沃玛卫士。
使用 CALC A0 = A0 + 1 累加击杀数。
使用 IF CHECK A0 >= 10 判断是否达标。
若达标,执行 SET 100 标记任务完成,并 SENDMSG 提示玩家回城。
在NPC对话脚本中,#IF CHECK 100,若成立则 GIVE 奖励物品,TAKE 任务道具(如有),CLEAR 100 重置任务。
此流程展示了变量、判断、标志位和物品命令的综合运用。
掌握这些脚本命令,管理者可随心所欲地定制游戏内容。从简单的物品兑换到复杂的国战系统,一切皆由代码逻辑驱动。熟练运用条件判断、变量存储和流程控制,能让静态的地图变得生动有趣,极大提升玩家的留存率与游戏体验。脚本编写能力是传奇服务端技术人员的核心竞争力,需在实践中不断积累与打磨。

