热血传奇的脚本编写,本质上是对游戏服务器端逻辑的定制。脚本存放在服务端的特定文件夹中,通过特定的命令格式控制NPC对话、任务流程、怪物刷新和玩家数据。掌握脚本编写,意味着能够自主设计游戏内的交互功能。
脚本文件主要分布在服务端目录下的`\Mir200\Envir\`文件夹中。`Market_Def`存放NPC脚本,`MapQuest_Def`存放地图触发脚本,`Robot_def`存放机器人定时脚本,`QuestDiary`则用于存放被调用的子程序脚本。
###脚本的核心构成与执行逻辑
一个完整的脚本段落通常由条件判断和执行结果两部分组成。执行时,脚本按照从上到下的顺序逐行解析命令。
**基础结构示例:**
```
[@脚本段落名称]
#IF
;这里是条件检测部分
检测玩家等级是否大于34级
#ACT
;这里执行通过后的操作
将玩家传送到指定地图
#ELSEACT
;条件不满足时执行
弹出提示消息告诉玩家等级不够
```
在实际编写中,`#IF`和`#ACT`是最常见的组合。`#IF`用于检测条件,`#ACT`用于执行命令。当条件不满足时,可以使用`#ELSEACT`或`#ELSEAY`来处理否定情况。
###变量系统的使用方法
脚本运行中需要存储和处理数据,这就涉及到变量。传奇脚本中的变量分为多种类型,不同变量在作用范围和保存方式上差异明显。
**常用变量类型及特点:**
-**P变量(私人变量,数字型)**:仅在当前NPC对话中有效,关闭对话框后自动重置为0。适合临时计算使用。
-**D变量(私人变量,数字型)**:人物不下线时对全局NPC通用传递,下线不保存。
-**N变量(私人变量,数字型)**:用于存储数字,下线不保存,小退归0。通过输入框获取数字时,系统会自动存入N变量。
-**S变量(私人变量,字符型)**:用于存储文本字符,下线不保存,小退归0。通过输入框获取文本时存入S变量。
-**G变量(全局变量,数字型)**:全服务器唯一且全局NPC通用传递,可保存。服务器重启后数据不丢失,存放在`GlobalVal.ini`文件中。
-**U变量(私人变量,数字型)**:可保存,存放在人物数据库`Mir.db`中。适合记录玩家个人成就或任务进度。
在脚本中调用变量时,需要使用`<$STR(变量名)>`的格式来显示其值。例如,显示N85变量的内容应写作`<$STR(N85)>`。
###NPC输入框功能实现
当需要玩家输入内容时,比如输入数量或名字,需要使用输入框功能。不同引擎的调用方式略有差异,以Hero引擎为例:
**第一步:在NPC对话中添加输入按钮**
```
[@Main]
请选择操作:\
<输入数字进行捐赠/@@InPutInteger10>\
<输入角色名/@@InPutString15>\
```
`@@InPutIntegerX`会弹出数字输入框,并将输入结果存入对应的N变量。`@@InPutStringX`则弹出文本输入框,结果存入S变量。这里的X代表变量编号(0-99)。
**第二步:编写输入后的处理逻辑**
Hero引擎在处理输入结果时,需要在标签前加上`Call`前缀。
```
[@CallInPutInteger10]
#IF
;检测玩家是否拥有足够的游戏币
CHECKGAMEGOLD><$STR(N10)>
#ACT
;扣除对应数量的游戏币
GAMEGOLD-<$STR(N10)>
MESSAGEBOX您成功捐赠了<$STR(N10)>金币。
#ELSEACT
MESSAGEBOX金币数量不足,请重新输入。
```
3K引擎在处理时语法稍有不同,标签直接写成`[@InPutIntegerX]`即可,不需要`Call`前缀。对于输入内容的过滤,引擎提供了`[@IsInFilterList]`标签用于处理非法字符,当玩家输入内容包含敏感词时会自动跳转到此段落进行拦截处理。
###定时与机器人脚本
游戏中的定时活动、定时刷怪等功能,依靠机器人脚本来实现。机器人脚本主要涉及两个文件:`AutoRunRobot.txt`用于设置定时触发,`RobotManage.txt`用于编写触发后的具体逻辑。
**第一步:在`AutoRunRobot.txt`中设定触发时间**
```
;每小时运行一次
#AutoRunNPCHOUR1@开始活动
;每周五15点55分运行
#AutoRunNPCRUNONWEEK5:15:55@周五活动
```
支持的时间单位包括`SEC`(秒)、`MIN`(分)、`HOUR`(时)、`DAY`(天)以及`RUNONWEEK`(星期几)。
**第二步:在`RobotManage.txt`中编写触发逻辑**
当`AutoRunRobot.txt`中的定时条件达成后,系统会执行`RobotManage.txt`中对应的脚本段落。
```
[@开始活动]
#IF
#ACT
;向全服发送公告消息
SENDMSG0比武地图已经开放,勇士们请速速前往!
;执行地图刷怪或其它操作
Param13355339
Param2355
Param3339
MonGen活动BOSS10
```
通过这种方式,可以实现定时全服公告、定时开启活动地图、定时刷新怪物等常规功能。
###常用脚本命令整理
编写脚本时,熟悉基础命令的效率会高很多。以下是一些高频使用的命令:
|命令格式|功能说明|
|:---|:---|
|`CHECKLEVELEX>数值`|检测玩家等级是否大于指定数值|
|`CHECKGAMEGOLD>数值`|检测玩家元宝数量是否大于指定数值|
|`GAMEGOLD+数值`|增加玩家元宝数量|
|`GAMEGOLD-数值`|扣除玩家元宝数量|
|`MAPMOVE地图代码X坐标Y坐标`|将玩家传送到指定地图的精确坐标|
|`GIVE物品名称数量`|给予玩家指定数量的物品|
|`TAKE物品名称数量`|回收玩家背包中指定数量的物品|
|`MESSAGEBOX提示内容`|弹出对话框显示提示信息|
|`SENDMSG频道编号消息内容`|发送公告消息,0为全局红色公告|
除了这些基础命令,脚本中还包含大量的逻辑判断语句,如`EQUAL`(等于)、`LARGE`(大于)、`SMALL`(小于)等,用于构建更复杂的条件分支。
脚本文件主要分布在服务端目录下的`\Mir200\Envir\`文件夹中。`Market_Def`存放NPC脚本,`MapQuest_Def`存放地图触发脚本,`Robot_def`存放机器人定时脚本,`QuestDiary`则用于存放被调用的子程序脚本。
###脚本的核心构成与执行逻辑
一个完整的脚本段落通常由条件判断和执行结果两部分组成。执行时,脚本按照从上到下的顺序逐行解析命令。
**基础结构示例:**
```
[@脚本段落名称]
#IF
;这里是条件检测部分
检测玩家等级是否大于34级
#ACT
;这里执行通过后的操作
将玩家传送到指定地图
#ELSEACT
;条件不满足时执行
弹出提示消息告诉玩家等级不够
```
在实际编写中,`#IF`和`#ACT`是最常见的组合。`#IF`用于检测条件,`#ACT`用于执行命令。当条件不满足时,可以使用`#ELSEACT`或`#ELSEAY`来处理否定情况。
###变量系统的使用方法
脚本运行中需要存储和处理数据,这就涉及到变量。传奇脚本中的变量分为多种类型,不同变量在作用范围和保存方式上差异明显。
**常用变量类型及特点:**
-**P变量(私人变量,数字型)**:仅在当前NPC对话中有效,关闭对话框后自动重置为0。适合临时计算使用。
-**D变量(私人变量,数字型)**:人物不下线时对全局NPC通用传递,下线不保存。
-**N变量(私人变量,数字型)**:用于存储数字,下线不保存,小退归0。通过输入框获取数字时,系统会自动存入N变量。
-**S变量(私人变量,字符型)**:用于存储文本字符,下线不保存,小退归0。通过输入框获取文本时存入S变量。
-**G变量(全局变量,数字型)**:全服务器唯一且全局NPC通用传递,可保存。服务器重启后数据不丢失,存放在`GlobalVal.ini`文件中。
-**U变量(私人变量,数字型)**:可保存,存放在人物数据库`Mir.db`中。适合记录玩家个人成就或任务进度。
在脚本中调用变量时,需要使用`<$STR(变量名)>`的格式来显示其值。例如,显示N85变量的内容应写作`<$STR(N85)>`。
###NPC输入框功能实现
当需要玩家输入内容时,比如输入数量或名字,需要使用输入框功能。不同引擎的调用方式略有差异,以Hero引擎为例:
**第一步:在NPC对话中添加输入按钮**
```
[@Main]
请选择操作:\
<输入数字进行捐赠/@@InPutInteger10>\
<输入角色名/@@InPutString15>\
```
`@@InPutIntegerX`会弹出数字输入框,并将输入结果存入对应的N变量。`@@InPutStringX`则弹出文本输入框,结果存入S变量。这里的X代表变量编号(0-99)。
**第二步:编写输入后的处理逻辑**
Hero引擎在处理输入结果时,需要在标签前加上`Call`前缀。
```
[@CallInPutInteger10]
#IF
;检测玩家是否拥有足够的游戏币
CHECKGAMEGOLD><$STR(N10)>
#ACT
;扣除对应数量的游戏币
GAMEGOLD-<$STR(N10)>
MESSAGEBOX您成功捐赠了<$STR(N10)>金币。
#ELSEACT
MESSAGEBOX金币数量不足,请重新输入。
```
3K引擎在处理时语法稍有不同,标签直接写成`[@InPutIntegerX]`即可,不需要`Call`前缀。对于输入内容的过滤,引擎提供了`[@IsInFilterList]`标签用于处理非法字符,当玩家输入内容包含敏感词时会自动跳转到此段落进行拦截处理。
###定时与机器人脚本
游戏中的定时活动、定时刷怪等功能,依靠机器人脚本来实现。机器人脚本主要涉及两个文件:`AutoRunRobot.txt`用于设置定时触发,`RobotManage.txt`用于编写触发后的具体逻辑。
**第一步:在`AutoRunRobot.txt`中设定触发时间**
```
;每小时运行一次
#AutoRunNPCHOUR1@开始活动
;每周五15点55分运行
#AutoRunNPCRUNONWEEK5:15:55@周五活动
```
支持的时间单位包括`SEC`(秒)、`MIN`(分)、`HOUR`(时)、`DAY`(天)以及`RUNONWEEK`(星期几)。
**第二步:在`RobotManage.txt`中编写触发逻辑**
当`AutoRunRobot.txt`中的定时条件达成后,系统会执行`RobotManage.txt`中对应的脚本段落。
```
[@开始活动]
#IF
#ACT
;向全服发送公告消息
SENDMSG0比武地图已经开放,勇士们请速速前往!
;执行地图刷怪或其它操作
Param13355339
Param2355
Param3339
MonGen活动BOSS10
```
通过这种方式,可以实现定时全服公告、定时开启活动地图、定时刷新怪物等常规功能。
###常用脚本命令整理
编写脚本时,熟悉基础命令的效率会高很多。以下是一些高频使用的命令:
|命令格式|功能说明|
|:---|:---|
|`CHECKLEVELEX>数值`|检测玩家等级是否大于指定数值|
|`CHECKGAMEGOLD>数值`|检测玩家元宝数量是否大于指定数值|
|`GAMEGOLD+数值`|增加玩家元宝数量|
|`GAMEGOLD-数值`|扣除玩家元宝数量|
|`MAPMOVE地图代码X坐标Y坐标`|将玩家传送到指定地图的精确坐标|
|`GIVE物品名称数量`|给予玩家指定数量的物品|
|`TAKE物品名称数量`|回收玩家背包中指定数量的物品|
|`MESSAGEBOX提示内容`|弹出对话框显示提示信息|
|`SENDMSG频道编号消息内容`|发送公告消息,0为全局红色公告|
除了这些基础命令,脚本中还包含大量的逻辑判断语句,如`EQUAL`(等于)、`LARGE`(大于)、`SMALL`(小于)等,用于构建更复杂的条件分支。

