在Dota2 AI 开发(一)环境配置 中介绍了如何搭建 Dota2 AI 的开发环境,在这篇文章中,主要介绍Dota2中AI的常规控制方式,并介绍如何在人机比赛中配置一个裸跳刀的Sven。

常用指令

  • 重新加载Lua脚本:dota_bot_reload_scripts
  • 加速游戏:host_timescale 4.0
  • 开启作弊:sv_cheats 1

控制选人

在bots目录下创建一个名为 hero_selection.lua的脚本,在其中输入如下内容:

function Think()if ( GetTeam() == TEAM_RADIANT )thenprint( "selecting radiant" );SelectHero( 0, "npc_dota_hero_antimage" );SelectHero( 1, "npc_dota_hero_lina" );SelectHero( 2, "npc_dota_hero_sven" );SelectHero( 3, "npc_dota_hero_bloodseeker" );SelectHero( 4, "npc_dota_hero_crystal_maiden" );elseif ( GetTeam() == TEAM_DIRE )thenprint( "selecting dire" );SelectHero( 5, "npc_dota_hero_drow_ranger" );SelectHero( 6, "npc_dota_hero_earthshaker" );SelectHero( 7, "npc_dota_hero_juggernaut" );SelectHero( 8, "npc_dota_hero_mirana" );SelectHero( 9, "npc_dota_hero_nevermore" );endend

这就是自定义的英雄阵容了,己方阵容为:

  • 敌法
  • 火女
  • 斯文
  • 血魔
  • 冰女

敌方为:

  • 小黑
  • 小牛
  • 剑圣
  • 白虎
  • 影魔

阵容当然是可以换的,那么如何知道想要的英雄叫什么呢?

更改为英文

在游戏属性设置>设置启动项中添加 -language english即可将界面改成英文,这样就可以知道所有东西的名称了。

比如在上面的敌方阵营中没有T,我希望把影魔换掉,所以我找到DK,它的名字如下:

所以将上面函数选人的最后一行改为:

SelectHero( 9, "npc_dota_hero_abaddon" );

改好后保存,然后在控制台运行

dota_bot_reload_scripts

然后再次创建房间开游戏,就会发现预选的角色变化了

通过这样的方式,相信大家能找到一个合适的阵容,以提高游戏乐趣。当然这也是制作特定角色AI的基础。

控制购买装备

在 Dota2 ai 中,是可以制定不同英雄的出装套路的。只要按照命名规范创建item_purchase_xxxx.lua即可。不过我发现有的道具名字并不是显示的英文名。例如跳刀明明是:

结果到了配置里就是item_blink,这是怎么回事呢?我查了一下午,终于搞明白其中的缘由了。因为道具名称可能会随着道具描述更改,为了保持底层数据的稳定,官方制定了一个对照表。我在gamepedia上找到了一个版本。 应该是比较全的了,另外这个页面里也有英雄名哦。

我觉得有时候找起来实在是麻烦了,所以会直接通过指令给自己调装备测试,例如我刚刚的跳刀,我可以通过指令来尝试来找到名字,如果装备名正确,自己使用的角色身上就会获得它。

-item item_blink_dagger //wrong
-item item_blink //correct

弄清楚了道具名称,我们就可以开始着手制作自己的AI出装了。这里我以Sven为例。

实现

我希望Sven,买完吃喝之后,裸一个跳刀,然后出相位鞋、连击刀、bkb、撒旦、龙心。首先我先在bots目录下创建一个名为:item_purchase_sven.lua的文件,然后编辑如下内容:

local tableItemsToBuy = { "item_tango","item_clarity","item_flask",----------------------"item_blink",---------------------"item_boots", "item_blades_of_attack","item_blades_of_attack",----------------------"item_ogre_axe","item_quarterstaff","item_sobi_mask","item_robe",---------------------- "item_ogre_axe","item_mithril_hammer","item_recipe_black_king_bar",-----------------------"item_lifesteal","item_mithril_hammer","item_reaver",----------------------"item_reaver","item_vitality_booster","item_recipe_heart",};-----------------------------------------------------------------------------local secretShopThreshold = 100000;
local distanceBuyShop = 500;function ItemPurchaseThink()local npcBot = GetBot();if ( #tableItemsToBuy == 0 )thennpcBot:SetNextItemPurchaseValue( 0 );return;endlocal sNextItem = tableItemsToBuy[1];npcBot:SetNextItemPurchaseValue( GetItemCost( sNextItem ) );if ( npcBot:GetGold() >= GetItemCost( sNextItem ) )thenif ( IsItemPurchasedFromSecretShop(sNextItem) and npcBot:DistanceFromSecretShop() <= secretShopThreshold )then--print("Money is enough,Will Move to secret shop for: ",sNextItem);npcBot.secretShopMode = true;local shop_top = Vector(-4600, 1200);local shop_bot = Vector(4600,  -1200);local dist_top = GetUnitToLocationDistance( npcBot, shop_top );local dist_bot = GetUnitToLocationDistance( npcBot, shop_bot );if (dist_top < dist_bot) thennpcBot:Action_MoveToLocation(shop_top);elsenpcBot:Action_MoveToLocation(shop_bot);endif ( npcBot:DistanceFromSecretShop() <= distanceBuyShop ) thenprint("Will buy at secret shop : ",sNextItem," cost is:",tostring(GetItemCost(sNextItem)));npcBot:ActionImmediate_PurchaseItem( sNextItem );table.remove( tableItemsToBuy, 1 );npcBot.secretShopMode = false;endelseprint("Money is enough,Will buy: ",sNextItem," cost is:",tostring(GetItemCost(sNextItem)));npcBot:ActionImmediate_PurchaseItem( sNextItem );table.remove( tableItemsToBuy, 1 );endendend-------------------------------------------------------------------------

需要注意的是不能买合成出的装备,需要自己按配方一个个配置。

配好后难道要等AI自己打出那么多钱来测试么?当然不,通过指令

dota_bot_give_gold 1000

来给所以AI加钱,直接就能看到结果。为了调试可以先把出门用的吃喝注释掉,防止占格子位置。

另外这套AI还有些瑕疵。我发现当角色不在神秘商店附近时是不可以买东西的,所以我写了个逻辑:如果需要买神秘商店的装备,就先将角色移动过去,然后再买。逻辑是这样的没错,不过角色移动的表现会比较傻缺。不管不顾的直接走也就罢了,有时候还会摩擦摩擦。搞了一天又累又饿,既然都能用,就先这样吧,以后有时间再优化,或者有大神路过帮忙看看也好。

总结

最后上个效果图

关注我的微信公众号,获取更多优质内容

Dota2 AI 开发 (二)定制AI阵容 配置英雄出装相关推荐

  1. Dota2 AI 简易开发教程(二)——英雄出装及其相关功能

    距离上一篇教程也过去一个多月了,是时候写一篇新教程了.上一篇文章主要介绍了如何选择阵容和技能的使用,在这一篇文章中,我们将介绍如何配置英雄出装和其相关的一些模块. 勘误 首先先纠正一下上一篇文章中的一 ...

  2. 从神经网络到全栈AI开发,原来AI还能这么用

    2006年起,伴随着深度学习技术的突破,人工智能开始以前所未有的速度在全球范围内快速发展,中国的人工智能技术与实际应用,更是真正走在了世界的前列.现在,人工智能应用已经在工业的各个领域落地结果,也正在 ...

  3. 聆思CSK6视觉AI开发套件使用——AI手势识别+头肩识别+编译helloworld

    前言 在前几天获得了极术社区联合聆思科技的内部试用机会,借助这次机会,体验到了CSK6这块MCU+DSP+NPU的Soc芯片,感受到了它的性能强大. 套件概览 在拿到套件后初步使用感受了一下,套件整体 ...

  4. 华为全栈AI技术干货深度解析,解锁企业AI开发“秘籍”

    摘要:针对企业AI开发应用中面临的痛点和难点,为大家带来从实践出发帮助企业构建成熟高效的AI开发流程解决方案. 在数字化转型浪潮席卷全球的今天,AI技术已经成为行业公认的升级重点,正在越来越多的领域为 ...

  5. (二)Python环境配置:AI实时抠图、AI实时抠像、PaddlePaddle模型、虚拟现实视频会议、沉浸式会议场景

    (二)Python环境配置:AI实时抠图.AI实时抠像.PaddlePaddle模型.虚拟现实视频会议.沉浸式会议场景.人像去背景.图像去背景.视频背景消除 摘要:此文承接上一篇博文,是在软件编程之前 ...

  6. 寻路的几种算法_Godot游戏开发实践之二:AI之寻路新方式

    一.前言 AI 一直是游戏开发中一个热门词汇,当然这不是人工智能的那个 AI ,而是指有着人类思想的 NPC 或者聪明的敌人等等.根据游戏的类型和复杂程度, AI 的实现可以很简单,也可以非常复杂.作 ...

  7. 告别 996,解放开发者,一站式 AI 开发平台助力 AI-Native 时代

    当前,AI 赋能千行百业的愿景仍然处于起步阶段,AI 在很多时候更被认为是很高深需要非常大投入的技术领域,但是 AI 的超高技术门槛给 AI 应用的落地带来了极大的困难. 根据波士顿咨询公司的调研报告 ...

  8. 云原生AI开发平台架构及核心优势

    导读: 云原生AI开发平台以云原生容器服务为基础架构调用云资源,配合大数据计算.人工智能计算以及分布式计算框架,服务于企业的数据分析.模型训练以及AI应用部署需求.借助容器.微服务.无服务器等云原生优 ...

  9. @AI开发者:薅资源,赢大奖,零成本体验AI开发,这场大赛等你来战!

    这是一场志同道合的磨练,这是一场高手云集的组团竞技.秀脑洞.玩创意,3月26日至5月31日,实战的舞台为你开启,「亚马逊云科技线上黑客松2021」等你来战! 有些「人」 表面上是万众瞩目的表演嘉宾 跳 ...

最新文章

  1. 如何安装旧版本的 R 包
  2. 洛谷P4382 劈配
  3. 分享一些好用的 Chrome 扩展
  4. 商品评价 - 实现分页
  5. 是可改写的随机存储器_关于存储器的一些基础知识整理
  6. react学习(37)----获取子组件得实例
  7. 521忘记送大家礼物了,补上!
  8. SpringMVC是单例的
  9. 树莓派_树莓派初体验
  10. 与生命赛跑,Serverless提升AI诊断效率90% | 凌云时刻
  11. esp-idf的内存管理——tlsf之上的封装
  12. 1060驱动java,丽境1060数位板驱动下载
  13. PHP案例 许愿墙 PHP许愿墙
  14. Win7如何查看自己得Win7版本号
  15. 什么是WHQL认证?
  16. matlab求基音频率,语音中提取基音频率matlab程序.doc
  17. mysql 数据库dbhelp_使用JDBC连接MYSQL数据库的问题
  18. 调研-python使用win32com模块操纵excel
  19. 数据说话---如何写好年终总结
  20. 《Linux操作系统 - RK3288开发笔记》第2章 G-3288-02开发环境搭建

热门文章

  1. Timingdesigner timing designer 入门 基础 教程
  2. Python 淘宝商品价格爬取(requests库+正则表达式)
  3. 使用Python批量将PDF转换成图片
  4. Oracle报错:不是单组分组函数
  5. 图灵停机问题(The Halting Problem)
  6. html th中加斜杠,vue element 表头添加斜线
  7. panic: runtime error: invalid memory address or nil pointer dereference
  8. 解决重装win10系统找不到驱动器
  9. Job Shop Schedule 生产调度问题 (一) 简介
  10. [图形学] 基于图像的照明:镜面反射