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

传奇装备卷自动检测男女脚本详解:StdModeFunc触发与gender命令

热度:
这段脚本的逻辑其实很简单,就是双击装备卷→判断角色是男是女→跳到不同的发放分支→男的给男衣服,女的给女衣服。但你贴出来的这份代码里藏了一个致命的错误,女的双击什么都拿不到。下面先把每一行的意思拆开讲,再指出错在哪,最后给出能用的完整版本和数据库配置方法。

一、逐行拆解这段脚本

[@StdModeFunc150]


这是一个触发标签。玩家在背包里双击某件物品时,服务端会去找物品数据库里这件物品的AniCount(部分引擎叫Func)字段,读到150,就跳到QFunction-0.txt里对应的[@StdModeFunc150]这一段往下执行。150不是固定的,你设成多少,标签就写多少,两边必须一致。

#iF
genderman


#IF是条件判断段的开头,#iF只是大小写不规范的写法,绝大多数引擎不区分大小写,能正常跑。genderman是性别检测命令,检测当前触发脚本的这个角色是不是男性。是男的条件成立,走#ACT;不是男的条件失败,走#ELSEACT。

参数只有两个值:MAN(男)和WOMAN(女),部分版本也支持写中文"男""女",还有的老版本支持数值形式(0男、1女)。

#ACT
goto@ndongs65


条件成立(是男的)时执行。goto是无条件跳转,跳到[@ndongs65]这个标签继续执行。

#ELSEACT
goto@vdongs66


条件失败(是女的)时执行,跳到[@vdongs66]。

问题就在这两行上。底下只定义了[@ndongs65]和[@ndongs66]两个标签,根本不存在[@vdongs66]。女玩家双击之后,goto跳到一个不存在的标签,脚本直接中断,一件东西都不发。

[@ndongs66]这个标签从头到尾没人跳过去,是一段死代码。原作者大概率是打字的时候把n打成了v,改一个字母就通了。

二、两个发放分支

[@ndongs65]
#act
give火龙神盔1
give火龙神链1
give火龙神镯2
give火龙勋章1
give火龙神斩1
give火龙神戒2
give火龙神甲1
give火龙宝石1
give火龙神带1
give火龙神靴1


男性分支。give物品名数量是发放命令,一件一件往背包里塞。注意两点:give火龙神镯2和give火龙神戒2是发2个(手镯戒指成对,所以数量写2);give火龙神甲1这一行是男女分支唯一的差别——男的给火龙神甲。

[@ndongs66]
#act
give火龙神盔1
...
give火龙神袍1
...


女性分支,除了衣服换成火龙神袍,其余完全一样。

三、这份脚本缺的四样东西

除了上面那个vdongs66的拼写错误,还有四个坑,不改掉照样出问题。

第一,没有回收装备卷。脚本里通篇没有TAKE命令,装备卷双击之后不会消失。玩家身上有一张就能无限双击,无限刷火龙套。必须加一行:

TAKE火龙装备卷1


第二,没有break。部分引擎在执行完一个标签段之后会继续往下走,男性发完10件,接着又落到[@ndongs66]再发一遍,等于一人拿两套。每个分支结尾加break强制结束,能杜绝这个隐患。

第三,没有背包空格检测。背包剩3格的话,give到第三件就停了,剩下的凭空消失,玩家找你赔都不知道怎么赔。加一行:

#IF
CheckBagSize12
#ACT
#ELSEACT
SENDMSG6背包空格不足12格,请清理后再使用。
BREAK


第四,物品名必须和数据库一字不差。give后面写的是物品数据库Name字段的原文,多一个空格、括号用全角、写成"火龙神铠"而库里是"火龙神甲",都会发放失败。同理,TAKE后面那张卷的名字也要一致。

四、修好之后的完整脚本

[@StdModeFunc150]
#IF
CheckBagSize12
#ACT
TAKE火龙装备卷1
GENDERMAN
#IF
GENDERMAN
#ACT
goto@ManEquip
BREAK
#IF
GENDERWOMAN
#ACT
goto@WomanEquip
BREAK

[@ManEquip]
#ACT
give火龙神盔1
give火龙神链1
give火龙神镯2
give火龙勋章1
give火龙神斩1
give火龙神戒2
give火龙神甲1
give火龙宝石1
give火龙神带1
give火龙神靴1
SENDMSG6恭喜获得火龙套装(男)!
BREAK

[@WomanEquip]
#ACT
give火龙神盔1
give火龙神链1
give火龙神镯2
give火龙勋章1
give火龙神斩1
give火龙神戒2
give火龙神袍1
give火龙宝石1
give火龙神带1
give火龙神靴1
SENDMSG6恭喜获得火龙套装(女)!
BREAK


