传奇装备试用试穿NPC脚本教程之临时换装属性预览原装自动还原与到期回收配置

来源: 作者: 点击:
装备试用试穿系统通常做成安全区NPC,玩家选武器、衣服、首饰或整套装备,NPC先把当前身上同部位原装记录到变量或文本,再临时戴上试用装,开启个人定时器展示属性,时间到自动脱下试用装并把原装戴回。系统不依赖修改物品数据库永久属性,所有试用加成和穿戴动作都由脚本控制,避免玩家把试用装带走、交易、丢地、死亡暴落。下面按Hero、GOM、GEE、Blue类常见命令差异写可改模板,实际部署前用本服M2命令列表逐个替换。

一、功能边界与文件规划

Mir200\Envir\Market_Def放NPC定义,例如“试用大使.txt”。
Mir200\Envir\QuestDiary\装备试用放主对话与分支,例如“Main.txt”。
Mir200\Envir\QuestDiary\装备试用\原装备份放人物原装备记录,按角色名或变量存。
Mir200\Envir\QuestDiary\装备试用\试用列表放可试用物品名、部位、时长、消耗。
Mir200\Envir\QuestDiary\装备试用\日志放试用成功、异常还原、强制下线处理。
Market_Def\QFunction-0.txt只写穿戴脱下触发,不写完整试穿业务;试穿业务放QuestDiary,便于热加载和排错。

试用装建议用临时生成或背包已有物品。若直接给玩家发试用装再戴,要设置绑定、禁止交易、禁止丢地、禁止存仓、禁止出售;若仅用属性变量模拟“试穿属性”而不真正换模型,则不做物理换装,只发临时攻防魔道,适合纯数值预览。物理换装更直观,属性换装更防bug,两者可并存。

二、NPC注册示例

Market_Def\试用大使.txt按本服Merchant规则写,地图、坐标、名字、脚本目录要一致。示例结构:

;装备试用NPC
3 330 330 试用大使 0 0 装备试用 1 1 0 0 0 0 0 0

上面地图号、坐标按土城或安全区改。QuestDiary里建“装备试用”目录,主文件Main.txt,NPC脚本目录名与Market_Def最后那个“装备试用”对应,否则点NPC无反应。

三、主界面与物品选择

[@main]
SAY

装备试用中心\ \
可试用武器、衣服、首饰、整套,到期自动还原原装\ \
1.试用武器\ \
2.试用衣服\ \
3.试用首饰全套\ \
4.试用指定极品装\ \
5.查看试用规则\ \
<武器试用/@try_weapon>
<衣服试用/@try_armor>
<首饰全套/@try_jewel>
<极品试用/@try_vip>
<规则说明/@rule>

[@rule]
SAY

试用期间装备绑定,不可交易、不可丢地、不可存仓\ \
到期自动脱下试用装并戴回原装\ \
中途掉线重新登录执行原装还原\ \
恶意卡BUG按日志清属性\

规则NPC只做提示,真正限制靠发装后的绑定命令和定时器还原。

四、单件武器试用与原装备份

下面用“先记录原武器名、再脱原武器、发试用武器并自动穿、起定时器”的思路。不同引擎自动穿命令不同,有的用TakeOn 物品名 位置,有的用TakeOnItem 位置,有的用CHECKITEMW检测身上位置。示例以常见Hero/Legend风格写,部署时按本服替换。

[@try_weapon]
SAY

选择试用武器\ \
<屠龙试用10秒/@w_tulong>
<裁决试用10秒/@w_caijue>
<骨玉试用10秒/@w_guyu>

[@w_tulong]
ACT

VAR String HUMAN OLD_W1
VAR Integer HUMAN TRYING_W
LOADVAR HUMAN OLD_W1 ..\QuestDiary\装备试用\原装备份\OldW1.txt
LOADVAR HUMAN TRYING_W ..\QuestDiary\装备试用\原装备份\TryingW.txt
IF

CHECKVAR HUMAN TRYING_W = 1
ACT

