可以从下面的一些结构和方法中管中窥豹,了解一些设计思路。
AI数据表
-----------------------------------------
数据类型
-----------------------------------------
(Field_Name Discription)
id 自动ID.
creature_id 怪物ID而这个事件应该发生。
event_type 事件条件 (事件条件Event Types)
event_param1 参数1 (和事件条件Event Types相关)
event_param2
event_param3
action1_type 第一类动作做引发的动作(动作类型Action Types)
action1_param1 参数1 (和动作类型Action type相关)
action1_param2
action1_param3
action2_type 第二类动作做引发的动作(动作类型Action Types)
action2_param1 参数1 (和动作类型Action type相关)
action2_param2
action2_param3
action3_type 第三类动作做引发的动作(动作类型Action Types)
action3_param1 参数1 (和动作类型Action type相关)
action3_param2
action3_param3
-----------------------------------------
Event Types
-----------------------------------------
事件条件
(# Internal Name Pamarm usage Discription)
0 EVENT_T_NONE Not Used 默认
1 EVENT_T_TIMER_REPEAT Time 每过时间(毫秒)触发
2 EVENT_T_TIMER_SINGLE Time 在指定时间(毫秒)触发(只一次)
3 EVENT_T_HP_SINGLE HP% 当生命低于参数1触发 (不重复)
4 EVENT_T_MANA_SINGLE Mana% 当魔法低于参数1触发 (不重复
5 EVENT_T_AGGRO Not Used 见到第一威胁时
6 EVENT_T_KILL Not Used 杀害后一名玩家后
7 EVENT_T_DEATH Not Used 杀后
-----------------------------------------
Action Types
-----------------------------------------
动作类型
(# Internal Name Pamarm usage Discription)
0 ACTION_T_NONE Not Used 默认
1 ACTION_T_SAY TextId 说话ID
2 ACTION_T_YELL TextId 大喊ID
3 ACTION_T_EMOTE TextId 表情ID
4 ACTION_T_SOUND SoundId 播放音乐在ID玩家区
5 ACTION_T_CAST SpellId, Target, Interrupt 使用技能ID.目标对像.如果中断是0则说明不会打断玩家
6 ACTION_T_SUMMON CreatureId, Target, Duration 刷新怪物(参数1) 攻击目标 (参数2) 攻击期限(参数3). 如果时间是0将延续到死亡。
-----------------------------------------
Target Types
-----------------------------------------
目标
(# Internal Name Discription)
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 不包含最高威胁的随机目标
脚本函数
void AttackStart(Unit *who) 获得攻击目标
DoCast(who,ID) 这里是使用魔法,目标、ID
DoStartAttack(who); 运行上面的脚本攻击
DoGoHome(); 让怪跑回自己的出生点
who->GetTypeId() == TYPEID_PLAYER 是说明ID是不是攻击玩家
m_creature->GetHealth()
uint32 cHealth=m_creature->GetHealth();
获取怪物当前血量
m_creature->GetMaxHealth()
uint32 cMaxHealth=m_creature->GetMaxHealth();
获取怪物最大血量
m_creature->GetPower(POWER_MANA)
uint32 cPower=m_creature->GetPower(POWER_MANA);
获取怪物当前魔法量
m_creature->GetMaxPower(POWER_MANA)
uint32 cMaxPower=m_creature->GetMaxPower(POWER_MANA);
获取怪物最大魔法量
m_creature->Say("Dark!",LANG_UNIVERSAL); 让怪物说话 后参为语言
m_creature->getVictim() 取得被攻击的受害者
void DamageInflict(Unit *who, uint32 amount_damaged) 被攻击时调用此脚本
if( (cHealth<(cMaxHealth*0.8) )&(cPower>( cMaxPower*0.8)) 怪当前HP少于总HP的80%和魔法量大于总数80%
m_creature->isInCombat() 是否在战斗中
void MoveInLineOfSight(Unit *who) 在视线之内
who->HasStealthAura()) 玩家是否隐行
who->RemoveSpellsCausingAura(SPELL_AURA_MOD_STEALTH) 移除玩家身上技能 ()为技能名称
m_creature->IsHostileTo(who) 玩家对怪物是否有敌意
who->isAlive() 测试玩家是否还活着
creature=怪物或NPC