在传奇服务端中实现“双击使用”功能的特殊卷轴(如装备打包卷、雇佣兵战圣晋升卷),需修改物品数据库、QFunction脚本及人物等级/属性判定逻辑。操作基于标准Mir2/Mir3服务端结构,路径以 MirServerMir200 为例。
一、准备新物品编号
打开 EnvirMarket_defItemList.txt,查找未使用的物品编号(通常从5000起预留)。
装备打包卷:编号设为 5001
雇佣兵晋升卷:编号设为 5002
在 EnvirMapQuest_defQManage.txt 中注册物品名称(可选,用于日志识别):
[@Item5001]
ACT
SENDMSG 7 装备打包卷已使用
[@Item5002]
ACT
SENDMSG 7 雇佣兵晋升卷已使用
二、配置物品基础属性
编辑 EnvirStdItems 目录下对应编号的 .txt 文件(若无则新建):
装备打包卷(5001.txt)
[Name] 装备打包卷
[Image] 10
[StdMode] 49
[DuraMax] 1
[Weight] 1
[AniCount] 1
[AniTick] 10
[ItemType] 15
[EffectType] 0
[NeedIdentify] 0
[ShowName] 1
雇佣兵晋升卷(5002.txt)
[Name] 战圣晋升卷
[Image] 11
[StdMode] 49
[DuraMax] 1
[Weight] 1
[AniCount] 1
[AniTick] 10
[ItemType] 15
[EffectType] 0
[NeedIdentify] 0
[ShowName] 1
关键参数说明:
[StdMode] 49:表示可双击使用的消耗品
[ItemType] 15:通用道具类型
[DuraMax] 1:使用后消失
三、编写双击触发脚本
所有双击逻辑在 MapQuest_defQFunction-0.txt 中处理。
装备打包卷功能(5001)
目标:将角色身上穿戴的装备移至背包,若背包满则提示。
在 QFunction-0.txt 末尾添加:
[@Item5001]
IF
CHECKITEM 装备打包卷 1
ACT
DELITEM 装备打包卷 1
TAKEONITEMALL
GIVEITEMALL
SENDMSG 6 装备已全部移入背包!
BREAK
说明:
TAKEONITEMALL:卸下全身装备
GIVEITEMALL:将卸下的装备放入背包(自动跳过已满格子)
若背包空间不足,未放入的装备会留在地面,需额外加判断(见下文补充)
补充:背包满时提示
在 DELITEM 前插入:
#IF
CHECKBAGGAGE 40
#ELSEACT
SENDMSG 7 背包空间不足,无法打包!
BREAK
雇佣兵晋升卷功能(5002)
目标:检测是否为雇佣兵职业,满足条件则直接升为战圣(假设战圣职业编号为4)。
在 QFunction-0.txt 添加:
[@Item5002]
IF
CHECKITEM 战圣晋升卷 1
EQUAL JOB 3 ; 假设雇佣兵职业JOB=3
ACT
DELITEM 战圣晋升卷 1
CHANGEJOB 4 ; 切换为战圣职业
SET LEVEL 50 ; 可选:同步提升等级
CALCATTR ; 重算属性
SENDMSG 6 恭喜!您已晋升为战圣!
BREAK
ELSEACT
SENDMSG 7 仅雇佣兵可使用此卷轴!
关键点:
EQUAL JOB 3:需根据实际服务端职业编号调整(战士=0, 法师=1, 道士=2, 雇佣兵=3)
CHANGEJOB 4:战圣职业编号需与 Hero.db 或职业配置一致
CALCATTR:强制刷新属性,避免职业变更后属性未更新
四、验证与调试
将新物品通过GM命令给予角色:
!give 装备打包卷 1
!give 战圣晋升卷 1
双击使用,观察:
装备是否从身上移除并进入背包
雇佣兵职业是否变为战圣,且属性正确
若无效,检查:
ItemList.txt 编号是否重复
StdItems5001.txt 是否保存为ANSI编码
QFunction-0.txt 是否有语法错误(如缺少 #ACT)
五、注意事项
职业编号需与服务端 !Setup.txt 中 JobCount 及职业扩展设置匹配。
若服务端使用Hero引擎,CHANGEJOB 可能需替换为 CHANGENEWJOB。
装备打包功能不处理武器/盾牌的耐久归零问题,如需保留耐久,应改用逐件检测脚本。
按上述步骤操作,即可实现双击生效的装备打包卷与雇佣兵晋升卷,无需外部工具或复杂配置。