SENDMSG 5 当前已有武器试用,请等待结束或输入@结束试用
CLOSE
ELSEACT

ACT

MOV SOW1 <STR(HUMAN.OLD_W1)>
IF

CHECKITEMW 1 1
ACT

GETITEMINFO 1 WNAME S$OW1
SAVEVAR HUMAN S$OW1 ..\QuestDiary\装备试用\原装备份\OldW1.txt
TAKEOFFITEM 1
ELSEACT

ACT

MOV S$OW1 空
SAVEVAR HUMAN S$OW1 ..\QuestDiary\装备试用\原装备份\OldW1.txt
IF

CHECKITEM 屠龙 1
ACT

TAKEON 屠龙 1
ELSEACT

ACT

GIVE 屠龙 1
BINDUSEITEM 屠龙 1
TAKEON 屠龙 1
IF

CHECKVAR HUMAN TRYING_W <> 1
ACT

MOV HUMAN.TRYING_W 1
SAVEVAR HUMAN TRYING_W ..\QuestDiary\装备试用\原装备份\TryingW.txt
SETSCTIMER 1 10
SENDMSG 5 屠龙试用开始,10秒后还原原武器
CALL @log_w

上面GETITEMINFO、BINDUSEITEM、TAKEON、TAKEOFFITEM、SETSCTIMER都可能因引擎不同改名。若本服没有GETITEMINFO取身上武器名,可改在QFunction的[@TakeOff1]里用变量记录玩家每次脱武器前的名字;若本服没有SETSCTIMER个人定时器,可改QManage全局定时器或机器人定时扫描TRYING_W变量。

五、定时器到期还原武器

个人定时器写QManage.txt,全局定时器按本服[@OnTimerX]写。以个人定时器ID1还原武器为例:

[@OnTimer1]
ACT

VAR String HUMAN OLD_W1
VAR Integer HUMAN TRYING_W
LOADVAR HUMAN OLD_W1 ..\QuestDiary\装备试用\原装备份\OldW1.txt
LOADVAR HUMAN TRYING_W ..\QuestDiary\装备试用\原装备份\TryingW.txt
IF

CHECKVAR HUMAN TRYING_W = 1
ACT

TAKEOFFITEM 1
IF

CHECKSTRING HUMAN OLD_W1 = 空
ACT

SENDMSG 5 武器试用结束,原武器为空,已清空试用装
GOTO @clear_w
ELSEACT

IF

CHECKITEM <$STR(HUMAN.OLD_W1)> 1
ACT

TAKEON <$STR(HUMAN.OLD_W1)> 1
SENDMSG 5 武器试用结束,已戴回原武器
GOTO @clear_w
ELSEACT

ACT

GIVE <$STR(HUMAN.OLD_W1)> 1
BINDUSEITEM <$STR(HUMAN.OLD_W1)> 0
TAKEON <$STR(HUMAN.OLD_W1)> 1
SENDMSG 5 原武器不在背包,已重新发放并戴回
GOTO @clear_w

[@clear_w]
ACT

MOV HUMAN.TRYING_W 0
SAVEVAR HUMAN TRYING_W ..\QuestDiary\装备试用\原装备份\TryingW.txt
BREAKTIMERECALL
CLEARSTRING HUMAN OLD_W1

若本服不用BREAKTIMERECALL清个人定时器,用对应停止定时器命令。原武器若原来在身上被试用装替换,正常流程应先脱原装再发试用装;若玩家原武器已绑定、已损坏、持久为0,还原前检查持久,必要时先普通修理再戴回。

六、衣服试用与双防职业匹配

衣服部位常见位置0或单独服装位,按本服位置表改。战士试用重甲、法师试用法袍、道士试用道袍,可用CHECKJOB判断。

[@try_armor]
SAY

选择试用衣服\ \
<战士天魔/@a_war>
<法师法神/@a_wiz>
<道士天尊/@a_tao>

[@a_war]
IF

CHECKJOB 战士
ACT

GOTO @do_armor_天魔神甲
ELSEACT

SAY

当前职业不匹配战士重甲试用\

