传奇装备发光元宝脚本命令完整解析与NPC收费发光配置实操教程多引擎通用版

来源: 作者: 点击:
装备发光和暴击走的不是一条路。暴击要参与伤害结算,是服务端算的;发光只影响客户端画面,服务端干的活就是记一笔,告诉客户端哪个部位挂了哪号光效。把这点理清,脚本就不会写歪。命令本身没几条,真正费工夫的是把位置编号、效果编号、收费这三处对齐。

先认命令。

GOM和英雄M2这套引擎里,发光用SetItemsLight。格式是命令加两个参数,第一个是位置,第二个是效果值。位置取0到12,效果值只有三个合法值,1代表第一种发光,2代表第二种发光,0是把光撤掉。写SetItemsLight 3 1,就是让项链位置亮起一号效果。衣服、武器、头盔这三个位置这条命令管不着,它们要发光得走数据库那条路,后面单说。

GEE引擎命令名换成SETITEMEFFECT,参数也跟着换。第一个还是位置,第二个是特效编号,范围0到65535。这个编号不是现成的,得先在M2的选项里把特效编辑好,编完脚本才能引用。写SETITEMEFFECT 0 1,就是给盔甲位置挂一号特效,第二个参数填0表示清除。英雄的装备要用H.SETITEMEFFECT,前面多一个H,漏了光效加在英雄身上就没反应。

位置编号两套引擎是一致的,记牢能省不少返工。0盔甲,1武器,2照明物也就是蜡烛,3项链,4头盔,5右手镯,6左手镯,7右戒指,8左戒指,9护身符那个位置,10腰带,11鞋子,12宝石。再往后的斗笠、军鼓、马牌、盾牌、灵玉、时装那一串,编号从13往后顺延,GEE里一直排到生肖盒。玩家戴的是时装时,位置编号跟普通装备是分开算的,别拿13当武器使。

位置和效果清楚了,再说收费。

发光收费的逻辑固定三步,先检测玩家身上有没有这个部位的装备,再检测元宝够不够,两个都过了才扣钱加光。检测装备在不在身上用CHECKUSEITEM,参数就是位置编号,CHECKUSEITEM 3问的是项链位置有没有东西。元宝检测用CHECKGAMEGOLD,后跟一个大于号和一个数,比如CHECKGAMEGOLD > 49999。扣元宝用GAMEGOLD减号加数量,写成GAMEGOLD - 50000,注意这里是命令名空格减号空格数量,跟检测里的比较符号不是一回事。

下面这段可直接放进脚本,引擎按GOM,收费五万元宝,位置铺成按钮。

[@装备发光]

