传奇服务端脚本命令功能详解与应用

来源: 作者: 点击:
传奇服务端脚本命令是引擎内置的指令集,用于在NPC对话、任务触发、怪物死亡、物品使用等事件中控制游戏逻辑。这些命令通常写在NPC脚本(.txt)、任务脚本、物品数据库(StdItems.DB)或怪物数据库(Monster.DB)中,由M2引擎解析执行。理解它们是修改与开发版本的基础。

一、核心命令分类与语法结构

脚本命令遵循“命令 参数1 参数2 ...”的格式,不区分大小写,但参数通常有特定要求。

1. 玩家交互与控制命令

此类命令直接影响玩家角色或与之对话的触发对象。

• GIVE/TAKE 物品交换

GIVE 金条 1 :给予当前对话玩家1个金条。
TAKE 裁决之杖 1 :从玩家背包中取走1个裁决之杖。
CHECKITEM 金条 1 :检测玩家背包是否拥有至少1个金条。常用于任务前置条件。

• CHANGE 属性变更

CHANGEEXP +1000 :为玩家增加1000点经验值。使用负值则为扣除。
CHANGELEVEL +1 :玩家等级提升1级。
CHANGEPKPOINT -100 :减少100点PK值。

• 传送与位置控制

MAPMOVE 3 330 330 :将玩家传送至地图编号3的坐标(330,330)。
MAP 盟重省 :将玩家传送至“盟重省”地图的默认安全区。

2. 变量与条件判断命令

脚本的智能逻辑依赖于变量系统和条件分支。

• 变量操作

MOV A0 100 :将数字100存入私有变量A0(每个玩家独立)。
INC A0 1 :将变量A0的值增加1。DEC为减少。
SMALL A0 50 :判断变量A0的值是否小于50。配合GOTO实现条件跳转。

• 条件判断与跳转

脚本通过条件判断命令控制流程。基本结构如下:

#IF
CHECKITEM 金矿 5
CHECKLEVEL 35
#ACT
TAKE 金矿 5
GIVE 金条 1
#SAY
这是你的奖励。
#ELSEACT
#SAY
你尚未满足条件。

#IF 后接条件,#ACT 后接条件满足时执行的动作,#ELSEACT 后接不满足时的动作,#SAY 用于NPC对话输出。

3. 系统与全局控制命令

用于影响游戏世界、行会或发送全局信息。

• 行会与公告

GUILDNOTICE %guild 公告内容 :向指定行会全体成员发送公告。%guild为变量,常替换为<$GUILDNAME>(当前玩家行会名)。
SENDMSG 0 玩家<$USERNAME>成功合成了极品装备! :向全服发送系统公告。数字0代表全服彩色公告,1-6为不同范围/颜色。

• 怪物与地图控制

PARAM1 330 PARAM2 330 MOB 沃玛教主 5 1 :在当前地图坐标(330,330)附近5*5范围内刷出1只沃玛教主。PARAM1/2设置坐标。
CLEARMAPMON 3 :清除地图编号3上的所有怪物。

二、常用命令组合与脚本示例

示例1:基础任务脚本


[@主线任务]
#IF
CHECKLEVEL 30
CHECKITEM 沃玛号角 1
#ACT
TAKE 沃玛号角 1
GIVE 沃玛勋章 1
CHANGEEXP +50000
SENDMSG 0 玩家<$USERNAME>完成了创建行会任务!
#SAY
你已证明了自己的实力,这是给你的奖励。
#ELSEACT
#SAY
请达到30级并携带“沃玛号角”再来。

此脚本让玩家在30级时用沃玛号角兑换奖励,并向全服公告。

示例2:变量与循环


[@兑换宝石]
#IF
LARGE A0 9
#ACT
DEC A0 10
GIVE 祝福油 1
SENDMSG 1 你消耗了10点积分兑换了祝福油。
GOTO @兑换宝石
#SAY
继续兑换。
#ELSEACT
#SAY
积分不足10点,无法兑换。

此脚本允许玩家用变量A0(代表积分)循环兑换祝福油,每次扣除10点积分,直到积分不足。

三、高级命令与调试技巧

1. 时间与延迟控制
SLEEP 1000 :使脚本暂停1000毫秒(1秒)后继续执行下一条命令。常用于制造效果或控制节奏。

2. 调用外部脚本
CALL [路径\脚本名.txt] @标签 :调用外部脚本文件中的指定段落,实现模块化管理。

3. 调试与日志
SENDMSG 7 调试信息:变量A0=<$STR(A0)> :向当前玩家发送私人消息(白色),用于调试时查看变量值。<$STR(A0)> 用于在消息中显示变量A0的值。

脚本编写核心原则:
• 路径纯英文:脚本文件存放路径(如Envir\Market_Def\)严禁使用中文。

• 标签唯一:每个脚本段落的标签(如[@Main])必须唯一,否则会调用错误。

• 备份先行:修改任何核心脚本前,务必备份原文件。语法错误可能导致NPC功能失效或M2引擎报错。