[@do_armor_天魔神甲]
ACT

VAR String HUMAN OLD_A0
VAR Integer HUMAN TRYING_A
LOADVAR HUMAN OLD_A0 ..\QuestDiary\装备试用\原装备份\OldA0.txt
LOADVAR HUMAN TRYING_A ..\QuestDiary\装备试用\原装备份\TryingA.txt
IF

CHECKVAR HUMAN TRYING_A = 1
ACT

SENDMSG 5 衣服正在试用,请等待结束
CLOSE
ELSEACT

ACT

IF

CHECKITEMW 0 1
ACT

GETITEMINFO 0 WNAME S$OA0
SAVEVAR HUMAN S$OA0 ..\QuestDiary\装备试用\原装备份\OldA0.txt
TAKEOFFITEM 0
ELSEACT

ACT

MOV S$OA0 空
SAVEVAR HUMAN S$OA0 ..\QuestDiary\装备试用\原装备份\OldA0.txt
IF

CHECKITEM 天魔神甲 1
ACT

TAKEON 天魔神甲 0
ELSEACT

ACT

GIVE 天魔神甲 1
BINDUSEITEM 天魔神甲 1
TAKEON 天魔神甲 0
ACT

MOV HUMAN.TRYING_A 1
SAVEVAR HUMAN TRYING_A ..\QuestDiary\装备试用\原装备份\TryingA.txt
SETSCTIMER 2 30
SENDMSG 5 天魔神甲试用30秒,到期还原

衣服定时器[@OnTimer2]按武器还原逻辑改写,把位置0、OldA0、TryingA替换进去。多职业衣服把天魔、法神披风、天尊道袍分别写分支,避免战士试穿法袍导致面板魔法而无实际战斗价值。

七、首饰全套试用

首饰含项链、头盔、左右手镯、左右戒指、腰带、鞋子等扩展位。全套试用要逐位备份、逐位脱原装、发试用装、统一起定时器。位置编号按本服来,下面用常见对照:项链3、头盔4、左镯5、右镯6、左戒7、右戒8,扩展腰带10、鞋子11;部分引擎衣服0武器1勋章2,另一套老编号会有差异,部署前用空角色逐项测试。

[@try_jewel]
SAY

首饰全套试用\ \
<祖玛全套30秒/@jewel_zuma>
<赤月全套30秒/@jewel_chiyue>

[@jewel_zuma]
ACT

VAR Integer HUMAN TRYING_J
LOADVAR HUMAN TRYING_J ..\QuestDiary\装备试用\原装备份\TryingJ.txt
IF

CHECKVAR HUMAN TRYING_J = 1
ACT

SENDMSG 5 首饰正在试用,请等待结束
CLOSE
ELSEACT

ACT

CALL @backup_jewel
CALL @remove_jewel
CALL @give_zuma_jewel
MOV HUMAN.TRYING_J 1
SAVEVAR HUMAN TRYING_J ..\QuestDiary\装备试用\原装备份\TryingJ.txt
SETSCTIMER 3 30
SENDMSG 5 祖玛首饰全套试用30秒,到期逐位还原

[@backup_jewel]
ACT

IF

CHECKITEMW 3 1
ACT

GETITEMINFO 3 WNAME S$N3
SAVEVAR HUMAN S$N3 ..\QuestDiary\装备试用\原装备份\J_N3.txt
ELSEACT

ACT

MOV S$N3 空
SAVEVAR HUMAN S$N3 ..\QuestDiary\装备试用\原装备份\J_N3.txt
IF

CHECKITEMW 5 1
ACT

GETITEMINFO 5 WNAME S$H5
SAVEVAR HUMAN S$H5 ..\QuestDiary\装备试用\原装备份\J_H5.txt
ELSEACT

ACT

MOV S$H5 空
SAVEVAR HUMAN S$H5 ..\QuestDiary\装备试用\原装备份\J_H5.txt
IF

CHECKITEMW 6 1
ACT

GETITEMINFO 6 WNAME S$H6
SAVEVAR HUMAN S$H6 ..\QuestDiary\装备试用\原装备份\J_H6.txt
ELSEACT

