传奇脚本系统基于类Pascal语法的解释器,通过特定命令控制NPC行为、任务流程、地图传送及物品交互。掌握核心命令是编写功能脚本的基础。脚本文件通常位于Mir200EnvirMapQuest_def或Market_def目录下,以.txt格式存储。命令执行遵循自上而下顺序,遇到跳转命令则改变执行流。所有命令对大小写敏感,参数间需用空格分隔,注释使用分号;开头。
基丛话与分支控制是脚本骨架。#ACT标记动作执行区,其前为条件判断区。#IF引导条件块,若条件成立则执行紧随的#ACT后命令。BREAK命令用于终止当前脚本执行,防止逻辑穿透至下一段落。CLOSE关闭对话框,结束NPC交互。GOTO@标签实现无条件跳转,将执行流指向脚本内指定的@标签处,常用于构建循环或多步骤任务。CALC用于执行数学运算,如CALCG10=G10+1,支持加减乘除及取模,变量分为全局变量(G)、个人变量(D)、临时变量(S)等,作用域不同需严格区分。
人物状态检测命令用于校验玩家资格。CHECKLEVEL等级判断角色等级是否达到指定值。CHECKJOB职业验证职业,参数为WARRIOR(战士)、WIZARD(法师)、TAOIST(道士)。CHECKGOLD数量检查元宝或金币余额,注意不同引擎金币与元宝命令可能不同,部分版本用CHECKCREDIT_POINT。CHECKITEM物品名数量核查背包内指定物品存量,物品名称必须与数据库完全一致。CHECKHUM地图名数量统计指定地图在线人数,用于控制活动开启条件。CHECKPKPOINT数值检测PK值,限制红名玩家进入特定区域。CHECKDAYOFWEEK星期判断当前星期几,参数为1至7,用于周末活动脚本。CHECKTIME小时分钟判定当前系统时间,精确到分,适用于限时任务。
物品操作命令处理得失逻辑。GIVE物品名数量向玩家背包发放物品,若背包满则发送失败,需配合CHECKBAGSPACE预先判断。TAKE物品名数量从玩家背包扣除物品,扣除失败通常因数量不足或物品被锁定。MOVE物品名数量将物品从背包移至仓库,或反之,视引擎定义而定。CHANGEITEMVAL物品名位置值修改装备属性,位置指数据库字段索引(如AC、DC等),需谨慎使用以防破坏平衡。UPGRADEITEM触发武器升级逻辑,调用内置升级算法。OPENBOX物品名打开礼盒类物品,触发预设奖励表。
地图与传送命令控制角色位移。MAPMOVE地图名XY将玩家强制传送至指定坐标,无视阻挡。RANDOMMOVE执行随机传送,落点在当前地图合法区域内。MONCLEAR地图名清空指定地图所有怪物,常用于活动开始前清理现场。FILLMON地图名怪物名数量在地图指定区域批量生成怪物。SETONOFF标志位状态控制地图属性,如开启/关闭PK保护、经验加倍等。ENTERMAP地图名允许玩家进入通常被禁止的地图,常与条件判断连用。
货币与属性调整命令直接影响数值。CREDIT_POINT+=数量增加元宝,CREDIT_POINT-=数量扣除元宝,部分引擎使用GAMEGOLD。GOLD+=数量增加金币。CHANGEABILITY类型值修改人物基础属性,如攻击、防御、魔法等,类型为预定义枚举值。CHANGEPKPOINT数值直接增减PK值,负数减少红名时间。CHANGENAMECOLOR颜色值改变角色名字显示颜色,常用于标识VIP或活动参与者。SETONLINEFLAG标志设置在线状态标记,用于跨服或行会战逻辑。
消息与交互命令增强用户体验。SENDMSG颜色内容向玩家私聊发送系统消息,颜色代码如0-9代表不同色调。GROUPMSG颜色内容向组队成员广播消息。MAPMSG地图名颜色内容向全地图玩家喊话。OPENMERCHANT类型ID打开商店界面,类型指商店分类,ID为具体店铺编号。OPENDIALOG文本自定义弹出对话框内容,支持换行符n。INPUTSTR@标签调出字符串输入框,玩家输入内容存入临时变量,跳转至指定标签处理。INPUTNUM@标签调出数字输入框,用于输入数量或验证码。
逻辑控制高级命令构建复杂流程。WHILE与ENDWHILE构成循环结构,需配合变量计数器防止死循环。IF嵌套可实现多重条件判断,但层级过深会影响可读性,建议拆分为子标签。DELAYGOTO秒数@标签延时跳转,用于模拟等待动画或技能冷却,期间玩家可移动但脚本挂起。CALL@标签调用子程序,执行完后返回原位置继续,适合复用代码段。RET从子程序返回。BREAKTimeRecog时间用于防刷机制,记录上次操作时间,若间隔小于设定值则拒绝执行。
特殊功能命令拓展玩法边界。CREATEHERO类型职业创建英雄角色,参数指定英雄外观与职业。SETHEROLEVEL等级设置英雄等级。GUILDWAR行会A行会B强制两个行会进入战争状态。SET_RESOLVE_PENALTY时间设置红名惩罚消除时间。ADDLIST列表名内容将数据写入文本列表文件,用于记录任务进度或黑名单。CHECKLIST列表名内容检查内容是否存在于列表中。DELLIST列表名内容从列表中删除指定项。MOVR变量最小值最大值生成随机数存入变量,用于抽奖或随机奖励。
错误处理与调试技巧至关重要。脚本执行出错时,M2Server控制台会打印错误行号及原因,常见错误包括标签未定义、变量类型不匹配、物品名不存在。编写时应多用SENDMSG输出中间变量值,定位逻辑断点。避免在#IF块中直接执行耗时操作,应先判断再跳转至#ACT执行。对于涉及大量物品操作的脚本,务必先检查背包空间,防止GIVE失败导致任务卡死。测试阶段应在测试服进行,模拟各种极端条件,如背包满、等级不足、时间未到等,确保所有分支逻辑均能正常闭合。
熟练掌握这些命令并非死记硬背,而是理解其背后的数据流向与状态机转换。每个命令都是对游戏引擎底层函数的封装,合理组合可构建出任务系统、活动副本、自动回收、装备合成等复杂功能。脚本质量直接决定游戏玩法的流畅度与稳定性,严谨的逻辑结构与完善的异常处理是优秀脚本的标配。随着版本迭代,新命令不断加入,维护者需持续查阅引擎说明书,更新知识库,以适应新的开发需求。
基丛话与分支控制是脚本骨架。#ACT标记动作执行区,其前为条件判断区。#IF引导条件块,若条件成立则执行紧随的#ACT后命令。BREAK命令用于终止当前脚本执行,防止逻辑穿透至下一段落。CLOSE关闭对话框,结束NPC交互。GOTO@标签实现无条件跳转,将执行流指向脚本内指定的@标签处,常用于构建循环或多步骤任务。CALC用于执行数学运算,如CALCG10=G10+1,支持加减乘除及取模,变量分为全局变量(G)、个人变量(D)、临时变量(S)等,作用域不同需严格区分。
人物状态检测命令用于校验玩家资格。CHECKLEVEL等级判断角色等级是否达到指定值。CHECKJOB职业验证职业,参数为WARRIOR(战士)、WIZARD(法师)、TAOIST(道士)。CHECKGOLD数量检查元宝或金币余额,注意不同引擎金币与元宝命令可能不同,部分版本用CHECKCREDIT_POINT。CHECKITEM物品名数量核查背包内指定物品存量,物品名称必须与数据库完全一致。CHECKHUM地图名数量统计指定地图在线人数,用于控制活动开启条件。CHECKPKPOINT数值检测PK值,限制红名玩家进入特定区域。CHECKDAYOFWEEK星期判断当前星期几,参数为1至7,用于周末活动脚本。CHECKTIME小时分钟判定当前系统时间,精确到分,适用于限时任务。
物品操作命令处理得失逻辑。GIVE物品名数量向玩家背包发放物品,若背包满则发送失败,需配合CHECKBAGSPACE预先判断。TAKE物品名数量从玩家背包扣除物品,扣除失败通常因数量不足或物品被锁定。MOVE物品名数量将物品从背包移至仓库,或反之,视引擎定义而定。CHANGEITEMVAL物品名位置值修改装备属性,位置指数据库字段索引(如AC、DC等),需谨慎使用以防破坏平衡。UPGRADEITEM触发武器升级逻辑,调用内置升级算法。OPENBOX物品名打开礼盒类物品,触发预设奖励表。
地图与传送命令控制角色位移。MAPMOVE地图名XY将玩家强制传送至指定坐标,无视阻挡。RANDOMMOVE执行随机传送,落点在当前地图合法区域内。MONCLEAR地图名清空指定地图所有怪物,常用于活动开始前清理现场。FILLMON地图名怪物名数量在地图指定区域批量生成怪物。SETONOFF标志位状态控制地图属性,如开启/关闭PK保护、经验加倍等。ENTERMAP地图名允许玩家进入通常被禁止的地图,常与条件判断连用。
货币与属性调整命令直接影响数值。CREDIT_POINT+=数量增加元宝,CREDIT_POINT-=数量扣除元宝,部分引擎使用GAMEGOLD。GOLD+=数量增加金币。CHANGEABILITY类型值修改人物基础属性,如攻击、防御、魔法等,类型为预定义枚举值。CHANGEPKPOINT数值直接增减PK值,负数减少红名时间。CHANGENAMECOLOR颜色值改变角色名字显示颜色,常用于标识VIP或活动参与者。SETONLINEFLAG标志设置在线状态标记,用于跨服或行会战逻辑。
消息与交互命令增强用户体验。SENDMSG颜色内容向玩家私聊发送系统消息,颜色代码如0-9代表不同色调。GROUPMSG颜色内容向组队成员广播消息。MAPMSG地图名颜色内容向全地图玩家喊话。OPENMERCHANT类型ID打开商店界面,类型指商店分类,ID为具体店铺编号。OPENDIALOG文本自定义弹出对话框内容,支持换行符n。INPUTSTR@标签调出字符串输入框,玩家输入内容存入临时变量,跳转至指定标签处理。INPUTNUM@标签调出数字输入框,用于输入数量或验证码。
逻辑控制高级命令构建复杂流程。WHILE与ENDWHILE构成循环结构,需配合变量计数器防止死循环。IF嵌套可实现多重条件判断,但层级过深会影响可读性,建议拆分为子标签。DELAYGOTO秒数@标签延时跳转,用于模拟等待动画或技能冷却,期间玩家可移动但脚本挂起。CALL@标签调用子程序,执行完后返回原位置继续,适合复用代码段。RET从子程序返回。BREAKTimeRecog时间用于防刷机制,记录上次操作时间,若间隔小于设定值则拒绝执行。
特殊功能命令拓展玩法边界。CREATEHERO类型职业创建英雄角色,参数指定英雄外观与职业。SETHEROLEVEL等级设置英雄等级。GUILDWAR行会A行会B强制两个行会进入战争状态。SET_RESOLVE_PENALTY时间设置红名惩罚消除时间。ADDLIST列表名内容将数据写入文本列表文件,用于记录任务进度或黑名单。CHECKLIST列表名内容检查内容是否存在于列表中。DELLIST列表名内容从列表中删除指定项。MOVR变量最小值最大值生成随机数存入变量,用于抽奖或随机奖励。
错误处理与调试技巧至关重要。脚本执行出错时,M2Server控制台会打印错误行号及原因,常见错误包括标签未定义、变量类型不匹配、物品名不存在。编写时应多用SENDMSG输出中间变量值,定位逻辑断点。避免在#IF块中直接执行耗时操作,应先判断再跳转至#ACT执行。对于涉及大量物品操作的脚本,务必先检查背包空间,防止GIVE失败导致任务卡死。测试阶段应在测试服进行,模拟各种极端条件,如背包满、等级不足、时间未到等,确保所有分支逻辑均能正常闭合。
熟练掌握这些命令并非死记硬背,而是理解其背后的数据流向与状态机转换。每个命令都是对游戏引擎底层函数的封装,合理组合可构建出任务系统、活动副本、自动回收、装备合成等复杂功能。脚本质量直接决定游戏玩法的流畅度与稳定性,严谨的逻辑结构与完善的异常处理是优秀脚本的标配。随着版本迭代,新命令不断加入,维护者需持续查阅引擎说明书,更新知识库,以适应新的开发需求。

