传奇服务端提升暴击属性NPC脚本命令完整详解与配置实例全教程

来源: 作者: 点击:
传奇里暴击这个属性,本质是攻击命中目标时多跑一段额外伤害倍率的判定。早期版本靠武器自带的暴击率字段吃这个判定,后来GOM、GEE、HGE、BLUE这些引擎把暴击拆成了两样东西,一样挂在人物的元素属性上,一样挂在装备的新属性值里。这两条路对应的脚本命令完全不同,动手写NPC之前先想清楚要挂哪一种,不然命令查对了也会发现属性根本不显示。

先说暴击到底存在哪。

GOM引擎把暴击放进元素属性表,编号是0,取值从1到100,单位是百分比。同一张表里还有增加攻击伤害、物理伤害减少、魔法伤害减少、忽视目标防御、所有伤害反弹、增加目标暴率、人物体力增加这些,编号排到10。人物身上这个值可以用CHANGEHUMNEWVALUE改,格式是属性编号、效果百分比、有效时间秒数、威力倍数。想让一个玩家接下来六十秒里暴击率五成,命令写成 CHANGEHUMNEWVALUE 0 50 60,几个参数挨着写,中间别插空格。这个改动小退之后会失效,因为它没写进人物存档,只在当前这次登录里生效。要长期挂在身上,就得走装备那条路。

装备上的暴击是用SetNewItemValue写进去的,位置参数里0到18代表穿在身上的各个部位,-1代表OK框里那件东西。属性写0就是暴击几率增加,值最大到100。配套的检测命令是CHECKNEWITEMVALUE,用法一样,只是把赋值换成大于、小于、等于。这套命令在GOM和一部分GEE版本里通用,也是现在做暴击NPC用得最多的一种写法。

再说NPC脚本本身。

脚本文件放在服务端的 Mir200\Envir\Market_Def 目录下,一个NPC一个txt。想让NPC出现在地图上,还得去 Mir200\Envir\MerChant.txt 里登记一行,格式是脚本名、地图名、X坐标、Y坐标、NPC名字、标志、形象编号、是否属于沙巴克这些字段,坐标对不上NPC就不出来。脚本内部结构是固定的,[@main]是入口,下面跟#IF放检测,#ACT放满足条件后执行的命令,#SAY放对话框文本,#ELSEACT和#ELSESAY放不满足时的分支,最后用BREAK或者CLOSE收尾。

对话框里换行用反斜杠,按钮写成尖括号包显示文字、斜杠、@跳转标签的形式,点一下跳到对应的[@标签]段继续跑。颜色写法各引擎有差别,可以写FCOLOR等于编号,想让它自己闪就写AUTOCOLOR加一串编号。

先给一个能直接用的完整例子,引擎按GOM,功能是花元宝给武器加暴击,最多加五点。

[@main]
#IF
CHECKLEVELEX > 69
#SAY
你的武器杀伤力不够?
给我五万元宝,我帮你把武器的暴击拉上去。
只接武器,别拿衣服来糊弄我。

<提升武器暴击/@升级武器> <退出/@exit>
#ELSEACT
MESSAGEBOX 等级不到70,这个功能对你还没开放。
BREAK

[@升级武器]
#IF
CHECKGAMEGOLD > 49999
#ACT
QUERYITEMDLG 放入要提升的武器 ~放武器 0
#ELSEACT
MESSAGEBOX 元宝不够五万,先去凑齐。
BREAK

[~放武器]
#IF
CHECKDLGITEMTYPE WEAPON
#ACT
GOTO @开始升级
#ELSEACT
DELAYCALL 10 @升级武器
MESSAGEBOX 我看看,这好像不是武器。
BREAK

[@开始升级]
#IF
CHECKDLGITEMADDVALUE 8 < 5
#ACT
GAMEGOLD - 50000
UPGRADEDLGITEM 7 100 1 2
SENDMSG 7 武器暴击提升成功,现在去找人试试手。
DELAYCALL 10 @升级武器
#ELSEACT
DELAYCALL 10 @升级武器
MESSAGEBOX 这把武器的暴击已经满了,别再浪费元宝。
BREAK

这个脚本里几个地方容易写错。CHECKDLGITEMADDVALUE里的8是暴击的附加属性编号,跟元素属性表里那个0不是同一套编号,别混着用。QUERYITEMDLG后面那段是给OK框取的名字,触发时用波浪号加名字去找对应标签,名字对不上脚本就断在这里。DELAYCALL是用来重画对话框的,不写它点完一次就卡住,玩家会以为脚本死了。第70级那道门槛是不少版本的习惯做法,防止新号一进来就把低级武器拉满,加不加看你自己的数值设定。