ACT

MOV S$H6 空
SAVEVAR HUMAN S$H6 ..\QuestDiary\装备试用\原装备份\J_H6.txt
IF

CHECKITEMW 7 1
ACT

GETITEMINFO 7 WNAME S$R7
SAVEVAR HUMAN S$R7 ..\QuestDiary\装备试用\原装备份\J_R7.txt
ELSEACT

ACT

MOV S$R7 空
SAVEVAR HUMAN S$R7 ..\QuestDiary\装备试用\原装备份\J_R7.txt
IF

CHECKITEMW 8 1
ACT

GETITEMINFO 8 WNAME S$R8
SAVEVAR HUMAN S$R8 ..\QuestDiary\装备试用\原装备份\J_R8.txt
ELSEACT

ACT

MOV S$R8 空
SAVEVAR HUMAN S$R8 ..\QuestDiary\装备试用\原装备份\J_R8.txt

[@remove_jewel]
ACT

TAKEOFFITEM 3
TAKEOFFITEM 5
TAKEOFFITEM 6
TAKEOFFITEM 7
TAKEOFFITEM 8

[@give_zuma_jewel]
ACT

IF

CHECKITEM 绿色项链 1
ACT

TAKEON 绿色项链 3
ELSEACT

ACT

GIVE 绿色项链 1
BINDUSEITEM 绿色项链 1
TAKEON 绿色项链 3
IF

CHECKITEM 骑士手镯 1
ACT

TAKEON 骑士手镯 5
ELSEACT

ACT

GIVE 骑士手镯 1
BINDUSEITEM 骑士手镯 1
TAKEON 骑士手镯 5
IF

CHECKITEM 骑士手镯 1
ACT

TAKEON 骑士手镯 6
ELSEACT

ACT

GIVE 骑士手镯 1
BINDUSEITEM 骑士手镯 1
TAKEON 骑士手镯 6
IF

CHECKITEM 力量戒指 1
ACT

TAKEON 力量戒指 7
ELSEACT

ACT

GIVE 力量戒指 1
BINDUSEITEM 力量戒指 1
TAKEON 力量戒指 7
IF

CHECKITEM 力量戒指 1
ACT

TAKEON 力量戒指 8
ELSEACT

ACT

GIVE 力量戒指 1
BINDUSEITEM 力量戒指 1
TAKEON 力量戒指 8

定时器[@OnTimer3]逐位脱试用装,若原记录不是“空”且背包有原装就TAKEON原装,没有原装就GIVE再TAKEON;全空则只清试用装。祖玛、赤月、沃玛、祖玛极品分别做give分支即可,不需要重写备份逻辑。

八、纯属性预览不换装方案

低版本或担心换装bug,可用临时变量加属性代替物理穿装。玩家点试用后不发实物,只按试用装基础值加CHANGEMODE或ChangeHumAbility,界面提示“模拟屠龙攻击+XX、幸运+XX”。以GOM/Hero常见属性命令示意,具体属性码按本服文档换。

[@preview_tulong]
ACT

VAR Integer HUMAN PRE_W
LOADVAR HUMAN PRE_W ..\QuestDiary\装备试用\原装备份\PreW.txt
IF

CHECKVAR HUMAN PRE_W = 1
ACT

SENDMSG 5 已有属性试用,请等待结束
CLOSE
ELSEACT

ACT

CHANGEHUMABILITY 6 +30
CHANGEHUMABILITY 5 +30
CHANGEMODE 19 +3
MOV HUMAN.PRE_W 1
SAVEVAR HUMAN PRE_W ..\QuestDiary\装备试用\原装备份\PreW.txt
SETSCTIMER 4 15
SENDMSG 5 模拟屠龙属性15秒,攻击上下+30、准确+3

[@OnTimer4]
ACT

VAR Integer HUMAN PRE_W
LOADVAR HUMAN PRE_W ..\QuestDiary\装备试用\原装备份\PreW.txt
IF

