传奇服务端中的技能效果、使用条件、消耗设定及特殊行为,均由脚本文件控制。主流引擎(如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
CheckLevel7
ACT
SendMsg0"你释放了火墙术!"
CreateFireWall310
[@MagicalTime_13]表示当角色使用技能ID为13的技能时触发;
#IF后为判断条件,如等级、背包物品、在线时间等;
#ACT后为执行动作,如发送消息、创建火墙、扣除MP、召唤怪物等。
若未定义[@MagicalTime_X],则技能仅执行默认伤害逻辑(由MagicDamage.txt控制)。
常用判断指令(#IF区块)
CheckLevelN:角色等级≥N;
CheckHumLevelN:目标玩家等级≥N;
CheckItem物品名数量:背包中存在指定物品;
CheckManaN:当前MP≥N;
CheckGuildName行会名:仅限特定行会成员使用;
RandomN:N%概率触发(用于暴击、特效);
InMapMapName:当前位于某地图。
多个条件可用#ELSEIF或嵌套#IF实现复杂逻辑。
常用执行动作(#ACT区块)
GiveExpN:给予经验;
ChangeModeN:切换攻击模式(和平、全体等);
RecallMob怪物名数量时间:召唤怪物;
Set[变量名]N:设置自定义变量,用于后续判断;
DelayGoto@标签N:延迟N毫秒后跳转至指定标签;
SendKeyXY:模拟按键(用于自动施法联动);
MakeItem物品名:生成物品到背包或地面。
技能伤害与状态控制(MagicDamage.txt)
该文件按技能ID分段,例如:
[13]
Type=1
Damage=Leve2+Dexterity1.5
HitRate=80
AddBuff=FireWall10000
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-0.txt:主事件响应文件,处理角色登录、升级、死亡、使用技能等全局事件。
MagicDamage.txt:定义技能伤害计算、目标判定、附加状态(如中毒、麻痹)。
!AdminCmd.txt或UserCmd.txt:部分版本将技能触发绑定到自定义命令。
MapQuest_def目录:地图专属技能或区域特效脚本。
所有脚本均为纯文本格式,使用Notepad++编辑可避免编码错误。修改后需重启M2Server才生效。
技能触发的基本语法结构
以火墙术(技能编号13)为例,在QFunction-0.txt中常见写法:
[@MagicalTime_13]
IF
CheckLevel7
ACT
SendMsg0"你释放了火墙术!"
CreateFireWall310
[@MagicalTime_13]表示当角色使用技能ID为13的技能时触发;
#IF后为判断条件,如等级、背包物品、在线时间等;
#ACT后为执行动作,如发送消息、创建火墙、扣除MP、召唤怪物等。
若未定义[@MagicalTime_X],则技能仅执行默认伤害逻辑(由MagicDamage.txt控制)。
常用判断指令(#IF区块)
CheckLevelN:角色等级≥N;
CheckHumLevelN:目标玩家等级≥N;
CheckItem物品名数量:背包中存在指定物品;
CheckManaN:当前MP≥N;
CheckGuildName行会名:仅限特定行会成员使用;
RandomN:N%概率触发(用于暴击、特效);
InMapMapName:当前位于某地图。
多个条件可用#ELSEIF或嵌套#IF实现复杂逻辑。
常用执行动作(#ACT区块)
GiveExpN:给予经验;
ChangeModeN:切换攻击模式(和平、全体等);
RecallMob怪物名数量时间:召唤怪物;
Set[变量名]N:设置自定义变量,用于后续判断;
DelayGoto@标签N:延迟N毫秒后跳转至指定标签;
SendKeyXY:模拟按键(用于自动施法联动);
MakeItem物品名:生成物品到背包或地面。
技能伤害与状态控制(MagicDamage.txt)
该文件按技能ID分段,例如:
[13]
Type=1
Damage=Leve2+Dexterity1.5
HitRate=80
AddBuff=FireWall10000
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))。
掌握上述结构与指令组合,即可实现从基础技能调整到复杂连招系统的完整控制。脚本逻辑本质是“条件→动作”的线性响应,重点在于准确匹配事件标签与合理使用内置函数。

