东方网络律师团队广州seo优化公司排名

diannao/2026/1/20 12:19:53/文章来源:
东方网络律师团队,广州seo优化公司排名,上海本地新闻,滕州公司做网站这段Lua脚本定义了一个名为 ai_autofight_find_way 的类#xff0c;继承自 ai_base 类。 lua 游戏架构 之 游戏 AI #xff08;一#xff09;ai_base-CSDN博客文章浏览阅读238次。定义了一套接口和属性#xff0c;可以基于这个基础类派生出具有特定行为的AI组件。例如ai_autofight_find_way 的类继承自 ai_base 类。 lua 游戏架构 之 游戏 AI 一ai_base-CSDN博客文章浏览阅读238次。定义了一套接口和属性可以基于这个基础类派生出具有特定行为的AI组件。例如可以创建追逐敌人的AI、巡逻的AI或使用特定策略的AI等都继承自这个基础类https://blog.csdn.net/heyuchang666/article/details/140624481?spm1001.2014.3001.5502 这个类用于处理游戏中AI在自动战斗模式下寻找路径的逻辑。以下是对代码的具体解释 1. **引入基类**    - 使用 require 函数引入 ai_base 类作为基础类。 2. **定义 ai_autofight_find_way 类**    - 使用 class 关键字定义了 ai_autofight_find_way 类并继承自 BASE即 ai_base。 3. **构造函数 (ctor)**    - 构造函数接受一个 entity 参数并设置 _type 属性为 eAType_AUTOFIGHT_FIND_WAY表示自动战斗中寻找路径的行为。    - 初始化 _target 为 nil用于后续存储找到的目标。 4. **IsValid 方法** - 这个方法用于验证AI是否应该寻找路径。它首先检查实体是否开启了自动战斗_AutoFight是否死亡或无法攻击。   - 检查实体的行为如果处于准备战斗或禁止攻击状态则返回 false。   - 计算警报范围 radius可能基于实体的属性或世界配置。   - 根据不同的地图类型和条件确定是否需要寻找路径。 5. **OnEnter 方法**    - 当AI组件进入激活状态时执行。根据当前地图类型和条件计算目标位置并使实体移动到该位置。 6. **OnLeave 方法**    - 当AI组件离开激活状态时执行。当前实现中直接返回 true。 7. **OnUpdate 方法**    - 每帧调用用于更新AI状态。如果基类的 OnUpdate 方法返回 true则当前方法也返回 true。 8. **OnLogic 方法**    - 逻辑更新方法如果基类的 OnLogic 方法返回 true则当前方法返回 false表示只执行一次。 9. **创建组件函数**    - create_component 函数用于创建 ai_autofight_find_way 类的新实例传入一个实体和一个优先级。 代码中的一些关键点 - IsDead()检查实体是否死亡。- CanAttack()检查实体是否可以攻击。- GetPropertyValue(ePropID_alertRange)获取实体的警报范围属性。- game_get_world()获取游戏世界配置。- Test(eEBPrepareFight) 和 Test(eEBDisAttack)检查实体的行为状态。- MoveTo()移动到指定位置。 这个脚本为游戏中的AI提供了一个自动战斗中寻找路径的基础框架可以根据具体游戏的需求进行扩展和修改。以下是一些具体的逻辑处理 - 根据不同的地图类型如 g_BASE_DUNGEON、g_ACTIVITY 等AI的行为可能会有所不同。- 计算与目标的距离并根据距离决定是否移动。- 考虑地图上的特定点如物品掉落点、怪物刷新点来决定移动路径。- 使用 vec3_dist 函数计算两个位置之间的距离并根据距离决定是否移动到该位置。 整体而言这个类的目的是在自动战斗模式下根据游戏世界的当前状态和配置为AI实体找到合适的移动路径。 重点解释一下 OnEnter: function ai_autofight_find_way:OnEnter()if BASE.OnEnter(self) thenlocal entity self._entity;local radius entity:GetPropertyValue(ePropID_alertRange);local logic game_get_logic();local world game_get_world();if world then-- 如果世界配置中有自动战斗半径则使用该值if world._cfg.autofightradius thenradius world._cfg.autofightradius;end-- 根据不同的地图类型执行不同的逻辑if world._mapType g_BASE_DUNGEON or world._mapType g_ACTIVITY or ... then-- 检查所有掉落物品如果物品处于激活状态则移动到该物品位置for k,v in pairs(world._ItemDrops) doif v and v:GetStatus() eSItemDropActive thenlocal _pos logic_pos_to_world_pos(v._curPos);entity:MoveTo(_pos);return false; -- 移动到物品位置后退出函数endend-- 如果地图类型是开放区域并且有怪物刷新点或当前活动区域if world._openType g_FIELD then-- 寻找一个有活着的怪物的刷新点local _pos nil;local isfind false;for k1,v1 in pairs(world._curArea._spawns) dofor k2,v2 in pairs(v1._monsters) doif not v2:IsDead() thenisfind true;break;endendif isfind then_pos v1._cfg.pos;break;endend-- 如果没有找到有活着的怪物的刷新点使用第一个刷新点的位置if not _pos then_pos world._curArea._spawns[1]._cfg.pos;end-- 计算实体当前位置到刷新点或地图增益点的距离local dist vec3_dist(entity._curPos,world_pos_to_logic_pos(_pos));local mindist dist;-- 寻找最近的地图增益点for k,v in pairs(world._mapbuffs) doif v and v:GetStatus() 1 thenlocal distbuff vec3_dist(v._curPos,entity._curPos);if distbuff mindist and distbuff db_common.droppick.AutoFightMapbuffAutoRange thenmindist distbuff;_pos logic_pos_to_world_pos(v._curPos);endendend-- 移动实体到计算出的位置entity:MoveTo(_pos);end-- 其他地图类型的逻辑...elseif world._mapType g_FIELD or world._mapType g_Life then-- 对于其他地图类型寻找最近的地图增益点并移动实体-- ...endendreturn false; -- 如果没有找到目标位置或执行了移动逻辑则返回falseendreturn false; -- 如果没有调用基类的OnEnter或基类返回false则返回false end 在 OnEnter 方法中首先调用基类的 OnEnter 方法如果它返回 false则直接返回 false。如果基类的 OnEnter 方法返回 true则继续执行以下逻辑 获取实体的警报范围 radius。检查游戏世界配置如果存在自动战斗半径配置则使用该配置值覆盖实体的警报范围。根据当前的地图类型执行不同的逻辑来寻找目标位置。例如 如果是 g_BASE_DUNGEON、g_ACTIVITY 等地图类型会检查所有物品掉落点寻找激活的物品并移动到该位置。如果是开放区域g_FIELD会寻找有活着的怪物的刷新点或最近的地图增益点并移动实体到该位置。使用 vec3_dist 函数计算实体当前位置到目标位置的距离并根据这个距离来确定是否移动实体。如果找到目标位置则调用 entity:MoveTo(_pos) 方法移动实体到该位置然后返回 false 退出函数。如果没有找到目标位置或不满足移动条件则返回 false。 整体而言OnEnter 方法的目的是确定AI在自动战斗模式下应该移动到哪个位置并执行移动操作。 全部代码实现 ---------------------------------------------------------------- module(..., package.seeall)local require requirelocal BASE require(logic/entity/ai/ai_base).ai_base;------------------------------------------------------ ai_autofight_find_way class(ai_autofight_find_way, BASE); function ai_autofight_find_way:ctor(entity)self._type eAType_AUTOFIGHT_FIND_WAY;self._target nil; endfunction ai_autofight_find_way:IsValid()local entity self._entity;if not entity._AutoFight thenreturn false;endif entity:IsDead() or not entity:CanAttack() thenreturn false;endif entity._behavior:Test(eEBPrepareFight) thenreturn false;endif entity._behavior:Test(eEBDisAttack) thenreturn false;endlocal radius entity:GetPropertyValue(ePropID_alertRange);local world game_get_world();if world thenif world._cfg.autofightradius thenradius world._cfg.autofightradius;endlocal target entity._alives[2][1]; -- 敌方if entity._alives[3][1] then--中立local trap entity._alives[3][1];if trap.entity and trap.entity._traptype eSTrapActive thentarget entity._alives[3][1]; endendif target thenif target.dist radius thenif target.entity._groupType eGroupType_N and target.dist db_common.droppick.AutoFightMapbuffAutoRange thenelsereturn false;endendelseif world._mapType g_TOURNAMENT thenreturn false;endendif world._mapType g_BASE_DUNGEON or world._mapType g_ACTIVITY or world._mapType g_FACTION_DUNGEON or world._mapType g_TOWER or world._mapType g_WEAPON_NPC or world._mapType g_RIGHTHEART or world._mapType g_ANNUNCIATE or world._mapType g_FIGHT_NPC or world._mapType g_Pet_Waken thenif world._openType g_FIELD thenif #world._spawns 0 and not world._curArea then return falseendelselocal spawnID math.abs(g_game_context:GetDungeonSpawnID())if spawnID 0 thenreturn falseendlocal dist nil;if spawnID ~ 0 thenspawnPointID db_spawn_area[spawnID].spawnPoints[1]_pos db_spawn_point[spawnPointID].posdist vec3_dist(entity._curPos,world_pos_to_logic_pos(_pos))if dist and dist 100 thenreturn falseend endendelseif world._mapType g_FIELD or world._mapType g_Life thenif entity._PVPStatus ~ g_PeaceMode thenreturn false;endlocal dist vec3_dist(entity._curPos,entity._AutoFight_Point)if dist radius thenreturn false;endlocal value g_game_context:getAutoFightRadius()if value and value g_OneMap thenreturn false;endelse -- TODOreturn false;endendreturn true; endfunction ai_autofight_find_way:OnEnter()if BASE.OnEnter(self) thenlocal entity self._entity;local radius entity:GetPropertyValue(ePropID_alertRange)local logic game_get_logic();local world game_get_world();if world thenif world._cfg.autofightradius thenradius world._cfg.autofightradiusendif world._mapType g_BASE_DUNGEON or world._mapType g_ACTIVITY or world._mapType g_FACTION_DUNGEON or world._mapType g_TOWER or world._mapType g_WEAPON_NPC or world._mapType g_RIGHTHEART or world._mapType g_ANNUNCIATE or world._mapType g_FIGHT_NPC or world._mapType g_Pet_Waken thenfor k,v in pairs(world._ItemDrops) doif v and v:GetStatus() eSItemDropActive thenlocal _pos logic_pos_to_world_pos(v._curPos)entity:MoveTo(_pos)return false;endendif world._openType g_FIELD thenif #world._spawns 0 or world._curArea thenlocal _pos nil;local isfind falsefor k1,v1 in pairs(world._curArea._spawns) dofor k2,v2 in pairs(v1._monsters) doif not v2:IsDead() thenisfind true;break;endendif isfind then_pos v1._cfg.pos;break;endendif not _pos then_pos world._curArea._spawns[1]._cfg.posend--local _pos world._curArea._spawns[1]._cfg.poslocal dist vec3_dist(entity._curPos,world_pos_to_logic_pos(_pos))local mindist distfor k,v in pairs(world._mapbuffs) doif v and v:GetStatus() 1 thenlocal distbuff vec3_dist(v._curPos,entity._curPos)if distbuff mindist and distbuff db_common.droppick.AutoFightMapbuffAutoRange thenmindist distbuff_pos logic_pos_to_world_pos(v._curPos)endendendentity:MoveTo(_pos)endelselocal _pos nillocal spawnID math.abs(g_game_context:GetDungeonSpawnID())local dist 99999999999;if spawnID ~ 0 thenspawnPointID db_spawn_area[spawnID].spawnPoints[1]_pos db_spawn_point[spawnPointID].posdist vec3_dist(entity._curPos,world_pos_to_logic_pos(_pos)) endlocal mindist distlocal isspawn truefor k,v in pairs(world._mapbuffs) doif v and v:GetStatus() 1 thenlocal distbuff vec3_dist(v._curPos,entity._curPos)if distbuff mindist and distbuff db_common.droppick.AutoFightMapbuffAutoRange thenmindist distbuffisspawn false;_pos logic_pos_to_world_pos(v._curPos)endendendif mindist 150 and isspawn and g_game_context:GetDungeonSpawnID() 0 theng_game_context:SetDungeonSpawnID(0);_pos nil;endif _pos thenentity:MoveTo(_pos)endendelseif world._mapType g_FIELD or world._mapType g_Life thenfor k,v in pairs(world._mapbuffs) doif v and v:GetStatus() 1 thenlocal distbuff vec3_dist(v._curPos,entity._AutoFight_Point)if distbuff radius and distbuff db_common.droppick.AutoFightMapbuffAutoRange thenlocal _pos logic_pos_to_world_pos(v._curPos)entity:MoveTo(_pos)return false;endendendendendreturn false;endreturn false; endfunction ai_autofight_find_way:OnLeave()if BASE.OnLeave(self) thenreturn true;endreturn false; endfunction ai_autofight_find_way:OnUpdate(dTime)if BASE.OnUpdate(self, dTime) thenreturn true;endreturn false; endfunction ai_autofight_find_way:OnLogic(dTick)if BASE.OnLogic(self, dTick) thenreturn false; -- only one frameendreturn false; endfunction create_component(entity, priority)return ai_autofight_find_way.new(entity, priority); end

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

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

