传奇地图中,NPC是核心交互载体,所有玩法都需要通过NPC触发,很多地图制作者不知道各类NPC功能代码怎么写,下面直接讲清楚常用NPC功能代码,分基础格式、核心功能、实操细节,每一行代码都可直接复制使用,照着写就能实现对应功能,不用多余操作。
先明确核心:传奇NPC功能代码,核心是“触发命令+执行动作”,所有代码都围绕这两点展开,不同功能的代码,只是执行动作不同,基础格式一致,新手先掌握基础框架,再对应自己需要的功能找代码,效率更高。
基础NPC功能代码框架(所有NPC通用,不管什么功能,都基于这个框架扩展):
[@NPCDialog]
#IF
True
#ACT
// 这里填写具体执行动作的代码
#SAY
欢迎使用NPC功能\\n
1. 触发功能1\\n
2. 触发功能2\\n
3. 返回主界面\\n
这个基础框架中,[@NPCDialog]是NPC对话触发命令,#IF True代表无条件触发,#ACT后面填写具体功能代码,#SAY后面是NPC显示的对话内容,\\n是换行符,让对话排版更清晰,玩家点击对应数字即可触发对应功能。
下面分常用NPC功能,逐一给出完整代码,每类功能都有完整示例,可直接复制替换,适配所有传奇地图脚本编辑器,无需修改格式。
第一种:NPC对话触发传送功能(最常用,比如新手村传送、地图跳转)
完整代码示例:
[@NPCDialog]
#IF
True
#ACT
MapMove 新手村 100 200 // 新手村是目标地图名称,100 200是目标坐标
#SAY
我是传送NPC,点击对应选项即可传送\\n
1. 传送到新手村\\n
2. 传送到沃玛寺庙\\n
3. 传送到祖玛寺庙\\n
补充说明:MapMove是传送核心命令,后面依次跟“目标地图名称+X坐标+Y坐标”,坐标需和地图中实际坐标一致,可在地图编辑器中查看具体坐标;若想设置多个传送选项,可在#ACT中添加多个MapMove命令,对应#SAY中的选项。
第二种:NPC出售物品功能(比如新手装备、药水、材料)
完整代码示例:
[@NPCDialog]
#IF
True
#ACT
OpenShop 新手商店 // 新手商店是提前创建的商店名称
#SAY
欢迎光临新手商店,可购买各类新手物资\\n
1. 打开新手商店\\n
2. 查看商品列表\\n
补充说明:OpenShop是打开商店的核心命令,后面跟商店名称,商店名称需和地图中创建的商店名称完全一致,否则无法打开;若想让NPC直接出售单个物品,无需打开商店,可替换#ACT中的命令为“Give 布衣 1 1000”,代表给玩家1件布衣,售价1000金币,Give后面依次跟“物品名称+数量+售价”。
第三种:NPC回收物品功能(比如回收装备换金币、材料)
完整代码示例:
[@NPCDialog]
#IF
CheckItem 布衣 1 // 检查玩家是否有1件布衣
#ACT
Take 布衣 1 // 扣除玩家1件布衣
GiveGold 1000 // 给玩家1000金币
#SAY
装备回收中心,回收各类闲置装备换金币\\n
1. 回收布衣(1件换1000金币)\\n
2. 回收木剑(1件换500金币)\\n
3. 回收铁剑(1件换800金币)\\n
补充说明:CheckItem是检查玩家物品的命令,后面跟“物品名称+数量”;Take是扣除玩家物品,GiveGold是给玩家金币,若想回收后给材料,可将GiveGold替换为“Give 铁矿石 1”,代表给1个铁矿石。
第四种:NPC给予玩家属性加成功能(比如增加攻击力、防御力)
完整代码示例:
[@NPCDialog]
#IF
CheckGold 5000 // 检查玩家是否有5000金币
#ACT
TakeGold 5000 // 扣除玩家5000金币
SetStr 10 // 增加10点攻击力(SetStr是攻击力命令)
SetDef 5 // 增加5点防御力(SetDef是防御力命令)
#SAY
属性加成NPC,消耗金币提升属性\\n
1. 消耗5000金币,增加10攻5防\\n
2. 消耗8000金币,增加15攻8防\\n
补充说明:SetStr是设置攻击力命令,SetDef是设置防御力命令,后面的数字是具体增加的点数;CheckGold是检查玩家金币数量,TakeGold是扣除金币,若无需消耗金币,删除CheckGold和TakeGold两行即可。
第五种:NPC任务触发功能(比如接取杀怪任务、收集任务)
完整代码示例:
[@NPCDialog]
#IF
Level >= 10 // 检查玩家等级是否大于等于10级
#ACT
StartQuest 杀怪任务1 // 启动杀怪任务
#SAY
新手任务中心,达到等级即可接取任务\\n
1. 接取杀怪任务(需10级以上)\\n
2. 查看任务进度\\n
3. 提交任务领取奖励\\n
补充说明:StartQuest是启动任务命令,后面跟任务名称,任务名称需和地图中创建的任务名称完全一致;Level >= 10是任务接取条件,可根据需求修改等级,比如改为Level >= 5,适合新手任务。
除了上述常用功能,补充几个NPC功能代码的通用注意事项,帮大家避免踩坑。第一,所有代码中的命令和符号,必须是英文半角格式,比如#IF、#ACT、//,若用中文全角符号,代码会失效,比如把#IF写成#IF,就无法触发功能;第二,代码中涉及的地图名称、物品名称、商店名称,必须和地图中实际名称完全一致,包括空格、大小写(部分编辑器区分大小写),否则命令无法识别;第三,#SAY中的对话内容,\\n是换行符,必须添加,否则对话会显示在一行,影响玩家操作。
另外,若想给NPC添加多个功能,无需编写多个独立代码,可在同一个[@NPCDialog]框架下,通过#ELSEIF添加多个条件,实现一个NPC多种功能,示例如下:
[@NPCDialog]
#IF
CheckGold 5000
#ACT
SetStr 10
#ELSEIF
CheckItem 布衣 1
#ACT
Take 布衣 1
GiveGold 1000
#ELSEIF
True
#ACT
MapMove 新手村 100 200
#SAY
多功能NPC,可属性加成、回收装备、传送\\n
1. 消耗5000金币,增加10点攻击力\\n
2. 回收1件布衣,换取1000金币\\n
3. 传送到新手村\\n
这种写法可实现一个NPC承载多种功能,玩家点击对应选项,即可触发对应代码,无需创建多个NPC,节省地图空间。
还有一个实操技巧,编写NPC代码时,可先在脚本编辑器中写下基础框架,再逐步添加具体功能命令,避免一次性编写复杂代码导致错误。编写完成后,保存为.txt格式,放在地图的Script文件夹中,重启地图服务端,NPC即可正常生效。
若代码生效后,功能无法触发,先检查三点:一是命令是否正确,比如把MapMove写成MapMove1,就会失效;二是名称是否一致,比如商店名称写成“新手商”,而实际是“新手商店”;三是符号格式,确认所有#IF、#ACT、#SAY都是英文半角,没有中文符号。
总结一下,传奇NPC功能代码的核心是“基础框架+具体命令+对应条件”,不管是传送、出售物品、回收装备,还是属性加成、任务触发,都基于同一个基础框架,只是#ACT后面的执行命令不同。只要记住基础框架,替换对应功能命令,确保名称、符号正确,就能顺利实现NPC的各类功能,不用额外学习复杂的脚本知识。
最后补充一个通用技巧,编写代码时,可在//后面添加注释,比如// 传送到新手村坐标,方便后续修改时快速识别代码功能,注释不会影响代码运行,还能提高后续修改效率。另外,不同传奇版本的脚本命令可能略有差异,若遇到命令无效的情况,可将核心命令替换为对应版本的命令,比如部分版本将MapMove替换为MoveMap,写法不变,只需替换命令即可。

