传奇装备改名脚本未佩戴装备仍提示成功与取消改名写法

来源: 作者: 点击:
你原脚本的问题很清楚:所有 @@useitemname0~12 都直接 goto @ChangeName,而 @ChangeName 里只检测了 checkgamegold>0,没有检测“对应穿戴位有没有东西”。引擎在没装备时执行 SETSCRIPTFLAG 1 1 并不会报错,所以会出现扣虚拟币还弹“改名成功”的假象。解决思路是把检测提前到每个位置标签里,没戴就拦截,不进扣费段。

一、先改:每个位置单独检测,没戴装备直接提示失败
把原来那一串统一跳转改成下面这种写法(以盔甲0、武器1、项链3为例,其余照抄改编号):

[@main]
请选择要改名的装备:(将要改名的装备戴身上)\
┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈\
◇◇◇『<盔 甲/@@useitemname0>』◇◇◇『<武 器/@@useitemname1>』◇◇◇\
◇◇◇『<项 链/@@useitemname3>』◇◇◇『<头 盔/@@useitemname4>』◇◇◇\
◇◇◇『<左手镯/@@useitemname5>』◇◇◇『<右手镯/@@useitemname6>』◇◇◇\
◇◇◇『<左戒指/@@useitemname8>』◇◇◇『<右戒指/@@useitemname7>』◇◇◇\
◇◇◇『<勋 章/@@useitemname2>』\
┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈\
〖<返回/@main>〗 〖<关闭/@exit>〗

[@@useitemname0]
IF

CHECKITEMW 0
ACT

GOTO @DoChange0
ELSEACT

SENDMSG 7 你没有佩戴盔甲,无法改名!
CLOSE

[@@useitemname1]
IF

CHECKITEMW 1
ACT

GOTO @DoChange1
ELSEACT

SENDMSG 7 你没有佩戴武器,无法改名!
CLOSE

[@@useitemname2]
IF

CHECKITEMW 2
ACT

GOTO @DoChange2
ELSEACT

SENDMSG 7 你没有佩戴勋章,无法改名!
CLOSE

[@@useitemname3]
IF

CHECKITEMW 3
ACT

GOTO @DoChange3
ELSEACT

SENDMSG 7 你没有佩戴项链,无法改名!
CLOSE

[@@useitemname4]
IF

CHECKITEMW 4
ACT

GOTO @DoChange4
ELSEACT

SENDMSG 7 你没有佩戴头盔,无法改名!
CLOSE

[@@useitemname5]
IF

CHECKITEMW 5
ACT

GOTO @DoChange5
ELSEACT

SENDMSG 7 你没有佩戴左手镯,无法改名!
CLOSE

[@@useitemname6]
IF

CHECKITEMW 6
ACT

GOTO @DoChange6
ELSEACT

SENDMSG 7 你没有佩戴右手镯,无法改名!
CLOSE

[@@useitemname7]
IF

CHECKITEMW 7
ACT

GOTO @DoChange7
ELSEACT

SENDMSG 7 你没有佩戴右戒指,无法改名!
CLOSE

[@@useitemname8]
IF

CHECKITEMW 8
ACT

GOTO @DoChange8
ELSEACT

SENDMSG 7 你没有佩戴左戒指,无法改名!
CLOSE

说明:
• CHECKITEMW 0 表示检测盔甲位,1武器、2勋章/灯、3项链、4头盔、5左手镯、6右手镯、7右戒指、8左戒指,按你引擎支持的编号来。

- 如果引擎不支持 CHECKITEMW 数字,改用 CHECKITEMW 物品名 1 或 CHECKPOSITEM 位置 物品名。
• 检测不通过走 #ELSEACT 直接发消息并 CLOSE,根本进不到 @ChangeName,就不会扣钱。

二、扣费改名段改成带双重拦截
[@DoChange0]
IF

CHECKITEMW 0
CHECKGAMEGOLD >= 1
ACT

GAMEGOLD - 1
SETSCRIPTFLAG 1 1
SENDMSG 7 盔甲改名成功!!!
CLOSE
ELSEACT

SENDMSG 7 条件不足,操作失败!(没戴装备或金币不够)

把 @ChangeName 拆成 @DoChange0~12,每个段里先检位置再检钱,顺序不能反。原来那种“先扣钱再猜有没有装备”的逻辑必须废掉。

三、取消装备改名脚本怎么写
取消改名不是删文件,而是把该位置名称还原成数据库默认名。不同引擎命令不同,给你两套通用方案。

方案A:标准 SETSCRIPTFLAG 还原(多数 GOM/GEE/MirNG 适用)
在主菜单加一个“取消改名”入口:

[@main]
(原有改名按钮后加一行)
◇◇◇『<取消改名/@@restorename>』\
┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈\
〖<返回/@main>〗 〖<关闭/@exit>〗

[@@restorename]
IF

CHECKITEMW 0
CHECKITEMW 1
CHECKITEMW 2
CHECKITEMW 3
CHECKITEMW 4
CHECKITEMW 5
CHECKITEMW 6
CHECKITEMW 7
CHECKITEMW 8
ACT

SETSCRIPTFLAG 1 0
SENDMSG 7 已取消所有装备自定义名称,恢复默认。
CLOSE
ELSEACT

SENDMSG 7 请至少佩戴一件装备后再取消。
CLOSE

SETSCRIPTFLAG 1 0 表示关闭自定义名称功能,客户端会回退到物品原始 StdMode 名称。

方案B:逐位还原(推荐,避免误清全部)
[@@restorename0]
IF CHECKITEMW 0

ACT SETSCRIPTFLAG 1 0 SENDMSG 7 盔甲名称已还原 CLOSE

ELSEACT SENDMSG 7 未佩戴盔甲 CLOSE

[@@restorename1]
IF CHECKITEMW 1

ACT SETSCRIPTFLAG 1 0 SENDMSG 7 武器名称已还原 CLOSE

ELSEACT SENDMSG 7 未佩戴武器 CLOSE

菜单里对应写成 『<还原盔甲/@@restorename0>』 这样,玩家点哪个还原哪个。

方案C:扩展引擎(ESPCHANGEITEMNAME 留空还原)
如果你用的是支持时装扩展位的引擎:
ESPCHANGEITEMNAME 0 "" ;位置0留空即还原默认名
ESPCHANGEITEMNAME 1 ""
直接把第二参数留空就能恢复原始名称。

四、彻底停用整个改名系统的办法
不想让玩家用了,三选一:
1. NPC 对话里删掉所有 @@useitemnameX 按钮,只留“维护中”。
2. M2 里把对应 NPC 脚本文件名改名或移走,重启网关。
3. 全局加权限:在 @ChangeName 开头加 #IF ISADMIN #ACT ... #ELSEACT SENDMSG 7 该功能已关闭 CLOSE,普通号直接被拦。

五、顺手补几个防坑点
- 改名前用 ASK 让玩家输新名字,限制长度(LENA0>8 就拒绝),避免乱码撑爆客户端。
• 改名前用 GETITEMNAME 存原名叫变量,方便以后做“撤销上一步”。

• 检测命令别用 CHECKITEM(只查背包),穿身上必须用 CHECKITEMW 或 CHECKPOSITEM。

- 改完让玩家小退一次,部分客户端不刷新新名字。

按上面把“位置检测”塞进每个 @@useitemname 标签里,没戴装备会直接弹“无法改名”并结束对话,不会再出现扣虚拟币却提示成功的问题;取消改名用 SETSCRIPTFLAG 1 0 或 ESPCHANGEITEMNAME 位置 "" 即可还原默认名。