相关文章

asp个人网站论文策划公司收费

前言: Hello大家好,我是Dream。 今天来学习一下机器学习实战中的案例:创建客户细分,在此过程中也会补充很多重要的知识点,欢迎大家一起前来探讨学习~ 一、导入数据 在此项目中,我们使用 UCI 机器学习代码库…

宠物网站设计首页模板郑州建站多少钱

项目启动端口被占用 Identify and stop the process that’s listening on port XXXX or configure this application to listen on another port. 1、查询占用端口的pid netstat -aon|findstr "端口号"2、终止进程 taskkill /pid 进程号 /f3、重启项目

义乌外发联合加工网汕头最好的seo外包

大家好,如果您正在准备编程工作面试或正在寻找新工作,那么您知道这不是一个容易的过程。 在您职业的任何阶段,您都必须幸运地接到电话并进行第一轮面试,但是在初学者方面,当您寻找第一份工作时就更加困难。 这就是为什…

网站优化文档智慧校园学生管理系统

最近没事想做个消消乐,然后听说 iVX 免费了,所以又跑去看看 iVX 了,就用一个无代码来看看消消乐怎么玩吧。 首先咱们打开 iVX 的在线编辑器:https://editor.ivx.cn/ 随后咱们不需要游戏类型也可以制作一个消消乐游戏&#xff1a…

我的企业网站怎么seo重庆官方推广网站

原文:版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/qq_38003892/article/details/844951721 核心思想通过最小化方差,使得拟…

wordpress 文章回收站设计网页用什么语言

1.项目结构 djangoProject02 ├── manage.py 【项目的管理,启动项目、创建app、数据管理】【不要动】【常常用】 └── jangoProject02 ├── __init__.py ├── settings.py 【项目配置】 【常常修改】 ├── urls.py …

用php做网站后台上海外包公司排行

要使用Python进行网页爬取,您可以使用Python中的一些库和工具来实现。 常用的Python库和工具包括: Requests:用于发送HTTP请求和获取网页内容。Beautiful Soup:用于解析HTML和XML文档,并从中提取数据。Scrapy&#x…

安徽建设厅网站怎么打不开河北省住房和城乡建设厅官方网站

在当今竞争激烈的商业世界中,提高效率、减少浪费是每个组织都追求的目标。为了达到这一目标,六西格玛管理方法为组织提供了一个卓越的工具。在六西格玛培训中,我们经常会听到“绿带”和“黑带”这两个术语。那么,究竟什么是绿带和…

可以做外链的网站有哪些黄岛王台有做网站的吗

App更换图标 京东淘宝的每到618或者双十一的时候,app图标都会贴合相关主题更换一下,但是那个时间段app也没有升级,所以说肯定是有一个配置能够更改app的图标。 查了一些文档,发现了如下的方法。 准备图片 准备120x120和180x18…

