传奇检测身上装备凹槽孔数设置变量教程GOMHeroBlue按位置统计打孔镶嵌数

来源: 作者: 点击:
GOM/GEE按单件统计已打孔数量用CHECKDRILLHOLECOUNT,按单件统计已镶嵌数量用CHECKSOCKETABLEITEMCOUNT,单孔是否打孔用CHECKDRILLHOLE,单孔是否镶石用CHECKSOCKETABLEITEM并把宝石IDX和名称写进变量。装备位置0到16表示身上对应部位,-1表示OK框/对话框物品,孔位0到4按引擎支持深度填写。

一、GOM/GEE单件凹槽数量入变量

武器位置按所用核心文档确认,部分资料以1为武器、0为衣服,其它核心可能不同;先查M2装备位置表再写脚本。检测武器已打孔数是否大于等于3:

[@checkhole]
if

CHECKDRILLHOLECOUNT 1 > 3
act

SENDMSG 6 武器已打孔数大于3个。
elsesay

武器打孔数不足3个。

只判断等于2个:

if

CHECKDRILLHOLECOUNT 1 = 2
act

SENDMSG 6 武器正好2个凹槽。

已镶嵌数量判断,武器已镶石大于等于2:

if

CHECKSOCKETABLEITEMCOUNT 1 > 2
act

SENDMSG 6 武器已镶嵌宝石大于2个。

单孔检测并取宝石变量,检测武器0号孔是否镶石,把IDX写D0、名称写S0:

if

CHECKSOCKETABLEITEM 1 0 D0 S0
act

SENDMSG 6 武器0号孔已镶石,IDX为<D0>,名称为<S0>。
elsesay

武器0号孔未镶石。

打孔用DRILLHOLE,镶嵌用SOCKETABLEITEM;打孔命令按资料示例参数较多,孔位置0到4、状态1打开0关闭,OK框物品用-1代替身上位置。 不同GOM子版本对参数占位要求不同,先按M2命令帮助把参数1/2/4/5/7/9/10等占位符填任意非空字符,只改位置、孔位、状态、宝石IDX。

二、Hero凹槽数量与变量

Hero打孔用SETFLUTECOUNT 位置 数量,检测打孔数用CheckFluteCount 位置 符号 数量,检测已镶宝石数用CheckItemStoneCount 位置 符号 数量,检测指定宝石用CheckItemHasStone 位置 宝石名 数量。武器打孔加1个:

[@Flut1_1_1]
if

NOT CHECKUSEITEM 1
say

武器位置未穿戴装备,请先穿武器。
elsesay

act

SETFLUTECOUNT 1 1
SENDMSG 6 武器已增加1个凹槽。

检测武器凹槽大于2:

[@checkherohole]
if

CheckFluteCount 1 > 2
act

SENDMSG 6 英雄系/本核武器凹槽大于2。
elsesay

武器凹槽不足2个。

检测武器已镶宝石数量大于1:

if

CheckItemStoneCount 1 > 1
act

SENDMSG 6 武器已镶宝石大于1颗。
elsesay

武器镶宝石数量不足。

检测武器是否镶指定宝石,例如麻痹宝石:

if

CheckItemHasStone 1 麻痹宝石 1
act

SENDMSG 6 武器已镶麻痹宝石。
elsesay

武器未镶麻痹宝石。

Hero卸石用@ArmRemoveStone调用对话框,摘取道具StdMode=46、Shape=9;打孔上限按M2特殊属性、基本选项控制,脚本SETFLUTECOUNT不要一次加到超过M2上限,否则面板能加、属性不生效。

三、A3/部分Blue类按位置凹槽

A3资料给CHECKITEMFLUTECOUNT 位置(0..15) 符号 数量。左手镯位置按所用核心文档确认,部分资料示例用某位置检测凹槽大于2:

[@checkflute]
if

CHECKITEMFLUTECOUNT 左手镯位置 > 2
act

SENDMSG 5 左手镯凹槽数量大于2个。
elsesay

左手镯凹槽数量不大于2个。