换一种思路,暴击不直接给,而是靠赤炎石去镶嵌,走装备暴击等级那条线。这种写在HGE和一些仿盛大的版本里很常见,玩家要先去打石头。

[@Main]
#SAY
赤炎石你打到了吗?
用对了等级的石头,装备的暴击等级就能往上走一级。

<提升装备暴击等级/@提升等级> <拆卸赤炎石/@拆卸>
<返回/@Main>

[@提升等级]
#SAY
武器暴击一到十级,石头等级要对得上。

<武器暴击1级/@等级1> <武器暴击2级/@等级2> <武器暴击3级/@等级3>
<返回/@提升等级>

[@等级1]
#SAY
武器上如果已经镶了一颗石头,再镶会把旧的顶坏,拆下来再镶。
确定继续吗?

<确定/@等级1确定> <再想想/@exit>

[@等级1确定]
#IF
CHECKKIMNEEDLE 一级赤炎石 1
CHECKUSEITEM 1
#ACT
TAKEKIMNEEDLE 一级赤炎石 1
UPGRADEITEMEX 1 11 0 1 1
Close
#ELSESAY
包里没有一级赤炎石,或者手上没拿武器,这活儿干不了。

武器是1级到10级,赤炎石也分十档。做物品DB的时候,Anicount字段的值对应镶嵌时退回来的石头数量,也对应暴击等级,写的时候别重号。UPGRADEITEMEX后面的11是暴击等级这条附加属性,再往后的1是把成功概率按百分百算,要做出失败率就把它改成你想要的数字。这样走的是等级制那一套,跟直接写暴击几率的结果不一样,适合想让玩家多打几趟怪的版本。

有的老引擎还留着GM改装备属性的命令 Supermake,格式是装备类型、属性编号、点数。暴击这一项对应的属性编号是8,所以在脚本里写 Supermake 1 8 2,就是给装备类型的第1类加两点暴击几率。这条命令直接改数值,绕开成功判定,做测试或者给充值玩家的福利时用得上,正式玩法里最好换成前面那套带检测的写法。

想给人物临时来点暴击,用CHANGEHUMNEWVALUE就够,适合活动地图、限时BOSS这种场景。给玩家加一个十分钟五成暴击的状态,可以这么写。

#IF
CHECKMAPNAME 活动地图
#ACT
CHANGEHUMNEWVALUE 0 50 600 100
SENDMSG 6 你进入了暴击加成状态,持续十分钟。

三个必要参数分别是编号0、五十的百分比、六百秒。后面那个100是暴击威力倍数,按N乘100算。要注意有些M2在功能设置里有个开关,不打开这条命令不生效,光盯着脚本根本看不出来,得去M2server里把对应的勾点开。

检测玩家的暴击到没到某个值,用来做后续分支。

#IF
CHECKNEWITEMVALUE 0 0 > 10
#SAY
你手上武器的暴击已经过一成,后面这个玩法给你开。

位置0是武器,进入后面的属性0是暴击,大于10就是一成以上。想检测身上整体而不是单件,得先把各个部位的值读出来再加,或者改用读取人物元素属性的写法,把当前暴击率取出来跟阈值比。

把暴击洗掉也是常做的功能,有的版本叫清洗,有的叫拆除。做法跟提升反过来,检测到有暴击就把属性归零或者扣掉,收一笔元宝。命令上就是把SetNewItemValue那个值写成0,或者用减号扣掉指定点数。镶石头的版本则用拆卸,把石头退回背包。BLUE这类引擎的写法是先用QUERYITEMDLG把装备放进框里,再判断类型是WEAPON还是DRESS,确认没问题才扣钱加属性。

调试的时候盯着几个点。脚本不弹对话框,先看MerChant.txt里坐标填没填对,NPC名字有没有重。点了按钮没反应,多半是标签名对不上,波浪号后面的名字和[@标签]要一模一样,中英文符号混进去也会断。属性加了但人物面板看不到,检查是不是把装备属性的编号当成了人物元素属性的编号,这是分开的两张表。数值生效但小退就没了,那是用了CHANGEHUMNEWVALUE,本来就只在当前登录有效,要永久就得落到装备或存档上。元宝扣了属性没变,去看UPGRADEITEMEX或者SetNewItemValue的参数是不是填到了别的属性位上。

变量和条件写多了以后尽量拆成小段,一个标签只干一件事。检测放在#IF,执行放在#ACT,文本放在#SAY,顺序别颠倒。所有命令用半角符号,中文标点混进行脚本引擎会直接跳过那一行。保存编码用GBK,用UTF-8存老引擎会读成乱码。改完脚本记得重载一次,不然跑的还是旧内容。玩家反馈暴击不生效时,先让他小退再上,很多临时属性本来就活不过一次登录切换,这一步能排掉一半的误报。