lua 游戏架构 之 游戏 AI (八)ai_tbl 行为和优先级

定义一系列的AI行为类型和它们的优先级,以及一个映射表`ai_tbl`来关联每种AI行为类型与对应的脚本文件和优先级。以下是对代码的详细解释:

lua 游戏架构 之 游戏 AI (一)ai_base-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/heyuchang666/article/details/140624481?spm=1001.2014.3001.5501lua 游戏架构 之 游戏 AI (二)ai_base_move_base-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/heyuchang666/article/details/140624583?spm=1001.2014.3001.5501

lua 游戏架构 之 游戏 AI (三)ai_attack-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/heyuchang666/article/details/140625113?spm=1001.2014.3001.5501

定义AI行为类型
代码中首先定义了一系列的AI行为类型,使用枚举的方式表示不同的AI行为。例如:

  • - `eAType_BASE` 表示基础AI行为,数值为0。
  • - `eAType_IDLE` 表示空闲状态,数值为5。
  • - `eAType_ATTACK` 表示攻击行为,数值为50。
  • - `eAType_DEAD` 表示死亡状态,数值为130。

这些类型用于区分不同的AI行为模式,每个类型都有一个唯一的数值标识。

定义优先级
接着定义了两个优先级常量:

  • - `eAI_Priority_Low` 表示低优先级,数值为0。
  • - `eAI_Priority_High` 表示高优先级,数值为1。

优先级用于控制AI行为的执行顺序,高优先级的行为会优先执行。

AI行为映射表 `ai_tbl`

  • `ai_tbl` 是一个Lua表,用于映射AI行为类型到具体的脚本文件和它们的优先级。表中的每个元素是一个表,包含`script`和`priority`两个字段:
  • - `script` 字段是一个字符串,表示实现该AI行为的脚本文件名。
  • - `priority` 字段是一个数值,表示该AI行为的优先级。

例如:

[ eAType_BASE ] = { script = "ai_base", priority = eAI_Priority_High },
[ eAType_IDLE ] = { script = "ai_idle", priority = eAI_Priority_High },
[ eAType_ATTACK ] = { script = "ai_attack", priority = eAI_Priority_Low },

这意味着当AI需要执行基础行为时,会加载`ai_base`脚本,并且由于其高优先级,它会优先于其他低优先级的行为执行。类似地,`eAType_IDLE` 表示空闲状态,也会加载`ai_idle` 脚本,并具有高优先级。而`eAType_ATTACK` 表示攻击行为,会加载`ai_attack` 脚本,但具有低优先级。

总结
这段代码为游戏的AI系统提供了一个灵活的框架,根据不同的AI行为分配不同的处理脚本和优先级。通过这种方式,可以轻松地管理和扩展AI的行为逻辑,同时保持代码的组织性和可维护性。

----------------------------------------------------------------
eAType_BASE							=   0;
eAType_IDLE							=   5;
eAType_IDLE_NPC						=  10;
eAType_IDLE_STAND					=  11;
eAType_IDLE_JUST_STAND				=  12;
eAType_GUARD						=  13;
eAType_AUTO_NORMALATTACK			=  14;
eAType_AUTOFIGHT_FIND_WAY			=  15;
eAType_AUTOFIGHT_SKILL				=  16;
eAType_AUTOFIGHT_STUNT_SKILL		=  17;
eAType_AUTOFIGHT_MISSION_SKILL		=  18;
eAType_AUTOFIGHT_CAST_FIND_TARGET	=  19
eAType_MERCENARY_AUTO_FIND_TARGET	=  20;
eAType_MOVE							=  21;
eAType_SKILLENTITY_MOVE				=  22;
eAType_NETWORK_SKILLENTITY_MOVE		=  23;
eAType_AUTO_MOVE					=  30;
eAType_NETWORK_MOVE					=  31;
eAType_FOLLOW						=  40;
eAType_FOLLOW_ARENA					=  41;
eAType_ATTACK						=  50;
eAType_NETWORK_ATTACK				=  51;
eAType_Blink						=  55;
eAType_MANUAL_ATTACK				=  60;
eAType_FIND_TARGET					=  70;
eAType_AUTOFIGHT_FIND_TARGET		=  71;
eAType_ARENA_MERCENARY_FIND_TARGET	=  72;
eAType_AUTO_SKILL					=  80;
eAType_MANUAL_SKILL					=  90;
eAType_FORCE_FOLLOW					= 100;
eAType_FEAR							= 105;
eAType_SPA							= 110;
--eAType_RUSH						= 119;
eAType_SHIFT						= 131;
eAType_RETREAT						= 121;
eAType_DEAD							= 130;
eAType_DEAD_MERCENARY				= 135;
eAType_DEAD_REVIVE					= 140;
eAType_NETWORK_CACHE				= 190;
eAType_AUTOFIGHT_MERCENARY_SKILL	= 199;
eAType_AUTO_SUPERMODE 				= 200;
eAType_AUTOFIGHT_TRIGGER_SKILL		= 201;
eAType_PRECOMMOND					= 300;
eAType_AUTOFIGHT_RETURN				= 310;
eAType_PET_CHECK_ALIVE				= 500;
eAType_DAMAGE_CAR					= 501;
eAType_CHECK_WATER                  = 502;------------------------------------------------------
eAI_Priority_Low	= 0;
eAI_Priority_High	= 1;------------------------------------------------------
ai_tbl =
{[eAType_BASE]						= { script = "ai_base",							priority = eAI_Priority_High },[eAType_GUARD]						= { script = "ai_guard",						priority = eAI_Priority_Low },[eAType_IDLE_STAND]					= { script = "ai_idle_stand",					priority = eAI_Priority_High },[eAType_IDLE_JUST_STAND]			= { script = "ai_idle_just_stand",				priority = eAI_Priority_High },[eAType_IDLE]						= { script = "ai_idle",							priority = eAI_Priority_High },[eAType_MOVE]						= { script = "ai_move",							priority = eAI_Priority_High },[eAType_AUTO_MOVE]					= { script = "ai_auto_move",					priority = eAI_Priority_High },[eAType_FOLLOW]						= { script = "ai_follow",						priority = eAI_Priority_Low },[eAType_FOLLOW_ARENA]				= { script = "ai_follow_arena",					priority = eAI_Priority_Low },[eAType_MERCENARY_AUTO_FIND_TARGET]	= { script = "ai_mercenary_auto_find_target",	priority = eAI_Priority_Low },[eAType_Blink]						= { script = "ai_blink",						priority = eAI_Priority_Low },[eAType_ATTACK]						= { script = "ai_attack",						priority = eAI_Priority_Low },[eAType_NETWORK_ATTACK]				= { script = "ai_network_attack",				priority = eAI_Priority_Low },[eAType_MANUAL_ATTACK]				= { script = "ai_manual_attack",				priority = eAI_Priority_Low },[eAType_FIND_TARGET]				= { script = "ai_find_target",					priority = eAI_Priority_Low },[eAType_ARENA_MERCENARY_FIND_TARGET]= { script = "ai_arena_mercenary_find_target",	priority = eAI_Priority_Low },[eAType_AUTO_SKILL]					= { script = "ai_auto_skill",					priority = eAI_Priority_Low },[eAType_AUTOFIGHT_SKILL]			= { script = "ai_autofight_special_skill",		priority = eAI_Priority_Low },[eAType_AUTOFIGHT_TRIGGER_SKILL]	= { script = "ai_autofight_trigger_skill",		priority = eAI_Priority_Low },[eAType_AUTOFIGHT_STUNT_SKILL]		= { script = "ai_autofight_stunt_skill",		priority = eAI_Priority_Low },[eAType_MANUAL_SKILL]				= { script = "ai_manual_skill",					priority = eAI_Priority_Low },[eAType_FORCE_FOLLOW]				= { script = "ai_force_follow",					priority = eAI_Priority_Low },[eAType_FEAR]						= { script = "ai_fear",							priority = eAI_Priority_Low },[eAType_SPA]						= { script = "ai_spa",							priority = eAI_Priority_Low },[eAType_SHIFT]						= { script = "ai_shift",						priority = eAI_Priority_Low },[eAType_RETREAT]					= { script = "ai_retreat",						priority = eAI_Priority_Low },[eAType_DEAD]						= { script = "ai_dead",							priority = eAI_Priority_High },[eAType_DEAD_MERCENARY]				= { script = "ai_dead_mercenary",				priority = eAI_Priority_High },[eAType_DEAD_REVIVE]				= { script = "ai_dead_revive",					priority = eAI_Priority_High },[eAType_NETWORK_MOVE]				= { script = "ai_network_auto_move",			priority = eAI_Priority_High },[eAType_NETWORK_CACHE]				= { script = "ai_network_cache",				priority = eAI_Priority_High },[eAType_PET_CHECK_ALIVE]			= { script = "ai_pet_check_alive",				priority = eAI_Priority_Low },[eAType_IDLE_NPC]					= { script = "ai_idle_npc",						priority = eAI_Priority_High },[eAType_AUTOFIGHT_MERCENARY_SKILL]	= { script = "ai_autofight_mercenary_skill",	priority = eAI_Priority_Low },[eAType_AUTOFIGHT_FIND_TARGET]		= { script = "ai_autofight_find_target",		priority = eAI_Priority_Low },[eAType_AUTOFIGHT_FIND_WAY]			= { script = "ai_autofight_find_way",			priority = eAI_Priority_Low },[eAType_PRECOMMOND]					= { script = "ai_precommond",					priority = eAI_Priority_Low },[eAType_AUTO_NORMALATTACK]			= { script = "ai_auto_normalattack",			priority = eAI_Priority_Low },[eAType_AUTOFIGHT_RETURN]			= { script = "ai_autofight_return",				priority = eAI_Priority_Low },[eAType_SKILLENTITY_MOVE]			= { script = "ai_skillentity_move",				priority = eAI_Priority_Low },[eAType_NETWORK_SKILLENTITY_MOVE]	= { script = "ai_network_skillentity_move",		priority = eAI_Priority_Low },[eAType_AUTOFIGHT_MISSION_SKILL]	= { script = "ai_autofight_mission_skill",		priority = eAI_Priority_Low },[eAType_AUTOFIGHT_CAST_FIND_TARGET]	= { script = "ai_autofight_cast_find_target",	priority = eAI_Priority_Low },[eAType_DAMAGE_CAR]					= { script = "ai_damage_car",					priority = eAI_Priority_Low },[eAType_AUTO_SUPERMODE]				= { script = "ai_auto_supermode",				priority = eAI_Priority_Low },[eAType_CHECK_WATER]				= { script = "ai_check_water",				    priority = eAI_Priority_Low },
};


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/51178.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【ACM独立出版,高录用】第四届物联网与机器学习国际学术会议(IoTML 2024,8月23-25)

2024年第四届物联网与机器学习国际学术会议(IoTML 2024)将于2024年8月23-25日在中国南昌召开。 会议将围绕着物联网和机器学习开展,探讨本领域发展所面临的关键性挑战问题和研究方向,以期推动该领域理论、技术在高校和企业的发展和…

【全国大学生电子设计竞赛】2022年A题

🥰🥰全国大学生电子设计大赛学习资料专栏已开启,限时免费,速速收藏~

信息收集总结

关注内容 1. 企业股权架构:了解公司的股权结构,确定控股子公司,收集边缘业务系统资产。 2. 网站备案:获取公司的备案信息,包括根域名及其子域名。 3. 对外发布的产品:收集公司公开发布的产品信息&…

剑指Meta?1230 亿参数,Mistral 发布 Large 2 旗舰 AI 模型

7 月 25 日消息,AI 竞赛日益激烈,Meta 公司昨日推出开源 Llama 3.1 模型之后,法国人工智能初创公司 Mistral 也加入了竞争行列,在今日凌晨推出了新一代旗舰模型 Mistral Large 2。 Mistral AI 发布 Mistral Large 2,1…

[算法题]添加字符

题目链接: 添加字符 因为数据量很小, 所以直接两层遍历暴力求解, 依次将字符串 A 与字符串 B 相同位进行比对, 每轮记录当前轮次不相等的位数是几位, 并与历史上记录的比较取小值, 图示: 经过比较后, 题解就为 1, 空白处不用管, 因为题意是可以在开头和末尾添加字符的, 添加与…

c生万物系列(加减乘除模篇)

为了提高c语言的运行效率,我们需要采用更高效的运算,那么切入点就是随处可见的基本运算符合,从底层架构考虑,加减乘除的效率比位运算低很多,为了能够更好迎合CPU的二进制,有必要取代基本的加减乘除以及求余…

【“微软蓝屏”事件暴露了网络安全哪些问题?】建设安全稳固的网络基础设施

目录 前言一、软件更新流程中的风险管理和质量控制机制(一)测试流程及风险识别(二)风险管理策略(三)质量控制措施 二、预防类似大规模故障的最佳方案或应急响应对策(一)冗余系统设计…

2024最火的知识付费系统小程序+PC+H5三端数据互通支持采集资源开源版

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 系统含带 裂变模式 可以助力好友来获取资源共享 分站功能 独立后台 会员功能 卡密功能 二级分销功能等 自行研究看 后期有更新新版会在持续发布 目前版本是3.5 是我花三天时间修复的 …

科研论文之Word论文编辑

这篇文章介绍在word中怎么编辑论文,包括论文的模板、论文的字体设置、论文的插图、论文的参考文献等等。 为便利知识传播,我的所有文章都不会设置收费专栏。但文章写作不易,如有可能麻烦打赏一下,金额随意。收款码见下图&#xff…

《程序猿入职必会(5) · CURD 页面细节规范 》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…

nodejs - MongoDB 学习笔记

一、简介 1、MongoDB 是什么 MongoDB 是一个基于分布式文件存储的数据库,官方地址 https://www.mongodb.com/ 2、数据看是什么 数据库(DataBase)是按照数据结构来组织、存储和管理数据的应用程序。 3、数据库的作用 主要作用是 管理数据…

RedHat9 | Ansible 编写循环和条件任务

环境版本说明 RedHat9 [Red Hat Enterprise Linux release 9.0]Ansible [core 2.13.3]Python [3.9.10]jinja [3.1.2] 1. 利用循环迭代任务 通过利用循环,管理员无需编写多个使用同一模块的任务。Ansible支持使用loop关键字对一组项目迭代任务,通过配置…

音视频入门基础:WAV专题(3)——FFmpeg源码中,判断某文件是否为WAV音频文件的实现

一、引言 通过FFmpeg命令: ./ffmpeg -i XXX.wav 可以判断出某个文件是否为WAV格式的音频文件: 所以FFmpeg是怎样判断出某个文件是否为WAV格式的音频文件呢?它内部其实是通过wav_probe函数来判断的。从文章《FFmpeg源码:av_prob…

Spring Boot集成OpenPDF和Freemarker实现PDF导出功能并附水印

😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~ 🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Mi…

关于@JsonSerialize序列化与@JsonDeserialize反序列化注解的使用(密码加密与解密举例)

注:另一种方式参考 关于TableField中TypeHandler属性,自定义的类型处理器的使用(密码加密与解密举例)http://t.csdnimg.cn/NZy4G 1.简介 1.1 序列化与反序列化 学习注解之前,我们可以先了解一下什么是序列化与反序列…

遵义网站建设安全性保证

随着互联网的发展和普及,网站的建设成为了一个重要的工作,也是企业宣传的重要渠道。然而,随之而来的安全问题也是不容忽视的。为了保证遵义网站建设的安全性,我们需要采取一系列的措施。 首先,要选择合适的服务器和主机…

【Unity2D 2022:Data】读取csv格式文件的数据

一、创建csv文件 1. 打开Excel,创建xlsx格式文件 2. 编辑卡牌数据:这里共写了两类卡牌,第一类是灵物卡,具有编号、卡名、生命、攻击四个属性;第二类是法术卡,具有编号、卡名、效果三个属性。每类卡的第一…

(39)智能电池

文章目录 前言 1 通过任务规划器进行设置 2 补充信息 3 限制条件 4 参数说明 前言 虽然还不是很普遍,但智能电池更容易从飞行器上安装和拆卸,并且能够提供更多关于电池状态的信息,包括容量、单个电池电压、温度等。 ArduPilot 支持几种…

开发环境搭建——Node.js

在启动前端项目的时候我们通常会用到Node.js,下面是对Node.js的下载安装以及配置的讲解 一、Node.js的安装 1.1、通过Node.js官网下载:Node.js — Run JavaScript Everywhere 下载后双击.msi安装文件后一直点击下一步即可 1.2、配置node 1.2.1、查看…

js 替换json中的转义字符 \

例如有以下字符串 "\"{\\\"account\\\":\\\"66\\\",\\\"name\\\":\\\"66\\\"}\"" 想得到如下字符串 {"account":"66","name":"66"} 执行替换字符串 "\"{…