当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

传奇装备试用试穿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
3330330试用大使00装备试用11000000

上面地图号、坐标按土城或安全区改。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

VARStringHUMANOLD_W1
VARIntegerHUMANTRYING_W
LOADVARHUMANOLD_W1..\QuestDiary\装备试用\原装备份\OldW1.txt
LOADVARHUMANTRYING_W..\QuestDiary\装备试用\原装备份\TryingW.txt
IF

CHECKVARHUMANTRYING_W=1
ACT

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

ACT

MOVSOW1<STR(HUMAN.OLD_W1)>
IF

CHECKITEMW11
ACT

GETITEMINFO1WNAMES$OW1
SAVEVARHUMANS$OW1..\QuestDiary\装备试用\原装备份\OldW1.txt
TAKEOFFITEM1
ELSEACT

ACT

MOVS$OW1空
SAVEVARHUMANS$OW1..\QuestDiary\装备试用\原装备份\OldW1.txt
IF

CHECKITEM屠龙1
ACT

TAKEON屠龙1
ELSEACT

ACT

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

CHECKVARHUMANTRYING_W<>1
ACT

MOVHUMAN.TRYING_W1
SAVEVARHUMANTRYING_W..\QuestDiary\装备试用\原装备份\TryingW.txt
SETSCTIMER110
SENDMSG5屠龙试用开始,10秒后还原原武器
CALL@log_w

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

五、定时器到期还原武器

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

[@OnTimer1]
ACT

VARStringHUMANOLD_W1
VARIntegerHUMANTRYING_W
LOADVARHUMANOLD_W1..\QuestDiary\装备试用\原装备份\OldW1.txt
LOADVARHUMANTRYING_W..\QuestDiary\装备试用\原装备份\TryingW.txt
IF

CHECKVARHUMANTRYING_W=1
ACT

TAKEOFFITEM1
IF

CHECKSTRINGHUMANOLD_W1=空
ACT

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

IF

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

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

ACT

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

[@clear_w]
ACT

MOVHUMAN.TRYING_W0
SAVEVARHUMANTRYING_W..\QuestDiary\装备试用\原装备份\TryingW.txt
BREAKTIMERECALL
CLEARSTRINGHUMANOLD_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

VARStringHUMANOLD_A0
VARIntegerHUMANTRYING_A
LOADVARHUMANOLD_A0..\QuestDiary\装备试用\原装备份\OldA0.txt
LOADVARHUMANTRYING_A..\QuestDiary\装备试用\原装备份\TryingA.txt
IF

CHECKVARHUMANTRYING_A=1
ACT

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

ACT

IF

CHECKITEMW01
ACT

GETITEMINFO0WNAMES$OA0
SAVEVARHUMANS$OA0..\QuestDiary\装备试用\原装备份\OldA0.txt
TAKEOFFITEM0
ELSEACT

ACT

MOVS$OA0空
SAVEVARHUMANS$OA0..\QuestDiary\装备试用\原装备份\OldA0.txt
IF

CHECKITEM天魔神甲1
ACT

TAKEON天魔神甲0
ELSEACT

ACT

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

MOVHUMAN.TRYING_A1
SAVEVARHUMANTRYING_A..\QuestDiary\装备试用\原装备份\TryingA.txt
SETSCTIMER230
SENDMSG5天魔神甲试用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

VARIntegerHUMANTRYING_J
LOADVARHUMANTRYING_J..\QuestDiary\装备试用\原装备份\TryingJ.txt
IF

CHECKVARHUMANTRYING_J=1
ACT

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

ACT

CALL@backup_jewel
CALL@remove_jewel
CALL@give_zuma_jewel
MOVHUMAN.TRYING_J1
SAVEVARHUMANTRYING_J..\QuestDiary\装备试用\原装备份\TryingJ.txt
SETSCTIMER330
SENDMSG5祖玛首饰全套试用30秒,到期逐位还原

[@backup_jewel]
ACT

IF

CHECKITEMW31
ACT

