AI脚本初级教程;??????????;【什么是jassAI?】:jassAI是用纯ja;【AI脚本使用方法】:;①运行地图编辑器;②打开你最爱的对战地图,将它以另外一个名字保存(;⑥鼠标右击已经导入的文件,选择Modifyfil;⑦将文件的后缀名改为.ai;??◥?????????????????????;【代码放置】:在文本文档中AI程序代码应如下放置;
AI脚本初级教程
??????????
【什么是jass AI?】:jass AI是用纯jass编写的AI程序,可以用新建文本文档写或jass工具编写.真三AI以及DOTA AI也是由AI脚本编写.
【AI脚本使用方法】:
①运行地图编辑器
②打开你最爱的对战地图,将它以另外一个名字保存(最好放在另外一个文件夹里面)
③按F12(或者点Modules(模块)菜单,然后选择Import manager(输入管理器))
④在Import manager(输入管理器)中选择File -&Import file (文件 -& 输入文件)
⑤选择刚刚建立好的**.ai.文件
⑥鼠标右击已经导入的文件,选择Modify file properties(修改文件属性)
⑦将文件的后缀名改为.ai
??◥??????????????????????????????????????????????????
【代码放置】:在文本文档中AI程序代码应如下放置
Shingo Jass Highlighter 0.41
// 这个放全局变量
endglobals
function blabla takes blabla returns blabla
// 自定义函数
endfunction
function main takes nothing returns nothing
//主程序在这
Endfunction
[教程] 用T编写简单的AI,让你的电脑变的强大起来 (菜鸟必看)
首先要知道一点,对于1般的RPG,对战的AI是没有用处的,如果加了对战AI,电脑就只会造房子出兵,显然这个是我们不需要的
如果1个电脑单位没有任何AI,那么它就只拥有以下基本功能,对于旁边的敌人会主动的攻击,会自动放单体的杀伤魔法,(要说明的是,只会随便选择一个单位放技能,而没有针对性),敌人比较多的时候也会放群体的杀伤魔法,也会使用加血的技能和魔法,这些是不需要特殊的AI
的就可以办到的.
电脑的没有AI的缺点有以下几点
1,不会逃跑
2,不会学习技能
3.不会针对某个特别单位使用技能
4,不会使用部分物品和特殊的技能
我现在就把ORC3C电脑英雄的沉没的AI简单的给大家介绍一下
基本的方法是这样
一般的说,ORC的电脑的沉没对冽炎风暴,火焰雨,暴风雪等持续的魔法更有效
基本的方法是这样:
事件: 任意单位发动技能效果
条件:满足任意的下面一个条件
释放的 技能是
释放的 技能是
释放的 技能是
释放的 技能是
动作:选择 触发单位 为圆心 范围800
满足条件 (匹配的单位是 英雄 为 TRUE)
(匹配单位控制者是 电脑) (匹配单位是 死亡 为 FLASE) (匹配单位是 是触发单位所有者的 敌人 为 TRUE)
(匹配的单位所持有的 沉没权仗是 被持有的) 的单位做动作
让选择的 单位使用 选择单位 所持有的 沉没权仗 到 触发单位的位置 就可以实现AI的沉默效果,一定要加
(匹配单位控制者是 电脑),否则玩家单位也会被强制使用物品
下面偶在讲个DOTA的里面暗影萨满的多个技能连杀的T
以暗影萨满11级的为例子
枷锁 LV4 MP 185 闪电 LV4 MP 160 蛇棒LV2 350
一个连招 3个魔法一共要消耗700点魔法
假使撒满身上有风仗,魔法充足
下面如下的写T
触发1__________________________________________________________
事件:任意单位被攻击
条件:被攻击的单位是英雄为真
被攻击的单位的生命值低于 70%
被攻击的单位是攻击单位的敌人
被攻击的单位是死亡 为
设置变量 A=
被攻击的单位
//(为其他的T记录)
选择 触发单位 为圆心 范围800
满足条件 (匹配的单位的类型是 暗影撒满 为 TRUE)
(匹配单位控制者是 电脑) (匹配单位是 死亡 为 FLASE) (匹配单位是 是触发单位所有者的 敌人 为 TRUE)
(匹配的单位所持有的 飓风权仗是 被持有的) 的单位做动作
让选择的 单位使用 选择单位 所持有的 飓风权仗 到 被攻击的单位
设置变量 B=
选择的单位
//(为其他的T记录)
命令 B 使用 暗影猎手_毒蛇守卫 到
A 所在的点
开启触发器2
开启触发器4
触发2__________________________________________________________初始关闭 事件:每0.2事件
选择 A 为圆心 范围200
满足条件 (匹配的单位的类型是 毒蛇守卫LV2 为 TRUE)
(匹配单位控制者是 电脑) (匹配单位是 死亡 为 FLASE) (匹配单位是 是触发单位所有者的 敌人 为 TRUE)
的单位做动作
命令 选取的单位 发布 攻击 到 A
触发3__________________________________________________________
事件:任意单位死亡
条件:死亡的单位类型是
毒蛇守卫LV2
关闭 触发2
触发4__________________________________________________________初始关闭 事件:每0.2事件
选择 B 为圆心 范围600
满足条件 (匹配的单位的类型是 暗影撒满 为 TRUE)
(匹配单位控制者是 电脑) (匹配单位是 死亡 为 FLASE) (匹配单位是 是触发单位所有者的 敌人 为 TRUE)
的单位做动作
发布 人族 龙鹰骑士_空中锁链 到 A
触发5__________________________________________________________
事件:任意单位 开始释放技能
条件:释放的技能是 枷锁
动作:关闭 触发4
触发6__________________________________________________________
事件:任意单位 释放技能结束
条件:释放的技能是 枷锁
动作:命令 B
发布 中立 那家海女巫_叉状闪电 到 A
发布 中立 攻击 到 A
几个组合的T就可以让电脑使用出强大的组合技能,就就是基本T做的AI
下面的几页帖子在继续写其他的方面的AI 呵呵
[教程] 如何创建一个魔兽RPG的AI系统(转)
...从某地方挖出的
如何创建一个魔兽RPG的AI系统
作者:Blade.dk
翻译:通魔作坊?onlyxuyang
这篇文章将帮助你制作一个简单但是十分酷的英雄对战地图的人工智能。
这个你将学习的人工智能系统不是非常完美。我们将创建的是一个可以攻击其它英雄、可以自己拣物品、学习和使用技能的人工智能系统,但是还是无法与人类玩家相比。
但是,当你学习了基础的知识以后你应该可以自己改进它。
前提需要:
JASS基础----这篇文章使用JASS来制作示例,所以你必须了解JASS。在理论上它也可以在T中做出来,但是我不推荐那样做,因为用T来制作可能导致内存泄露、大量不必要的代码
以及在T中是无法使用JASS的返回值BUG和游戏缓存系统的。如果你不熟悉JASS,请预先补充一下你自己的JASS知识。你同样必须知道什么是代码行,如果你不知道的话,请补充自己的知识。
基于游戏缓存以及返回值BUG的系统
注意事项:
-我们将要制作的AI系统达不到人类的水平,但是比什么都没有强。而且我认为当你理解了基础以后可以自己改进它。
-你不用完全按照我说的做;我按做我的想法做,但是如果你的想法更好或者你觉得自己的做法更舒服,请按照你自己的想法做。我并不完美,这篇文章也不可能完美,但是我希望它可以对你有所帮助。
-你可以使用在我的演示地图里面的AI系统而不自己动手(如果你那样做了,请告诉我一声),但是我建议你自己动手写,因为地图可能很复杂而且你可以自己动手写一个AI系统中学到更多的知识。
初始化部分:
首先在WE中创建一个触发条件为&玩家1-玩家1(红色)离开游戏&的触发器,然后把它转换为JASS。我们需要这个触发器来监视玩家离开游戏,那样我们才能为这个玩家开启人工智能。现在它只监视一号玩家离开游戏,所以我们在正式地图中需要使用一个循环来监视从0-11号的玩家。
我们希望这个AI系统可以使用技能。听起来似乎很难,其实很简单。我们只需要使英雄学习技能,那么他们就可以自己使用。
注意:电脑控制的英雄释放自定义技能的情况总是和它释放这个自定义技能的基础技能的情况相同(这里翻译的有点含糊不清,自定义技能的基础技能的意思是....基础技能是游戏本身带有的技能,自定义技能都是以某个基础技能为基础的...这样说做过图的大大应该可以明白吧?).所以如果你的自定义技能是以沉默为基础技能的,电脑控制的英雄就会在对战地图中应该使用沉默的情况使用这个技能。千万不要将技能以&通魔(Channel)&为基础,因为电脑从来不会使用它们,即使改变技能的OrderString也没有什么用。
为了知道每个英雄都拥有什么技能,我们创建了一个游戏缓存(game cache)来保存它。
在演示地图中我的触发器在地图的初始化部分创建了一个游戏缓存并将它保存在全局变量 udg_GameCache 中。需要注意的是缓存必须在我们使用它之前初始化,所以我在地图的初始化时间中创建了它。
在我的地图中我写了一个函数SetupSkills.在这个AI触发器的InitTrig函数中我使用了库函数ExecuteFunc来开启另外一个线程执行这个函数。这是为了防止地图的初始化时间太长。
我的SetupSkills函数如下:
function SetupSkills takes nothing returns nothing
三亿文库包含各类专业文献、外语学习资料、文学作品欣赏、应用写作文书、各类资格考试、中学教育、38魔兽争霸地图编辑器.AI制作等内容。
1 魔兽争霸 AI 编辑器教程接触魔兽地图编辑器(以下简称 WE)也有两年了,两年来...战役地图中可以选择编辑其他种族如达拉内尔或 邪恶 Orc) 这里我就用人族来做介绍... 《魔兽争霸3》地图编辑器教学(推荐他人)_电脑基础知识_IT/计算机_专业资料。推荐...AI 编辑器(F8)--让焦点位于 AI 编辑器。 对象管理器(F8)--管理和集中参考... 本 文将以四大编辑器为主线介绍 WE,并以官方 RPG 地图 WarChasers 的制作方法...《魔兽争霸3》地图编辑器... 32页 1下载券
魔兽争霸地图编辑器.AI制... ... 魔兽地图编辑器教程—鹰... 7页 免费 魔兽争霸Ⅲ 地图制作入门... 8页 1下载...魔兽地图制作教程星期三 20:27 区域,对话,变量 基本的启动什么的就不说了,先... 星际争霸地图编辑器用法_游戏_生活休闲。著名的玻璃渣出品的即时战略游戏星际争霸...星际 RPG 地图制作(三)AI 的使用 首先大家应该知道的是 AI 脚本有两大类: ... 魔兽地图编辑器教程—鹰 (二)_IT/计算机_专业资料。魔兽地图编辑器教程—鹰 (二)大家好, 欢迎大家再次阅看我的教程,接下来,我们来看看魔兽争霸 三世界编辑器的... 说到魔兽争霸 3 大家肯定不会陌生,那么各位在玩过...如果想要关闭在打开编辑器的同时创建新地图的功能,...AI scripts (for computer players) //让电脑玩家... 地图编辑器翻译1。魔兽地图编辑器的中英文互译 地图编辑器——触发器翻译 Map ...普通 一些基本的未分类指令 AI AI 设定计算机控制的单位的人工智能 Animation 动画... 突袭2地图编辑***方说明书中文版临时修订版_计算机...单机任务 中,玩家 1(玩家)和玩家 3(AI 控制的...要这么做,按住 shift 并点 击。比如,选了“德国...> 文章正文
名称:魔兽争霸DOTA6.77AI中文版下载 最新ai地图
运行环境:WinXP, WinVista, Win7
地图说明:
巴士小编为您带来DOTA最新ai地图下载。本版为DOTA6.77AI中文版地图,版本号1.1.6。
官方DotA AI地图作者PBMN在更新了DotA v6.74c AI地图之后,DotA地图又经历了几次大的更新并添加了寒冬飞龙和弧光守望者两个新英雄,同时对于英雄、物品等游戏数据做了大幅的调整,为此国内地图作者&&百度魔兽地图编辑器吧0飞鸟各投林0在DotA v6.74c AI的蓝本基础上制作了DotA6.77 AI 1.1.6中文非官方版地图。钟情DotA AI地图的玩家赶快下载体验一下吧!
使用方法:
下载解压,得到后缀为.w3x的地图文件,将该地图文件复制到魔兽争霸3文件夹的Maps/Download/目录下(一般默认放在此文件夹),随后启动魔兽争霸3游戏,在创建游戏中找到并选用此图,调整相应玩家和AI数量并启动游戏即可。
名称:DOTA6.77AI地图
英文:DOTA6.77AI
语言:中文
游戏类型:地图包
文件大小:8 MB
文件:.rar魔兽争霸地图编辑器.AI制作21-第2页
上亿文档资料,等你来发现
魔兽争霸地图编辑器.AI制作21-2
localstringh//Createaloc;//Paladin//Herewe’llinit;seth=UnitId2String(';callStoreInteger(udg_Gam;callStoreInteger(udg_Gam;callStoreInteger(udg_Gam;callStoreInteger(udg_Gam;?//Re
local string h // Create a local string variable
// Paladin // Here we’ll initialise the Paladin’s skills, repeat this for all other heroes
set h = UnitId2String('Hpal') // Store the returned value of UnitId2String(‘Hpal’) in the local
call StoreInteger(udg_GameCache, h, &BaseSkill1&, 'AHhb') // One of his base skills is Holy Light, store it as “BaseSkill1”
call StoreInteger(udg_GameCache, h, &BaseSkill2&, 'AHds') // Store Divine Shield as “BaseSkill2”
call StoreInteger(udg_GameCache, h, &BaseSkill3&, 'AHad') // Store Devotion Aura as “BaseSkill3”
call StoreInteger(udg_GameCache, h, &UltimateSkill&, 'AHre') // Store Resurrection as his “UltimateSkill”
? // Repeat for each Hero.
endfunction
接着是我的AI触发器的InitTrig部分:
function InitTrig_AI takes nothing returns nothing
local integer i = 0
set gg_trg_AI = CreateTrigger(
exitwhen i & 11
call TriggerRegisterPlayerEventLeave( gg_trg_AI, Player(i) )
set i = i + 1
call TriggerAddAction( gg_trg_AI, function PlayerLeaves )
call ExecuteFunc(&SetupSkills&)
endfunction
为英雄开启AI系统
为了控制AI我们使用了一个定时器(timer).我写了一个函数StartAI来获取一个单位的类型:英雄(请在演示地图中查看这个函数)。这个函数只是创建一个定时器,并且&绑定&在这个英雄身上,并且开启这个定时器。
这是演示地图中的空的AILoop函数和StartAI函数(这里给的只是一个框架,等下我们将展示一些动作函数,但是你起码必须先把function和endfunction写上去以保证WE不报错) :
function AILoop takes nothing returns nothing
endfunction
function StartAI takes unit hero returns nothing
local timer m = CreateTimer()
call AttachObject(m, &hero&, hero)
call TimerStart(m, 0, false, function AILoop)
set m = null
endfunction
注意,我的这个StartAI函数通过将periodic参数设置为false来达到使定时器只执行一次的目的(以后我们还会来讨论它的).
现在,你就可以在你的英雄选择系统中当由电脑控制的玩家选择英雄时调用这个函数,并且在玩家离开游戏的时候执行这个函数。检测玩家是否拥有一个英雄,如果它拥有,调用这个函数来开启那个英雄的AI系统。例如:
function PlayerLeaves takes nothing returns nothing
local player p = GetTriggerPlayer()
call DisplayTextToForce(bj_FORCE_ALL_PLAYERS, GetPlayerName(p)+& has left the game.&)
if udg_Hero[GetPlayerId(p)] != null then
call StartAI(udg_Hero[GetPlayerId(p)])
set p = null
endfunction
注意:这个函数将使AI系统控制离开的玩家的英雄,但是这也不是必要的,你也可以做别的事情。
使这个AI做些什么
当定时器终止的时候我们希望它做了这些事情:
●如果英雄死亡,等待他复活。
●如果英雄将要死亡,命令他移动到地图中心的生命泉水。
●如果英雄状态良好,检测是否有敌人在附近。如果有,则命令英雄攻击它。
否则就检测是否有物品在附近,如果有的话,发送一个巧妙
的命令让英雄拣起它。然后命令英雄巡逻到地图的一个随机坐标。
●如果英雄是活着的而且有未使用的技能点,学习一个技能。
我们由变量的声明开始。注意在我函数里面的实变量&e&,它定义了在定时器再次启动前所经过的时间,这样我们就可以在英雄死亡的时候等待短一点的时间,而在他攻击的时候等待长一点的时间。这个变量初始化值为5。
局部变量的声明:
function AILoop takes nothing returns nothing
local string a = GetAttachmentTable(GetExpiredTimer())
local unit h = GetTableUnit(a, &hero&)
local rect i
local location r
local real x = GetUnitX(h)
local real y = GetUnitY(h)
local group g
local boolexpr b
local boolexpr be
local unit f
local string o = OrderId2String(GetUnitCurrentOrder(h))
local real l = GetUnitState(h, UNIT_STATE_LIFE)
local real e = 5
我们由检测英雄是否死亡开始,如果他死亡了,设置&e&为1.5(因为在复活以后等待5秒的时间太长了,我们并不想这样).
当英雄的生命值&l&为0时,设置&e&为1.5来使定时器更加频繁的检测英雄是否复活. ?
if l &= 0 then
set e = 1.5
接着我检测英雄的生命是否低于最大生命值的20%.如果是的,命令英雄移动到生命泉并且设置&e&为3.
当英雄的生命值少于最大生命值的20%时,命令英雄移动到生命泉的位置。
if l & GetUnitState(h, UNIT_STATE_MAX_LIFE)/5 then
call IssuePointOrder(h, &move&, GetUnitX(gg_unit_nfoh_0001), GetUnitY(gg_unit_nfoh_0001))
如果英雄的状态良好,检测他是否处在一个普通命令中(防止它打断了通魔技能).如果是一个标准命令,我们再检测在500的半径内是否有敌人存在.如果存在敌人,简单的发出一个攻击命令(不要改变&e&的值,5秒对于这个情况刚刚好).
function AIFilterEnemyConditions takes nothing returns boolean
return GetUnitState(GetFilterUnit(), UNIT_STATE_LIFE) & 0 and IsPlayerEnemy(GetOwningPlayer(GetFilterUnit()),
GetOwningPlayer(GetAttachedUnit(GetExpiredTimer(), &hero&)))
endfunction
if ((o == &smart&) or (o == &attack&) or (o == &patrol&) or (o == &move&) or (o == &stop&) or (o == &hold&) or (o == null)) then
set g = CreateGroup()
set b = Condition(function AIFilterEnemyConditions)
call GroupEnumUnitsInRange(g, x, y, 500, b)
set f = FirstOfGroup(g)
if f == null then
call IssueTargetOrder(h, &attack&, f)
call DestroyGroup(g)
call DestroyBoolExpr(b)
如果没有敌人存在,再检测物品.如果发现物品,再检测是否为一个提升状态的物品.如果不是,检测英雄物品栏是否有空栏,有的话就命令英雄将它拣起来.
function AISetItem takes nothing returns nothing
set bj_lastRemovedItem=GetEnumItem()
endfunction
function AIItemFilter takes nothing returns boolean
return IsItemVisible(GetFilterItem()) and GetWidgetLife(GetFilterItem()) & 0 endfunction
function AIHasEmptyInventorySlot takes unit u returns boolean
return UnitItemInSlot(u, 0) == null or UnitItemInSlot(u, 1) == null or UnitItemInSlot(u, 2) == null or UnitItemInSlot(u, 3) == null or UnitItemInSlot(u,
4) == null or UnitItemInSlot(u, 5) == null
endfunction
if f == null then
set i = Rect(x-800, y-800, x+800, y+800)
set be = Condition(function AIItemFilter)
set bj_lastRemovedItem=null
call EnumItemsInRect(i, be, function AISetItem)
if bj_lastRemovedItem != null and (GetItemType(bj_lastRemovedItem) == ITEM_TYPE_POWERUP or AIHasEmptyInventorySlot(h)) then
call IssueTargetOrder(h, &smart&, bj_lastRemovedItem)
call RemoveRect(i)
call DestroyBoolExpr(be)
如果物品栏没有空位,或者没有发现物品,则命令英雄到一个随机地点寻找新的目标. ?
set r = GetRandomLocInRect(bj_mapInitialPlayableArea)
call IssuePointOrderLoc(h, &patrol&, r)
call RemoveLocation(r)
linzefei 发短消息
linzefei (橙zi 174)当前离线
我从来没出现过
主题108 精华2 积分50383 阅读权限120 在线时间3947 小时 最后登录
三亿文库包含各类专业文献、行业资料、应用写作文书、外语学习资料、专业论文、生活休闲娱乐、文学作品欣赏、高等教育、中学教育、魔兽争霸地图编辑器.AI制作21等内容。
1 魔兽争霸 AI 编辑器教程接触魔兽地图编辑器(以下简称 WE)也有两年了,两年来...战役地图中可以选择编辑其他种族如达拉内尔或 邪恶 Orc) 这里我就用人族来做介绍... 本 文将以四大编辑器为主线介绍 WE,并以官方 RPG 地图 WarChasers 的制作方法...《魔兽争霸3》地图编辑器... 32页 1下载券
魔兽争霸地图编辑器.AI制... ... 《魔兽争霸3》地图编辑器教学(推荐他人)_电脑基础知识_IT/计算机_专业资料。推荐...AI 编辑器(F8)--让焦点位于 AI 编辑器。 对象管理器(F8)--管理和集中参考... 截图: ①什么是魔兽地图编辑器! 没什么好说的,是魔兽争霸的副产品。 英文全名...(暴雪) 编辑器主要构成: 地形编辑器(F3) 声音编辑器 F5) ( AI 编辑器 F8... 说到魔兽争霸 3 大家肯定不会陌生,那么各位在玩过...如果想要关闭在打开编辑器的同时创建新地图的功能,...AI scripts (for computer players) //让电脑玩家... 魔兽地图编辑器教程—鹰 (二)_IT/计算机_专业资料。魔兽地图编辑器教程—鹰 (二)大家好, 欢迎大家再次阅看我的教程,接下来,我们来看看魔兽争霸 三世界编辑器的... 星际争霸地图编辑器用法_游戏_生活休闲。著名的玻璃渣出品的即时战略游戏星际争霸...星际 RPG 地图制作(三)AI 的使用 首先大家应该知道的是 AI 脚本有两大类: ... 地图编辑器,顾名思义,就是用来编辑地图的工具,如果玩过魔兽争霸或是帝国时代2,英雄无 敌的话,应该会知道这几款游戏都附有地图编辑工具,可提供玩家自行编辑地图... 突袭2地图编辑***方说明书中文版临时修订版_计算机...单机任务 中,玩家 1(玩家)和玩家 3(AI 控制的...要这么做,按住 shift 并点 击。比如,选了“德国...