传奇项链百分百加幸运的脚本写法与DB数据库字段设置全解析完整教程

来源: 作者: 点击:
项链的幸运值不是脚本临时算出来的数字,它落在物品数据库的固定字段里,脚本只负责往这个字段上加。所以要先弄清数据库里哪一列是幸运,再谈命令怎么写。这两块接不上,脚本写得再对,加出来的属性也不显示。

热血传奇

项链的幸运值存在数据库哪个字段

物品数据库是 StdItems.DB,每条记录按固定列顺序排开:序号、名称、StdMode、Shape、重量、AniCount、Source、Reserved、Looks、持久、Ac、Ac2、Mac、Mac2、Dc、Dc2、Mc、Mc2、Sc、Sc2、需求、需求等级、价格、是否库存……

项链这一类,StdMode 填 19、20、21 三种都算项链,但每种对应一组不同的属性位置。关键在 Shape 和 Mac2。

当 StdMode 为 19 时,Ac2 这一列是魔法躲避,Mac2 这一列就是幸运。也就是说,一条本来带幸运的项链,幸运值就明明白白写在 Mac2 上。白色虎齿项链、灯笼项链、记忆项链走的都是这个类型,Shape 值 19 决定了它的第一个可加属性位置是魔法躲避,第二个是幸运。

当 StdMode 为 20 时,Ac2 变准确,Mac2 变敏捷,这一类加不出幸运。当 StdMode 为 21 时,Ac2 是体力恢复,Mac2 是魔法恢复,同样加不出幸运。

把项链做成幸运款,最省事的办法是在数据库里直接把 Mac2 改成想要的数字,比如填 2,这条项链出生就带幸运加 2。想批量发一批带幸运的项链,改数据库字段比写脚本快。但玩家手里已经拿着的项链改不了,那种情况必须靠脚本。

百分百加幸运靠的是升级命令的第三个参数

脚本里给项链补幸运,用的命令是 UPGRADEITEMEX。它的完整格式是四到五个参数:装备位置、属性位置、成功率、增加点数、是否提示。

装备位置里,0 到 13 对应人物身上各个格子,其中项链固定是 3。属性位置里,StdMode 为 19 的项链,位置 0 是魔法躲避,位置 1 就是幸运。

第三个参数是成功率,这正是百分百和概率的分界线。

text
UPGRADEITEMEX 3 1 0 1 0


这一行拆开看:3 是项链格子,1 是幸运属性位,0 是成功率,1 是加一点,最后 0 表示不弹提示。成功率写 0 的时候,引擎按必定成功处理,不加随机数判断,执行下去幸运一定加 1。这就是所谓百分百。

对比一下带概率的写法。同样加幸运,概率版的段里会塞一个 random 判断,命中了才加,没命中就只扣钱不给属性。

text
#IF
random 2
CHECKGAMEGOLD > 199999
CHECKITEMADDVALUE 3 1 = 2
#ACT
GAMEGOLD - 200000
MESSAGEBOX 项链升级失败
BREAK


上面这段是失败分支,random 2 表示有一半概率落到这里,钱照扣,属性不给。要做成百分百,把这类 random 段整段删掉,只留下 UPGRADEITEMEX 那一行就够了。

NPC直接升级的完整脚本

一个能用的百分百加幸运脚本,把检测和执行分清楚就行。检测部分干三件事:确认玩家佩着项链、确认当前幸运值没到顶、确认元宝够。

text
[@main]
欢迎来到这里为项链补幸运,每次加一点,必定成功。\
<升级幸运/@升级> <关闭/@exit>\
\

[@升级]
#IF
CHECKITEMW 白色虎齿项链 1
CHECKITEMADDVALUE 3 1 < 3
CHECKGAMEGOLD > 49999
#ACT
GAMEGOLD - 50000
UPGRADEITEMEX 3 1 0 1 0
SENDMSG 5 恭喜,项链幸运值增加一点
BREAK
#ELSEACT
MESSAGEBOX 没有佩带项链,幸运已满,或者元宝不足
BREAK


CHECKITEMW 检测装备栏里有没有这项项链,它和检测背包的 CHECKITEM 不是一回事,写错了会出现人没戴项链也能升级。CHECKITEMADDVALUE 3 1 < 3 卡住上限,项链幸运一般封顶在 3,不加这一句玩家能一路点到很高,属性直接失衡。

这里有个细节要留意,CHECKITEMADDVALUE 后面接的是运算符和数值。有的引擎版本只认等号,写大于小于会报错,那种情况下就得把 0、1、2 三段分开写,每段一个等号,段尾都要 BREAK。

text
#IF
CHECKITEMADDVALUE 3 1 = 0
#ACT
UPGRADEITEMEX 3 1 0 1 0
BREAK

#IF
CHECKITEMADDVALUE 3 1 = 1
#ACT
UPGRADEITEMEX 3 1 0 1 0
BREAK


分段写法啰嗦,但兼容老引擎。段与段之间不写 BREAK,第一段执行完会接着往下匹配,一条项链一口气加两点。

用祝福油做成可双击的物品

不想让玩家找 NPC,可以做成道具。玩家把项链拿在手上,双击祝福油,属性就加上去。这种做法把功能塞进物品使用脚本里,入口在 QFunction-0.txt。

数据库里先建一条祝福油记录,名称、外观、持久设好,重点在 StdMode 和 AniCount 两列。上网类消耗品的 StdMode 一般填 31,AniCount 填一个没用过的编号,比如 57。这个编号决定双击物品时脚本去调哪一段,AniCount 填 57,脚本里就要写 [@StdModeFunc57]。