CHECKVAR HUMAN PRE_W = 1
ACT

CHANGEHUMABILITY 6 -30
CHANGEHUMABILITY 5 -30
CHANGEMODE 19 -3
MOV HUMAN.PRE_W 0
SAVEVAR HUMAN PRE_W ..\QuestDiary\装备试用\原装备份\PreW.txt
SENDMSG 5 属性试用结束,已清除模拟加成

物理换装更贴近“看模型、看面板、看手感”,属性模拟更贴近“看数值差距”。合击、微变、单职业可用属性模拟;复古、散人服、卖点靠装备外观的用物理换装。

九、消耗点券或元宝试用

试用可免费开放,也可扣游戏币、元宝、点券。以元宝为例,先查余额再扣费,扣费失败不进换装。

[@w_tulong_vip]
IF

CHECKGAMEGOLD > 10
ACT

GAMEGOLD -10
GOTO @w_tulong
ELSEACT

SAY

元宝不足10,无法试用VIP武器\

若本服元宝字段不是GAMEGOLD而是GameGold、YuanBao、其他自定义货币,替换对应命令。点券、积分、活跃值同理,先在小号测试扣费与发装顺序:先扣费再发装,避免发装后扣费失败导致白用;若先检测后扣费中间用GOTO,要确保没有其他脚本并发改货币。

十、防交易丢地存仓卖店

试用装生成后做绑定。常见思路:

GIVE 屠龙 1
BINDUSEITEM 屠龙 1
或本服绑定到角色、绑定到账号、设置禁止交易标志。

QFunction里对试用装名字做拦截:

[@BuyItem]
IF

CHECKSTRING 物品名 试用_
ACT

SENDMSG 5 试用装不可购买转移
CLOSE

[@SellItem]
IF

CHECKSTRING 物品名 试用_
ACT

SENDMSG 5 试用装不可出售
CLOSE

丢地、交易、存仓、拍卖、邮寄按本服功能做黑名单。最稳妥是把试用装名字统一加前缀“试用_”,所有转移类NPC、交易触发、仓库触发都检测前缀直接拒绝。定时器结束先脱试用装再DELETE试用_开头的同名物品,避免玩家手动取下后囤积。

十一、强制脱装与异常处理

玩家可能在试用期手动脱下试用装、换自己装备、进死亡地图被爆。处理方式:

1、手动脱试用装:QFunction的[@TakeOffX]检测试用_前缀,若系统仍在计时,不直接拒绝脱装,但标记该部位原装还原失效,到期只删试用_物品、不再强戴原装。

2、玩家把原装在被试用前已卖、已丢:备份阶段记录“空”或原装名;到期若发不出原装,只提示“原装缺失,请联系补发”,不反复GIVE高级装。

3、死亡爆装:试用装若绑定通常不会爆;若未绑定被爆,定时器到期用DELETE试用_物品名按背包、身上双处清理,原装按备份补发。

4、掉线重登:登录脚本QM或QFunction登录标签调用还原检查,扫描TRYING_W、TRYING_A、TRYING_J、PRE_W等变量,若等于1立刻执行对应还原,不等待原定时器。个人定时器在部分引擎掉线会暂停或销毁,必须登录补扫。

5、多NPC并发:同一角色不允许同时武器、衣服、首饰三套试用可简化逻辑;若允许同时多部位,每个部位独立变量、独立定时器ID、独立备份文件,不共用TRYING总开关。

十二、QFunction穿戴触发辅助记录

若本服自动穿命令不稳定,可用穿戴事件记录原装。示例仅记录,不在这里写完整业务。

[@TakeOff1]
IF

CHECKITEMW 1 1
ACT

GETITEMINFO 1 WNAME S$LASTW
SAVEVAR HUMAN S$LASTW ..\QuestDiary\装备试用\原装备份\LastW1.txt
ELSEACT

SAY

空

[@TakeOn1]
IF

CHECKSTRING 物品名 试用_
ACT

SENDMSG 5 已穿戴试用武器,计时结束自动还原
ELSEACT

SAY

空