该类命令只返回是否满足条件,不直接把数量写进自定义变量;要做“全身总孔数”就在NPC用多个CHECKITEMFLUTECOUNT分段判断,每段符合条件给变量加固定值,或者用M2是否提供Count返回命令替代。部分Blue版本没有全身孔数汇总命令,只能逐位置判断后累计。

四、全身凹槽总数量统计思路

GOM没有一条命令直接返回“全身所有装备总孔数”时,用逐位置CHECKDRILLHOLECOUNT取数再赋值。伪变量写法:

[@countallhole]
act

MOV D0 0
if

CHECKDRILLHOLECOUNT 0 > 0
act

CHECKDRILLHOLECOUNT 0 = D1
CALCVAR D0 + D1
if

CHECKDRILLHOLECOUNT 1 > 0
act

CHECKDRILLHOLECOUNT 1 = D1
CALCVAR D0 + D1
if

CHECKDRILLHOLECOUNT 3 > 0
act

CHECKDRILLHOLECOUNT 3 = D1
CALCVAR D0 + D1
if

CHECKDRILLHOLECOUNT 5 > 0
act

CHECKDRILLHOLECOUNT 5 = D1
CALCVAR D0 + D1
if

CHECKDRILLHOLECOUNT 6 > 0
act

CHECKDRILLHOLECOUNT 6 = D1
CALCVAR D0 + D1
if

CHECKDRILLHOLECOUNT 7 > 0
act

CHECKDRILLHOLECOUNT 7 = D1
CALCVAR D0 + D1
if

CHECKDRILLHOLECOUNT 8 > 0
act

CHECKDRILLHOLECOUNT 8 = D1
CALCVAR D0 + D1
if

CHECKDRILLHOLECOUNT 10 > 0
act

CHECKDRILLHOLECOUNT 10 = D1
CALCVAR D0 + D1
if

CHECKDRILLHOLECOUNT 11 > 0
act

CHECKDRILLHOLECOUNT 11 = D1
CALCVAR D0 + D1
SENDMSG 6 全身已统计打孔总数<D0>。

上面位置仅按部分核心示例占位:0衣服、1武器、3项链、5右手镯、6左手镯、7右戒指、8左戒指、10腰带、11鞋子;其它核心若位置编号不同,按M2装备位置表替换。若引擎不支持CHECKDRILLHOLECOUNT直接=变量,改成分段条件:大于0加1、大于1加2、大于2加3,用MOV/CALCVAR累计D0。已镶嵌总数把CHECKDRILLHOLECOUNT换成CHECKSOCKETABLEITEMCOUNT即可。

GEE全身遍历可借星星位置思路做循环,但星星和凹槽不是同一属性;若M2没有提供孔数循环命令,仍按位置逐段写最稳。

五、NPC按凹槽数量发奖励/限制功能

按武器孔数发打孔石,孔数大于等于3多送,少于3少送:

[@main]
凹槽奖励/holereward

[@holereward]
if

CHECKDRILLHOLECOUNT 1 > 3
act

GIVE 打孔石 3
SENDMSG 6 武器凹槽大于3,发放打孔石3个。
elsesay

if

CHECKDRILLHOLECOUNT 1 > 0
act

GIVE 打孔石 1
SENDMSG 6 武器已有凹槽,发放打孔石1个。
elsesay

武器无凹槽,请先打孔再领奖励。

按全身总孔数进高级图,前面先用[@countallhole]把D0算出,再判断:

[@enterholemap]
if

CHECKLEVELEX > 50
act

CALL [\统计\全身孔数.txt] @countallhole

if

CHECKVAR D0 > 10
act

MAPMOVE 高级孔位图号 X Y
SENDMSG 6 全身凹槽总数大于10,已进入高级孔位图。
elsesay

全身凹槽总数不足10,无法进入高级孔位图。

六、空槽与满槽判断

只检测“有孔但未镶”需要组合命令。GOM先取CHECKDRILLHOLECOUNT得到总孔数,再取CHECKSOCKETABLEITEMCOUNT得到已镶数,脚本里用两个变量相减;若引擎不支持直接相减,用分段:

if

CHECKDRILLHOLECOUNT 1 > 2
CHECKDRILLHOLECOUNT 1 = D0
CHECKSOCKETABLEITEMCOUNT 1 = D1
act

