我们主要说说creature_ai_scripts表的结构。至于你怎么去设计AI,就需要一些经验了!例如什么技能适用于该BOSS等~~~
然后我们来看这个表在魔兽世界私服的单机版中是怎么用的
=========================================
Event Types 事件类型
=========================================
每个事件类型都有其自己的具体参数
在生物脱离战斗之前,生物的事件不会重复触发,除非设置了事件重复标志位(EFLAG_REPEATABLE)[1](参见下面的事件标志位表)
但是.下面的事件是不会重复触发的:
EVENT_T_AGGRO, (进入战斗,只触发一次)
EVENT_T_DEATH, (生物死亡,只触发一次)
EVENT_T_SPAWNED, (生物重生或者刷新,只触发一次)
EVENT_T_EVADE (生物触发闪避状态,只触发一次)
翻译约定:
以下使用 C1 代替 参数一 (event_param1)
C2 代替 参数二 (event_param2)
C3 代替 参数三 (event_param3)
C4 代替 参数四 (event_param4)
以下涉及到时间的 单位全部为 毫秒 1秒=1000毫秒
没有列出参数的事件和动作 代表 没有参数或者没有使用该参数
ID 内部名称 参数使用 描述
-------------------------------------------------------------------------------------------------------------------
-------------------------
0 EVENT_T_TIMER 战斗状态定时触发
C1
C2 在C1 和 C2两数之间产生随机数作为第一次触发间隔 (意思是进入战斗后多长时间以后开始触发)
C3
C4 在C3 和 C4 之间产生随机数做为重复触发的间隔 (意思是第一次触发以后再次重复触发的间隔)
1 EVENT_T_TIMER_OOC 生物非战斗状态定时触发
C1
C2 在C1和C2两数之间产生随机数作为第一次触发间隔 (意思是脱离战斗后或者见到生物时..多长时间以后开始触发)
C3
C4在C3 和 C4 之间产生随机数做为重复触发的间隔 (意思是第一次触发以后再次重复触发的间隔)
2 EVENT_T_HP 根据生物的血量触发
HPMax% C1 最大血量百分比 例如:C1为 50 C2为 30 意思为 怪物血量在 30%到50%之间时候可重
复触发
HPMin% C2 最小血量百分比 意思是在这个血量百分比之间的时候触发
RepeatMin C3 重复触发的 最小时间间隔
RepeatMax C4 重复触发的 最大事件间隔 在C3 和 C4 之间产生随机数做为重复触发的间隔
3 EVENT_T_MANA 根据生物的魔法量触发
ManaMax% C1 最大魔法百分比 例如:C1为 50 C2为 30 意思为 怪物魔法在 30%到50%之间时候可重
复触发
ManaMin% C2 最小魔法百分比 意思是在这个魔法百分比之间的时候触发
RepeatMin C3 重复触发的 最小时间间隔
RepeatMax C4 重复触发的 最大事件间隔
4 EVENT_T_AGGRO 进入战斗以后触发(建立仇恨,本事件不会重复触发) 一般后面的动作可设置为喊话 例如:你竟然敢接
近我?
4个参数全部没有使用
5 EVENT_T_KILL 杀掉一个玩家以后触发
RepeatMin C1 重复触发的 最小时间间隔
RepeatMax C2 重复触发的 最大时间间隔
只使用了前2个参数
6 EVENT_T_DEATH 生物死亡以后触发(本事件不会重复触发)
4个参数全部没有使用
7 EVENT_T_EVADE 生物进入闪避状态触发(一般是玩家跑到BUG点了..或者玩家跑到水里了.该NPC无法攻击到玩家.产生闪
避状态)
4个参数全部没有使用
8 EVENT_T_SPELLHIT 被特定魔法击中触发
SpellID C1 如果设置了 C1这个参数,那么只有被这个魔法ID击中了才触发 (也就是说这个参数可以设置为0 表示
不指定魔法ID)
School C2 魔法的类型(类似暗影,冰霜,火焰等..) 只有在被这个类型的魔法击中后触发 (如果要设置为所有魔法
类型,可设置为-1)
以上2个参数可以都设置为0 ,表示被任意魔法击中触发
RepeatMin C3 重复触发的 最小时间间隔
RepeatMax C4 重复触发的 最大事件间隔
9 EVENT_T_RANGE 与目标距离触发,即如果最大威胁值玩家的距离介于 C1 和 C2 ,那么就可重复触发此事件
C1 最小距离 例如:可设置C1为0 C2为10 ,表示如果最大威胁值的玩家在与生物在这个距离内.则做出此事
件下的动作,例如近战攻击动作
C2 最大距离 例如:可设置C1为5 C2为30 ,表示如果最大威胁值的玩家在与生物在这个距离内.则做出此事
件下的动作,例如远程攻击动作
RepeatMin C3 重复触发的最小时间间隔
RepeatMax C4 重复触发的最大事件间隔
10 EVENT_T_OOC_LOS 玩家进入生物的允许范围内触发(生物进入战斗状态不会触发)
Hostile-or-Not C1 敌对参数 如果为0 那么不会对敌对阵营触发 否则设为1依据派系关系触发
MaxAllowedRangeC2 生物最大允许靠近范围
RepeatMin C3 重复触发的 最小时间间隔
RepeatMax C4 重复触发的 最大事件间隔
11 EVENT_T_SPAWNED 生物初生或重生触发(对设置生物范围运动类型有用)4个参数全部没有使用
12 EVENT_T_TARGET_HP 根据生物当前目标的血量触发
HPMax% C1 当前目标最大血量百分比
HPMin% C2 当前目标最小血量百分比 例如:生物当前目标的血量在C1:30%~C2:10%则触发此事件,后面可以接斩杀类
技能等或喊话,如:哈哈…你要死了
RepeatMin C3 重复触发的 最小时间间隔
RepeatMax C4 重复触发的 最大事件间隔
13 EVENT_T_TARGET_CASTING 当前目标施放一个法术的时候触发
RepeatMin C1 重复触发的 最小时间间隔
RepeatMax C2 重复触发的 最大时间间隔
C3 与 C4 没有使用 例如:生物当前的目标 施放一个治疗术,或者施放了一个寒冰箭.. 然后则触发此事件,后面接要做的
动作
14 EVENT_T_FRIENDLY_HP 根据半径范围内友方目标的HP量触发
HPDeficit C1 友方血量低于这个百分比时候触发
Radius C2 指定的半径范围
RepeatMin C3 重复触发的 最小时间间隔
RepeatMax C4 重复触发的 最大事件间隔
15 EVENT_T_FRIENDLY_IS_CC 半径范围内友方目标被控制时候触发
DispelType C1 指定的驱散被控制的类型(可能从SpellMechanic.dbc引用)
Radius C2 指定的半径范围
RepeatMin C3 重复触发的 最小时间间隔
RepeatMax C4 重复触发的 最大事件间隔
16 EVENT_T_MISSING_BUFF 半径范围内友方目标失去某光环、BUFF触发
SpellId C1 指定的魔法或者光环ID
Radius C2 指定的与生物半径范围
RepeatMin C3 重复触发的 最小时间间隔
RepeatMax C4 重复触发的 最大事件间隔
17 EVENT_T_SUMMONED_UNIT 指定的生物被召唤或者重生的时候触发
CreatureId C1 指定的生物ID 如果为0 即被任何生物被召唤或者重生都触发
RepeatMin C3 重复触发的 最小时间间隔
RepeatMax C4 重复触发的 最大事件间隔
18 EVENT_T_TARGET_MANA 根据生物当前目标的法力值触发
ManaMax% C1 当前目标最大法力值百分比
ManaMin% C2 当前目标最小法力值百分比
RepeatMin C3 重复触发的 最小时间间隔
RepeatMax C4 重复触发的 最大事件间隔
21 EVENT_T_REACHED_HOME 当生物逃避回它的“家”(重生刷新的位置)触发
22 EVENT_T_RECEIVE_EMOTE 生物接受到预设的表情动作触发(TextEmotes列举的)可以设置环境,若设置,大多数环境具有附
加值。(参见下面的ConditionType)
EmoteId C1 预设表情的ID
Condition C2
CondValue1 C3
CondValue2 C4
23 EVENT_T_BUFFED 当生物受到的伤害大于C1法术提供的伤害或者受到C2的同等伤害时触发.
SpellId C1 所受伤害的法术ID
AmmountInStack C2 所受的伤害量
RepeatMin C3 重复触发的 最小时间间隔
RepeatMax C4 重复触发的 最大时间间隔
24 EVENT_T_TARGET_BUFFED 当前目标生物受到的伤害大于C1法术提供的伤害或者受到C2的同等伤害时触发.
SpellId C1 所受伤害的法术ID
AmmountInStack C2 所受的伤害量
RepeatMin C3 重复触发的 最小时间间隔
RepeatMax C4 重复触发的 最大时间间隔
Action Types 动作类型
=========================================
翻译约定:
以下使用 C1 代替 参数一 (action1_param1)
C2 代替 参数二 (action1_param2)
C3 代替 参数三 (action1_param2)
以下涉及到时间的 单位全部为 毫秒 1秒=1000毫秒
没有列出参数的动作 代表 没有参数或者没有使用该参数
动作指的是 触发了 EVENT事件以后 采取的
动作
0 = ACTION_T_NONE: 什么都不做!
1 = ACTION_T_SAY: 显示textid定义的文本。如果有参数C2和C3将随机显示文本。entry可参照表eventai_texts的描述(比如大喊,耳语等)当然也可参照其他*_texts。但所有值必须为负。
C1 已定义的文本ENTRY
C2 已定义的文本ENTRY 可选
C3 已定义的文本ENTRY 可选
2 = ACTION_T_SET_FACTION: 变更生物的派系
C1 变更为派系FactionId 如果参数为0,生物恢复为默认派系。
3 = ACTION_T_MORPH_TO_ENTRY_OR_MODEL : 改变生物的模型。参数1为creature_template中的entry,即变成该npc的模型。参数2为模型id。若两个参数都为0,取消变形效果并恢复生物默认模型。
C1 npc的creature_template中的entry
C2 要变成的模型Id
4 = ACTION_T_SOUND: 激活后,该生物将播放指定ID的声音
C1 指定的SOUND ID 具体SOUND ID 可以在 DBC文件里找到
5 = ACTION_T_EMOTE: 激活后,该生物将执行制定的视觉表情
C1 指定的表情ID (EMOTE ID) 具体的ID可以在DBC文件里找到 例如:填入1 代表NPC鼓掌表情动作
6 = ACTION_T_RANDOM_SAY:【未使用】 说:随机说话 三个参数必须填写满.将会随机选择说话
C1 已定义的文本ENTRY 可以 填入-1 表示不使用这个参数
C2 已定义的文本ENTRY 可以 填入-1 表示不使用这个参数
C3 已定义的文本ENTRY 可以 填入-1 表示不使用这个参数
7 = ACTION_T_RANDOM_YELL: 【未使用】喊话:随机喊话 三个参数必须填写满.将会随机选择喊话
C1 已定义的文本ENTRY 可以 填入-1 表示不使用这个参数
C2 已定义的文本ENTRY 可以 填入-1 表示不使用这个参数
C3 已定义的文本ENTRY 可以 填入-1 表示不使用这个参数
8 = ACTION_T_RANDOM_TEXTEMOTE:【未使用】表情:随机文本表情 三个参数必须填写满.将会随机选择喊话
C1 已定义的文本ENTRY 可以 填入-1 表示不使用这个参数
C2 已定义的文本ENTRY 可以 填入-1 表示不使用这个参数
C3 已定义的文本ENTRY 可以 填入-1 表示不使用这个参数
9 = ACTION_T_RANDOM_SOUND: 类似于ACTION_T_SOUND动作,这个动作被激活,它会随机选择在一个声音播放。 这一行动需要所有三个参数都填,并随机选择一个执行。
C1 DBC文件里已定义的 SOUND ID 可以 填入-1 表示不使用这个参数
C2 DBC文件里已定义的 SOUND ID 可以 填入-1 表示不使用这个参数
C2 DBC文件里已定义的 SOUND ID 可以 填入-1 表示不使用这个参数
10 = ACTION_T_RANDOM_EMOTE: 类似于ACTION_T_EMOTE动作,这个动作被激活,会随机选择一个表情ID执行。 这一行动需要所有三个参数都填,这将随机选择一个执行。
C1 指定的表情ID (EMOTE ID) 具体的ID可以在DBC文件里找到 可以 填入-1 表示不使用这个参数
C2 指定的表情ID (EMOTE ID) 具体的ID可以在DBC文件里找到 可以 填入-1 表示不使用这个参数
C2 指定的表情ID (EMOTE ID) 具体的ID可以在DBC文件里找到 可以 填入-1 表示不使用这个参数
11 = ACTION_T_CAST: 对指定的目标施放指定的魔法
C1 指定的有效的魔法ID
C2 指定的有效目标类型 (可以参考下面定义的目标类型表)
C3 只能为0或者1 如果为1 将打断正在施放的任何魔法施放这个魔法, 如果为0 ,若生物正在施放另一个法术,那么这个动作将跳过
12 = ACTION_T_SUMMON: 召唤另一个生物攻击指定的目标 (被召唤生物位置为当前生物的位置)
C1 一个有效的生物ENTRY creature_template里已定义的生物 ENTRY
C2 攻击的目标类型ID(可以参见下面的目标类型表) 如果设置为0 ,那么他谁都不攻击
C3 被召唤的生物持续时间,以毫秒计算 如果为0 ,那么他将一直持续到战斗结束
13 = ACTION_T_THREAT_SINGLE_PCT: 增减仇恨列表内指定目标类型的威胁值百分比 (只对在威胁值列表内的玩家生效)
C1 修改的威胁值百分比 取值范围为 -100 到 100 如果为负数将减少指定目标的威胁值百分比,如果为正,反之
C2 指定的目标类型 (必须是有效的目标类型ID) (可以参见下面的目标类型表)
例如: 如果C1设置为 50% C2设置为 1 代表 减少生物当前目标的威胁值50%
14 = ACTION_T_THREAT_ALL_PCT: 增减仇恨列表内所有玩家的威胁值百分比
C1 修改的威胁值百分比 取值范围 为 -100 到100 ,如果使用-100,等同清除所有威胁值.使所有玩家的威胁值相等. 在仇恨列表内的玩家还是原来的玩家,只是仇恨变动了
15 = ACTION_T_QUEST_EVENT: 满足完成特殊任务的外部需求条件。完成单一玩家事件触发类任务(只能用于玩家,因此必须是正确的玩家目标)
C1 一个有效的任务ID 并且任务的 SpecialFlags 字段的值必须为2 或者 与2位或
C2 完成任务的目标类型ID (可参照下面的目标类型表)
16 = ACTION_T_CASTCREATUREGO: 该行动将调用CastedCreatureOrGO()播放功能的。 它可以给予玩家任务通过释放法术效果。
C1 有效的任务ENTRY
C2 用来模仿效果的魔法ID
C3 任务需要给予的目标类型 (可参照下面的目标类型表)
17 = ACTION_T_SET_UNIT_FIELD: 设置人物字段值,更多信息请参考人物数据表
C1 要更改的character表的字段索引
C2 要写入的新值
C3 要改变字段值的目标 (可参照下面的目标类型表)
18 = ACTION_T_SET_UNIT_FLAG: 改变生物的npc标志通过添加flags字段,具体参考character表,例如添加正确的标志,可是生物不可选或不可攻击。
C1 标志的位值 (多种标志可以位值加到一起)
C2 要改变标志的目标 (可参照下面的目标类型表)
19 = ACTION_T_REMOVE_UNIT_FLAG: 移除生物标志,例如,如果更改了正确的标志,可以使生物设置了不可攻击/ 不可选择 后变为正常状态
C1 要设置的标志 (多种标志可以位值加到一起)
C2 要改变标志的目标 (可参照下面的目标类型表)
20 = ACTION_T_AUTO_ATTACK: 控制生物自动近战攻击(指普通攻击)
C1 如果为0 ,生物将停止他的自动近战攻击, 为1 若生物没有停止攻击将继续他的自动攻击,如果之前停止了攻击,将持续攻击仇恨最高者
21 = ACTION_T_COMBAT_MOVEMENT: 控制生物是否始终向目标移动
C1 如果为0 ,生物将停止向他的目标移动当目标不在威胁范围内是并静止. 如果为非0 ,若生物之前没有停止向目标移动将继续移动,若之前停止了,将向他的最高威胁值目标移动
22 = ACTION_T_SET_PHASE: 设置生物到指定阶段 (可参照生物阶段的定义和例子)
C1 要设置的生物新阶段 必须为 0到31间的整数
23 = ACTION_T_INC_PHASE: 增减当前生物的阶段
C1 要增减阶段的数字 可使用负数,以减少目前的阶段 使用增减阶段行动后的阶段必须不小于0 且不大于31
24 = ACTION_T_EVADE: 生物立即退出战斗 清除仇恨列表返回刷新点,基本上,这个动作将重置整个战斗
25 = ACTION_T_FLEE: 生物尝试逃离战斗 (生物通过对自己施放逃跑魔法"Run Away"实现).例如:此事件定义了 血量百分比事件,0% - 20% 血量 可接这个逃跑动作
26 = ACTION_T_QUEST_EVENT_ALL: 该动作对仇恨列表内的所有玩家实行同于ACTION_T_QUEST_EVENT的效果,即完成所有玩家事件触发类任务。注意不包括不在仇恨列表的玩家。
C1 有效的任务ID 任务的 SpecialFlags 字段的值必须为2 或者 与2位或
27 = ACTION_T_CASTCREATUREGO_ALL: 该动作对仇恨列表内的所有玩家实行同于ACTION_T_CASTCREATUREO的效果,即给予玩家任务通过释放法术效果。注意不包括不在仇恨列表的玩家。
C1 有效的任务ENTRY
C2 用来模仿效果的魔法ID
28 = ACTION_T_REMOVEAURASFROMSPELL: 移除目标的所有法术光环
C1 目标类型定义 (可参照下面的目标类型表)
C2 要移除法术的ID
例如:C1设置为0 C2 设置为6408 此事件的类型为 4 那么,生物进入战斗将触发执行 移除 法术6408的动作
29 = ACTION_T_RANGED_MOVEMENT: 生物移动限制,该行动改变生物的移动类型通过设定生物与目标的距离和角度,注意参数都为0效果为近战
C1 生物与目标保持的距离
C2 生物的角度
例如:此次事件类型为11(刷新触发事件),可执行这个动作 C1为15 ,将保持与目标15码距离.
30 = ACTION_T_RANDOM_PHASE: 随机设置生物所处的事件阶段(从指定的3个阶段则取)
C1 一个可能的随机阶段 如果为-1 表示为不使用这个参数
C2 一个可能的随机阶段 如果为-1 表示为不使用这个参数
C3 一个可能的随机阶段 如果为-1 表示为不使用这个参数
31 = ACTION_T_RANDOM_PHASE_RANGE: 随机设置生物所处的事件阶段(从指定的范围控制则取)
C1 阶段范围最小值
C2 阶段范围最大值 (这个参数至少要比C1大)
32 = ACTION_T_SUMMON: 召唤一个生物 (使用 SCRIPTDEV2库中 SUMMON表里的数据)SUMMON表里是 位置和持续时间数据
C1 召唤的生物creature_template 表里的 ENTRY
C2 被召唤生物攻击的目标类型,参见目标类型定义,为0则不攻击任何人
C3 eventai_summons 表里的召唤ID (这个表里的数据控制被召唤生物的刷新位置和持续时间)
33 = ACTION_T_KILLED_MONSTER: 为玩家调用KilledMonster()功能。完成杀怪类任务,即赋予玩家完成杀死某生物的凭证。 (注意:它可以包含任意杀怪类任务的怪物ID.前提是任务里有)
C1 creature_template有效的生物 ENTRY
C2 目标类型ID ,定义谁可以获得杀怪的任务凭证 (参见目标类型ID)
34 = ACTION_T_SET_INST_DATA: 为副本设置数据,该动作用于修改副本的控制脚本的某个指定字段(参数1)的数据为新的数据(参数2)。注意,只有位于一个已定义了副本脚本名ScriptedInstance的副本里的生物,才可发出这个动作。
C1 要改变副本脚本里的某个字段名,同样需要是已定义了副本脚本名的副本
C2 参数1定义的那个字段里待填入的新值 这值必须是一个有效的32位数
35 = ACTION_T_SET_INST_DATA64: 该动作用于指定目标(参数2定义)使之获得储存在副本脚本某个字段(参数定义)里的GUID值(比如AI脚本名称)。只有位于一个已定义了副本脚本名ScriptedInstance的副本里的生物,才可发出这个动作。
C1 副本脚本的某个字段,储存有参数2定义的目标可获取的GUID值,同样需要是已定义了副本脚本名的副本。
C2 将获取参数1定义的GUID值的目标类型。这个参数值必须是一个有效的目标类型值;详见目标类型索引表。
36 = ACTION_T_UPDATE_TEMPLATE: 生物变身,该动作临时修改当前生物为另一个生物,外形改变,掉落表也随之改变,但AI不变。在生物重置时,生物回复原型。
C1 生物ID,CREATURE_TEMPLATE表里的entry,为当前生物变为另一个生物的ID。
C2 使用阵营外形:(玩家所看到的)阵营外形,0--联盟,1--部落。
37 = ACTION_T_DIE: 直接干掉这个生物
例如:生物事件设置为 8(被特定魔法击中触发) 可以接这个动作
38 = ACTION_T_ZONE_COMBAT_PULSE: 使副本内所有玩家进入与这个生物的战斗,只在副本内战斗才可以做这个动作。
39 = ACTION_T_CALL_FOR_HELP :呼叫所有指定半径的友好生物(未处于战斗等)攻击目标
C1 有效半径
40 = ACTION_T_SET_SHEATH :设置生物的武器显示状态
C1 0 没有武器显示,1 近战武器显示,2 远程武器显示
41 = ACTION_T_FORCE_DESPAWN :
Basic Structure of EventAI 事件AI表的基本结构
=========================================
字段名称 描述
id 这个字段为自动递增字段..计数用的.无其他意义 方便 SQL查询
creature_id 用来触发这个事件的生物ID 对应creature_template表里的entry
event_type 事件的类型(参见后面的 事件类型 表)
event_inverse_phase_mask 这里的值是限制触发阶段的(参见下面的阶段说明)
event_chance 触发的几率百分比(0-100)
event_flags 事件的标志(参见下面的事件标志表)
event_param1 事件参数..(可变的...依赖于事件类型..)
event_param2 事件参数..(可变的...依赖于事件类型..)
event_param3 事件参数..(可变的...依赖于事件类型..)
event_param4 事件参数..(可变的...依赖于事件类型..)
action1_type 触发事件以后做出的第一个动作(参见下面的 动作类型)
action1_param1 (可变的动作参数 依赖于动作类型 )
action1_param2 (可变的动作参数 依赖于动作类型 )
action1_param3 (可变的动作参数 依赖于动作类型 )
action2_type 触发事件以后做出的第二个动作(参见下面的 动作类型)
action2_param1 (可变的动作参数 依赖于动作类型 )
action2_param2 (可变的动作参数 依赖于动作类型 )
action2_param3 (可变的动作参数 依赖于动作类型 )
action3_type 触发事件以后做出的第三个动作(参见下面的 动作类型)
action3_param1 (可变的动作参数 依赖于动作类型 )
action3_param2 (可变的动作参数 依赖于动作类型 )
action3_param3 (可变的动作参数 依赖于动作类型 )
所有参数的取值范围为:
如果参数指定时间,那么时间的单位为毫秒
如果参数指定几率,那么几率取值范围为 0-100 为0 就是不触发 100就是百分之百触发
=========================================
Target Types 目标类型
=========================================
某一个动作使用目标类型可根据目标做出不同的动作
ID 源码内部名称 描述
0 TARGET_T_SELF 对生物自己施放动作
1 TARGET_T_HOSTILE 对当前目标施放动作(通常是仇恨最高的目标)
2 TARGET_T_HOSTILE_SECOND_AGGRO 对第二仇恨的玩家施放动作
3 TARGET_T_HOSTILE_LAST_AGGRO 对仇恨最低的玩家施放动作
4 TARGET_T_HOSTILE_RANDOM 随机对仇恨列表里的玩家施放动作
5 TARGET_T_HOSTILE_RANDOM_NOT_TOP随机对在仇恨列表里的玩家施放动作.除了最高仇恨玩家
6 TARGET_T_ACTION_INVOKER 仅对导致了这个事件AI触发的目标做出动作
只对这几个触发事件有效:.............
EVENT_T_AGGRO, EVENT_T_KILL,
EVENT_T_DEATH, EVENT_T_SPELLHIT,
EVENT_T_OOC_LOS, EVENT_T_FRIENDLY_HP
=========================================
Cast Flags 施法标志位
=========================================
位 值 源码内部名称 描述
0 1 CAST_INTURRUPT_PREVIOUS 打断正在释放的任何法术.释放这个(保证这个法术施放结束)
1 2 CAST_TRIGGERED 强制立即施放 并且不管魔法和怒气的的限制
2 4 CAST_FORCE_CAST 强制施放即使目标不在施法范围或者生物法力值不足
3 8 CAST_NO_MELEE_IF_OOM 为了防止近战,在目标不在施法范围或者生物法力值不足时强制施法
4 16 CAST_FORCE_TARGET_SELF 强制目标对他自己释放这个法术
5 32 CAST_AURA_NOT_PRESENT 当目标身上没有这个魔法时,才对目标施放这个法术.
备注: 如果你需要这个法术同事具有两种法术标志 你可以位值相加,如我需要CAST_TRIGGERED(2) 和CAST_NO_MELEE_IF_OOM(8) 这两种 .那么我们可以简单的填上 10 (8+2)
================================================
Event Flags 事件标志
================================================
位 值 源码内部名称 描述
0 1 EFLAG_REPEATABLE 可重复触发标志(如果不需要重复触发,请不要设置这个标志)
1 2 EFLAG_NORMAL 在普通模式的副本里触发(如果不需要在普通模式触发,请不要设置)
2 4 EFLAG_HEROIC 在英雄模式的副本里触发(如果不需要在英雄模式触发,请不要设置)
3 8 未使用
4 16 未使用
5 32 未使用
6 64 未使用
7 128 EFLAG_DEBUG_ONLY 尚未实现
备注:和施法标志一样,可以把需要的标志位值相加
=======================================================================
阶段说明
======================================================================
如果phase mask 为0 那么它将在所有阶段触发,默认为0。关于阶段编写之前,你应该确定生物有几个阶段,还要学会二进制加法。
最大32个阶段,生物以第一阶段0开始,并将持续处于第一阶段除非执行动作类型22,23,30,31改变生物所处阶段。
例如,假设某一生物使用 EVENT AI 有最大的四个阶段,然后我们只需处理 4 bits 数字。若设定这个生物有一个事件只发生在第三
阶段(定时释放一个法术),然后这个 AI 应该包含其他不该触发的阶段 ,应该是这样设置 1011 等于十进制 11
【注:应该触发的阶段设为0 不该触发的阶段设为 1 然后把二进制转换为10进制 就是数据库里的inverse phase mask 字段】
有如,生物有一个事件只在第一和第四阶段触发,所以我们的二进制位应该是 0110 等于十进制的6
五阶段内 各情况查询表
mask值 所处阶段 最大阶段 说明
Value Phase Max Phases Description
2 1 2 2
1 2 2 1
Value Phase Max Phases Description
6 1 3 2+4
5 2 3 1+4
3 3 3 1+2
4 1+2 3 4
1 2+3 3 1
2 1+3 3 2
Value Phase Max Phases Description
14 1 4 2+4+8
13 2 4 1+4+8
11 3 4 1+2+8
7 4 4 1+2+4
12 1+2 4 4+8
10 1+3 4 2+8
6 1+4 4 2+4
9 2+3 4 1+8
5 2+4 4 1+4
3 3+4 4 1+2
8 1+2+3 4 8
1 2+3+4 4 1
4 1+2+4 4 4
2 1+3+4 4 2
Value Phase Max Phases Description
30 1 5 2+4+8+16
29 2 5 1+4+8+16
27 3 5 1+2+8+16
23 4 5 1+2+4+16
15 5 5 1+2+4+8
28 1+2 5 4+8+16
26 1+3 5 2+8+16
22 1+4 5 2+4+16
20 1+5 5 2+4+8
25 2+3 5 1+8+16
21 2+4 5 1+4+16
13 2+5 5 1+4+8
19 3+4 5 1+2+16
11 3+5 5 1+2+8
7 4+5 5 1+2+4
24 1+2+3 5 8+16
17 2+3+4 5 1+16
3 3+4+5 5 1+2
6 1+4+5 5 2+4
12 1+2+5 5 4+8
10 1+3+5 5 2+8
9 2+3+5 5 1+8
16 1+2+3+4 5 16
1 2+3+4+5 5 1
2 1+3+4+5 5 2
4 1+2+4+5 5 4
8 1+2+3+5 5 8
以上只是按照时间、生命/魔法的百分比设定的AI~~期待M的事件AI
|