传奇游戏脚本编写全流程详解

来源: 作者: 点击:
传奇脚本用于控制NPC对话、任务触发、物品发放等逻辑,主要通过Q语言或LUA实现,具体取决于服务端引擎类型。常见引擎包括Hero、Mir2、HGE,本文以广泛使用的Hero引擎为例说明。

脚本存放于服务端目录的Mir200EnvirQuestDiary下,按功能分文件夹管理,如“登录脚本”、“杀怪奖励”、“NPC对话”。每个脚本文件为纯文本格式(.txt),编码必须为ANSI,否则中文会乱码。

基础结构包含触发条件与执行动作。例如玩家点击NPC时触发对话:

[@main]
IF
ACT
SENDMSG 0 你好,冒险者!

其中[@main]是默认入口标签,#IF后可加判断条件(如CHECKITEM 金币 100),#ACT后为执行命令。

常用命令包括:
CHECKITEM 物品名 数量:检测背包是否有指定物品;
TAKE 物品名 数量:扣除玩家物品;
GIVE 物品名 数量:给予玩家物品;
MOVEMAP 地图编号 X Y:传送玩家到指定坐标;
SET [变量名] 值:设置自定义变量,用于任务进度记录。

任务脚本示例(收集10个鹿角):

[@main]
IF
EQUAL Q_鹿角任务 0
ACT
SET Q_鹿角任务 1
SENDMSG 0 请帮我收集10个鹿角。

IF
EQUAL Q_鹿角任务 1
CHECKITEM 鹿角 10
ACT
TAKE 鹿角 10
GIVE 金创药 50
SET Q_鹿角任务 2
SENDMSG 0 谢谢你,这是给你的奖励!

变量Q_鹿角任务存储在玩家数据中,重启服务端不会丢失。

地图怪物死亡触发奖励需在MonItems.txt或MonsterDrop.txt配置掉落,但精确控制(如首杀奖励)需用杀怪日志脚本。在QuestDiaryKillMon下创建对应怪物编号文件,例如:

[@KillMon_1001]
IF
CHECKMONMAP 3
ACT
GIVE 祝福油 1

表示在地图3击杀编号1001的怪物时给予祝福油。

脚本调试方法:启动M2Server后,在控制台输入“!reloadquest”重载脚本,避免频繁重启。若NPC无反应,检查Npc_defNpc.txt是否正确关联脚本文件名,格式为“NPC名称 脚本路径”。

高级功能包括定时任务、跨服交互、装备合成。例如每日签到:

[@main]
IF
CHECKLEVELEX > 0
ACT
INC Q_签到天数 1
GIVE 金币 10000

配合LoginQuest脚本,在玩家登录时自动执行。

脚本生效依赖服务端版本兼容性。Hero引擎不支持LUA,而部分新引擎仅支持LUA。编写前需确认命令手册,避免使用未实现的指令。所有脚本修改后必须保存为无BOM的ANSI编码,否则服务端读取失败。