text
1006;项链祝福油;31;0;1;57;0;0;1326;1;20000;5;;


接着在 QFunction-0.txt 里补上这段。

text
[@StdModeFunc57]
#IF
CHECKITEMADDVALUE 3 1 > 2
#ACT
GIVE 项链祝福油 1
SENDMSG 5 项链幸运已到上限,油退还给你
BREAK

#IF
CHECKUSEITEM 3
#ACT
TAKE 项链祝福油 1
UPGRADEITEMEX 3 1 0 1 0
SENDMSG 5 项链幸运值增加一点
BREAK
#ELSEACT
GIVE 项链祝福油 1
MESSAGEBOX 手上没有项链,油还给你
BREAK


CHECKUSEITEM 3 判断玩家光标上是不是停着一条项链,是就继续,不是就把油退回去。这两条命令的顺序不能颠倒,先耗油再加属性,中途判断失败油就白扣。把 TAKE 放在判断之后,是保证只有真正要升级的时候才消耗道具。

AniCount 的编号要和脚本段名严格对上。数据库填 57,脚本写成 [@StdModeFunc55],双击下去没有任何反应,油不会消耗,项链也不会变。这是这类物品脚本最常见的毛病。

直接发放带幸运项链的写法

有些引擎扩展了发放命令,可以一次给出一条自带极品属性的项链,不需要玩家自己升级。命令是 GIVE 物品名 数量 属性位置 数值。属性位置 1 就是幸运,数值写 3 就是直接给三点。

text
#IF
CHECKLEVELEX > 39
#ACT
GIVE 白色虎齿项链 1 1 3
SENDMSG 0 玩家《%s》领取了一条幸运项链
BREAK


这一行给出去的就是幸运加 3 的白色虎齿项链,出生自带,不用再走升级流程。用这个命令发奖励,能绕开数据库,单条项链单独带属性。要留意的是,属性位置的含义跟着 Shape 走,把这条命令用在 Shape 不是 19 的项链上,加出来的可能是敏捷而不是幸运。

做活动发奖励、开区送新手礼,这种方式最直接。数量和属性位置都写在命令里,改奖品只改这一行。

关键编码对照

装备位置这一组要背熟,写错格子会加到别的装备上。0 是衣服,1 是武器,2 是蜡烛,3 是项链,4 是头盔,5 是左手镯,6 是右手镯,7 是左戒指,8 是右戒指。给项链加幸运,位置一律填 3。

项链的属性位置跟着 Shape 走。Shape 19:位置 0 魔法躲避,位置 1 幸运。Shape 20:位置 0 准确,位置 1 敏捷。Shape 21:位置 0 体力恢复,位置 1 魔法恢复。

数据库列里,项链的 Ac2 是魔法躲避,Mac2 是幸运。手工改字段就改这两列,脚本加属性就看 Shape 定位置,两套口径要一致。

text
#IF
CHECKITEMTYPE 3 19
#ACT
UPGRADEITEMEX 3 1 0 1 0
BREAK


CHECKITEMTYPE 3 19 先确认光标上的项链确实是 19 类,防止有人拿 20 类的项链来升级,刷出一堆错位属性。

引擎之间的写法差别

GOM 和 GEE 引擎走上面这套命令,UPGRADEITEMEX、CHECKITEMADDVALUE、GIVE 扩展属性都支持,成功率填 0 就是必成,兼容性最好。HERO 引擎同样认这组命令,属性位置的编号范围略有出入,用之前翻一遍引擎自带的说明。

BLUE 和 LEGEND 引擎的命令名一致,但变量写法和调用习惯不同,装备位置的数字编码要按手册核对。部分老引擎的 GIVE 只支持两个参数,写三个参数会报错,多出来的属性参数被忽略,发出去的就是白板项链。

物品使用脚本的触发段名,各家引擎都认 [@StdModeFunc编号],编号取自数据库的 AniCount,这一段所有引擎通用。

换引擎时别照抄,先拿一条垃圾项链试一次升级,确认命令认得到、属性落对位置,再整套搬。

调试时反复出现的问题

加了幸运项链上不显示。检查项链的 StdMode 是不是 19。把 19 类的项链拿去用位置 1 加,出来才是幸运。StdMode 是 20 的项链同一个位置加出来是敏捷,属性写进去了,只是名字不一样。

幸运能一直加,停不下来。脚本里少了 CHECKITEMADDVALUE 的上限判断,或者判断写成了别的装备位置。给项链加就检测位置 3 的属性位置 1,别写成位置 2 或者戒指的位置。

双击祝福油没反应。数据库 AniCount 的编号和脚本里 [@StdModeFunc编号] 对不上。填 57 就搜 57,填 55 就搜 55,两个数字必须一样。另外确认 QFunction-0.txt 里确实有这一段,段名前后的方括号是半角。

升级成功但元宝没扣。扣钱命令写在 UPGRADEITEMEX 后面,中间被 BREAK 截断了。扣费放前面,升级放后面,顺序反了就会出现白给属性。

一次升了两点。多段检测之间没有 BREAK,脚本执行完一段继续往下匹配。每段末尾补上 BREAK。

发出去的项链不同人属性不一样。用了带随机的升级命令,或者数据库里那条项链的 Mac2 本身就带了一个幸运值,脚本再加就叠上去了。发放型奖励统一走 GIVE 扩展参数,别用带概率的 UPGRADEITEMEX。

数值上定好上限。项链幸运封顶三点是常规做法,配合武器幸运凑运九套。上限写死在脚本的检测里,比改数据库更灵活,活动期间要放开,只改一个数字。材料、元宝、幸运三样东西的关系理清了,这套脚本就不会出岔子。