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

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

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

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

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

[@@useitemname0]
IF

CHECKITEMW0
ACT

GOTO@DoChange0
ELSEACT

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

[@@useitemname1]
IF

CHECKITEMW1
ACT

GOTO@DoChange1
ELSEACT

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

[@@useitemname2]
IF

CHECKITEMW2
ACT

GOTO@DoChange2
ELSEACT

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

[@@useitemname3]
IF

CHECKITEMW3
ACT

GOTO@DoChange3
ELSEACT

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

[@@useitemname4]
IF

CHECKITEMW4
ACT

GOTO@DoChange4
ELSEACT

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

[@@useitemname5]
IF

CHECKITEMW5
ACT

GOTO@DoChange5
ELSEACT

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

[@@useitemname6]
IF

CHECKITEMW6
ACT

GOTO@DoChange6
ELSEACT

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

[@@useitemname7]
IF

CHECKITEMW7
ACT

GOTO@DoChange7
ELSEACT

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

[@@useitemname8]
IF

CHECKITEMW8
ACT

GOTO@DoChange8
ELSEACT

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

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

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

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

CHECKITEMW0
CHECKGAMEGOLD>=1
ACT

GAMEGOLD-1
SETSCRIPTFLAG11
SENDMSG7盔甲改名成功!!!
CLOSE
ELSEACT

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

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

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

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

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

[@@restorename]
IF

CHECKITEMW0
CHECKITEMW1
CHECKITEMW2
CHECKITEMW3
CHECKITEMW4
CHECKITEMW5
CHECKITEMW6
CHECKITEMW7
CHECKITEMW8
ACT

SETSCRIPTFLAG10
SENDMSG7已取消所有装备自定义名称,恢复默认。
CLOSE
ELSEACT

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

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

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

ACTSETSCRIPTFLAG10SENDMSG7盔甲名称已还原CLOSE

ELSEACTSENDMSG7未佩戴盔甲CLOSE

[@@restorename1]
IFCHECKITEMW1

ACTSETSCRIPTFLAG10SENDMSG7武器名称已还原CLOSE

ELSEACTSENDMSG7未佩戴武器CLOSE

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

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

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

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

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

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

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