{

<每次发光需要五万元宝,发过光的装备我也照样收钱。/FCOLOR=253>\

\

<项链发光/@项链发光> <左手镯发光/@左手镯发光>\

<右手镯发光/@右手镯发光> <腰带发光/@腰带发光>\

<左戒指发光/@左戒指发光> <右戒指发光/@右戒指发光>\

<勋章发光/@勋章发光> <靴子发光/@靴子发光>\

<宝石发光/@宝石发光> <毒和符发光/@毒和符发光>\

[@项链发光]

#IF

CHECKUSEITEM 3

CHECKGAMEGOLD > 49999

#ACT

GAMEGOLD - 50000

SetItemsLight 3 1

SendMsg 7 你的项链已经发光了,去人群里站站。

Goto @装备发光

#ELSEACT

SendMsg 5 你项链位置没戴东西,或者元宝不够五万。

[@左手镯发光]

#IF

CHECKUSEITEM 6

CHECKGAMEGOLD > 49999

#ACT

GAMEGOLD - 50000

SetItemsLight 6 1

SendMsg 7 你的左手镯已经发光了。

Goto @装备发光

#ELSEACT

SendMsg 5 你左手镯位置没戴东西,或者元宝不够五万。

[@右手镯发光]

#IF

CHECKUSEITEM 5

CHECKGAMEGOLD > 49999

#ACT

GAMEGOLD - 50000

SetItemsLight 5 1

SendMsg 7 你的右手镯已经发光了。

Goto @装备发光

#ELSEACT

SendMsg 5 你右手镯位置没戴东西,或者元宝不够五万。

[@腰带发光]

#IF

CHECKUSEITEM 10

CHECKGAMEGOLD > 49999

#ACT

GAMEGOLD - 50000

SetItemsLight 10 1

SendMsg 7 你的腰带已经发光了。

Goto @装备发光

#ELSEACT

SendMsg 5 你腰带位置没戴东西,或者元宝不够五万。

[@左戒指发光]

#IF

CHECKUSEITEM 8

CHECKGAMEGOLD > 49999

#ACT

GAMEGOLD - 50000

SetItemsLight 8 1

SendMsg 7 你的左戒指已经发光了。

Goto @装备发光

#ELSEACT

SendMsg 5 你左戒指位置没戴东西,或者元宝不够五万。

[@右戒指发光]

#IF

CHECKUSEITEM 7

CHECKGAMEGOLD > 49999

#ACT

GAMEGOLD - 50000

SetItemsLight 7 1

SendMsg 7 你的右戒指已经发光了。

Goto @装备发光

#ELSEACT

SendMsg 5 你右戒指位置没戴东西,或者元宝不够五万。

[@勋章发光]

#IF

CHECKUSEITEM 2

CHECKGAMEGOLD > 49999

#ACT

GAMEGOLD - 50000

SetItemsLight 2 1

SendMsg 7 你的勋章已经发光了。

Goto @装备发光

#ELSEACT

SendMsg 5 你勋章位置没戴东西,或者元宝不够五万。

[@靴子发光]

#IF

CHECKUSEITEM 11

CHECKGAMEGOLD > 49999

#ACT

GAMEGOLD - 50000

SetItemsLight 11 1

SendMsg 7 你的靴子已经发光了。

Goto @装备发光

#ELSEACT

SendMsg 5 你靴子位置没戴东西,或者元宝不够五万。

[@宝石发光]

#IF

CHECKUSEITEM 12

CHECKGAMEGOLD > 49999

#ACT

GAMEGOLD - 50000

SetItemsLight 12 1

SendMsg 7 你的宝石已经发光了。

Goto @装备发光

#ELSEACT

SendMsg 5 你宝石位置没戴东西,或者元宝不够五万。

[@毒和符发光]

#IF

CHECKUSEITEM 9

CHECKGAMEGOLD > 49999

#ACT

GAMEGOLD - 50000

SetItemsLight 9 1

SendMsg 7 你的毒和符已经发光了。

Goto @装备发光

#ELSEACT

SendMsg 5 你毒和符位置没戴东西,或者元宝不够五万。

}

这段里有个习惯值得学,回显带上装备名字变量,比干巴巴的提示耐看。项链是
𝑁
𝐸
𝐶
𝐾
𝐿
𝐴
𝐶
𝐸
,右手镯是
NECKLACE,右手镯是ARMRING_L,左手镯是
𝐴
𝑅
𝑀
𝑅
𝐼
𝑁
𝐺
𝑅
,左戒指是
ARMRING
R
​

,左戒指是RING_L,右戒指是
𝑅
𝐼
𝑁
𝐺
𝑅
,勋章是
RING
R
​

,勋章是BUJUK。写法是把变量塞进SendMsg,比如SendMsg 6 提示:我已经把【<$NECKLACE>】给你锤炼得闪闪发光了。变量前后加尖括号,引擎会把它换成玩家身上那件装备的实际名字,玩家一看就知道刚花掉的五万元宝落在哪件东西上。

发光再往上做,是让玩家自己挑效果。SetItemsLight第二个参数能填1和2,对应M2里事先配好的两种光效。有的版本把它做成两级收费,一号便宜,二号贵,脚本里就是两个按钮,扣的钱不一样,位置一样,效果值不一样。

[@二号效果]

#IF

CHECKUSEITEM 3

CHECKGAMEGOLD > 199999

#ACT

GAMEGOLD - 200000

SetItemsLight 3 2

SendMsg 7 你的项链换上了高阶光效。

Goto @装备发光

#ELSEACT

SendMsg 5 你项链位置没戴东西,或者元宝不够二十万。

想让玩家把光洗掉,同一个命令把第二个参数写0就行,SetItemsLight 3 0,项链的光就没了。洗光一般不收钱,脚本里不写扣元宝那一行即可。

再说不靠脚本的那条路,把光直接焊在装备上。

