刺杀是传奇战士职业的核心近身攻击技能,依靠特定站位(斜角或纵向两格)打出双倍伤害。很多版本默认刺杀是硬编码在引擎里的,但要做特殊版本、刺杀特效、刺杀触发自定义逻辑(比如刺杀时吸血、刺杀暴击、刺杀触发麻痹),就必须用脚本接管刺杀的触发判定。下面把GOM引擎里刺杀触发的几种实现方式、完整代码、文件路径和常见坑一次讲清。
一、先搞清楚刺杀在引擎里的位置
GOM引擎的刺杀伤害计算在M2服务端内部完成,常规配置通过MirServer\Mir200\M2Server.ini或M2控制面板的"选项-参数设置-战斗"里的参数控制,比如:
[Battle]
WarriorSkillPower=1;战士技能威力倍数
AssassinateDamageRate=200;刺杀伤害倍数,200=2倍
AssassinateRange=2;刺杀触发距离(格)
这些参数只能调数值,不能挂自定义逻辑。要写脚本触发,得走技能事件和攻击事件两条路。
二、方式一:通过技能释放事件拦截(最常用)
GOM的QuestDiary系统提供了技能释放相关的触发标签。刺杀的技能ID在不同版本里是25或26(刺杀剑术),具体看你的StdSkill表。先用下面代码在人物释放刺杀时做拦截:
文件路径:MirServer\Mir200\Envir\QuestDiary\QFunction-0.txt
或自建:MirServer\Mir200\Envir\QuestDiary\刺杀触发.txt
[@Spell];释放技能时触发
#IF
CheckSkill25>0;25=刺杀剑术,检查当前释放的是不是刺杀
CheckMagicName刺杀剑术;双保险,用技能名再校验一次
#ACT
SENDMSG6刺杀剑术已释放!
;这里写你的自定义逻辑,比如加Buff、扣蓝、触发特效
AddState71000;举例:给自己加攻击加速状态
#ELSEACT
SENDMSG7不是刺杀技能,不处理
说明:[@Spell]是GOM里"人物释放魔法/技能"的全局事件,任何技能都会进这里,所以用CheckSkill+CheckMagicName双重判断锁定刺杀。如果你的版本没有[@Spell],试试[@UseSkill]或[@MagicSpell],不同GOM小版本标签名有差异。
三、方式二:攻击命中触发(判定刺杀伤害)
方式一只能拦"放技能",但刺杀真正的特点是"站位对才出双倍"。要判定这一次攻击是不是刺杀命中,得在攻击事件里判断。GOM提供[@Attack]或[@Hit]系列标签:
[@Attack];人物攻击时触发
#IF
CheckJob0;0=战士
CheckSkill25>0;学了刺杀
CheckVarH.AI=0;普通攻击(非技能连招状态)
#ACT
;判断目标与自己的站位关系(斜角/两格纵向)
;GOM内置变量:$ATTACKDIR$(攻击方向)、$TARGET.X$$TARGET.Y$
#IF
CheckTargetInLine2;自定义扩展:目标在纵向2格线
#ACT
SENDMSG6刺杀命中!造成双倍伤害
;触发自定义效果
POWERRATE2201;本次攻击后1秒内攻击翻倍(模拟暴击)
#ELSEACT
SENDMSG7站位不对,未触发刺杀
注意:CheckTargetInLine不是所有GOM版本都自带,如果引擎不支持,需要用坐标差值自己算。用人物的$X$$Y$和目标$TARGET.X$$TARGET.Y$做判断,横纵坐标差的绝对值满足"(dx=1且dy=0)或(dx=0且dy=1)"即斜角/直线一格判定,刺杀两格则是dx+dy
=2且其中一项为0。
四、方式三:纯配置文件改刺杀参数(不改脚本)
如果只是想调刺杀伤害和概率,不动逻辑,改M2Server.ini最省事:
[Magic]
;刺杀剑术相关
MagicID=25
MagicName=刺杀剑术
DamageRate=200;伤害倍数
SuccessRate=80;触发成功率(%)
Range=2;有效距离
或者通过GOM的Magic.db(DBC表)修改:
•打开MirServer\DB\Magic.db
•找到"刺杀剑术"行
•改DMG(基础伤害)、DmgUp(每级加成)、Range(范围)、TargetType(目标类型)
改完重启M2生效。这种改法稳定,适合复古版本。
五、完整实战代码:刺杀触发吸血+暴击
下面是一段可直接用的完整脚本,实现"刺杀命中时20%概率暴击+吸血30%":
;====文件:Envir\QuestDiary\刺杀系统.txt====
[@Attack]
#IF
CheckJob0
CheckSkill25>0
CheckTargetInLine2
Random20;20%概率
#ACT
POWERRATE3000;3倍攻击(暴击)
SENDMSG6刺杀暴击!伤害大幅提升
#ELSEACT
;不暴击,走普通刺杀逻辑
[@Attack]
#IF
CheckJob0
CheckSkill25>0
#ACT
;吸血:按造成伤害的百分比回血
;正经做法是用LifeUp系列命令
LifeUp50;吸血回50血(示例值)
说明:吸血的真百分比需要用GOM的扩展插件(如"伤害回血"模块),原生命令只能固定回数值。如果没有插件,用LifeUp固定值是最稳的替代。
六、刺杀触发自定义状态(麻痹/冰冻)
很多超变版本要"刺杀有概率麻痹",代码框架:
[@Attack]
#IF
CheckJob0
CheckSkill25>0
CheckTargetInLine2
Random15;15%概率
#ACT
AddStateEx$TARGET.NAME$3500;给目标加麻痹状态(3=麻痹,5秒)
SENDMSG6刺杀触发麻痹!目标无法移动
BROADCASTMSG刺杀麻痹!{s}被定身5秒
AddStateEx的参数格式:(目标状态类型持续时间秒属性保留位)。状态类型3是麻痹,不同引擎可能不同,以你的StateDef表为准。
七、常见问题排查
1.脚本不触发:确认标签名,GOM有的版本是[@OnAttack]而非[@Attack],进M2控制台看"脚本事件列表"。
2.刺杀SkillID不对:用GM命令@技能刺杀剑术查ID,或在Magic.db里看行号。
3.站位判定失效:CheckTargetInLine不存在的版本,改用坐标变量手动算差值。
4.双倍伤害不叠加:引擎自带的刺杀2倍+脚本POWERRATE可能取最大值而非相乘,测试时先把引擎AssassinateDamageRate设为100。
5.Random概率不生效:Random命令必须放在#IF段,且要在#ACT之前,顺序错了概率判定不执行。
6.吸血没反应:原生GOM不支持攻击百分比吸血,需装"伤害回血"插件或用LifeUp固定值。
7.重启后失效:改完QuestDiary的txt必须重启M2或点"重新加载脚本",改M2Server.ini也必须重启。
八、刺杀触发与英雄(H.)的配合
合击版本里英雄也会刺杀,英雄的变量和命令都要加H.前缀:
[@H.Attack];英雄攻击事件,注意带点
#IF
H.CheckJob0
H.CheckSkill25>0
#ACT
H.POWERRATE2500
SENDMSG6英雄刺杀触发2.5倍
英雄的[@Spell]对应[@H.Spell],事件标签加H.前缀是GOM的通用规则,写反了(在主号事件里写H.命令)会导致无反应。
九、版本兼容性提醒
•GOM3.0以下:多用[@Attack],技能判断靠CheckMagicName
•GOM3.0+:支持[@Spell]、SetAttackPowerRate、AddStateEx
•GEE引擎:标签和命令名不同,本文代码不能直接照搬
•HERO引擎:刺杀判定走OnAttack事件,参数格式有差异
改之前先看M2控制台的"引擎版本号",对着版本号查命令集,别盲目照抄。
十、调试技巧
1.在脚本关键位置加SENDMSG6打印变量值,确认流程走到哪一步。
2.用GM命令@mob刷一个假人靶子,反复测试站位判定。
3.M2日志(MirServer\Mir200\Log\)里搜脚本报错关键字。
4.先用最简单的"释放刺杀就弹消息"验证事件是否触发,再逐步加站位、概率、状态逻辑。
5.所有坐标类变量打印出来看真实值,再写判断条件。
总结
GOM引擎实现刺杀触发脚本就三条路:[@Spell]拦技能释放、[@Attack]拦攻击命中做站位判定、改M2Server.ini/Magic.db调参数。做特殊效果(吸血、暴击、麻痹)走前两条写脚本,只调数值改配置文件最稳。核心是锁定刺杀的SkillID、用CheckSkill+CheckMagicName双重校验、站位判定用坐标差值或引擎内置命令、英雄命令加H.前缀。改完记得重启M2,一步步加SENDMSG调试,别一口气把所有逻辑堆上去。
gom_assassination_trigger_script.md
一、先搞清楚刺杀在引擎里的位置
GOM引擎的刺杀伤害计算在M2服务端内部完成,常规配置通过MirServer\Mir200\M2Server.ini或M2控制面板的"选项-参数设置-战斗"里的参数控制,比如:
[Battle]
WarriorSkillPower=1;战士技能威力倍数
AssassinateDamageRate=200;刺杀伤害倍数,200=2倍
AssassinateRange=2;刺杀触发距离(格)
这些参数只能调数值,不能挂自定义逻辑。要写脚本触发,得走技能事件和攻击事件两条路。
二、方式一:通过技能释放事件拦截(最常用)
GOM的QuestDiary系统提供了技能释放相关的触发标签。刺杀的技能ID在不同版本里是25或26(刺杀剑术),具体看你的StdSkill表。先用下面代码在人物释放刺杀时做拦截:
文件路径:MirServer\Mir200\Envir\QuestDiary\QFunction-0.txt
或自建:MirServer\Mir200\Envir\QuestDiary\刺杀触发.txt
[@Spell];释放技能时触发
#IF
CheckSkill25>0;25=刺杀剑术,检查当前释放的是不是刺杀
CheckMagicName刺杀剑术;双保险,用技能名再校验一次
#ACT
SENDMSG6刺杀剑术已释放!
;这里写你的自定义逻辑,比如加Buff、扣蓝、触发特效
AddState71000;举例:给自己加攻击加速状态
#ELSEACT
SENDMSG7不是刺杀技能,不处理
说明:[@Spell]是GOM里"人物释放魔法/技能"的全局事件,任何技能都会进这里,所以用CheckSkill+CheckMagicName双重判断锁定刺杀。如果你的版本没有[@Spell],试试[@UseSkill]或[@MagicSpell],不同GOM小版本标签名有差异。
三、方式二:攻击命中触发(判定刺杀伤害)
方式一只能拦"放技能",但刺杀真正的特点是"站位对才出双倍"。要判定这一次攻击是不是刺杀命中,得在攻击事件里判断。GOM提供[@Attack]或[@Hit]系列标签:
[@Attack];人物攻击时触发
#IF
CheckJob0;0=战士
CheckSkill25>0;学了刺杀
CheckVarH.AI=0;普通攻击(非技能连招状态)
#ACT
;判断目标与自己的站位关系(斜角/两格纵向)
;GOM内置变量:$ATTACKDIR$(攻击方向)、$TARGET.X$$TARGET.Y$
#IF
CheckTargetInLine2;自定义扩展:目标在纵向2格线
#ACT
SENDMSG6刺杀命中!造成双倍伤害
;触发自定义效果
POWERRATE2201;本次攻击后1秒内攻击翻倍(模拟暴击)
#ELSEACT
SENDMSG7站位不对,未触发刺杀
注意:CheckTargetInLine不是所有GOM版本都自带,如果引擎不支持,需要用坐标差值自己算。用人物的$X$$Y$和目标$TARGET.X$$TARGET.Y$做判断,横纵坐标差的绝对值满足"(dx=1且dy=0)或(dx=0且dy=1)"即斜角/直线一格判定,刺杀两格则是dx+dy
=2且其中一项为0。
四、方式三:纯配置文件改刺杀参数(不改脚本)
如果只是想调刺杀伤害和概率,不动逻辑,改M2Server.ini最省事:
[Magic]
;刺杀剑术相关
MagicID=25
MagicName=刺杀剑术
DamageRate=200;伤害倍数
SuccessRate=80;触发成功率(%)
Range=2;有效距离
或者通过GOM的Magic.db(DBC表)修改:
•打开MirServer\DB\Magic.db
•找到"刺杀剑术"行
•改DMG(基础伤害)、DmgUp(每级加成)、Range(范围)、TargetType(目标类型)
改完重启M2生效。这种改法稳定,适合复古版本。
五、完整实战代码:刺杀触发吸血+暴击
下面是一段可直接用的完整脚本,实现"刺杀命中时20%概率暴击+吸血30%":
;====文件:Envir\QuestDiary\刺杀系统.txt====
[@Attack]
#IF
CheckJob0
CheckSkill25>0
CheckTargetInLine2
Random20;20%概率
#ACT
POWERRATE3000;3倍攻击(暴击)
SENDMSG6刺杀暴击!伤害大幅提升
#ELSEACT
;不暴击,走普通刺杀逻辑
[@Attack]
#IF
CheckJob0
CheckSkill25>0
#ACT
;吸血:按造成伤害的百分比回血
;正经做法是用LifeUp系列命令
LifeUp50;吸血回50血(示例值)
说明:吸血的真百分比需要用GOM的扩展插件(如"伤害回血"模块),原生命令只能固定回数值。如果没有插件,用LifeUp固定值是最稳的替代。
六、刺杀触发自定义状态(麻痹/冰冻)
很多超变版本要"刺杀有概率麻痹",代码框架:
[@Attack]
#IF
CheckJob0
CheckSkill25>0
CheckTargetInLine2
Random15;15%概率
#ACT
AddStateEx$TARGET.NAME$3500;给目标加麻痹状态(3=麻痹,5秒)
SENDMSG6刺杀触发麻痹!目标无法移动
BROADCASTMSG刺杀麻痹!{s}被定身5秒
AddStateEx的参数格式:(目标状态类型持续时间秒属性保留位)。状态类型3是麻痹,不同引擎可能不同,以你的StateDef表为准。
七、常见问题排查
1.脚本不触发:确认标签名,GOM有的版本是[@OnAttack]而非[@Attack],进M2控制台看"脚本事件列表"。
2.刺杀SkillID不对:用GM命令@技能刺杀剑术查ID,或在Magic.db里看行号。
3.站位判定失效:CheckTargetInLine不存在的版本,改用坐标变量手动算差值。
4.双倍伤害不叠加:引擎自带的刺杀2倍+脚本POWERRATE可能取最大值而非相乘,测试时先把引擎AssassinateDamageRate设为100。
5.Random概率不生效:Random命令必须放在#IF段,且要在#ACT之前,顺序错了概率判定不执行。
6.吸血没反应:原生GOM不支持攻击百分比吸血,需装"伤害回血"插件或用LifeUp固定值。
7.重启后失效:改完QuestDiary的txt必须重启M2或点"重新加载脚本",改M2Server.ini也必须重启。
八、刺杀触发与英雄(H.)的配合
合击版本里英雄也会刺杀,英雄的变量和命令都要加H.前缀:
[@H.Attack];英雄攻击事件,注意带点
#IF
H.CheckJob0
H.CheckSkill25>0
#ACT
H.POWERRATE2500
SENDMSG6英雄刺杀触发2.5倍
英雄的[@Spell]对应[@H.Spell],事件标签加H.前缀是GOM的通用规则,写反了(在主号事件里写H.命令)会导致无反应。
九、版本兼容性提醒
•GOM3.0以下:多用[@Attack],技能判断靠CheckMagicName
•GOM3.0+:支持[@Spell]、SetAttackPowerRate、AddStateEx
•GEE引擎:标签和命令名不同,本文代码不能直接照搬
•HERO引擎:刺杀判定走OnAttack事件,参数格式有差异
改之前先看M2控制台的"引擎版本号",对着版本号查命令集,别盲目照抄。
十、调试技巧
1.在脚本关键位置加SENDMSG6打印变量值,确认流程走到哪一步。
2.用GM命令@mob刷一个假人靶子,反复测试站位判定。
3.M2日志(MirServer\Mir200\Log\)里搜脚本报错关键字。
4.先用最简单的"释放刺杀就弹消息"验证事件是否触发,再逐步加站位、概率、状态逻辑。
5.所有坐标类变量打印出来看真实值,再写判断条件。
总结
GOM引擎实现刺杀触发脚本就三条路:[@Spell]拦技能释放、[@Attack]拦攻击命中做站位判定、改M2Server.ini/Magic.db调参数。做特殊效果(吸血、暴击、麻痹)走前两条写脚本,只调数值改配置文件最稳。核心是锁定刺杀的SkillID、用CheckSkill+CheckMagicName双重校验、站位判定用坐标差值或引擎内置命令、英雄命令加H.前缀。改完记得重启M2,一步步加SENDMSG调试,别一口气把所有逻辑堆上去。
gom_assassination_trigger_script.md

