传奇双倍经验药物制作:持续时长与死亡不掉落设置

来源: 作者: 点击:
在单机架设过程中,自定义一个双倍经验药物需要涉及数据库字段修改、触发脚本编写以及状态持久化三个层面的操作。目标是实现服用后获得指定时长的双倍经验状态,并且角色死亡或下线重连后效果依然保留。

**数据库物品类型与字段定义**

首先在物品数据库(StdItems.DB)中新建一个药品类物品。复制任意一个现有药品的数据行,修改以下关键字段。`Idx`设置为不重复的序号,`Name`填写自定义名称,如“双倍经验丹”。`Stdmode`字段必须设置为0,代表该物品为药品类型,可以在快捷栏使用。`Shape`字段设置为0,表示立即生效类药品。`Weight`和`Anicount`可填0。

`Source`字段用于控制药品的持续生效次数或总时长基数。`DuraMax`字段填写药物的生效分钟数,例如想要30分钟就填写30000,想要60分钟则填写60000。`AC`和`MAC`字段在此处不发挥作用,留空或填0。`Need`和`NeedLevel`字段控制使用等级限制,若希望全等级可用均设为0。

**QFunction-0.txt触发脚本编写**

药物生效的核心逻辑通过服用触发脚本实现。在服务端`Mir200\Envir\Market_Def`目录下的`QFunction-0.txt`文件中,添加`[@StdModeFuncX]`字段,其中X对应数据库中该物品的`Anicount`值。

假设数据库的`Anicount`设定为101,则在`QFunction-0.txt`中写入:

```
[@StdModeFunc101]
#IF
CHECKVAR HUMAN 双倍经验 = 1
#ACT
SENDMSG 6 当前已存在双倍经验状态,无法重复使用。
BREAK
#IF
#ACT
CALCVAR HUMAN 双倍经验 = 1
SAVEVAR HUMAN 双倍经验 ..\QuestDiary\双倍经验Save.txt
KILLMONEXPRATE 200 1800
SENDMSG 6 您已获得双倍经验状态,持续30分钟,死亡不掉落。
BREAK
```

其中`KILLMONEXPRATE 200 1800`命令中,200代表经验倍率(即200%),1800代表持续时间(单位秒,对应30分钟)。如需延长至60分钟,将此数值改为3600即可。

**个人变量的持久化存储**

为了避免死亡或下线导致状态丢失,必须使用自定义个人变量将双倍状态写入硬盘。在服务端`Mir200\Envir\QuestDiary`目录下新建一个TXT文件,命名为`双倍经验Save.txt`。该文件用于存储角色名的变量值。

在`QManage.txt`(登录脚本)中,添加角色登录时的变量读取逻辑。在`[@Login]`字段下加入:

```
#IF
#ACT
LOADVAR HUMAN 双倍经验 ..\QuestDiary\双倍经验Save.txt
```

同时添加死亡触发检测,在`QFunction-0.txt`中写入`[@PlayDie]`字段,确保角色死亡时不会清除该变量:

```
[@PlayDie]
#IF
CHECKVAR HUMAN 双倍经验 = 1
#ACT
SENDMSG 6 您已死亡,但双倍经验效果依然保留。
BREAK
```

**双倍经验开关与下线持久化**

下线重连后,需要恢复经验倍率状态。在`QManage.txt`的`[@Login]`字段中添加恢复命令:

```
#IF
CHECKVAR HUMAN 双倍经验 = 1
#ACT
KILLMONEXPRATE 200 1800
SENDMSG 6 您的双倍经验效果已恢复,剩余时间继续生效。
BREAK
```

这一步是保证下线后重连效果继续的关键。如果不加这段恢复代码,虽然变量仍为1,但引擎的经验倍率状态在下线时会被重置,重连后实际效果会消失。

**物品使用的限制与调试**

设置完成后需重启服务端,或通过M2的控制台重新加载物品数据库和QFunction脚本才能生效。若服用后无反应,依次排查:数据库中`Anicount`字段数值与QFunction中的`StdModeFunc`编号是否一致,变量文件路径是否正确,M2上是否开启了“允许个人变量”功能。如果希望药物只能使用一次,将数据库中的`DuraMax`字段改为1即可。状态时间的延长只需修改`KILLMONEXPRATE`命令后的秒数参数,并将该数值同步更新到`QManage.txt`登录恢复脚本中,确保下线重连后的剩余时长与初始时长一致。