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

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

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

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

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

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

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

打开数据库管理工具(如DB Commander),找到物品表(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

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

ELSEACT

SendMsg 5 "装备佩戴成功!"

🔥 代码解释:

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

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

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

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

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

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

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

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

MOV D99 0 --重置为未佩戴

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

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

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

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

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

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

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


自定义装备位:

若支持Lua脚本(如GEE引擎),可直接调用:
local itemPos = {10,11,12,13,14,15} --自定义装备位
for _, pos in ipairs(itemPos) do
if GetItemName(pos) == "火焰戒指" then
SystemTip("禁止重复佩戴!")
return
end
end


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

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

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

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

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