GETITEMINFO3WNAMES$N3
SAVEVARHUMANS$N3..\QuestDiary\装备试用\原装备份\J_N3.txt
ELSEACT

ACT

MOVS$N3空
SAVEVARHUMANS$N3..\QuestDiary\装备试用\原装备份\J_N3.txt
IF

CHECKITEMW51
ACT

GETITEMINFO5WNAMES$H5
SAVEVARHUMANS$H5..\QuestDiary\装备试用\原装备份\J_H5.txt
ELSEACT

ACT

MOVS$H5空
SAVEVARHUMANS$H5..\QuestDiary\装备试用\原装备份\J_H5.txt
IF

CHECKITEMW61
ACT

GETITEMINFO6WNAMES$H6
SAVEVARHUMANS$H6..\QuestDiary\装备试用\原装备份\J_H6.txt
ELSEACT

ACT

MOVS$H6空
SAVEVARHUMANS$H6..\QuestDiary\装备试用\原装备份\J_H6.txt
IF

CHECKITEMW71
ACT

GETITEMINFO7WNAMES$R7
SAVEVARHUMANS$R7..\QuestDiary\装备试用\原装备份\J_R7.txt
ELSEACT

ACT

MOVS$R7空
SAVEVARHUMANS$R7..\QuestDiary\装备试用\原装备份\J_R7.txt
IF

CHECKITEMW81
ACT

GETITEMINFO8WNAMES$R8
SAVEVARHUMANS$R8..\QuestDiary\装备试用\原装备份\J_R8.txt
ELSEACT

ACT

MOVS$R8空
SAVEVARHUMANS$R8..\QuestDiary\装备试用\原装备份\J_R8.txt

[@remove_jewel]
ACT

TAKEOFFITEM3
TAKEOFFITEM5
TAKEOFFITEM6
TAKEOFFITEM7
TAKEOFFITEM8

[@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

VARIntegerHUMANPRE_W
LOADVARHUMANPRE_W..\QuestDiary\装备试用\原装备份\PreW.txt
IF

CHECKVARHUMANPRE_W=1
ACT

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

ACT

CHANGEHUMABILITY6+30
CHANGEHUMABILITY5+30
CHANGEMODE19+3
MOVHUMAN.PRE_W1
SAVEVARHUMANPRE_W..\QuestDiary\装备试用\原装备份\PreW.txt
SETSCTIMER415
SENDMSG5模拟屠龙属性15秒,攻击上下+30、准确+3

[@OnTimer4]
ACT

VARIntegerHUMANPRE_W
LOADVARHUMANPRE_W..\QuestDiary\装备试用\原装备份\PreW.txt
IF

CHECKVARHUMANPRE_W=1
ACT

CHANGEHUMABILITY6-30
CHANGEHUMABILITY5-30
CHANGEMODE19-3
MOVHUMAN.PRE_W0
SAVEVARHUMANPRE_W..\QuestDiary\装备试用\原装备份\PreW.txt
SENDMSG5属性试用结束,已清除模拟加成

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

九、消耗点券或元宝试用

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

[@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

SENDMSG5试用装不可购买转移
CLOSE

[@SellItem]
IF

CHECKSTRING物品名试用_
ACT

SENDMSG5试用装不可出售
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

CHECKITEMW11
ACT

GETITEMINFO1WNAMES$LASTW
SAVEVARHUMANS$LASTW..\QuestDiary\装备试用\原装备份\LastW1.txt
ELSEACT

SAY

空

[@TakeOn1]
IF

CHECKSTRING物品名试用_
ACT

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

SAY

空

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

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

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

[@RobootScan]
ACT

VARIntegerHUMANTRYING_W
LOADVARHUMANTRYING_W..\QuestDiary\装备试用\原装备份\TryingW.txt
IF

CHECKVARHUMANTRYING_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手动脱装处理、掉线重登还原、死亡爆装清理。正式服开放前用战士、法师、道士各建号,分别试祖玛、赤月、沃玛、屠龙、骨玉、无极棍、逍遥扇,确认位置编号、属性码、定时器命令全部按本服命令列表替换无误再对玩家开放。

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