「传奇NPC脚本命令百科全书」从对话到装备、结婚检测、传图招宝宝,一次讲透

来源: 作者: 点击:
在传奇游戏中,NPC脚本是赋予NPC“生命力”的核心。通过编写脚本,你可以让商店NPC卖货、任务NPC发放奖励、功能NPC传送玩家、检测玩家的状态(如是否结婚、有没有徒弟)、甚至召唤强大的宝宝。无论你是GM管理服务器,还是想学习脚本制作的玩家,了解这些基础命令都是第一步。

核心结构 - NPC脚本的基本框架

一个典型的NPC脚本通常包含以下几个部分:
触发条件: 玩家点击NPC后,脚本开始执行。通常以 [@main] 开始,后面可以跟其他标签如 [@giveitem], [@checkmarry] 等。

显示文本: 使用引号 "" 包裹的文字,用于显示给玩家的对话信息。

脚本命令: 实际执行操作的指令,以 #IF, #ACT, #SAY, #ELSEACT 等关键字引导。

选项按钮: 使用 <> 包裹的文字,供玩家点击触发后续脚本块(跳到其他标签)。

示例:最简单的问候脚本

[@main]
SAY

欢迎你,勇敢的冒险者!有什么需要帮忙的吗?\
<买东西/@buy> <了解一下/@info> <离开/@exit>

@main:脚本入口标签。

#SAY:后面的文字会显示在对话框里。\ 是换行符。

<>:玩家可以点击的按钮,点击后会跳转到对应的标签(如点击“买东西”会执行 [@buy] 段脚本)。

@exit:通常是一个关闭对话框的命令。

重要脚本命令详解

现在,让我们深入到你想了解的具体功能:

一、 物品相关命令 (给东西、收东西、检查物品)
GIVE / GIVEITEM

功能: 给玩家物品。

格式: GIVE 物品名 数量

示例:


#IF
...(条件,例如检测任务完成)
#ACT
GIVE 金条 1 // 给玩家1个金条
GIVEITEM 裁决之杖 1 // 给玩家1把裁决之杖

TAKE

功能: 收取玩家的物品。

格式: TAKE 物品名 数量

示例:


#IF
CHECKITEM 金条 1 // 条件:检查玩家是否拥有1个金条
#ACT
TAKE 金条 1 // 收取玩家1个金条

CHECKITEM / CHECKGOLD / CHECKITEMW

功能: 检查玩家是否拥有指定物品或金钱。

格式:

CHECKITEM 物品名 数量:检查背包是否有指定数量的某物品。

CHECKGOLD 数量:检查玩家金币是否大于或等于指定数量。

CHECKITEMW 物品名 数量:检查玩家身上是否穿着/装备着指定数量的某物品(如武器、衣服)。

