土城指定兑换勋章的功能通过NPC脚本实现,脚本文件放置在服务端Market_Def目录下,需要在Merchant.txt中注册NPC的坐标与外观。核心逻辑是检测玩家声望值、扣除声望、发放指定勋章,整个流程依靠CHECKCREDITPOINT、CREDITPOINT和GIVE三个命令完成。下面从NPC注册、脚本编写、文件位置、数据库配置到常见错误逐一说明。
## NPC注册与文件位置
土城在Merchant.txt中对应地图编号为3。打开MirServer\Mir200\Envir\Merchant.txt,在文件末尾追加一行NPC记录。格式为NPC名称、地图编号、坐标X、坐标Y、朝向、外观代码、脚本文件名。例如:勋章兑换使者 3 330 330 0 100 勋章兑换使者-3,其中外观代码100需要根据实际客户端素材编号调整,脚本文件名对应Market_Def目录下的txt文件。
脚本文件存放在MirServer\Mir200\Envir\Market_Def目录下,新建文本文档命名为“勋章兑换使者-3.txt”。后缀的3表示盟重省地图,引擎通过后缀匹配地图编号,后缀写错会导致NPC对话无法触发。文件编码使用ANSI,UTF-8编码会导致中文显示为乱码。
## 脚本主体结构
脚本入口标签通常命名为[@main]或[@指定勋章]。入口段向玩家展示可兑换的勋章列表和操作选项。
```
[@指定勋章]
这里你可以领取指定的荣誉勋章,你也要付出更多的声望值。
〖<查看各级勋章需要的声望值/@声望值>〗
<勋章11号/@荣誉勋章11号> <勋章12号/@荣誉勋章12号>
<勋章13号/@荣誉勋章13号> <勋章14号/@荣誉勋章14号>
<勋章15号/@荣誉勋章15号>
<勋章21号/@荣誉勋章21号> <勋章22号/@荣誉勋章22号>
<勋章23号/@荣誉勋章23号> <勋章24号/@荣誉勋章24号>
<勋章25号/@荣誉勋章25号>
<勋章31号/@荣誉勋章31号> <勋章32号/@荣誉勋章32号>
<勋章33号/@荣誉勋章33号> <勋章34号/@荣誉勋章34号>
<勋章35号/@荣誉勋章35号>
<勋章41号/@荣誉勋章41号> <勋章42号/@荣誉勋章42号>
<勋章43号/@荣誉勋章43号> <勋章44号/@荣誉勋章44号>
<勋章45号/@荣誉勋章45号>
<返回/@领取勋章>
```
每行尖括号内为可点击的链接,斜杠左侧是显示文字,右侧是跳转的标签名。符号`\`用于换行,SCOLOR或FCOLOR参数可以调整文字颜色。勋章编号遵循盛大原版体系,11到15为一级勋章,21到25为二级,31到35为三级,41到45为四级。不同等级勋章消耗的声望值递增。
## 声望检测与扣除
每个勋章对应一个独立的脚本段。以荣誉勋章11号为例,脚本段如下:
```
[@荣誉勋章11号]
#IF
CHECKCREDITPOINT > 10
#ACT
CREDITPOINT - 10
GIVE 荣誉勋章11号 1
SENDMSG 6 您当前的声望值:<$CREDITPOINT>
BREAK
#SAY
兑换成功!拿好了,别掉了。
#ELSEACT
MESSAGEBOX 对不起,你的声望值不够无法换取。
```
CHECKCREDITPOINT命令检测玩家当前声望值,格式为CHECKCREDITPOINT 控制符 数值,控制符支持大于号、小于号和等于号。CREDITPOINT命令用于增减声望值,格式为CREDITPOINT 控制符 数值,`CREDITPOINT - 10`表示扣除10点声望。GIVE命令发放物品,格式为GIVE 物品名 数量。
SENDMSG 6的6表示私聊消息,消息内容中的`<$CREDITPOINT>`是引擎内置变量,自动替换为玩家当前的声望值。玩家每次兑换成功后,私聊中会实时显示扣除后的声望余额。BREAK命令终止当前脚本段执行,防止后续代码被意外触发。ELSEACT分支中的MESSAGEBOX弹出提示框,通知玩家声望不足。
## 各级勋章脚本段的批量编写
一级勋章11号到15号使用相同的检测条件和扣除数值,全部为CHECKCREDITPOINT > 10和CREDITPOINT - 10。二级勋章21号到25号使用CHECKCREDITPOINT > 20和CREDITPOINT - 20。三级勋章31号到35号使用CHECKCREDITPOINT > 30和CREDITPOINT - 30。四级勋章41号到45号使用CHECKCREDITPOINT > 40和CREDITPOINT - 40。
复制粘贴修改时,最容易出错的地方是忘记修改标签名或GIVE命令中的物品名称。标签名[@荣誉勋章12号]中如果写成了[@荣誉勋章11号],两个入口指向同一个标签,勋章12号实际上无法兑换。GIVE命令后的勋章名称必须与StdItems.DB中的名称完全一致,多一个空格或少一个标点符号都会导致发放失败。
## 物品数据库配置
勋章类物品在StdItems.DB中的Stdmode字段通常设置为43,表示勋章类装备。Shape字段用于控制勋章的特殊属性,例如Shape=150对应麻痹护身圣牌,Shape=151对应麻痹火球圣牌,不设置特殊属性时Shape保持为0。NeedJob字段控制职业限制,0为战士、1为道士、2为法师,填写-1或空值表示三职业通用。
勋章物品的Source字段决定持久掉落的规则。Source=1时勋章不随时间掉持久,Source=0时随时间掉持久。声望兑换的勋章通常设置为不随时间掉持久,避免玩家兑换后勋章因持久耗尽而消失。
物品名称中的编号体系需要与脚本中的GIVE命令保持一致。StdItems.DB中的物品名称如果是“荣誉勋章11号”,脚本中也必须写“荣誉勋章11号”,不能简写为“勋章11号”或“荣誉勋章11”。名称对不上,GIVE命令无法找到对应物品,玩家声望被扣除但拿不到勋章。
## 声望值查看与提示
在入口脚本中添加声望查看功能,方便玩家了解自己当前的声望余额:
```
[@查看声望]
#SAY
您当前的声望值:<$CREDITPOINT>点。
<返回/@指定勋章>
```
使用`<$CREDITPOINT>`变量可以直接在对话文本中嵌入玩家的实时声望值。也可以在兑换成功后的私聊提示中同时显示扣除前和扣除后的数值,方便玩家核对:
```
SENDMSG 6 消耗10点声望,兑换获得荣誉勋章11号。当前剩余声望:<$CREDITPOINT>
```
## 兑换脚本的常见错误排查
点击勋章链接后弹窗提示声望不足,但玩家确认自己的声望足够。这种情况通常是CHECKCREDITPOINT的数值设置偏大。例如玩家有10点声望,脚本中写的是CHECKCREDITPOINT > 10,大于号要求严格大于10才能通过,10点声望不满足条件。改为CHECKCREDITPOINT > 9或CHECKCREDITPOINT >= 10即可修复。
兑换成功后没有获得勋章物品。检查GIVE命令后的物品名称是否与StdItems.DB中的名称完全一致,以及物品的Stdmode是否为勋章类。如果物品名称正确但勋章无法出现在背包中,检查背包空格数量是否足够,勋章类物品占用一个背包格。
点击链接后脚本没有任何反应。检查标签名是否与入口脚本中的跳转目标一致。入口写的是/@荣誉勋章11号,脚本段写的是[@荣誉勋章11号],两者必须完全对应。标签名中多一个空格或使用全角符号,引擎都会找不到目标标签。
玩家声望被扣除但物品没有发放。检查脚本中CREDITPOINT和GIVE命令的执行顺序。如果CREDITPOINT - 10执行后GIVE命令因为物品名称错误而失败,声望已经扣除无法追回。正确的做法是在扣除声望前先用CHECKITEM检测背包空间,或者在GIVE命令前使用CHECKBAGSIZE确认有足够的空位。
NPC对话无法打开。检查Merchant.txt中的地图编号是否正确,土城在多数引擎中编号为3,部分引擎使用0表示盟重省。NPC坐标是否在地图的有效范围内,朝向参数是否填写了合法的数值。脚本文件名是否与Merchant.txt中的登记项完全一致,包括后缀和扩展名。
修改脚本文件后需要重启M2服务端或在引擎中重新加载NPC脚本,仅保存文件不会立即生效。如果修改的是Merchant.txt中的NPC注册信息,必须重启服务端才能加载新的NPC坐标。脚本文件本身的修改可以通过M2引擎的重新加载脚本功能即时生效,无需重启。
传奇土城指定兑换勋章脚本完整配置与NPC添加教程
来源:
作者:
点击:

