百度空间 | 百度首页 
 
查看文章
 
《魔兽世界》AI数据表&脚本函数[转]
2009-09-25 13:14

可以从下面的一些结构和方法中管中窥豹,了解一些设计思路。

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


类别:游戏策划 | 添加到搜藏 | 浏览() | 评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu