在传奇版本中为特定技能附加麻痹效果,需同时修改技能数据库、状态控制脚本及怪物属性响应逻辑。该过程不依赖外部插件,通过原生引擎机制即可完成,适用于GOM、HERO等主流引擎。
一、确认技能数据库中的基础参数
所有技能定义存储于MirServerMud2DB目录下的Magic.DB文件。使用DBC2000工具打开该数据库,定位目标技能(如“雷电术”或“火墙”)。关键字段包括:
MagicID:技能唯一编号,用于脚本调用。
SpellPower:决定伤害与特效强度。
MPCost:魔法消耗,影响释放频率。
DelayBase/DelayAdd:冷却时间,避免麻痹被滥用。
若技能尚未存在,需先新增一条记录,确保Name字段与客户端显示名称一致。保存后重启M2Server使变更生效。
二、在QFunction.txt中绑定麻痹触发逻辑
麻痹效果由服务端脚本实时控制。打开MirServerMir200EnvirQuestDiaryQFunction.txt,在[@StdModeFuncXX]段落下插入代码(XX为技能的StdMode值,可在Magic.DB中查到)。
例如,为雷电术(StdMode=14)添加10%概率触发3秒麻痹:
[@StdModeFunc14]
IF
Random 10
ACT
SetPkPoint TargetName +1
SendMsg 7 被雷电麻痹!
CALCPOBJSTATE TargetName 18 3000
其中CALCPOBJSTATE是核心命令:
第一个参数为目标对象(TargetName表示被攻击者)。
第二个参数18代表“麻痹”状态(不同引擎编号可能不同,需查阅状态码表)。
第三个参数3000表示持续时间(单位毫秒)。
三、验证状态码与引擎兼容性
并非所有引擎都使用18作为麻痹状态码。部分版本中:
状态码16 = 冰冻
状态码17 = 沉默
状态码18 = 麻痹
状态码19 = 致盲
若不确定,可临时将数值改为16测试是否出现冰冻效果。也可在MapQuest_defSabukWall.txt等系统脚本中搜索CALCPOBJSTATE,查看官方技能如何调用状态。
四、调整怪物对麻痹的响应行为
默认情况下,人形怪和BOSS受麻痹影响会停止移动与攻击,但部分特殊怪物(如召唤兽、机关)可能忽略状态。需检查Monster.DB中对应怪物的AI字段:
AI=0:普通怪物,完全受控于状态效果。
AI=5 或更高:具备抗性,需额外脚本强制限制。
若需强制所有怪物生效,在[@StdModeFuncXX]中追加移动锁定命令:
ACT
...
MobMoveOff $TargetName
该命令立即禁止目标移动,配合CALCPOBJSTATE可确保视觉与行为同步。
五、客户端资源匹配
麻痹生效时,客户端需播放对应动画(如角色定身、头顶图标)。确保Mir200ShareEffect目录包含paralysis.wil或类似资源文件。若缺失,玩家仅看到文字提示而无视觉反馈,影响体验。
六、测试与调试
启动服务端后,创建角色学习目标技能,攻击NPC观察:
是否按概率触发提示文字。
目标是否停止行动且无法使用技能。
麻痹结束后是否恢复正常。
若无效,检查M2Server日志是否有脚本语法错误;若仅部分怪物无效,核查其AI类型及数据库配置。通过逐步排除,可精准实现指定技能的麻痹附加效果。