这里用了两段独立的#IF/#ACT/BREAK而不是#IF/#ACT/#ELSEACT,原因是这样写容错更好——万一性别检测异常,两个条件都不成立,脚本直接结束,不会错发。

五、引擎差异:GENDER还是CHECKGENDER

这是最容易踩的第二个坑,命令各引擎不通用:

•HeroM2/BLUE引擎:用GENDERMAN、GENDERWOMAN。注意HeroM2对大小写敏感,必须全大写GENDER,写成Gender或gender会报未知命令,条件永远不成立。

•GOM/GEE引擎:用CHECKGENDER,参数格式不同,写CHECKGENDER0(男)或CHECKGENDER1(女)。

•检测英雄性别:命令前加HERO.前缀,写成HERO.GENDERMAN。

•检测对面玩家的性别:用CHECKPOSEGENDERMAN,这条一般不需要两人面对面站着。

贴脚本之前先确认自己用的是哪个引擎,命令名对不上,M2控制台会刷未知命令的报错。

六、物品数据库怎么配

脚本写好了,物品那头也得对上,否则双击没反应。

打开DBC2000里的StdItems.DB(HERO、GOM引擎也可能是Data\StdItems.txt),找到或新建这张装备卷,几个关键字段:

•StdMode:设31,这是"双击触发脚本"物品类型的标识。少数引擎(部分HERO、GOM版本)用StdMode=15配合Func=150字段,具体看你版本里别的卷是怎么设的,照抄最省心。

•AniCount:设150,对应[@StdModeFunc150]。取值范围通常是1~999,别跟别的卷重复。

•Source:设0表示解包物品,双击一次就没;设1表示计次物品,每双击一次扣1点持久,持久归零就不能再用,次数由DuraMax决定。

•DuraMax:一次性使用的设1;想做成可重复用的设10000。

•Looks:外观编号,客户端得有对应的补丁素材,不然显示成问号或者别的图标。

改完保存之后,还要确认M2控制台的参数设置里"允许使用物品触发脚本"是勾上的,这一项没开,所有双击卷全部失效。

七、改完怎么让它生效

脚本文件放在Mir200\Envir\Market_Def\QFunction-0.txt。改完之后有三种方式让它生效:

•游戏里GM号输入@reloadquest重读脚本;

•M2控制台点"重读"→"重读QF脚本";

•直接重启服务端。

物品数据库改过的话,还要在M2里"重读物品DB",不然服务端读的还是旧数据。

八、进阶:加上职业判断和自动穿戴

火龙套如果分战法道三职业,可以在性别判断外面再套一层职业判断:

[@StdModeFunc150]
#IF
CHECKJOBWARRIOR
GENDERMAN
#ACT
goto@战男
BREAK
#IF
CHECKJOBWARRIOR
GENDERWOMAN
#ACT
goto@战女
BREAK


CHECKJOB的三个参数是WARRIOR(战士)、WIZARD(法师)、TAOIST(道士)。三职业×男女=六个分支。

发完装备想让玩家直接穿上,用AUTOTAKEONITEM:

AUTOTAKEONITEM火龙神甲0
AUTOTAKEONITEM火龙神斩1
AUTOTAKEONITEM火龙神盔4


后面的数字是穿戴位置编号:0衣服、1武器、2勋章、3项链、4头盔、5/6手镯、7/8戒指。这个命令在部分老引擎上不支持,用了没反应就换回手动穿。

等级门槛也常一起加,CHECKLEVELEX>49表示等级大于等于49才给用,不满足的走提示。

九、双击没反应的排查顺序

1.物品数据库StdMode是不是31(或你版本对应的功能卷类型)。
2.AniCount的数字和脚本标签[@StdModeFuncX]的X是不是完全一致。
3.QFunction-0.txt里到底有没有这一段,标签名有没有打错。
4.M2参数里"允许使用物品触发脚本"勾没勾。
5.改完有没有@reloadquest重读,或者重启服务端。
6.give后面的物品名和数据库Name字段是否一字不差,包括空格和括号。
7.M2控制台有没有刷"未知命令"的报错,有的话就是GENDER/CHECKGENDER用错了引擎对应的写法。
8.背包是不是满了,或者CheckBagSize的门槛设太高。

十、回到你这份脚本

它之所以"女的买回去双击没反应",原因就一个字母:#ELSEACT那行goto@vdongs66,而实际标签是[@ndongs66]。把v改成n,女性分支立刻就通了。

顺手把上面说的四样补齐——加TAKE回收卷、每个分支结尾加break、开头加CheckBagSize、确认give的物品名和数据库一致——这套火龙装备卷才算真正能用。
[顶部]