在传奇脚本编写中,实现“装备穿戴即获得技能,脱下即失去技能”的动态效果,核心在于逻辑判断的完整性。你目前的脚本只完成了“满足条件给予技能”的单向逻辑,缺乏“不满足条件收回技能”的闭环。DELSKILL命令本身是有效的,问题在于触发时机和判断条件的缺失。要实现这一功能,必须在脚本中增加针对“道术不足”情况的#ELSEACT分支处理,或者引入独立的检测循环。
逻辑重构:利用#ELSEACT实现技能回收
传奇引擎(如GOM、GEE、HERO等)的脚本执行遵循“如果(#IF)...那么(#ACT)...否则(#ELSEACT)”的结构。你当前的脚本在道术达标时执行ADDSKILL,但在道术降低时,脚本直接结束,没有执行任何操作。
要解决这个问题,需要修改脚本结构。当CHECKSC0
CHECKSC=75
ACT
ADDSKILL召唤二阶铁牛
SENDMSG3道术提升,领悟二阶铁牛召唤术!
BREAK
;检测道术是否在一阶区间(例如66-74点)
;注意:这里需要确保没有二阶技能,且道术大于等于66
IF
CHECKSLAVECOUNT=66
CHECKSC=75且S10不等于2,则删除一阶技能,添加二阶技能,赋值S10=2。
如果道术=66且S10不等于1,则删除二阶技能,添加一阶技能,赋值S10=1。
如果道术<66且S10不等于0,则删除所有相关技能,赋值S10=0。
触发机制:确保持续监控
脚本写好后,必须通过正确的触发机制才能实时生效。仅仅写在QManage.txt的登录段是不够的,因为脱下装备不会自动触发登录脚本。
推荐触发方式:
QFunction-0.txt中的@PlayDig或@ItemChange:部分引擎支持物品变动触发。
定时触发(推荐):在QManage.txt中使用Timer或DelayCall设置一个循环。例如,每5秒检测一次人物状态。
代码示例:[@Main]#ACTMOVS100CALCVARS10+1DELAYCALL5000@Main(此仅为逻辑示意,具体需结合引擎指令)。
装备穿戴/卸下触发:在QFunction-0.txt中找到@ItemChange(物品变动)或专门的@OnWear/@OnOffWear标签。当玩家穿戴或卸下装备时,引擎会自动跳转执行这里的代码,此时调用上述的技能检测脚本是最准确、最及时的。
关于DELSKILL命令的特别说明
你提到尝试使用DELSKILL但似乎无效,这通常是因为命令格式或技能名称的细微差别。
技能名称匹配:确保DELSKILL后面的文字与数据库中定义的技能名称完全一致,包括空格和符号。如果是自定义技能,必须确保该技能已被正确添加到玩家的技能列表中。
权限问题:部分引擎版本要求DELSKILL必须在特定的脚本段或通过特定的NPC命令执行。
替代方案:如果DELSKILL确实无法生效,可以考虑使用CHANGEJOB(转职)的变通方法(不推荐,会导致其他技能丢失),或者通过脚本强制让该技能进入“未学习”状态(需引擎支持内存读写)。但在绝大多数GOM/GEE引擎中,DELSKILL配合正确的触发机制是完全可行的。
通过将脚本逻辑从单向赋予改为双向检测(满足条件给,不满足条件删),并配合@ItemChange或定时器触发,即可完美实现“装备决定宝宝等级”的玩法。
逻辑重构:利用#ELSEACT实现技能回收
传奇引擎(如GOM、GEE、HERO等)的脚本执行遵循“如果(#IF)...那么(#ACT)...否则(#ELSEACT)”的结构。你当前的脚本在道术达标时执行ADDSKILL,但在道术降低时,脚本直接结束,没有执行任何操作。
要解决这个问题,需要修改脚本结构。当CHECKSC0
CHECKSC=75
ACT
ADDSKILL召唤二阶铁牛
SENDMSG3道术提升,领悟二阶铁牛召唤术!
BREAK
;检测道术是否在一阶区间(例如66-74点)
;注意:这里需要确保没有二阶技能,且道术大于等于66
IF
CHECKSLAVECOUNT=66
CHECKSC=75且S10不等于2,则删除一阶技能,添加二阶技能,赋值S10=2。
如果道术=66且S10不等于1,则删除二阶技能,添加一阶技能,赋值S10=1。
如果道术<66且S10不等于0,则删除所有相关技能,赋值S10=0。
触发机制:确保持续监控
脚本写好后,必须通过正确的触发机制才能实时生效。仅仅写在QManage.txt的登录段是不够的,因为脱下装备不会自动触发登录脚本。
推荐触发方式:
QFunction-0.txt中的@PlayDig或@ItemChange:部分引擎支持物品变动触发。
定时触发(推荐):在QManage.txt中使用Timer或DelayCall设置一个循环。例如,每5秒检测一次人物状态。
代码示例:[@Main]#ACTMOVS100CALCVARS10+1DELAYCALL5000@Main(此仅为逻辑示意,具体需结合引擎指令)。
装备穿戴/卸下触发:在QFunction-0.txt中找到@ItemChange(物品变动)或专门的@OnWear/@OnOffWear标签。当玩家穿戴或卸下装备时,引擎会自动跳转执行这里的代码,此时调用上述的技能检测脚本是最准确、最及时的。
关于DELSKILL命令的特别说明
你提到尝试使用DELSKILL但似乎无效,这通常是因为命令格式或技能名称的细微差别。
技能名称匹配:确保DELSKILL后面的文字与数据库中定义的技能名称完全一致,包括空格和符号。如果是自定义技能,必须确保该技能已被正确添加到玩家的技能列表中。
权限问题:部分引擎版本要求DELSKILL必须在特定的脚本段或通过特定的NPC命令执行。
替代方案:如果DELSKILL确实无法生效,可以考虑使用CHANGEJOB(转职)的变通方法(不推荐,会导致其他技能丢失),或者通过脚本强制让该技能进入“未学习”状态(需引擎支持内存读写)。但在绝大多数GOM/GEE引擎中,DELSKILL配合正确的触发机制是完全可行的。
通过将脚本逻辑从单向赋予改为双向检测(满足条件给,不满足条件删),并配合@ItemChange或定时器触发,即可完美实现“装备决定宝宝等级”的玩法。

