写传奇功能先拆四层:NPC交互、任务/活动逻辑、全局事件触发、运维与防作弊。不同引擎命令名字会有差别,下面用通用M2/HERO/GOM思路举例子,只用于你拥有授权或自有学习环境,不用于未授权商业复刻。
一、NPC功能基础
NPC文件通常在Envir/Merchant.txt注册,Market_Def或Market_Def相关目录写对话脚本。Merchant里配名称、地图、坐标、脚本名、外观;脚本里用主标签做菜单,子标签做功能。
传送NPC示例:
[@Main]
SAY
传送服务\
1.去比奇/@GoBich
2.去封魔/@GoFengmo
3.关闭/@Exit
[@GoBich]
IF
ACT
MAPMOVE 0 329 266
SENDMSG 6 已传送至比奇省
BREAK
[@GoFengmo]
IF
CHECKLEVELEX > 25
ACT
MAPMOVE 4 237 305
SENDMSG 6 已传送至封魔谷
ELSESAY
等级不足25级
BREAK
[@Exit]
ACT
CLOSE
BREAK
改完在M2控制台重新加载NPC或重新加载NPC脚本,不必整服重启。 条件判断用#IF,执行用#ACT,不满足走#ELSEACT/#ELSESAY。常用条件:CHECKLEVELEX等级、CHECKGOLD金币、CHECKITEM物品数量、CHECKGUILD行会名、CHECKNAMELIST名单文件。常用执行:MAPMOVE地图号X Y、GIVE物品数量、TAKE物品数量、SET变量、INC变量、SENDMSG颜色内容。
二、任务功能写法
标准任务分接取、进度、提交、发奖、存档。
1、接取NPC:
[@Main]
SAY
剿灭野猪任务\
1.接任务/@Accept
2.交任务/@Submit
3.关闭/@Exit
[@Accept]
IF
CHECKLEVELEX > 20
CHECK [KillPig] 0
ACT
SET [KillPig] 1
SET KillPigCount 0
SENDMSG 6 已接取任务,击杀野猪0/10
ELSEACT
SENDMSG 6 等级不足或任务进行中
BREAK
2、杀怪触发:
在MapQuest.txt或引擎杀怪触发配置里绑定地图、怪物名、脚本标签。触发脚本:
[@KillPig]
IF
CHECK [KillPig] 1
ACT
INC KillPigCount 1
SENDMSG 6 任务进度击杀<KillPigCount>/10
IF
EQUAL KillPigCount 10
ACT
SENDMSG 6 已杀满10只,回NPC领奖
BREAK
3、提交发奖:
[@Submit]
IF
CHECK [KillPig] 1
EQUAL KillPigCount 10
ACT
GIVE 金条 1
CHANGEEXP +50000
TAKE [KillPig] 1
SET KillPigCount 0
SAVEVAR HUMAN KillPigCount ..\QuestDiary\变量\pig.txt
SENDMSG 0 完成剿灭野猪任务,获得金条与经验
ELSESAY
未满足任务条件
BREAK
人物变量用HUMAN类、全局变量用G变量、临时变量按引擎文档来。下线不丢进度要把关键计数SAVEVAR或用引擎持久变量;GOM类U变量有些版本自动持久,HERO类常需手动存。
收集类任务把杀怪计数换成物品计数:
IF
CHECKITEM 狼爪 5
ACT
TAKE 狼爪 5
GIVE 经验卷轴 1
SENDMSG 6 提交完成
跑腿任务给信件物品,交任务再TAKE信件;对话任务用任务标记位SET [TalkSmith] 1,后续NPC检测标记判断完成。
三、活动功能写法
定时活动用系统时间判断或M2定时事件。怪物活动流程:检测时间→刷怪→公告→倒计时→结束清怪→发奖。
简化脚本思路:
[@MonActivityStart]
IF
CheckDateTime 20:00-20:30
ACT
MONGEN 活动地图 白野猪 20 地图X 地图Y
MONGEN 活动地图 沃玛教主 1 地图X 地图Y
SENDMSG 1 怪物攻城活动开始,前往活动地图
SET [ActivityOn] 1
SET ActivityEnd 1800
倒计时可用变量每秒递减,或用M2活动定时器。结束处理:
[@MonActivityEnd]
IF
CHECK [ActivityOn] 1
EQUAL ActivityEnd 0
ACT
MONCLEAR 活动地图
SENDMSG 1 活动结束,地图已清理
TAKE [ActivityOn] 1
双倍经验可用引擎内置双倍命令或GM通过NPC开启,权限NPC示例:
[@OpenDouble]
IF
CHECKADMIN 0
ACT
MAPM2EXE DoubleExp 120 2
SENDMSG 1 全服双倍经验开启120分钟
ELSEACT
MESSAGEBOX 无权限
CLOSE
BREAK
普通活动别把双倍、爆率、刷怪同时拉满,按在线人数和地图承载做梯度;活动怪物数量参考地图面积与同屏上限,避免瞬卡。
四、全局事件与系统功能
QFunction-0.txt或引擎系统触发文件可写登录、升级、死亡、用物、进入地图等。
升级送装:
[@PlayLevelUp]
IF
CHECKLEVELEX = 35
ACT
GIVE 骨玉权杖 1
GIVE 恶魔长袍 1
SENDMSG 0 恭喜35级,发放法师基础装
BREAK
使用物品触发,先在物品库把卷轴StdMode设触发类,AniCount设编号,再写:
[@StdModeFunc1]
ACT
CHANGEEXP +500000
SENDMSG 6 使用经验卷,获得50万经验
BREAK
进入地图限制,MapEvent绑定入口坐标调用脚本:
[@EnterHighMap]
IF
LEVEL >= 30
LEVEL <= 50
CHECKITEM 进入令牌 1
ACT
TAKEITEM 进入令牌 1
MAPMOVE 高图号 X Y
SENDMSG 5 进入高阶地图
ELSESAY
需30到50级且持有进入令牌
BREAK
地图人数限制用G变量或M2人数参数,行会限制用CHECKGUILD,会员限制用CHECKNAMELIST读取名单文件。
五、GM与运维功能
GM命令只给受控管理员。常用:@give发物品、@addgold加金币、@setlevel设等级、@mob刷怪、@reloadnpc重载NPC、@clearmap清图、@ban封号、@notice公告、@backupdata备份、@checkserver看资源占用。
运维规范:
1、管理员名单放AdminList/Admin权限文件,普通运维只给 reload、notice、kick、查询类;发装备、改等级、改全服数据只给超级管理员。
2、批量操作前备份数据库和物品/怪物配置;全服改等级、改爆率、清图前先在小环境验证。
3、刷怪命令按地图承载来,@mob白野猪 10 50只做测试,别直接刷几百只。
4、反作弊开异常检测,自动喝药间隔过低、瞬移距离过大、自动拾取异常都记日志;确认违规再ban,不靠单一规则误封。
5、所有GM操作写日志,定期审计AdminLog,权限变更走审批。
自定义GM命令可在Command.ini加命令名绑定脚本标签,脚本里用CHECKADMIN做权限;涉及全服双倍、全服发奖、重设沙巴克等敏感操作加二级确认。
六、功能开发流程
先写需求文档:功能名、触发入口、参与条件、数值产出、异常处理、回滚方案。再建数据模型:任务表、活动表、变量表、奖励表、日志表。接着写脚本原型,NPC菜单→条件→执行→反馈;系统事件写QFunction或对应触发文件。测试分三步:单功能本地跑,边界测满背包、满级、重复接任务、断线重登;压力测活动同屏怪、全服公告、数据库写入;安全测越权点击、低权限调用GM、脚本死循环。上线后保留开关变量,活动异常可立即关刷怪、关奖励、回滚变量。
七、常见坑
NPC不显示选项:Merchant路径或脚本名不匹配、主标签写错、条件永远不成立。
任务不发奖:物品名和物品库不一致、变量未初始化、TAKE在GIVE前把任务标记清了导致二次判断失败。
活动卡服:MONGEN坐标集中、同屏怪过多、公告频率过高、变量每秒写盘。
GM命令无效:账号不在管理员列表、权限等级不够、命令格式缺参数、物品ID按错版本。
地图进不去:MapInfo未开放、坐标障碍物、进入脚本条件写反、地图文件缺失。
脚本改完不生效:没重载NPC、没重载QFunction、多个脚本文件标签重名、文本编码被办公软件改坏。
八、合规边界
只在内获得授权的服务端、自有学习工程、官方开放插件环境写功能。未授权复制他人IP资源、私自分发登录器、改包名绕过版权、用脚本刷币卖现金属高风险行为。功能开发以稳定运营和公平玩法为目标:外挂类加速、透视、自动PK、改内存不写;辅助只做官方内置自动战斗、合规云机宏、人工设置的回血回蓝和拾取过滤。GM工具不对外给普通玩家,反作弊规则、权限日志、数据备份三者必须同时存在。
按“NPC菜单—条件变量—执行反馈—重载测试”这套结构写,绝大多数传奇功能都能落地:传送、任务、活动、商城、行会、地图限制、登录礼包、升级奖励、使用物品、GM运维都可复用同样模板。
热血传奇功能开发教程NPC任务活动GM脚本与合规运维全写法
来源:
作者:
点击:

