传奇完整一键全修脚本:检测金币装备持久自动修复与批量修复实例

来源: 作者: 点击:
全修分两个层次:一是给人物身上装备一键修,二是给背包装备一键修。老引擎没有现成AllRepair命令时,就用循环读每件装备的当前持久、最大持久,不足就扣金币或耗材执行Repair。下面按可直接改的写法给。

一、基础版本:人物身上装备全修

[@Main]
SAY

装备全修处\
1.一键修复身上所有可修复装备\
2.按金币批量修复\
3.用修复神水批量修复\
<身上全修/@RepairAllWear> <金币批量/@RepairGoldBag> <神水批量/@RepairWaterBag> <离开/@exit>

[@RepairAllWear]
IF

ACT

RepairAllItem
SENDMSG 0 已尝试修复身上所有装备
BREAK

RepairAllItem是部分引擎直接支持的一键修复身上全部装备命令。若有这个命令,NPC写一行就够;若引擎不支持,必须拆部件逐个判断。

二、分部件判断并修复身上装备

[@RepairWearStep]
IF

CHECKITEMWEAR 1
ACT

CHECKBAGGAGE 1
GOTO @RepairWearWeapon
BREAK

[@RepairWearWeapon]
IF

CHECKITEMWEAR 1
CHECKREPAIRLV 1
ACT

REPAIR 1
SENDMSG 0 武器已修复
BREAK
ELSEACT

SENDMSG 0 武器无需修复或不可修复
BREAK

CHECKITEMWEAR 1表示检测1号位即武器是否穿戴;REPAIR 1修复1号位装备。衣服用0、项链3、头盔4、左手镯5、右手镯6、左戒指7、右戒指8、腰带10、鞋子11、斗笠13,具体按引擎部位表。CHECKREPAIRLV用于判断装备是否需要修复,部分引擎写作CHECKITEMDURA或CHECKDURA,没有就跳过判断直接REPAIR,M2会忽略已满持久的装备。

三、金币扣除版一键全修

[@RepairGold]
IF

CHECKGOLD 50000
ACT

REPAIRALL
TAKEGOLD 50000
SENDMSG 0 扣除5万金币,已修复身上装备
BREAK
ELSEACT

SENDMSG 0 金币不足5万,无法全修
BREAK

REPAIRALL对应部分引擎的身上全修,配合CHECKGOLD判断金币;GOM/GEE类可用REPAIRALLITEM,命令名以M2命令列表为准。若REPAIRALL不生效,就按部件循环:

[@RepairGoldLoop]
IF

CHECKGOLD 10000
ACT

REPAIR 0
REPAIR 1
REPAIR 3
REPAIR 4
REPAIR 5
REPAIR 6
REPAIR 7
REPAIR 8
TAKEGOLD 10000
SENDMSG 0 扣除1万金币,已修复身上各部位装备
BREAK

这种写法不判断持久直接修,未损耗的装备命令会被引擎忽略,不会重复扣持久,所以安全。缺点是每次都扣全额金币,适合固定收费。

四、背包批量修复,带金币检测

[@RepairGoldBag]
IF

CHECKGOLD 20000
ACT

REPAIRALLBAG
TAKEGOLD 20000
SENDMSG 0 扣除2万金币,背包可修复装备已全部修复
BREAK
ELSEACT

SENDMSG 0 金币不足2万
BREAK

REPAIRALLBAG修复背包全部装备,不是身上穿戴的;若引擎没有,用BAGREPAIR或逐件判断背包:

[@RepairBagLoop]
IF

CHECKGOLD 5000
CHECKITEM 屠龙 1
CHECKREPAIR 屠龙 1
ACT

TAKE 屠龙 1
GIVE 屠龙 1
SENDMSG 0 屠龙已修复
BREAK

这种“扣了再发”的方式只有在物品库里该装备重新发放时持久回满才成立,很多版本不是这样。更稳妥的是引擎修复命令;没有的话,让玩家找武器店批量修更稳。

五、耗材全修:修复神水

[@RepairWaterBag]
IF

CHECKITEM 修复神水 1
ACT

TAKE 修复神水 1
REPAIRALLBAG
REPAIRALL
SENDMSG 0 使用修复神水,身上与背包装备全部修复
BREAK
ELSEACT

SENDMSG 0 需要修复神水1个
BREAK

耗材修复可以一次修身上加背包,避免金币收费。神水可从商城、活动、材料合成获得;扣材料在修复命令之前,防止扣了材料没修成。

六、按持久百分比收费,更合理

部分引擎支持CHECKDURA、CHECKMAXDURA变量比较,用自定义变量算损耗比例。Hero类可这样:

[@RepairSmart]
IF

CHECKDURA 1 < 50
CHECKGOLD 8000
ACT

REPAIR 1
TAKEGOLD 8000
SENDMSG 0 武器持久低于50,已修复并扣8000金币
BREAK
ELSEACT

SENDMSG 0 武器持久充足,无需修复
BREAK

GOM/GEE支持更多持久判断函数时,可用Human.系列命令读取当前、最大持久,再算差值扣费。没有函数就用固定收费,或按部位分档:武器最贵、衣服其次、首饰便宜。

七、收费梯度NPC写法

[@RepairPrice]
SAY

选择全修方式\
1.普通修复:1万金币修身上全部\
2.精修:5万金币修身上加背包\
3.完美修复:修复神水1个,不损上限\
<普通/@NormalRepair> <精修/@FullRepair> <完美/@PerfectRepair> <返回/@Main>

[@NormalRepair]
IF

CHECKGOLD 10000
ACT

REPAIRALL
TAKEGOLD 10000
SENDMSG 0 普通全修完成
BREAK

[@FullRepair]
IF

CHECKGOLD 50000
ACT

REPAIRALL
REPAIRALLBAG
TAKEGOLD 50000
SENDMSG 0 精修完成,身上与背包均已修复
BREAK

[@PerfectRepair]
IF

CHECKITEM 修复神水 1
ACT

TAKE 修复神水 1
REPAIRALL
REPAIRALLBAG
SENDMSG 0 完美修复完成,使用修复神水1个
BREAK

八、武器店式全修:靠近自动修

有些版本在Merchant里把NPC设成修理NPC后,客户端打开界面可一键修;脚本侧要在NPC打开时自动修复身上,可挂打开触发:

[@OnRepairOpen]
ACT

REPAIRALL
SENDMSG 0 打开修理界面时已自动修复身上装备

只有支持@OnRepairOpen、@OnSellOpen这类打开触发的引擎才能用,老Hero通常不支持,需要靠玩家点菜单。

九、全修带日志与防刷

[@RepairLog]
IF

CHECKGOLD 10000
ACT

REPAIRALL
TAKEGOLD 10000
PLAYBIGDRAGON 0 0 0 0 0 0
WriteLog ..\Log\RepairLog.txt 角色全修成功,扣1万金币
SENDMSG 0 全修成功
BREAK

WriteLog记录每次修复,便于查异常扣费。防刷方面,先判断金币再修复,修复失败要返还或提示;不要把TAKEGOLD放在REPAIR之前且没有失败分支,个别引擎修复失败不返回金币。

十、NPC文件配置

Market_Def里新建全修使者.txt,开头:

;全修使者
1 3 3 全修使者 0 0 0 沙巴克 5 5
1 3 3 全修使者 0 0 0 土城 330 330

参数按“类型 外观 是否可移动 名称 地图 坐标 坐标”填写,地图坐标和土城、沙巴克对应位置可按需要调整。NPC文件名要和Merchant或市场NPC配置对上;脚本放QuestDiary或NpcDialog按引擎走。脚本文件编码用ANSI/GBK,#IF、#ACT、#ELSEACT必须独立行,缩进不影响执行但别把标签[@xx]写错。

十一、命令对照与兼容

Hero常用:REPAIR 部位、REPAIRALL、REPAIRALLBAG,金币CHECKGOLD/TAKEGOLD,检测CHECKITEMWEAR。部分老版本只有REPAIR和武器店NPC,没有REPAIRALL,需升级引擎或改用武器店NPC自动全修。

GOM/GEE常用:REPAIRALLITEM修身上全部,REPAIRALLBAG修背包全部,RepairAllWear装备变量类函数;金币用CHECKGOLD/GAMEGOLD,耗材用CHECKITEM/TAKE。GEE若支持Human类持久函数,可写脚本按损耗值动态扣费。

BLUE常用:RepairAll、BagRepair,具体以命令说明文档为准。部分版本在NPC选项勾“修理”后,玩家点NPC自动打开修理界面,不需要脚本命令。

十二、排错

全修不生效:先确认引擎有没有REPAIRALL,没有就逐个REPAIR;再确认NPC是否为修理类NPC,非修理NPC可能忽略修复命令。

只修武器不修衣服:部位号写错,0衣服1武器3项链;逐件写时漏掉部位就会跳过。

扣金币但没修:TAKEGOLD在REPAIR前面,且REPAIR命令实际未执行;改成先REPAIR再TAKEGOLD,或用#IF判断修复结果。

修复后持久不变:该装备被引擎设为不可修复,或用了“扣了再发”的方式但物品库持久规则不允许;改用引擎自带修复命令。

背包修复漏装备:REPAIRALLBAG只处理背包中“可修复且需要修复”的物品,不可修复的不会动;逐件判断时物品名要和物品库完全一致。

多人同时修复报错:金币判断和扣除之间加变量锁,或者用引擎内置修复流程,避免并发导致多扣少扣。

改装后客户端没一键修按钮:老客户端只在武器店NPC处显示修理界面,需把NPC配置成修理NPC并放在可对话位置;脚本只负责扣费和触发修复,界面显示由客户端决定。

最省心的写法就是REPAIRALL修身上、REPAIRALLBAG修背包、耗材TAKE后双修,再补金币检测和提示。先在土城放一个测试NPC,故意把武器持久降到低值,依次测身上单修、身上全修、背包全修、金币扣费、耗材扣除,确认无误再复制到沙巴克、庄园等地图。