|
|
二百论坛
本站支持代销互换开区传奇版本、欢迎广大GM、技术、一条龙等传奇业界好友合作、联系业务QQ:1531850810
QQ交流群①:323634742(推荐 )QQ交流群②:764544814(推荐)
本站提供的传奇版本 由于来源不同 精力有限 无法100%测试 如需使用本传奇版本请切记
下载传奇版本后 先解压 再杀毒 更新官方引擎 最后再配置登陆器 避免被非法木马插件利用
今天来聊聊一个实战里特别吃香的功能——传奇单机版词缀怪物系统。
简单说就是:玩家进某个地图,刷出来的怪物不再是普通白板怪,而是带着各种前缀的词缀怪——什么"力★""防★""速★",生命高、攻击猛、移速快,打起来完全不是一个体验。
这个系统官服有,但很多引擎要另外买插件。今天说一个不依赖特殊插件、用普通变量就能实现的方案,用翎风引擎脚本写出来,代码全开源,直接抄。
一、整体思路
先说原理,理解了思路再看代码才不会懵。
刷出一只词缀怪物,要做三件事:
1. 随机选词缀——从预设词缀池里抓几个不重复的出来
2. 叠加属性——每个词缀对应不同的属性加成,加在一起作用到怪物身上
3. 改名字显示——把词缀前缀拼到怪物名称前面,让玩家看得见
整个流程,全靠脚本变量驱动,不改数据库,不装插件,干净利落。
二、词缀池和属性字典怎么定义
在 QM 文件的 @StartUP 里初始化:
- [@StartUP]
- #IF
- #ACT
- ; 定义词缀名称数组
- MOV L$怪物随机词缀数组 [新神,旧神,防,力,命,速,炼,火,冰,电,毒,吸,狂,盾,怒,物,魔,反,次]
- GetListVarCount L$怪物随机词缀数组 N$怪物词缀最大数量
- MOV N$怪物词缀范围取值最大数量 <$STR(N$怪物词缀最大数量)>
- DEC N$怪物词缀范围取值最大数量 1
- ; 定义每个词缀对应的属性加成:[生命,攻击,防御,魔御,攻速,移速]
- MOV D$怪物词缀参数集合 {}
- MOV D$怪物词缀参数集合[新神] [10,10,10,10,5,5]
- MOV D$怪物词缀参数集合[旧神] [8,8,8,8,3,3]
- MOV D$怪物词缀参数集合[防] [0,0,30,30,0,0]
- MOV D$怪物词缀参数集合[力] [0,50,0,0,0,0]
- MOV D$怪物词缀参数集合[命] [30,0,0,0,0,0]
- MOV D$怪物词缀参数集合[速] [0,0,0,0,0,8]
- MOV D$怪物词缀参数集合[狂] [0,0,0,0,8,0]
- ; 其余词缀(炼/火/冰/电/毒/吸/盾/怒/物/魔/反/次)留作扩展,默认全0
复制代码
核心数据结构:
- L$ 开头是列表变量,存词缀名称
- D$ 开头是字典变量,存每个词缀对应的六维属性数组
这里有个细节——攻速和移速用负数,因为引擎底层逻辑是"负数=加速",下面会用到。
三、随机取词缀的核心代码
刷怪时调用的脚本段:
- [@刷新随机词缀怪物]
- #IF
- #ACT
- ; 随机取1~8个词缀
- MOVR N$随机怪物词缀数量 1 8
- GetMultiRandomNumber 0 <$STR(N$怪物词缀范围取值最大数量)> <$STR(N$随机怪物词缀数量)> N1 M1
- ; 初始化所有加成变量
- MOV N$词缀怪物生命加成 0
- MOV N$词缀怪物攻击加成 0
- MOV N$词缀怪物防御加成 0
- MOV N$词缀怪物魔御加成 0
- MOV N$词缀怪物攻速加成 0
- MOV N$词缀怪物移速加成 0
- MOV S$怪物名称前缀
- INC N$随机怪物词缀数量 1
- ; 循环累加每个词缀的属性
- WHILE N$循环标识 < <$STR(N$随机怪物词缀数量)>
- MOV L$当前条目词缀加成数组 <$STR(D$怪物词缀参数集合[<$STR(L$怪物随机词缀数组[<$STR(N<$STR(N$循环标识)>)>])>])>
- INC N$词缀怪物生命加成 <$STR(L$当前条目词缀加成数组[0])>
- INC N$词缀怪物攻击加成 <$STR(L$当前条目词缀加成数组[1])>
- INC N$词缀怪物防御加成 <$STR(L$当前条目词缀加成数组[2])>
- INC N$词缀怪物魔御加成 <$STR(L$当前条目词缀加成数组[3])>
- INC N$词缀怪物攻速加成 <$STR(L$当前条目词缀加成数组[4])>
- INC N$词缀怪物移速加成 <$STR(L$当前条目词缀加成数组[5])>
- INC S$怪物名称前缀 <$STR(L$怪物随机词缀数组[<$STR(N<$STR(N$循环标识)>)>])>★
- INC N$循环标识 1
- ENDWHILE
- GOTO @_@词缀怪物修改属性
复制代码
这里用到了 GetMultiRandomNumber,翎风引擎内置的多值随机函数,一次取多个不重复的随机数,比自己写循环取重效率高很多。
四、属性修改的核心指令
属性修改集中在 @_@词缀怪物修改属性 段,用 CHANGEMONABILITY 逐项叠加:
- [@_@词缀怪物修改属性]
- ; 生命加成(编号0=最大生命,1=当前生命)
- #IF
- LARGE N$词缀怪物生命加成 0
- #ACT
- CHANGEMONABILITY <$RegMonMap> <$RegMonName> 1 + <$STR(N$词缀怪物生命加成)> 1 <$RegMonX> <$RegMonY> 1
- CHANGEMONABILITY <$RegMonMap> <$RegMonName> 0 + <$STR(N$词缀怪物生命加成)> 1 <$RegMonX> <$RegMonY> 1
- ; 攻击加成(编号8=最小攻击,9=最大攻击)
- #IF
- LARGE N$词缀怪物攻击加成 0
- #ACT
- CHANGEMONABILITY <$RegMonMap> <$RegMonName> 8 + <$STR(N$词缀怪物攻击加成)> 1 <$RegMonX> <$RegMonY> 1
- CHANGEMONABILITY <$RegMonMap> <$RegMonName> 9 + <$STR(N$词缀怪物攻击加成)> 1 <$RegMonX> <$RegMonY> 1
- ; 攻速和移速——注意是负值
- #IF
- LARGE N$词缀怪物攻速加成 0
- #ACT
- CHANGEMONABILITY <$RegMonMap> <$RegMonName> 14 + -<$STR(N$词缀怪物攻速加成)> 1 <$RegMonX> <$RegMonY> 1
复制代码
最后一步——必须调 RECALCMONABILITY 重新计算属性,否则怪物属性不生效!然后用 CHANGEMAPMONNAMEEX 把词缀前缀加到名字前面:
- #IF
- #ACT
- RECALCMONABILITY <$RegMonMap> <$RegMonName> <$RegMonX> <$RegMonY> 1
- CHANGEMAPMONNAMEEX <$RegMonMap> <$RegMonX> <$RegMonY> 1 <$RegMonName> <$STR(S$怪物名称前缀)><$RegMonName>
复制代码
五、MONGEN.txt 怎么配置
在地图里刷词缀怪,只需要在 MONGEN.txt 末尾加上触发标签:
- 1 232 445 测试怪物 5 10 1 0 250 0 0 0 0 0 @刷新随机词缀怪物
复制代码
最后那个 @刷新随机词缀怪物 就是刷怪成功后自动调用的脚本标签,每次刷出怪物都会走一遍词缀随机逻辑。
六、实战注意点
坑一:攻速移速用负值
这个不熟悉的人特别容易踩,攻速和移速的引擎逻辑是"正值=减速,负值=加速",如果直接填正数,词缀怪物反而变慢了。
坑二:改完属性一定要 RECALCMONABILITY
很多人调完 CHANGEMONABILITY 发现属性没变化,十有八九是漏了这条指令。
坑三:词缀数量不要贪多
测试阶段建议用固定3~5个词缀,8个词缀全上来如果数值没调好,怪物可能一刀秒人,完全没游戏体验。
七、怎么扩展
当前代码里 炼/火/冰/电/毒/吸/盾/怒/物/魔/反/次 这些词缀默认属性全是0,你可以给它们填上对应数值,比如:
- 火 → 配合后续脚本实现"灼烧掉血"
- 毒 → 配合"中毒持续扣血"debuff
- 吸 → 实现"吸血"效果,打这个怪会按比例回血
配合 QF 里的 OnAttack 触发写额外逻辑,整个词缀系统就能玩出花来。
整体这套方案不依赖任何收费插件,纯脚本实现,翎风引擎直接能用。词缀系统做好之后,地图的挑战感和重复可玩性会提升一大截。如果你在做传奇单机版,不妨先从3个词缀开始调数值,慢慢加到全套。
有问题欢迎评论区聊。 |
二百论坛
免责声明:
1、本论坛资源均来源于网络
2、如下载使用,自行杀毒
|