脚本基础

攻击触发 @Attack / @UnderAttack

汇总 AttackTrigger 总开关、攻击与目标信息变量、通用目标变量、脚本示例与 T 操作符可用命令。

战斗过程中,引擎可以在攻击命中时执行功能脚本里的 [@Attack] 与 [@UnderAttack] 标签。这一页汇总这两个入口的开关、可用变量、脚本示例和 T 操作符可用命令。

触发条件

攻击触发总开关 !Setup.txt AttackTrigger=0 //默认0关闭,1开启
怪物总开关 DataTable_HeroDB.db monster 字段HitTrigger //默认0关闭,1开启,被玩家攻击是否触发@Attack、@UnderAttack字段
两个开关都要打开才会触发。!Setup.txt 里的 AttackTrigger 默认为 0,不开总开关时即使脚本里写了 [@Attack]、[@UnderAttack] 也不会执行;怪物一侧还要在 monster 表的 HitTrigger 字段(DBC/DBC2000 版本为 Envir\MonAttackTrigger.txt)里登记,详见 可被攻击触发的怪物 MonAttackTrigger。
  • [@Attack]:人或随从攻击列表指定怪物,会触发。
  • [@UnderAttack]:被人、随从或列表指定怪物攻击,会触发。

统计相关变量

变量说明
<$TARINFO_STATID>被攻击者 StatID。统计怪物表 StatId 在 1~10000 之间是个人伤害统计,10001~20000 是行会伤害统计;如果某个统计 24 小时内不活跃,会自动重置
<$STAT($TARINFO_STATID).DPS>带圆括号的动态变量支持内嵌固定变量,其中 $TARINFO_STATID 是固定变量,不支持类似 $STR(M1) 的动态变量
<$ATTACKFILTERMASK>显示 DataTable_HeroDB.db monster 字段 AttackFilterMask 当前攻击过滤掩码
<$ATTACKFILTERMASK8~31>显示 DataTable_HeroDB.db monster 字段 StatID 当前攻击过滤掩码
<$ATTACKFILTERMASK8>获取掩码第 8 位的值(0/1)

攻击者信息变量

变量说明
<$ATTINFO_NAME>攻击者名称
<$ATTINFO_FNAME>攻击者全名
<$ATTINFO_MNAME>攻击者主人名称不为空
<$ATTINFO_RACE>攻击者 Race,=1 是玩家,不等于 1 非玩家
<$ATTINFO_ISHERO>攻击者是否英雄
<$ATTINFO_SKILLID>攻击使用技能 ID
<$ATTINFO_HITTYPE>攻击类型(0 普通 / 1 暴击)
<$ATTINFO_DAMAGE>攻击触发本次伤害值
<$ATTINFO_ISHUMAN>攻击者是否人物(0 怪物 / 1 人物)

目标信息变量

变量说明
<$TARINFO_NAME>目标名称
<$TARINFO_FNAME>目标全名
<$TARINFO_RACE>目标 Race,=1 是人物,不等于 1 非人物
<$TARINFO_ISHERO>目标是否英雄(0/1)
<$TARINFO_ISSLAVE>目标是否随从(0/1)
<$TARINFO_CX>目标坐标 X 轴
<$TARINFO_CY>目标坐标 Y 轴
<$TARINFO_ISHUMAN>目标是否人物(0 怪物 / 1 人物)

通用目标变量

变量说明
<$T.CURRENTMAPDESC>目标地图描述
<$T.CURRENTMAP>目标所在地图
<$T.CURRENTX>目标 X 坐标
<$T.CURRENTY>目标 Y 坐标
<$T.USERNAME>目标玩家名
<$T.MONKILLER>目标所属怪物击杀者
<$T.KILLER>目标击杀者
<$T.LEVEL>目标等级
<$T.HP>目标当前 HP
<$T.MAXHP>目标最大 HP
<$T.MP>目标当前 MP
<$T.MAXMP>目标最大 MP
<$T.AC>目标防御下限
<$T.MAXAC>目标防御上限
<$T.MAC>目标魔御下限
<$T.MAXMAC>目标魔御上限
<$T.DC>目标攻击下限
<$T.MAXDC>目标攻击上限
<$T.MC>目标魔法下限
<$T.MAXMC>目标魔法上限
<$T.SC>目标道术下限
<$T.MAXSC>目标道术上限
<$T.HIT>目标命中率
<$T.SPD>目标速度

脚本示例

[@Attack] //人或随从攻击列表指定怪物,会触发
#IF
COMPVAL <$TARINFO_FNAME> = 蜈蚣
COMPVAL <$T.HP> > 50
#ACT
T.HUMANHP - 50
SENDMSG 7 目标【<$TARINFO_NAME>】血量<$T.HP>
#IF
COMPVAL <$ATTINFO_RACE> ! 1 //Race=1 是玩家,这里就是非玩家(即随从或怪物)
#ACT
SENDMSG 7 你的随从<$ATTINFO_NAME>正在攻击<$TARINFO_NAME>

[@UnderAttack] //被人或随从或列表指定怪物攻击,会触发
#IF
COMPVAL <$ATTINFO_FNAME> = 蜈蚣 //蜈蚣打随从或自己
#ACT
HUMANHP - 50 // 主人扣血
#IF
COMPVAL <$ATTINFO_MNAME> ! "" //攻击者主人名称不为空
#ACT
SENDMSG 7 【<$ATTINFO_MNAME>】的随从<$ATTINFO_NAME>正在攻击你
#ELSEIF
COMPVAL <$TARINFO_RACE> ! 1 //自己的随从
#ACT
SENDMSG 7 【<$ATTINFO_NAME>】正在攻击你的随从【<$TARINFO_NAME>】
#ELSEACT
SENDMSG 7 【<$ATTINFO_NAME>】正在攻击你

常用判断思路

  • [@Attack] 里先看 <$TARINFO_*>:判断“这次打到的是谁”,再配合 <$ATTINFO_*> 区分是玩家、随从还是怪物打出来的。
  • [@UnderAttack] 里先看 <$ATTINFO_*>:判断“是谁正在打你或打你的随从”,再配合 <$TARINFO_*> 区分目标是主人还是随从。
  • FNAME 适合按基础怪物名或基础对象名判断,NAME 适合按当前显示名判断(例如区分改名后的对象)。
  • 怪物一侧的完整用法可参考 怪物技能触发示例,那里用 [@UnderAttack] 按攻击者名字查表释放技能。

T 操作符可用命令

T.XXX 当 T 为非人时(人不限制),可用的【检测】命令如下:

CheckCastleWar CheckCodeList CheckKillPlayMon RANDOM MIN HOUR DAYTIME DAYOFWEEK CHECKLEVEL CHECKJOB CHECKGOLD CHECKBBCOUNT CHECKPKPOINT CHECKMONMAP CHECKHUM CHECKCONTAINSSTR CHECKCONTAINSTEXT CHECKPOSEDIR CHECKPOSELEVEL CHECKPOSEGENDER CHECKPOSEMARRY CHECKPOSEMASTER CHECKISMASTER CHECKLEVELEX HASGUILD ISONCASTLEWAR CHECKSLAVECOUNT CHECKSERVERNAME CHECKDC CHECKMC CHECKSC CHECKHP CHECKMP INSAFEZONE ISONMAP KILLBYHUM KILLBYMON

T.XXX 当 T 为非人时(人不限制),可用的【执行】命令如下:

BREAK PARAM1 PARAM2 PARAM3 PARAM4 MAPMOVE MAP PKPOINT EXCHANGEMAP ADDBATCH BATCHDELAY BATCHMOVE CHANGENAMECOLOR KILL HUMANHP HUMANMP MOBFIREBURN DELFIREBURN MAKEPOISON ABILITYADD

相关阅读