这条路走数据库,跟元宝无关,但不少带收费发光的版本其实也在用它。打开物品数据库,找到要发光的装备,把Anicount字段改成190,这件的发光类型就算开了。武器除了190这个通用值,还认几个特殊值,吸血对应138,倚天辟地对应241,填进去除了技能,外观也带光。数据库改完,客户端还要配一个文件,放在客户端的data目录下,武器叫Sky_WeaponEffect.txt,衣服叫SKY_HumEffect.txt。文件每行九个字段,用竖线隔开,依次是编号、外观文件名、起始帧、内观文件、内观起始帧、内观结束帧、偏移开关、偏移X、偏移Y。编号这一栏填的是装备在数据库里的Shape值,不是物品ID,填错了光就落到别的装备身上。举一个武器行的样子。

73|HumEffect2.wzl|13200|stateitem.wzl|2850|2865|0|0|0

这行的意思是,外观编号73的武器,用HumEffect2.wzl这个文件里从13200帧开始播光,内观在stateitem.wzl里从2850帧播到2865帧,不偏移。衣服那行字段顺序一样,只是偏移那两栏通常要给数值,把光挪到躯干正中,比如偏移开关填0,X填85,Y填75。

BLUE和LEGEND这套引擎改了算法,武器发光不看Anicount,改看shine字段,衣服内观也归shine管。武器shine等于1是金牛道剑那种光,等于2是倚天剑,一路排到等于6的新发光。Anicount只留着决定技能,比如188是倚天辟地,192是五岳独尊。换引擎时这两套字段的含义会翻个,从GOM迁到BLUE那边,光效字段要从Anicount搬到shine,不搬就只剩技能没有光。

还有一条老命令Supermake,做测试或者发福利时图省事,可以拿它直接改装备,但发光这类表现层的东西,Supermake改不出来,它改的是属性点,别混着用。

脚本写完,几处最容易出问题的地方捋一遍。

位置编号对不上是最常见的错。CHECKUSEITEM和SetItemsLight得用同一个位置编号,检测的是项链3,加光也必须是3,中间手滑写成4,玩家的项链就永远加不上光,因为脚本在问他头盔戴没戴。左右这类位置最坑,左戒指是8,右戒指是7,左手镯是6,右手镯是5,左右是反的,写的时候多看一眼。

元宝检测的边界要留意。CHECKGAMEGOLD > 49999是大于四万九千九百九十九,也就是至少五万;扣的时候写GAMEGOLD - 50000。这么配,元宝刚好五万的人能过;要是检测写成大于50000,兜里只有五万的玩家反而被拦下,差一个数就会有人来问你。检测里的比较符号是整套的,大于、小于、等于都能用,按你想要的收费规则挑。

发光命令支不支持当前引擎,是另一个坑。SetItemsLight这套是英雄M2的写法,GEE那边是SETITEMEFFECT,参数含义还不一样,一个吃效果值一二,一个吃特效编号。手上有老版本服务端,翻一下引擎自带的命令说明再落笔。衣服、武器、头盔用这条命令无效,想让它们发光就得回到数据库和客户端配置文件那条线,光在脚本里怎么改都不会有反应。

效果的准备工作别忘了。SetItemsLight里的1和2,不是随手的编号,是M2选项里功能设置那一页预先配好的两种光效,那页没配,命令执行了也不亮。SETITEMEFFECT吃的特效编号,同样要事先在M2里编好,编号没编就引用,等于引了个空。

脚本文件本身的规矩也得守。编码存GBK,用别的编码存,中文全是乱码,玩家看到的对话框会变成方块。所有标点都用半角,中文的逗号、冒号、括号混进去,引擎会把那一行当废行跳过,症状是脚本一部分能跑一部分不跑,很难查。文件名和MerChant.txt里登记的名字要一致,NPC在不在、坐标对不对,先确认这个再看脚本。改完脚本重新加载一遍,不重载跑的还是内存里的旧版本,你改的东西根本还没生效。

最后是显示和存档的区别。发光是外观状态,玩家小退或者换地图之后保不保得住,取决于你用的哪一种方式。脚本里用SetItemsLight加的,通常跟着这次在线状态走,重登得重新加;焊在数据库上的那种,是装备自带的,什么时候都亮。做限时发光活动用前者,做完就没了;做永久发光用后者,或者干脆做成玩家花钱买、脚本检测到已经拥有的装备就自动续上,重登也不会丢。