以下是传奇游戏 NPC 脚本编写的一般教程:
1. **了解基本文件和路径**:
- **NPC 总控制文件**:在游戏服务器端的指定目录下,一般是 `d:\mirserver\mir200\envir` 中的 `merchant.txt` 文件(不同版本的传奇游戏可能路径会略有不同),游戏内的所有 NPC 信息都在此文件中编辑。这里记录了 NPC 的基本信息,如名称、所在地图、坐标、显示名称、外观编码等。
- **NPC 脚本文件路径**:NPC 脚本文件存放在 `d:\mirserver\mir200\envir\market_def` 目录下。该目录下的所有 NPC 脚本文件都是 `.txt` 文本文件格式。
- **地图配置文件**:地图相关的信息通常存储在 `d:\mirserver\mir200\envir\mapinfo.txt` 文件中,编写 NPC 脚本时可能需要参考此文件中的地图信息,比如判断玩家要传送的地图是否存在等。
2. **NPC 的基础设置**:
- **新增 NPC**:
- 在 `merchant.txt` 文件中添加新增 NPC 的字段。字段格式通常为“自定义名称+地图编号+地图 X,Y 坐标+NPC 显示名称+NPC 外观编码”。例如,如果要在盟重省添加一个名为“传送员”的 NPC,坐标为 (329, 266),外观编码为 73,那么在 `merchant.txt` 中添加的字段可以是“〖盟重传送员〗\传送员 329 266 传送员 073”(这里的“073”中,前面的“0”有时可以忽略其具体含义,重点关注后面的数字代表外观编码)。
- 在 `market_def` 目录下创建与字段对应的 NPC 脚本文本。文件名的命名格式为“自定义名称-地图编码.txt”。比如对于上述盟重省的传送员,对应的脚本文件名应为“传送员-3.txt”(假设游戏中盟重省的地图编码为 3)。
- **隐藏 NPC**:如果想要隐藏某个 NPC,只需要在 `merchant.txt` 文件中对应的 NPC 字段前面加一个英文状态下的分号 `;`,注释掉该 NPC 字段即可。例如“;〖比奇传送员〗\传送员 0329 266 传送员 0730”,这样比奇传送员就会被隐藏。
3. **脚本主体结构**:
- 每个 NPC 脚本文件的顶部必须有 `(@main)` 开头,这是引擎默认的独立 NPC 脚本文件固定标签,表示主体部分。一般用于显示 NPC 与玩家交互时的初始文字内容,比如 NPC 的欢迎语、介绍等。例如:
```
(@main)
#say 欢迎来到我的商店,我这里有各种珍贵的物品。
```
- 除了 `(@main)` 主体部分,其他功能的实现可以通过 `(@xxx)` 的格式来自定义命名。比如 `(@buy)` 可以用于处理玩家购买物品的功能,`(@teleport)` 可以用于处理玩家传送的功能等。这些自定义的标签用于将脚本逻辑进行分类和组织,方便编写和维护。
4. **脚本命令类型**:
- **检测类型命令**:这类命令用于判断玩家是否满足某些条件,通常写在 `#if` 关键字后面。例如 `checklevel` 命令用于检测玩家的等级,`checkitem` 命令用于检测玩家背包中是否有指定的物品,`checkgamegold` 命令用于检测玩家的元宝数量是否满足条件等。示例:
```
(@main)
#if
checklevel > 50 // 检测玩家等级是否大于 50 级
#act
// 如果玩家等级大于 50 级,执行这里的代码
#say 你的等级符合要求,可以进行下一步操作。
#elseact
// 如果玩家等级不满足条件,执行这里的代码
#say 你的等级不足,无法进行此操作。
```
- **执行类型命令**:当检测类型命令判断玩家满足条件后,执行类型的命令用于执行具体的操作,通常写在 `#act` 或 `#elseact` 后面。比如 `give` 命令用于给予玩家物品,`teleport` 命令用于传送玩家到指定地图等。示例:
```
(@teleport)
#if
checkgamegold >= 100 // 检测玩家元宝是否大于等于 100
#act
teleport 玩家 目标地图 目标坐标 // 传送玩家到目标地图的目标坐标
takegamegold 100 // 扣除玩家 100 元宝
#say 传送成功,扣除 100 元宝。
#elseact
#say 你元宝不足,无法传送。
```
5. **常见功能的实现**:
- **地图传送功能**:创建一个地图传送 NPC,玩家与该 NPC 交互后可以传送到指定的地图。首先在 `merchant.txt` 文件中添加 NPC 信息,然后在 `market_def` 目录下创建对应的脚本文件。在脚本文件中,使用检测类型命令判断玩家是否满足传送条件(如等级、元宝数量等),如果满足条件则使用 `teleport` 命令传送玩家。
- **商店交易功能**:编写一个商店 NPC 的脚本,玩家可以在该 NPC 处购买或出售物品。使用 `checkitem` 命令检测玩家背包中的物品,使用 `give` 和 `take` 命令进行物品的给予和扣除,使用 `checkgamegold` 命令检测玩家的元宝数量以完成交易。
6. **脚本调试与生效**:
- **调试**:在编写脚本的过程中,可能会出现各种错误。可以通过游戏服务器端的日志文件查看错误信息,根据错误提示进行修改。也可以在脚本中添加一些调试信息,比如 `#say` 命令输出一些变量的值或中间结果,以便检查脚本的执行逻辑是否正确。
- **生效**:完成 NPC 脚本的编写和修改后,需要让脚本生效。在游戏服务器的引擎控制器中,点击“控制”->“重新加载”->“所有 NPC”,这样修改后的脚本就会即时生效,无需重启服务器。
在传奇游戏中,编写 NPC 脚本可以为游戏增添丰富的功能和互动性。以下是传奇游戏 NPC 脚本编写的详细教程:
首先,NPC 的基本配置非常重要。配置文件位于 D:\\MirServer\\Mir200\\Envir\\MerChant.txt 中,可以添加 NPC 的名称、所在地图、坐标等基本参数。例如,如果要添加一个名为“测试使者”的 NPC,坐标设置为 330 和 350,相关代码如下:测试使者;3;330;350;测试使者\\『罗开』;0;208;0;0;0;0;0。功能脚本需要放置在 D:\\MirServer\\Mir200\\Envir\\Market_Def 目录下,文件名遵循“NPC 名称-地图编号.txt”的格式。对于“测试使者”在盟重地图(地图编号为 3),文件名应为“测试使者-3.txt”。
编写 NPC 功能脚本时,在“测试使者-3.txt”文件中,可以使用标签(@main)定义主要的对话内容。比如<USE ITEM><JOB>您好!”表示当玩家右键点击 NPC 时,NPC 会说出“您好!”。还可以进一步添加更多功能,如任务分配、物品交易等。通过增加特定的命令让 NPC 提供任务链或交换特定物品。
此外,传奇 NPC 脚本的删除添加与配置参数也需要了解。传奇 npc 分为交易类型和功能 npc,npc 就在两个地方,D:\\MirServer\\Mir200\\Envir\\npcs.txt 和 D:\\MirServer\\Mir200\\Envir\\Merchant.txt。找要删除的 npc 名字,找到后把那一行删除。
对于技术人员来说,#say 和#elsesay 两个程序段在 NPC 脚本中很常见,这些是直接给玩家看到的文字,也就是玩家常说的对话框内容。不同的玩家点击同一个 NPC 可以有不同的内容,可通过使用变量让 NPC 对话框动态显示内容。比如在脚本编写过程中,合理运用变量能帮助实现大部分内容,包括全局变量的统计及个人变量的显示。
总之,编写传奇游戏 NPC 脚本需要对配置文件的位置和参数有清晰的了解,掌握功能脚本的编写方法以及懂得如何利用变量使 NPC 对话框内容更加动态丰富。同时,也要注意 NPC 的外观和界面设计,确保其外观和颜色设置合理,界面友好且易于理解。如果 NPC 提供任务,应确保任务的描述清晰,接受和拒绝的按钮明显。
### 传奇游戏 NPC 基本配置方法
传奇游戏中 NPC 的基本配置是非常重要的环节。配置文件位于 D:\\MirServer\\Mir200\\Envir\\MerChant.txt。在此文件中可以添加 NPC 的基本参数,包括名称、所在地图、坐标等信息。例如,若要添加一个名为“测试使者”的 NPC,坐标设置为 330 和 350,相关代码为:〖贰〗、编写 NPC 功能脚本主对话编写:在“测试使者 -3.txt”文件中,可以使用简单的对话脚本来初始化 NPC 的交互,如使用标签(@main)定义主要的对话内容,<USE ITEM><JOB>您好!”表示当玩家右键点击 NPC 时,NPC 会说出“您好!”。NPC 的配置参数有着明确的意义,第一个参数为脚本命令,第二个参数为地图名,第三个参数为 X 坐标,第四个参数为 Y 坐标,第五个参数为人物名称,第六个参数为 sFlag 为角方向,第七个参数为 APPR 值,第八个参数为是否为沙城,第九个参数为 sCanMove 能否移动,第十个参数为 sMoveTime 移动时间,第十一个参数为 tariff 税率。在对应 NPC 末尾还可以增加三个参数,第一个参数表示变色模式:1=名字+身体,2=身体变色,3=名字变色;第二个参数变色间隔(毫秒);增加的第三个参数是否固定颜色:0=不固定,1 - 7=固定颜色。此外,如果要在布衣店添加一个新 NPC,就需要在改 NPC 文本名字上增加 - 布衣店的地图代码 0119,比如:银杏新人村/许家店 - 0119.txt。添加好 NPC 配置后,进行 M2 - 控制 - 重新加载 - 重读 NPC 操作,再登陆游戏就能看到新添加的 NPC 了。
### 传奇游戏 NPC 功能脚本编写
在传奇游戏中,NPC 功能脚本的编写至关重要。首先,在“测试使者 -3.txt”文件中,可以通过标签(@main)定义主要的对话内容,实现玩家与 NPC 的交互。例如,当玩家右键点击 NPC 时,NPC 可以说出特定的话语,如“您好!”。在编写脚本时,要提前想清楚当前 NPC 的功能,用文本的方式把功能点列出来,再把功能捋清楚,区分哪些是条件要求类型的功能,哪些是条件满足执行的功能。把这些列出来之后,一个一个把对应的脚本命令找到复制粘贴到指定位置就可以了。同时,在脚本编写过程中,变量的使用非常重要,它能帮助技术人员实现大部分的内容,包括全局变量的统计及个人变量的显示。一般来说,让变量以文字形式出现在 NPC 对话框中,需要用到<$STR()>字符串转换功能,而人物的自定义变量则使用<$HUMAN()>转换,还有引擎内自行设定的各种变量,如<$USERNAME>,<$GUILDNAME>等等。对话框内容对于玩家来说,是最直观的体现 NPC 功能的一个界面,不同的 NPC 有不同的内容,如何让不同的玩家点击同一个 NPC 有不同的内容,就成为技术人员编写脚本时需要注意的事情。能够实现某种功能的脚本才是好脚本,单一的显示只会让玩家觉得不方便及麻烦。
### 传奇 NPC 脚本删除添加与配置参数
传奇 NPC 分为交易类型和功能 NPC,它们主要存在于两个地方,即 D:\\MirServer\\Mir200\\Envir\\npcs.txt 和 D:\\MirServer\\Mir200\\Envir\\Merchant.txt。如果要删除一个 NPC,就需要在这两个文件中找到要删除的 NPC 名字,然后把那一行删除。添加 NPC 的方式有以下两种:一是在 D:\\mirserver\\Mir200\\Envir\\Merchant.txt 添加 NPC 参数与配置文件;二是在 D:\\mirserver\\Mir200\\Envir\\market_def 存放 NPC 脚步文件。添加 NPC 时,需要注意 NPC 的字段格式。例如,新增 NPC 字段格式为:NPC 文本名称+地图编号+地图 X,Y 坐标+NPC 显示名称+NPC 外观编码。举例来说,〖比奇传送员〗\\传送员 0 329 266 传送员 0 73 0,上面以最常见传送员为例,各参数之间用空格隔开,至少空一格。此外,还可以通过脚本命令建立一个 NPC,服务器重启后消失。格式为:CreateNPC NPC 名字 地图 坐标 X(-1 时随机坐标) 坐标 Y(-1 时随机坐标) 外观 脚本文件 脚本文件是否要加上地图名称。注意,脚本文件必须在 Market_Def 目录中。
### 传奇游戏 NPC 脚本中程序段使用
在传奇游戏 NPC 脚本中,有各种程序段可以使用。例如,换一行可以用{图像类别/图像定位}表示,图像类别说明动物或 NPC,图像定位指具体图像;用(@段)表示段,段用英文或数字表示,goto @段可以跳转到指定段,开始执行相当于 B 中的 goto 语句;<选择项目/@段>表示选择项目后转称到指定段,相当于 C 中的 case 语句;#say 语句设定为字符,不用加任何定界符;#act 执行命令,符合 3.0 规定的任何系统已定义命令;give 物品数量可以给玩家一定数量的物品,除了武器数据库中有的物品,还有金币;take 物品数量则是收回物品;map 地图名可以移动到这个地图的随机坐标,地图名为地图的数字人码;mapmove 地图名坐标 A 坐标 B 可以移动到指定坐标;monclear 地图名可以清除这个地图上刷的怪物;MonGen 怪物名称数量时间可以刷怪物;TimeRecall 数值可以定义进入某地的时间限制,数值为分钟;BreakTimeRecall 可以中断上面那个语句设定的时间;hairstyle 数值可以改变头发类型;haircolor 红值绿值蓝值可以设定头发颜色,值域为 0 - 255;close 可以关闭对话框。
### 传奇游戏 NPC 变量运用
在传奇游戏 NPC 脚本中,变量的运用非常广泛。P 变量只对当前对话 NPC 内有效果,如果中途点其他 NPC 或者对话产生 close、关闭时大部分 P 变量均归 0。该变量取值范围根据 M2 大值不同。P 变量没有 NPC 间传递性,作为临时变量多重复使用效果很好,而且因为脚本命令有对该变量进行加/减/赋值/随机取值等运算,它和 goto 的配合可以使脚本中出现仿 for 循环的效果。D 变量在人物不下线时对全局 NPC 通用传递,取值范围同 P 变量。既有像(0 -?)变量一样的人物属性私有变量的效果又有像 P 变量一样的运算功能,不过下线后该变量会被清空。如果配合上(000)变量或者 namelist 变量的记录性,功能强大。G(0 - 9)变量不属于人物属性范围,对于全服务器内该变量给力并且全局 NPC 通用传递。该变量通过任何人的运算均产生效果,而且不保存在任何人的属性中,目前尚需要通过综合 namelist 或者(000)变量后才可以使其保存。此外,还有标识(001)-(499),这不是变量,是标识,初始值是关闭的,不会因为人物下线或服务器重启而重置,只有 0 和 1 两种状态,标识是私有的,不共享,一般适用于游戏内的个人任务系统。相关命令格式有 Check(001)0 检测标识是否关闭,SET(001)1 设置标识为开的状态,reset(100)7 将从 100 开始的 7 个变量回复到原始值 0。还有 P0 - P999(私人变量,数字型)关闭对话框重置为 0;D0 - D999(私人变量,数字型)下线不保存,在人物不下线时对全局 NPC 通用传递;M0 - M999(私人变量,数字型)下线不保存,切换地图清空;N0 - N999(私人变量,数字型)等变量类型。
### 传奇游戏 NPC 外观和界面设计
传奇游戏 NPC 的外观和界面设计对于提升游戏体验非常重要。虽然 Merchant.txt 文件主要控制 NPC 的功能和位置,但 NPC 的外观和颜色代码通常在另一个配置中设置,这部分可通过编辑游戏的客户端文件实现不同的外观效果。例如,可以设置 NPC 的变色模式,有名字+身体变色、身体变色、名字变色三种模式,还可以设置变色间隔和是否固定颜色。如果要设置 NPC 兔子外观,可以打开 Mir200\\Envir\\Merchant.txt,在里面写上 NPC 代码,在 NPC 的外形代码设置为 106 就会有兔子形状的 NPC 效果。NPC 的界面交互设计要确保友好且易于理解,如果 NPC 提供任务,应确保任务的描述清晰,接受和拒绝的按钮明显。同时,在整个游戏环境中保持 NPC 的一致性是非常重要的,这包括 NPC 的视觉风格、语言用词以及交互行为,应当符合游戏的整体设计和背景故事。还要优化性能,复杂的 NPC 脚本可能影响游戏性能,确保脚本的效率,避免不必要的计算和过长的刷新时间。
传奇游戏 NPC 脚本编写是一个复杂而又有趣的过程,需要掌握多个方面的知识和技能。从基本配置方法到功能脚本编写,从删除添加与配置参数到程序段使用,从变量运用到外观和界面设计,每一个环节都需要精心策划和认真实施。只有这样,才能创造出丰富多彩、引人入胜的游戏体验,让玩家沉浸在传奇游戏的世界中。

