传奇服务端中的技能效果、使用条件、消耗设定及特殊行为,均由脚本文件控制。主流引擎(如Hero、GOM)通过 QFunction-0.txt、QManage.txt 和 MagicDamage.txt 等文本文件定义技能逻辑。理解其结构与触发规则,是自定义技能、修复异常或扩展玩法的基础。
技能脚本的核心文件定位
QFunction-0.txt:主事件响应文件,处理角色登录、升级、死亡、使用技能等全局事件。
MagicDamage.txt:定义技能伤害计算、目标判定、附加状态(如中毒、麻痹)。
!AdminCmd.txt 或 UserCmd.txt:部分版本将技能触发绑定到自定义命令。
MapQuest_def 目录:地图专属技能或区域特效脚本。
所有脚本均为纯文本格式,使用 Notepad++ 编辑可避免编码错误。修改后需重启 M2Server 才生效。
技能触发的基本语法结构
以火墙术(技能编号 13)为例,在 QFunction-0.txt 中常见写法:
[@MagicalTime_13]
IF
CheckLevel 7
ACT
SendMsg 0 "你释放了火墙术!"
CreateFireWall 3 10
[@MagicalTime_13] 表示当角色使用技能ID为13的技能时触发;
#IF 后为判断条件,如等级、背包物品、在线时间等;
#ACT 后为执行动作,如发送消息、创建火墙、扣除MP、召唤怪物等。
若未定义 [@MagicalTime_X],则技能仅执行默认伤害逻辑(由 MagicDamage.txt 控制)。
常用判断指令(#IF 区块)
CheckLevel N:角色等级 ≥ N;
CheckHumLevel N:目标玩家等级 ≥ N;
CheckItem 物品名 数量:背包中存在指定物品;
CheckMana N:当前MP ≥ N;
CheckGuildName 行会名:仅限特定行会成员使用;
Random N:N% 概率触发(用于暴击、特效);
InMap MapName:当前位于某地图。
多个条件可用 #ELSEIF 或嵌套 #IF 实现复杂逻辑。
常用执行动作(#ACT 区块)
GiveExp N:给予经验;
ChangeMode N:切换攻击模式(和平、全体等);
RecallMob 怪物名 数量 时间:召唤怪物;
Set [变量名] N:设置自定义变量,用于后续判断;
DelayGoto @标签 N:延迟N毫秒后跳转至指定标签;
SendKey X Y:模拟按键(用于自动施法联动);
MakeItem 物品名:生成物品到背包或地面。
技能伤害与状态控制(MagicDamage.txt)
该文件按技能ID分段,例如:
[13]
Type=1
Damage=Leve2+Dexterity1.5
HitRate=80
AddBuff=FireWall,10000
Type=1 表示魔法伤害;
Damage 支持公式,可引用 Level(等级)、Dexterity(敏捷)、Magic(智力)等属性;
AddBuff 添加持续状态,单位为毫秒;
Target=1 表示单体目标,Target=2 为范围。
若此处未定义,则技能无伤害,仅执行 QFunction 中的动作。
自定义技能开发流程
在 !Abuse.txt 或 Magic.ini 中注册新技能ID及名称;
在 MagicDamage.txt 添加伤害/状态逻辑;
在 QFunction-0.txt 编写 [@MagicalTime_新ID] 触发块;
测试技能是否正常消耗MP、冷却、触发特效;
调整公式或条件直至符合预期。
常见问题排查
技能无反应:检查技能ID是否在 Magic.ini 中启用,且 QFunction 标签拼写正确;
MP不扣除:确认 MagicDamage.txt 中有 ValidMP=1 或脚本内含 CheckMana + DelMana 指令;
特效不显示:客户端需包含对应技能动画资源(Effect.wil),否则仅服务端生效;
多人使用冲突:避免在脚本中使用全局变量,应改用角色专属变量(如 HUMAN(HP))。
掌握上述结构与指令组合,即可实现从基础技能调整到复杂连招系统的完整控制。脚本逻辑本质是“条件→动作”的线性响应,重点在于准确匹配事件标签与合理使用内置函数。
传奇技能脚本详解:掌握QFunction与触发逻辑核心机制
来源:
作者:
点击:

