装备升级功能可以指定升级物品及属性,按指定机率得到结果,需要升级的装备物品必须放在身上。核心命令是UPGRADEITEMEX,通过物品位置和属性位置两个参数组合来确定升级哪件装备的哪条属性。下面从命令参数、位置编码、DB字段联动、指定物品的脚本限制、指定属性的配置写法、上限检测、失败处理和还原机制八个方面展开。
## UPGRADEITEMEX命令格式与参数
命令格式为UPGRADEITEMEX 物品位置(0-12) 属性位置(0-14) 成功机率(0-100) 点数机率(0-255) 是否破碎(0,1)。
第一个参数是物品位置,决定升级身上哪个栏位的装备。第二个参数是属性位置,决定升级这件装备的哪条属性。第三个参数是成功机率,数值越大机率越小,填0代表100%成功。第四个参数是升级成功后增加的属性点数,取值范围0到255。第五个参数控制升级失败后的处理方式,0为失败后装备保留,1为失败后破碎,2为还原默认属性。
一条最基础的升级武器攻击的写法:
```
UPGRADEITEMEX 1 0 0 1 0
```
位置1代表武器,属性0代表攻击,成功率100%,每次增加1点攻击,失败不破碎。
## 物品位置编码对照
物品位置参数取值0到12,对应关系如下:0盔甲,1武器,2照明物,3项链,4头盔,5右手镯,6左手镯,7右戒指,8左戒指,9无(放护身符位置),10腰带,11鞋子,12宝石。部分引擎还支持13斗笠位置。
写错物品位置是脚本报错的高频原因。比如升级头盔却写了位置1,实际生效的是武器栏,属性加到了武器上,玩家反馈升级无效但武器属性被意外改动。检查脚本中每一处UPGRADEITEMEX的第一个参数是否与NPC对话框描述的装备类型一致。
## 属性位置与物品类型的对应关系
属性位置参数的含义随物品类型变化,不是统一的。这是整个升级系统中最容易出错的部分。
盔甲的属性位置:0防御,1魔御,2攻击,3魔法,4道术,14持久。武器:0物理攻击,1魔法攻击,2道术攻击,3幸运,4诅咒,5准确,6攻击速度,7强度,14持久。头盔:0防御,1魔御,2攻击,3魔法,4道术,5佩戴需求,6佩戴级别,14持久。
项链、手镯、戒指的属性位置受DB数据库中StdMode值的控制,同一个属性位置在不同StdMode下升级出来的效果完全不同。项链StdMode为19时,属性位置0对应魔法躲避,位置1对应幸运;StdMode为20时,位置0对应准确,位置1对应敏捷。手镯StdMode为24时位置0为准确,StdMode为26时位置0为防御上限。戒指StdMode为22时位置0为防御上限,StdMode为23时位置0为毒物躲避。
修改升级脚本之前,先确认目标装备的StdMode值,再对照上表确定正确的属性位置参数。StdMode写错或者属性位置与StdMode不匹配,升级出来的属性不是预期结果,甚至可能让装备变成无属性道具。
## 指定升级物品的脚本限制写法
UPGRADEITEMEX本身只能按装备栏位指定升级对象,无法直接判断栏位上具体是哪件装备。要限制只有特定装备可以升级,需要在执行升级命令之前加入物品名称检测。
CheckUpgradeItemName命令专门用于升级场景下的物品名称检测,位置0检测升级装备的名字,位置1检测宝石格物品的名字,该命令只能在QFunction的@ItemUpgarde段落中执行。写法示例:
```
[@ItemUpgarde]
#IF
CheckUpgradeItemName 0 裁决之杖
#ACT
UPGRADEITEMEX 1 0 0 1 0
SENDMSG 6 裁决之杖升级成功。
#ELSESAY
只能升级裁决之杖,或者你没有放入正确的装备。
```
如果服务端使用的是不支持CheckUpgradeItemName的引擎版本,可以用CHECKITEMW检测玩家是否佩戴了指定装备,再执行升级。CHECKITEMW的格式为CHECKITEMW 装备名称 位置编号,位置编号不写默认为1。
```
[@升级武器]
#IF
CHECKITEMW 屠龙 1
CHECKGAMEGOLD > 49999
#ACT
GAMEGOLD - 50000
UPGRADEITEMEX 1 0 0 1 0
SENDMSG 6 屠龙升级成功,攻击+1。
#ELSESAY
你没有佩戴屠龙,或者元宝不足。
```
## 指定升级属性的完整NPC脚本
以升级靴子的道术属性为例,靴子物品位置为11,道术属性位置为4,设置上限为3点,每次升级消耗20000元宝。完整脚本:
```
[@靴子]
升级类型:靴子\
道术:<点击升级/@靴子道术> 升级上限:3点\
魔法:<点击升级/@靴子魔法> 升级上限:3点\
攻击:<点击升级/@靴子攻击> 升级上限:3点\
[@靴子道术]
#IF
CHECKGAMEGOLD > 19999
#ACT
GAMEGOLD - 20000
#ELSEACT
MESSAGEBOX 元宝不足。
break
#IF
CheckItemAddvalue 11 4 < 2
RANDOM 3
#ACT
UPGRADEITEMEX 11 4 0 1 0
Messagebox 升级成功。
BREAK
#IF
CheckItemAddvalue 11 4 = 2
RANDOM 6
#ACT
UPGRADEITEMEX 11 4 0 1 0
Messagebox 升级成功。
BREAK
#IF
#ACT
MESSAGEBOX 升级失败或装备已无法升级。
break
```
这段脚本的逻辑分三层。第一层扣元宝,CHECKGAMEGOLD检测元宝数量,GAMEGOLD - 20000扣除费用。第二层检测当前属性值,CheckItemAddvalue 11 4 < 2 表示靴子道术附加属性小于2时,随机数在RANDOM 3范围内成功。第三层CheckItemAddvalue 11 4 = 2 表示道术属性已经到2点,即将升到3点上限,RANDOM 6把成功率压低,升级难度提高。
CheckItemAddvalue的完整格式为CHECKITEMADDVALUE 装备位置(-1时是OK框中的装备,0-12时是穿在身上的装备) 属性位置(0-14) 符号(<>=) 数值。位置参数和属性参数与UPGRADEITEMEX保持同一套编码体系。
## 成功率递减与属性上限控制
属性越接近上限,成功率应该越低。上面的脚本用RANDOM配合不同的分支来实现这个效果。RANDOM N的含义是在0到N-1之间生成一个随机数,RANDOM 3表示大约三分之一的概率通过判定进入升级分支。属性较低时用RANDOM 3,属性接近上限时用RANDOM 6,失败概率翻倍。
更精细的控制可以用多段分支。属性0到1点时RANDOM 2,属性2点时RANDOM 4,属性3点时RANDOM 8,每次升级成功所需的条件越来越苛刻。
属性上限没有硬编码在UPGRADEITEMEX命令中,需要在脚本的CheckItemAddvalue判断中自行设定。比如CheckItemAddvalue 11 4 < 5 表示道术属性上限为5点,达到5点后CheckItemAddvalue 11 4 < 5 条件不成立,脚本走失败分支提示已达上限。
## 失败破碎与属性还原
UPGRADEITEMEX的第五个参数控制失败结果。填0时升级失败装备保留,属性不变,这是大多数版本使用的方案。填1时失败装备破碎消失,需要配合MESSAGEBOX做二次确认,避免玩家误操作导致装备损毁。
填2时失败后装备还原为默认属性,清空之前的所有升级加成。还原装备初始属性和清空强化加成,用UPGRADEITEMEX参数5=2即可,不需要额外写新函数。还原武器默认属性的脚本:
```
[@还原属性]
#ACT
UPGRADEITEMEX 1 0 0 0 2
SENDMSG 6 武器已恢复默认属性。
```
参数5=2时,成功率和点数机率参数可以忽略,引擎会直接执行属性还原操作,把装备恢复到DB数据库中的初始属性状态。
部分引擎还支持ClearItemEx命令清空额外属性,参数1为武器位置,但兼容性不如UPGRADEITEMEX参数5=2。优先使用后者。
## 升级功能在M2中的开关配置
脚本写完后,需要在M2Server的选项菜单中开启装备升级功能。进入M2查看菜单,选择列表信息,找到游戏管理中的装备升级设置,把需要允许升级的装备勾选上。没有在M2中开启的装备,即使脚本正确写了UPGRADEITEMEX命令,执行时也不会生效。
部分引擎需要在Command.ini中确认UPGRADEITEMEX命令已启用。打开服务端目录下的Command.ini,查找UPGRADEITEMEX=1字段,没有的话手动添加一行,然后重启M2Server。
## 常见报错与排查
报错提示UPGRADEITEMEX 0 2 0 1 0 line:74这类信息,通常是参数位数或数值范围不对。检查五个参数是否齐全,物品位置是否在0到12之间,属性位置是否在0到14之间,成功率是否在0到100之间,点数是否在0到255之间,是否破碎是否只填了0、1或2。
升级成功但属性没变化,先确认M2中是否勾选了该装备的升级权限。再检查属性位置参数是否与装备的StdMode匹配,尤其是项链和戒指这类StdMode影响属性映射的装备类型。
脚本文件必须保存为ANSI编码,UTF-8会导致中文字符串乱码,CHECKITEMW等命令检测装备名称时匹配失败。修改脚本后重启M2Server,或在控制台执行@ReloadManage重新加载脚本。
传奇装备升级功能指定升级物品与指定属性完整脚本写法及参数配置详解
来源:
作者:
点击:

