## 脚本无效的根本原因分析
你遇到的“吃了声望卷什么都不加”这个问题,绝大多数情况下不是脚本本身写错了,而是脚本和数据库之间的对应关系没对上。传奇引擎加载物品脚本的机制是这样的:当你双击使用一个物品时,引擎会先去物品数据库里查这个物品的触发字段,根据这个字段的值去调用对应的脚本段。如果这个触发字段没设置,或者设置的值和脚本里的标签对不上,双击物品就不会触发任何脚本,物品也消耗不掉,声望自然不加。
从你的描述来看,你应该是已经写了一个类似NPC对话的脚本,但声望卷是物品,不能靠点NPC来使用,必须靠物品自身的双击触发机制。下面按步骤把整个流程拆开讲清楚。
## 第一步:确认声望卷在物品数据库里的设置
打开服务端目录下的 `D:\mirserver\Mud2\DB\` 文件夹,找到 `StdItems.DB` 文件(也可能是 `Items.DB`,取决于引擎版本)。这个文件可以用DBC2000工具打开,或者如果你用的是TXT版本,就直接用记事本打开 `StdItems.txt`。
找到你添加的声望卷那一行,重点关注以下几个字段:
| 字段名 | 作用 | 必须设置的值 |
|--------|------|--------------|
| `StdMode` | 物品类型 | 必须设置为 **31**(31代表此类物品双击触发脚本) |
| `AniCount` | 触发脚本的编号 | 设置一个数字,比如 100,这个数字就是后面要用的触发编号 |
| `Shape` | 部分引擎的备用触发字段 | 某些引擎需要和AniCount保持一致 |
如果 `StdMode` 不是31,双击物品不会触发任何脚本,直接进包就不动了。如果 `AniCount` 是0或者空着,引擎不知道该调用哪个脚本段,也不会有反应。
## 第二步:在QFunction-0.txt里编写物品触发脚本
物品双击触发的脚本统一存放在 `D:\mirserver\Mir200\Envir\QFunction-0.txt` 这个文件里。打开这个文件,在末尾添加如下内容:
```text
[@StdModeFunc100]
#IF
#ACT
CREDITPOINT + 5
SENDMSG 6 你的声望增加了5点,当前声望值:<$CREDITPOINT>
BREAK
```
**关键点说明**:
- `[@StdModeFunc100]` 这里的 **100** 必须和你刚才在物品数据库 `AniCount` 字段里填的数字完全一致。你填100,这里就是100;你填101,这里就是101。
- 如果引擎是GOM或GEE,声望增加命令也可能是 `CHANGEEXP` 或 `CHANGECREDITPOINT`,但最通用的就是 `CREDITPOINT`。如果不确定,可以先用 `SENDMSG 6` 测试脚本能不能触发,能触发再改命令。
- `<$CREDITPOINT>` 是显示当前声望值的变量,用了这个玩家就能看到实时变化。
## 第三步:区分NPC对话脚本和物品触发脚本
你之前“添加了”的脚本,如果是放在NPC文件里的那种,比如这样:
```text
[@main]
你好,可以用声望卷换声望\
<兑换声望/@换声望>
[@换声望]
#IF
checkitem 声望卷 1
#ACT
take 声望卷 1
CREDITPOINT + 5
```
这种脚本是有效的,但它需要玩家去点NPC才能触发,属于**NPC兑换**,不是**双击物品**。如果你想要的是双击直接加声望,上面QFunction的写法才是对的。如果你想要的是点NPC兑换,那你需要检查NPC脚本本身有没有被正确加载,NPC有没有放在正确的地图坐标,玩家能不能点到。
## 第四步:两种方式的完整实现示例
### 方式A:双击物品直接加声望(推荐)
**数据库设置**:
- 物品名称:声望卷
- StdMode:31
- AniCount:88
**QFunction-0.txt** 里添加:
```text
[@StdModeFunc88]
#IF
#ACT
CREDITPOINT + 10
SENDMSG 6 使用声望卷成功,声望增加10点!
BREAK
```
**优点**:不用找NPC,包里双击就行,方便快捷。
### 方式B:找NPC兑换声望
**NPC脚本**(放在 Market_Def 文件夹,比如 `声望使者-3.txt`):
```text
[@main]
你可以用声望卷在这里兑换声望\
一张声望卷兑换5点声望\
<兑换声望/@exchange>
[@exchange]
#IF
checkitem 声望卷 1
#ACT
take 声望卷 1
CREDITPOINT + 5
SENDMSG 6 兑换成功,当前声望:<$CREDITPOINT>
#ELSESAY
你身上没有声望卷,打怪可以获得\
```
**MerChant.txt** 里添加NPC配置:
```
声望使者 3 330 330 声望使者 0 13 0
```
## 第五步:吃了不加点的逐项排查清单
按照这个顺序查,一定能找到问题出在哪:
**检查项1:物品数据库的StdMode是不是31**
如果不是31,改成31,保存,重启M2。
**检查项2:AniCount有没有数字,和QFunction里的是否一致**
假设AniCount填的是88,QFunction里必须是 `[@StdModeFunc88]`,不能是 `[@StdModeFunc100]`。
**检查项3:QFunction-0.txt文件编码对不对**
这个文件必须保存为 **ANSI编码**,不能是UTF-8带BOM。用记事本打开,另存为,编码选ANSI。
**检查项4:引擎是否支持CREDITPOINT命令**
极少数引擎的声望命令是 `CREDITPOINT` 不带 `+` 号,或者用 `CHANGECREDITPOINT`。可以先用这个命令测试:
```text
[@StdModeFunc88]
#IF
#ACT
SENDMSG 6 脚本触发成功
```
如果能弹出消息,说明触发没问题,只是加声望的命令不对,换成 `CHANGECREDITPOINT + 5` 再试。
**检查项5:重启M2让配置生效**
修改了DB文件或者QFunction之后,必须重启M2Server,或者在M2上执行“重新加载物品数据库”和“重新加载QFunction”的指令。
**检查项6:用GM号测试时关掉GM模式**
有些引擎在GM模式下双击物品不触发脚本,需要用普通玩家身份测试。
## 第六步:常见引擎命令对照表
不同引擎的声望增加命令有细微差别,如果上面的通用写法不行,试试下面这些:
| 引擎类型 | 增加声望命令 |
|----------|--------------|
| GOM/GEE | `CHANGECREDITPOINT + 5` |
| 3K引擎 | `CREDITPOINT + 5` |
| HERO引擎 | `CHANGE CREDITPOINT + 5` |
| BLUE引擎 | `INC <$CREDITPOINT> 5` |
如果不确定自己用的什么引擎,看M2启动窗口的标题栏,一般会显示引擎版本。
## 第七步:其他注意事项
- **声望卷能不能叠加**:如果物品设置了叠加,双击触发脚本时,引擎只会扣除一个,脚本里不用写 `TAKE` 命令,QFunction触发时系统会自动扣掉一个。但如果你的脚本里又写了一遍 `TAKE`,反而可能出错。
- **想限制每天使用次数**:可以在脚本里加个人变量记录当天使用次数,用 `DAYS` 或 `HOUR` 命令检测时间。
- **想给声望卷加使用等级限制**:在 `#IF` 下面加 `CHECKLEVEL > 39` 之类的条件。
## 总结:你现在的操作路径
1. 打开DB,确认声望卷的 `StdMode=31`,`AniCount=88`(举例)。
2. 打开 `QFunction-0.txt`,在最后加上 `[@StdModeFunc88]` 及下面的加声望代码。
3. 保存文件(编码ANSI),重启M2。
4. 进游戏双击测试。
按这个流程走一遍,99%的情况都能解决。如果还不行,把你用的引擎类型、DB里的字段截图、QFunction里的脚本贴出来,再具体分析。