示例: (常和 #IF, #ELSEACT 配合使用)


#IF
CHECKITEM 求婚戒指 1
#ACT
#SAY
你带着象征爱情的求婚戒指!\
<求婚仪式/@marry>
#ELSEACT
#SAY
想要求婚?先准备好一枚求婚戒指吧!\
<离开/@exit>


二、 检测关系状态命令 (结婚、师徒)
CHECKMARRIED / CHECKMARRIAGE

功能: 检测玩家是否已经结婚。

格式: CHECKMARRIED

常用参数 (可能版本不同有差异): 有时需要指定是检测自己的状态还是检测目标的状态。通常目标玩家(如配偶)名字可以通过变量传递。

示例 (检测自己是否已婚):


#IF
CHECKMARRIED // 检测当前点击NPC的玩家是否已婚
#ACT
#SAY
你已经有了相伴一生的爱人,祝福你们!\
<查看夫妻属性/@checkcouple>
#ELSEACT
#SAY
单身贵族?来参加我们的联谊活动吧!\
<报名相亲/@date>

CHECKMASTER / CHECKSLAVE / CHECKSLAVECOUNT

功能: 检测玩家的师徒关系。

格式 (常见):

CHECKMASTER:检查玩家是否有师父。

CHECKSLAVE:检查玩家是否有徒弟。

CHECKSLAVECOUNT:检查玩家当前有多少个徒弟(通常在检测收徒上限时使用)。

示例 (检测是否有师父):


#IF
CHECKMASTER // 检测当前玩家是否有师父
#ACT
#SAY
你已经有了一位指引你前进的师父了。\
<看望师父/@visitmaster>
#ELSEACT
#SAY
英雄之路,怎能少了名师指点?来寻找你的师父吧!\
<发布拜师信息/@findmaster>


三、 传送命令 (移动到指定地图/坐标)
MAP / MAPMOVE

功能: 将玩家传送到指定的地图(默认坐标或指定坐标)。

格式:

MAP 地图编号/地图名:传送到该地图的默认安全区坐标。

MAPMOVE 地图编号/地图名 X坐标 Y坐标:精确传送到地图的指定坐标 (X, Y)。

示例:


#ACT
MAP 0 // 传送到盟重土城(假设0是土城的地图编号)
MAPMOVE D717 50 50 // 传送到"魔龙城(D717)"地图的坐标(50,50)
MAP 沙巴克城 // 如果地图名是文本,需要引擎支持或配置文件中映射好


四、 召唤宝宝命令 (召唤宠物/神兽等)
RECALLMOB

功能: 在玩家身边召唤一个指定的怪物作为宝宝。

格式: RECALLMOB 怪物名 宝宝等级(可选) 持续时间(可选,单位秒)

重要参数:

怪物名: 必须是引擎数据库(Monster.DB/Dbserver)里存在的怪物名称。

等级: (可选) 召唤出的宝宝的等级。

时间: (可选) 宝宝存在的时间(秒)。不填通常是永久(或直到被杀死/地图刷新)。

示例:


#ACT
RECALLMOB 神兽 // 召唤一只名为"神兽"的永久宝宝
RECALLMOB 月灵 3 300 // 召唤一只3级"月灵",5分钟后消失

注意事项:

玩家必须有召唤宝宝的技能(如召唤神兽)且达到技能要求等级(如果引擎有设定)。

引擎通常有宝宝数量上限(如 RecallMobCountLimit)设置。

宝宝死亡或被刷掉后需要重新召唤。

五、 其他常用基础命令
#IF / #ACT / #SAY / #ELSEACT / #ELSESAY

功能: 脚本执行流程控制核心。

逻辑:

#IF:定义检测条件(如 CHECKITEM, CHECKMARRIED 等)。

如果 #IF 条件满足,则执行后面的 #ACT(执行动作命令)和/或 #SAY(显示文本)。

如果 #IF 条件不满足,且有 #ELSEACT 和/或 #ELSESAY,则执行它们。

示例: 上面检测物品、结婚状态等的例子中已广泛使用。
CLOSE / @exit

功能: 关闭当前的NPC对话框。

格式: CLOSE 或写在按钮上 <离开/@exit>
CHECKLEVELEX / CHECKLEVEL

功能: 检测玩家的等级。

格式:

CHECKLEVELEX 操作符(=,>,<,>=,<=) 等级值:常用,支持多种比较。

CHECKLEVEL 等级值:检测玩家等级是否大于或等于指定值(有些版本支持)。

示例:


#IF
CHECKLEVELEX > 34 // 检查玩家等级是否大于35级(因为通常35级才能带神兽)
#ACT
... (允许执行召唤神兽操作)
#ELSEACT
#SAY
你的等级还未达到35级,无法领悟召唤神兽的奥秘。\
<努力升级/@exit>

PARAM / GOTO

功能: 传递参数或跳转。

PARAM: 常用于向脚本标签传递参数(特别是玩家名)。

GOTO: 强制跳转到指定的标签执行。

示例 (传递玩家名):


[@main]
#SAY
请输入你想查看信息的玩家名字:\
<输入名字/@@InputPlayerName>
[@@InputPlayerName]
#ACT
MOV S1 %INPUTSTR // 将玩家输入的文字存入变量S1
GOTO @ShowPlayerInfo // 跳转到 @ShowPlayerInfo 标签,并把S1变量值带过去
[@ShowPlayerInfo]
#IF
CHECKHUM %S1 ONLINE // 检测玩家 %S1 是否在线
... (显示该玩家信息)


综合示例NPC脚本

[@main]
SAY

欢迎光临【传奇装备店】,我是老板阿福!\
我可以为你提供以下服务:\
<购买高级装备/@buygood>\ \ // 注意:这里是两个空格,表示更大的空行
<传送去练级圣地 @levelup>\ \ \ // 三个空格,最大间距
<检测你的婚姻状况 @checkmarry>\ \
<召唤一只强力护卫 @callbaby>\ \
<离开 @exit>

[@buygood]
SAY

年轻人,想买点好装备?看看这些:\
<屠龙刀/@buy_dragon> 售价:8888金币 (需有金条)\
<圣战手镯/@buy_hand> 售价:5000金币\
<返回/@main>
[@buy_dragon]
IF

CHECKITEM 金条 1 // 检查是否有金条(可视为货币)
CHECKGOLD 8888 // 检查是否有8888金币
ACT

TAKE 金条 1 // 收走1金条
TAKE GOLD 8888 // 收走8888金币
GIVE 屠龙刀 1 // 给予屠龙刀
SAY

交易愉快!屠龙宝刀在手,天下你有!\
<返回/@buygood>
ELSEACT

SAY

很抱歉,你的金条或金币不足,无法购买屠龙刀。\
<返回/@buygood>

[@levelup]
ACT

MAPMOVE n11 30 40 // 假设n11是"石墓阵"地图编号,传送到(30,40)
SAY

已传送至石墓阵七层!祝你好运!(对话框会自动关闭)

[@checkmarry]
IF

CHECKMARRIED
SAY

看来你已经找到了心爱的另一半!祝福你!\
<返回/@main>
ELSESAY

单身狗也要快乐!缘分就在前方!\
<返回/@main>

[@callbaby]
IF

CHECKJOB Warrior // 假设有检测职业的命令,不同引擎可能不同
CHECKLEVELEX > 34 // 等级大于35级
ACT

RECALLMOB 神兽 7 // 召唤7级神兽
SAY

吼!神兽护驾!请小心战斗!\
<返回/@main>
ELSESAY

你看起来还需要更强一些才能驾驭如此强大的守护兽。\
(战士35级以上方可召唤) \
<返回/@main>

重要提示 & 注意事项
引擎差异: 不同传奇引擎(HERO, LEGEND, BLUE, GEE等)的命令语法和功能支持度会有差异。务必查阅你所用引擎的官方脚本说明书!本文以最常见的形式讲解核心概念和命令。

中文支持: 命令本身(如GIVE, TAKE, CHECKITEM)通常是英文,但物品名、地图名、NPC对话文字可以是中文(需要引擎和客户端支持正确的文字编码,如GBK)。

大小写: 大部分引擎的脚本命令是大小写不敏感的(即give等同于GIVE),但使用大写是良好的规范。

安全性: 编写NPC脚本(尤其是涉及发放装备、金币、权限的)要特别注意逻辑严谨性,避免出现刷装备的漏洞!使用条件检测(#IF)严格把关。使用 TAKE 命令要谨慎,避免误删玩家重要物品。

变量: 复杂脚本会使用变量存储信息(如 MOV D1 100 存数字, MOV S1 "沙巴克" 存字符串)。这属于进阶内容。

地图坐标: 传送坐标务必准确。可以利用引擎提供的坐标查看工具确认地图上的可行走坐标点。

宝宝限制: RECALLMOB 会受到职业、等级、技能、宝宝数量上限、地图能否召唤等多重限制。务必了解当前引擎的设置。