mangos服务器的游戏对象和ai系统,(搬运工)Mangos服务器的游戏对象和AI系统(二)
CreatureAI这个类并不大,构造函数要传入一个Creature的指针,然后就是20来个接口函数。
构造函数:
explicitCreatureAI(Creature*creature) :m_creature(creature) {}
接口函数不多,可以全部列出来:
// Called if IsVisible(Unit *who) is true at each *who move, reaction at visibility zone enter
virtualvoidMoveInLineOfSight(Unit*) {}
// Called for reaction at enter to combat if not in combat yet (enemy can be NULL)
virtualvoidEnterCombat(Unit*/*enemy*/) {}
// Called for reaction at stopping attack at no attackers or targets
virtualvoidEnterEvadeMode() {}
// Called at reaching home after evade
virtualvoidJustReachedHome() {}
// Called at any heal cast/item used (call non implemented)
virtualvoidHealBy(Unit*/*healer*/,uint32/*amount_healed*/) {}
// Called at any Damage to any victim (before damage apply)
virtualvoidDamageDeal(Unit*/*done_to*/,uint32&/*damage*/) {}
// Called at any Damage from any attacker (before damage apply)
// Note: it for recalculation damage or special reaction at damage
// for attack reaction use AttackedBy called for not DOT damage in Unit::DealDamage also
virtualvoidDamageTaken(Unit*/*done_by*/,uint32&/*damage*/) {}
// Called when the creature is killed
virtualvoidJustDied(Unit*) {}
// Called when the creature kills a unit
virtualvoidKilledUnit(Unit*) {}
// Called when the creature summon successfully other creature
virtualvoidJustSummoned(Creature* ) {}
virtualvoidSummonedCreatureDespawn(Creature*/*unit*/) {}
// Called when hit by a spell
virtualvoidSpellHit(Unit*,constSpellEntry*) {}
// Called when spell hits creature's target
virtualvoidSpellHitTarget(Unit*,constSpellEntry*) {}
// Called when the creature is target of hostile action: swing, hostile spell landed, fear/etc)
virtualvoidAttackedBy(Unit*attacker);
// Called when creature is spawned or respawned (for reseting variables)
virtualvoidJustRespawned() {}
// Called at waypoint reached or point movement finished
virtualvoidMovementInform(uint32/*MovementType*/,uint32/*Data*/) {}
// Called at text emote receive from player
virtualvoidReceiveEmote(Player*/*pPlayer*/,uint32/*text_emote*/) {}
// Called when creature attack expected (if creature can and no have current victim)
// Note: for reaction at hostile action must be called AttackedBy function.
virtualvoidAttackStart(Unit*) {}
// Is unit visible for MoveInLineOfSight
virtualboolIsVisible(Unit*)const{returnfalse; }
// Called when victim entered water and creature can not enter water
virtualboolcanReachByRangeAttack(Unit*) {returnfalse; }
// Called at World update tick
virtualvoidUpdateAI(constuint32/*diff*/) {}
可以看到,大部分接口是事件触发和消息通知。UpdateAI我放到最后,这个和别的接口函数不同,是负责AI状态的更新处理。
以CreatureAI为基类,派生出了PetAI、CreatureEventAI、GuardAI、ReactorAI、AggressAI、TotemAI和NullCreatureAI 7类基本AI。Creature的AIM_Initialize()函数,对AI进行初始化,根据Creature的类型选择不同的AI。值得提出的是,Mangos还支持ScriptAI,对于非宠物类的生物支持扩展脚本AI。Mangos的脚本系统我还没有怎么看,有空研究下。
可以看到Mangos的AI设计还是比较传统的,Creature类相当于身体和物理存在,干很多“傻大粗”的事情;AI相当于Creature的大脑,对事件进行响应和处理,指挥着身体物理存在进行反应。
下面可以看下宠物AI的一段代码:
mangos服务器的游戏对象和ai系统,(搬运工)Mangos服务器的游戏对象和AI系统(二)相关推荐
- mangos服务器的游戏对象和ai系统,(搬运工)Mangos服务器的游戏对象和AI系统(一)
主要的几个对象类 1.Object类主要功能 1)InWorld判断和操作 2)GUID Mangos的每个对象都有唯一的GUID,每类GUID的最大值是保存在数据库中,初始化时候从数据库加载.Man ...
- Silverlight 2.5D RPG游戏技巧与特“.NET技术”效处理:(十一)AI系统
谈到人工智能(AI),这个话题就太大了:大学里有<人工智能教程>专门讲这方面的知识,什么大名鼎鼎的人工神经网络.遗传算法等等均可一窥究竟,这里如赘述似乎有些班门弄斧,我们暂且丢它一边去吧. ...
- 点晴oa系统搭服务器,点晴OA系统安装后提示:操作对象无效错误101,您没有ASPEncodeDLL.AspCoding对象的操作权限或该对象不存在请联系服务器管理员...
点晴OA系统安装后提示:操作对象无效错误101,您没有ASPEncodeDLL.AspCoding对象的操作权限或该对象不存在请联系服务器管理员 :安装的时候遇到一个问题,安装完之后出现:您没有 A ...
- dnf会修改跨区服务器吗,dnf新跨区系统上线之后,整个游戏只有9个大区
原标题:dnf新跨区系统上线之后,整个游戏只有9个大区 从11月份开始,DNF官方就已经提出了新的跨区计划,并且陆续对各大区进行更新调整,并且安图恩团队频道和卢克团队频道进行调整,以满足玩家们的打团需 ...
- 服务器win7系统能搭建手游吗,如何判断自己的Win7系统能否玩吃鸡游戏?
如何判断自己的Win7系统能否玩吃鸡游戏?吃鸡游戏对电脑配置要求非常高,很多伙伴都不清楚自己的电脑是否能玩吃鸡游戏?这就要看你的电脑配置了,下面给大家分享几种查看电脑配置的方法. 一.首先来看看吃鸡游 ...
- 2核4g服务器选啥系统好,云服务器2核4g可以做什么
云服务器2核4g可以做什么 内容精选 换一换 实例即云耀云服务器,是由CPU.内存.操作系统.云硬盘组成的基础的计算组件.云耀云服务器创建成功后,您就可以像使用自己的本地PC或物理服务器一样,在云上使 ...
- ioGame 网络游戏服务器框架 (java)、java游戏服务器、netty 集群分步式的网络游戏服务器
ioGame 国内首个基于蚂蚁金服 SOFABolt 的 java 网络游戏服务器框架:无锁异步化.事件驱动的架构设计 通过 ioGame 可以很容易的搭建出一个集群无中心节点.有状态多进程的分步式游 ...
- 游戏服务器和网站,大型网络游戏和大型网站需要服务器的不同
服务器 大型网络游戏和大型网站需要服务器的不同 1) 虽然大型网络游戏产生的数据也很多,但与大型网站系统相比,差了几个数量级. 2) 网络游戏对数据的操作相对简单,基本上简单的select/updat ...
- 基于sentry的前端错误监控日志系统(部署sentry服务器/前端项目部署)-让前端最快的定位到生产问题
基于sentry的前端错误监控日志系统(部署sentry服务器/前端项目部署)-让前端最快的定位到生产问题 背景 在这越来越发达的网络时代,web应用也是越来越复杂,尤其是前端的开发,也是越来越受重视 ...
最新文章
- UVa-442-Matrix Chain Multiplication
- 【已解决】mysql连接出错:ERROR 1040 (HY000): Too many connections
- 分析思维导图与绘制思维导图方法介绍
- AttributeError: module ‘tensorflow‘ has no attribute ‘placeholder‘
- Spring Boot----Dubbo
- python函数定义时参数相当于占位符_python中函数的参数
- JS 数字,金额用逗号隔开
- 如何利用FineBI做财务分析
- mysql xml生成工具_mybatis-generator 代码自动生成工具
- iOS 如何在一个应用程序中调用另一个应用程序
- 通过分布式把本地图片上传到FTP(1)
- Java:集合,Array、Collection(List/Set/Queue)、Map的遍历,比如:ArrayList,LinkedList,HashSet,HashMap...
- 斯坦福大学Andrew Ng教授主讲的《机器学习》公开课观后感
- Oracle 数据库基础学习 (二)
- qstring 字符串查找_怎样用QT查找字符串并标记要查找的内容
- jQuery轮播图效果+ bxCarousel实现图片滚动切换效果+Mootools Videobox实现视频图片弹出类lightbox效果
- mysql sql文件分割_怎么将sql数据库文件分割
- java中数组拼接成字符串中间用逗号隔开
- 萨缪尔·莫尔斯,一个种族主义画家是如何窃取了电报发明权的呢?
- Docker——安装和启动
热门文章
- vue项目中,amr格式的音频播放
- WINDOWS-API:关于线程 GetCurrentThread、GetCurrentThreadId、GetCurrentProcess、GetCurrentProcessId...
- windows linux 并发,Windows/Linux安装压力测试工具siege
- 宏碁台式机,如何设置u盘启动
- 2020年生肖码表图_2020年一语破天机全年资料:2020年新生肖码表图_特时代
- 计算机所王颖简历,王颖-天津大学材料科学与工程学院
- 浏览器因为代理打不开
- 转载:我对大数据算法的认知
- OpenCV小例程——图像去噪
- S-c crystal 组合