「新手必看」传奇脚本:禁止佩戴重复物品的保姆级教程

来源: 作者: 点击:
一、问题场景

在传奇游戏开发中,经常需要限制玩家佩戴重复装备(如:禁止同时戴两个“火焰戒指”)。这种需求常见于戒指、手镯等部位。下面通过Gee引擎/Legend引擎的脚本实现方法,分步骤详解。

二、核心原理
数据库设置:标记物品的唯一性

穿戴触发:使用@TakeOn事件检测

遍历检测:检查玩家全身装备是否重复

三、详细步骤(附代码)
数据库配置(关键!)

打开数据库管理工具(如DBCommander),找到物品表(StdItems.DB):
为需要限制的物品添加唯一标识,例如在Stdmode或Reserved字段设置特殊值(如99)

示例:火焰戒指的Reserved=99
添加穿戴触发脚本

在服务端的穿戴触发文件(如:Mir200\Envir\Market_Def\QFunction-0.txt)中添加:

[@TakeOn]--穿戴时自动触发
IF

CheckItemAddValue("火焰戒指"0)=99--检测物品是否被标记为"唯一"
ACT
遍历6个首饰位(引擎不同数值不同)

CALL[\系统功能\物品检测.txt]@检测重复装备

[@检测重复装备]
IF

CheckContainsText("火焰戒指"0)--检查第一个首饰位
ACT
无需操作,继续检测下一个位置

ELSEACT

GOTO@检测位置2

...(此处省略中间4个位置的检测)...

[@检测位置6]
IF

CheckContainsText("火焰戒指"5)--第6个首饰位
ACT

SendMsg5"错误:你已佩戴[火焰戒指],无法重复穿戴!"
TakeOffItem"火焰戒指"1--强制脱下新戴的装备
Break

ELSEACT

SendMsg5"装备佩戴成功!"

🔥代码解释:

-当玩家穿上标记为Reserved=99的物品时,自动触发检测

-遍历所有首饰栏位置(通常位置0~5)

-发现重复则强制脱下并提示
其他方法:自定义变量记录

若引擎不支持遍历,可用变量标记状态(需配合登录脚本重置):
[@TakeOn]
IF

EQUAL<$CURRTEMNAME>"火焰戒指"--当前穿戴的是目标装备
ACT

MOVD991--设置变量D99=1(表示已佩戴)

[@TakeOff]--脱下时重置
IF

EQUAL<$CURRTEMNAME>"火焰戒指"
ACT

MOVD990--重置为未佩戴

[@TakeOn]--再次穿戴时检测
IF

EQUAL<$CURRTEMNAME>"火焰戒指"
LargeD990--检查变量是否>0
ACT

SendMsg5"错误:禁止重复佩戴!"
TakeOffItem"火焰戒指"1

四、避坑指南
位置偏移问题:

首饰栏位置索引可能因引擎而异(Hero引擎常用0~5,Gee引擎可能不同)

解决方案:用GetUserItemName命令遍历真实位置
多角色适配:

#IF
GetHumanItemNames<$USERNAME>;获取全身装备名称
#ACT
在返回的字符串中用InStr搜索重复名称


自定义装备位:

若支持Lua脚本(如GEE引擎),可直接调用:
localitemPos={101112131415}--自定义装备位
for_posinipairs(itemPos)do
ifGetItemName(pos)=="火焰戒指"then
SystemTip("禁止重复佩戴!")
return
end
end


五、效果展示
✅尝试佩戴第二个火焰戒指时,自动弹出提示并脱下

✅背包中的重复物品无法双击使用

✅玩家交易时自动检测穿戴状态

附:兼容性说明
引擎类型支持方案

GEE/Legend引擎直接使用遍历检测法
Hero/Blue引擎优先用变量标记法
翎风引擎调用CheckItemPosition
[顶部]