部分引擎在TakeOnX瞬间检测新装备更稳,在TakeOffX瞬间检测将脱装备更稳;不要两段都用CHECKITEMW判断同一位置,避免取到空值。

十三、机器人或全局定时器兜底

个人定时器不支持时,用M2机器人定时每秒或每5秒扫描。QuestDiary建“试用扫描”功能,机器人配置里每秒执行:

[@RobootScan]
ACT

VAR Integer HUMAN TRYING_W
LOADVAR HUMAN TRYING_W ..\QuestDiary\装备试用\原装备份\TryingW.txt
IF

CHECKVAR HUMAN TRYING_W = 1
ACT

IF

CHECKTIME 试用武器到期字段
ACT

CALL @OnTimer1
ELSEACT

SAY

空

CHECKTIME不是所有引擎都有,可用人物变量记录开始分钟数、当前游戏时间比对;更通用是QManage全局定时器每1秒扫变量文件,但对千人服性能一般。小服用机器人,大服用个人定时器或C++插件定时器。

十四、日志与防刷

每次试用写文本或M2日志:

[@log_w]
ACT

RECORDNPCLOG 装备试用 武器试用 角色:$STR(NAME) 物品:屠龙 时间:看M2日志

防刷规则:

1、同一角色冷却:变量LAST_TRY存时间戳,距上次小于60秒拒绝再试。
2、同一卡号冷却:账号级变量或外部文本记录,多角色小号刷试用装也限。
3、试用装数量上限:发装前统计背包“试用_”前缀数量,大于设定值不再发。
4、到期必须先清装再允许下一次;有未还原变量不允许新试用。
5、GM白名单跳过冷却,但管理员测试也走绑定和定时器,避免脚本状态污染普通玩家。

十五、常见排错

NPC点开没反应:Market_Def目录名、QuestDiary目录名、NPC文件名三者一致;M2重新加载NPC;脚本无中文括号、无异常空标签。

TAKEON无效:位置编号错,按本服重测;部分引擎TAKEON物品名后要加位置,部分用TakeOnItem位置且要求背包已有物品;自动穿前用GIVE确保背包有装。

原装还原戴回失败:GETITEMINFO取不到名字,改在脱装前用QFunction记录;原装名含空格、颜色、极品后缀会导致GIVE失败,备份时只存标准物品名,不存极品附加描述。

定时器不触发:个人定时器命令名不对,QManage没加载,机器人没启,全局OnTimer被别的系统占用;先单独建一个10秒空定时器发SENDMSG验证。

属性加了不减:ChangeHumAbility/CHANGEMODE加成正值和减值属性码要成对;下线再上若变量还在,登录脚本先全部清一次再重算,避免叠加。

试用装被交易:只做变量绑定不够,必须在交易、邮件、仓库、拍卖、丢地、出售全链路检测“试用_”前缀;只拦NPC不拦客户端快捷键仍会漏。

多部位互相覆盖:武器、衣服、首饰用不同备份文件和不同定时器ID;全套试用不要和单件试用同时开,若同时开按部位加锁,到期分别还原。

十六、完整部署顺序

先在测试服建空角色,只做武器试用,验证取原装、脱原装、发试用装、自动穿、10秒还原。再扩衣服、首饰、整套,验证多部位不串变量。再接消耗货币、冷却、日志、防交易。最后接QFunction手动脱装处理、掉线重登还原、死亡爆装清理。正式服开放前用战士、法师、道士各建号,分别试祖玛、赤月、沃玛、屠龙、骨玉、无极棍、逍遥扇,确认位置编号、属性码、定时器命令全部按本服命令列表替换无误再对玩家开放。

试用系统价值在降低买装试错成本,核心不是把装备白送,而是限时、限部位、限属性、原装可还原。脚本越复杂越要把备份、计时、清理三件事拆开写,所有发装动作都配套回收动作,所有加属性动作都配套减属性动作,所有穿装动作都配套原装还原动作,这样不会出现试用期结束后属性残留、试用装流入市场、原装被覆盖无法找回。