CALCVAR D2 = D0
CALCVAR D2 - D1
if

CHECKVAR D2 > 0
act

SENDMSG 6 武器有空槽,可继续镶嵌。
elsesay

武器孔已全镶满。

Hero用CheckFluteCount取总孔、CheckItemStoneCount取已镶,再按上面变量减法处理;A3/Blue若只有CHECKITEMFLUTECOUNT条件判断,没有返回值,就按0孔、1孔、2孔、3孔分段设变量,空槽数=分段最大值-已镶分段最大值。

七、M2基础配置先于脚本

打孔前在M2物品装备、特殊属性、基本选项开孔位系统:设置哪些StdMode可打孔、最大孔数、开孔消耗、镶嵌消耗、摘石规则。GOM孔位0到4或按子版本0到N,Hero可到8,部分其他资料示例也提到最多8孔,但是否生效看M2上限。 不在M2开孔,脚本SETFLUTECOUNT/DRILLHOLE可能执行成功但属性不结算。StdItems里镶嵌宝石按引擎要求建StdMode=46,Shape按属性类别,AniCount映射攻防魔道元素,Source写数值;摘取道具Shape=9,Reserved控制摘下是否消耗。

八、变量类型选择

个人任务用HUMAN/人物变量,登录不丢、小退保留;全服统计用GLOBAL/全局变量,但全身孔数应按角色分别存,不建议用全局覆盖多人。GOM的D0到Dn、S0到Sn按脚本段作用域使用;跨NPC传递把D变量写进HUMAN文件用SAVEVAR,读取用LOADVAR。机器人统计全服孔数无意义,孔数只按在线角色身上算;机器人可做定时提醒,不参与打孔判定。

九、排错

NPC不判断孔数:命令名拼错,GOM写成CheckDrillHoleCount、Hero写成CHECKFLUTECOUNT混用都会失效;按所用核心命令帮助逐字核对,GOM用CHECKDRILLHOLECOUNT/CHECKSOCKETABLEITEMCOUNT,Hero用CheckFluteCount/CheckItemStoneCount,A3用CHECKITEMFLUTECOUNT。

打了孔但检测0:M2未开该StdMode开孔,或位置号写错;武器在部分核心为1、部分核心为0,衣服位置也可能不同,先用GM在单件装备打1孔,再用CHECKDRILLHOLECOUNT对应位置=1测试,逐步换位置。

镶石后数量不增:CHECKSOCKETABLEITEMCOUNT位置错、孔位未激活、宝石StdMode不是46或Shape属性类别不对;先用单孔CHECKSOCKETABLEITEM取变量确认能否返回IDX和名称。

全身总数不准:位置表没覆盖盾牌、斗笠、军鼓、马牌、时装;按M2实际开启孔位的部位补全CHECKDRILLHOLECOUNT段,未开启孔位的部位不用统计。GEE位置表可参考星星位置编号,但仅作位置顺序参考,不表示凹槽命令通用。

变量不保存:用D变量做完全身统计后未SAVEVAR,小退重新进NPC重新统计;长期功能如“全身孔数达标的永久称号”用HUMAN变量落地。

打孔超限:脚本循环SETFLUTECOUNT/DRILLHOLE不判断当前数,一直加超过M2上限;每次加孔前先CHECKDRILLHOLECOUNT判断,小于上限才加,大于等于上限走提示。

英雄孔数:部分命令用H.前缀检测英雄,例如GEE检测星星用H.CheckUpgradeCount;凹槽是否支持英雄按M2文档,不支持就用主号单独系统,避免H.CheckDrill类命令未知报错。

按单件CHECKDRILLHOLECOUNT/CHECKSOCKETABLEITEMCOUNT取数、按位置表遍历累计D变量、用HUMAN变量落地全身总孔数,可覆盖打孔奖励、进图限制、空槽提醒、满槽禁止再镶。不同核心命令名差异大,GOM系优先用钻孔/镶石COUNT命令,Hero用Flute/Stone命令,A3/Blue用FluteCount条件命令,没有总孔返回就用分段条件加变量。