手把手教你给传奇服务端加传送NPC!手把手实现「土城→尸王殿」秒传功能

来源: 作者: 点击:
一、准备工作:找到关键文件
1.1 必须定位的2个核心文件
• NPC配置文件:`D:\MirServer\Mud2\NPC\npc.txt`(所有NPC数据来源)

• 地图脚本文件:`D:\MirServer\Mud2\Map\MapInfo.txt`(地图坐标定义)


1.2 提前备份文件
在修改任何文件前,务必将这两个文件复制到桌面备份(防止改错导致游戏崩溃)

---

二、具体操作步骤(附代码示例)
2.1 在土城添加传送NPC
1. 打开npc.txt文件
用记事本打开`npc.txt`,在文件末尾添加以下代码:
```txt
## 土城传送员 101
NPCName = 传送员小明
MapName = 比奇省
X = 327
Y = 345
Dir = 0
Script = 传送至尸王殿
```

参数说明:
• `MapName`:必须与地图文件中的名称完全一致(比奇省=土城)

• `X/Y`:用官方地图工具查看土城中心点坐标(默认327,345)

• `Script`:对应后续脚本名称


2. 保存文件(切记不要用记事本直接保存,改用Notepad++避免乱码)

2.2 编写传送脚本
1. 打开MapInfo.txt
找到尸王殿地图定义段落(通常名为`骷髅洞穴`或`鬼王殿`),复制其地图ID。例如:
```txt
[Map003]
Name = 骷髅洞穴
StartX = 100
StartY = 100
```

2. 创建新脚本文件
在服务端目录新建`D:\MirServer\Mud2\Script\传送至尸王殿.txt`,写入以下代码:
```lua
-- 传送至尸王殿
function OnClick()
local mapid = GetMapID("骷髅洞穴") -- 对应MapInfo.txt中的地图名称
local x = 100 -- 尸王殿出生点X坐标
local y = 100 -- 尸王殿出生点Y坐标
PlayerSetPos(mapid, x, y)
SendMsg(PlayerID, "[系统] 已传送到尸王殿!")
end
```

---

三、测试与验证
3.1 重启服务端
依次重启以下服务:
1. DBSrv.exe(数据库服务)
2. LoginSrv.exe(登录服务)
3. M2Server.exe(游戏主服务)

3.2 客户端验证
1. 进入土城(坐标327,345附近)
2. 找到「传送员小明」NPC对话
3. 观察是否弹出传送提示并到达目标位置

---

四、常见问题排查
4.1 NPC不显示
• 检查`npc.txt`文件编码是否为ANSI(用Notepad++转换)

• 确认NPC坐标是否在土城可视范围内(建议X/Y在300-350之间)


4.2 传送后卡进墙里
• 在MapInfo.txt中确认目标地图的`StartX/Y`坐标是否在安全区域

• 修改尸王殿出生点坐标为`x=150,y=150`(通常更靠近入口)


4.3 脚本报错
• 检查脚本文件名是否与NPC配置中的`Script`参数完全一致

• 确认`骷髅洞穴`地图名称与MapInfo.txt中的定义完全相同(包括标点符号)


---

五、进阶玩法:批量添加传送NPC
5.1 创建传送列表
在`D:\MirServer\Mud2\Script\传送列表.txt`中编写:
```lua
-- 土城→沃玛寺庙
function GoToWOM()
local mapid = GetMapID("沃玛寺庙")
PlayerSetPos(mapid, 200, 200)
end

-- 比奇→毒蛇山谷
function GoToDSSG()
local mapid = GetMapID("毒蛇山谷")
PlayerSetPos(mapid, 50, 80)
end
```

5.2 关联NPC菜单
修改`npc.txt`中的Script参数:
```txt
Script = 菜单1|GoToWOM|GoToDSSG
```

---

六、注意事项
1. 坐标获取工具:推荐使用「传奇地图编辑器2023」查看精确坐标
2. 防刷机制:在脚本中加入冷却时间限制(例如每小时只能传送3次)
3. 多开兼容:如果使用多开器,需在DBConfig.ini中设置`AllowMultiClient=1`

---

终极提示:所有地图名称、坐标参数必须与服务端实际数据完全一致。建议先用记事本搜索`骷髅洞穴`等关键词确认地图ID,避免手动输入错误。