用jsp做网站的难点婚庆网站策划书

一、String对象 1、简单上手 2、构造方法 3、其他方法 3.1、charAt() 3.2、indexOf() 3.3、split() 3.4、substring() 3.5、substr() 4、实际操作 二、Math对象 1、简单上手 2、对象属性 3、对象方法 4、实际操作 三、Date对象 1、简单上手 2、构造方法 3、实…

网站建设的岗位要求吉利的网络营销方式

在前端开发中,CSS(层叠样式表)用于控制网页的样式和布局。了解CSS的语法格式是学习如何设计和美化网页的关键。本文将深入解释CSS的语法格式,包括选择器、属性和值等基本概念,同时提供示例代码以帮助初学者更好地理解。…

帮做动态头像的网站龙川县建设网站

上海电力学院电路计算机辅助设计1--含有受控源电路辅助分析实验三:含有受控源电路辅助分析一、实验目的1. 用回路电流法和节点电压法求解电路中的电流和电压。 2. 掌握线性电路参数的测量的方法。3. 了解四种受控源元件(电流控制的电压源、电流控制的电流源、电压控…

佛山外贸建站公司网站中文名要注册的吗

02JavaScript基础随堂笔记 01.运算符[☆] 知识点-算数运算符 作用就是进行 加, 减, 乘, 除 , 取余运算的 算数运算符的重点是通过算数运算和可以实现类型转换 加号可以实现数据类型转换: 一个数字和一个空字串相加最后的结果就是字符串减号也可以实现数据类型转换乘法符号也可…

ftp怎么设置网站首页广州有哪些做网站的公司

背景:由于项目要对接到grcp 的框架,然后需要对接老外的东西,还有签名和证书刚开始没有接触其实有点懵逼。 gRPC 是由 Google 开发的高性能、开源的远程过程调用(RPC)框架。它建立在 HTTP/2 协议之上,使用 …

网站建设方案书个人柚皮子wordpress主题

前言现在稍微有点规模的系统,很多都是采用分布式/微服务架构,将一个大系统拆分为很多个功能模块进行开发、测试、发布、管理等,如果全部流程都采用人工的形式进行的话,效率肯定是超级不高效滴。而且现在很多项目都采用极限编程的模…

怎样建官方网站北京 企业建网站

建立连接可能涉及到的问题(只需要自己改一下就行) 1、MyBatis是⼀款优秀的 持久层 框架,⽤于简化JDBC的开发 2、数据库连接配置 (1)yml配置 # 数据库连接配置 spring:datasource:url: jdbc:mysql://127.0.0.1:3306/…

南充公司做网站建设南大街小学网站

大数据法律监督平台是基于监督数据整合管理平台、监督模型构建平台、内置模型库以及法律监督线索管理平台打造的一套服务于检察机关法律监督工作的专业化系统。通过数据采集、融合、挖掘、建模、展现等一系列能力,辅助检察官从纷繁复杂的数据中,开展多维…

如何做机票预订网站网站素材设计

实验环境——vulnhub-dc2靶场 git提权 前提:用户可以使用sudo中git权限 查看sudo权限 sudo -l可以发现git命令存在sudo提权 基于此进行权限提升 方式: sudo git help config #在末行命令模式输入 !/bin/bash 或 !sh #完成提权 sudo git -p help…

seo服务器配置seo广告投放

1.若有char w; int x; float y; double z; 则表达式w*xz-y值的数据类型为( )。 (2分) A.float B.char C.int D.double D 解析: 整形和浮点型计算,结果为浮点型;单精度和双精度计算,结果为双精度 因为在计算…