ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:29.35KB ,
资源ID:11632794      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11632794.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(魔兽争霸地图编辑器AI制作.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

魔兽争霸地图编辑器AI制作.docx

1、魔兽争霸地图编辑器AI制作 AI脚本初级教程 ? 【什么是jass AI?】:jass AI是用纯jass编写的AI程序,可以用新建文本文档写或jass工具编写.真三AI以及DOTA AI也是由AI脚本编写.【AI脚本使用方法】:运行地图编辑器 打开你最爱的对战地图,将它以另外一个名字保存(最好放在另外一个文件夹里面) 按F12(或者点Modules(模块)菜单,然后选择Import manager(输入管理器)) 在Import manager(输入管理器)中选择File -Import file (文件 - 输入文件) 选择刚刚建立好的*.ai.文件 鼠标右击已经导入的文件,选择Modif

2、y file properties(修改文件属性) 将文件的后缀名改为.ai?【代码放置】:在文本文档中AI程序代码应如下放置 + Shingo Jass Highlighter 0.41 globals / 这个放全局变量 endglobals function blabla takes blabla returns blabla / 自定义函数 endfunction function main takes nothing returns nothing /主程序在这 Endfunction教程 用T编写简单的AI,让你的电脑变的强大起来 (菜鸟必看)首先要知道一点,对于1般的RPG,对战

3、的AI是没有用处的,如果加了对战AI,电脑就只会造房子出兵,显然这个是我们不需要的如果1个电脑单位没有任何AI,那么它就只拥有以下基本功能,对于旁边的敌人会主动的攻击,会自动放单体的杀伤魔法,(要说明的是,只会随便选择一个单位放技能,而没有针对性),敌人比较多的时候也会放群体的杀伤魔法,也会使用加血的技能和魔法,这些是不需要特殊的AI的就可以办到的.电脑的没有AI的缺点有以下几点1,不会逃跑2,不会学习技能3.不会针对某个特别单位使用技能4,不会使用部分物品和特殊的技能我现在就把ORC3C电脑英雄的沉没的AI简单的给大家介绍一下基本的方法是这样一般的说,ORC的电脑的沉没对冽炎风暴,火焰雨,暴

4、风雪等持续的魔法更有效基本的方法是这样:事件: 任意单位发动技能效果条件:满足任意的下面一个条件 释放的 技能是 暴风雪 释放的 技能是 火焰雨 释放的 技能是 烈炎风暴 释放的 技能是 动作:选择 触发单位 为圆心 范围800 满足条件 (匹配的单位是 英雄 为 TRUE) (匹配单位控制者是 电脑) (匹配单位是 死亡 为 FLASE) (匹配单位是 是触发单位所有者的 敌人 为 TRUE) (匹配的单位所持有的 沉没权仗是 被持有的) 的单位做动作 LOOP 让选择的 单位使用 选择单位 所持有的 沉没权仗 到 触发单位的位置就可以实现AI的沉默效果,一定要加 (匹配单位控制者是 电脑)

5、,否则玩家单位也会被强制使用物品下面偶在讲个DOTA的里面暗影萨满的多个技能连杀的T以暗影萨满11级的为例子 枷锁 LV4 MP 185 闪电 LV4 MP 160 蛇棒LV2 350一个连招 3个魔法一共要消耗700点魔法假使撒满身上有风仗,魔法充足下面如下的写T触发1_事件:任意单位被攻击条件:被攻击的单位是英雄为真 被攻击的单位的生命值低于 70% 被攻击的单位是攻击单位的敌人 被攻击的单位是死亡 为 假 动作: : 设置变量 A= 被攻击的单位 /(为其他的T记录)选择 触发单位 为圆心 范围800 满足条件 (匹配的单位的类型是 暗影撒满 为 TRUE) (匹配单位控制者是 电脑)

6、(匹配单位是 死亡 为 FLASE) (匹配单位是 是触发单位所有者的 敌人 为 TRUE) (匹配的单位所持有的 飓风权仗是 被持有的) 的单位做动作 LOOP 让选择的 单位使用 选择单位 所持有的 飓风权仗 到 被攻击的单位 设置变量 B= 选择的单位 /(为其他的T记录) 命令 B 使用 暗影猎手_毒蛇守卫 到 A 所在的点开启触发器2开启触发器4触发2_初始关闭事件:每0.2事件条件:动作: 选择 A 为圆心 范围200 满足条件 (匹配的单位的类型是 毒蛇守卫LV2 为 TRUE) (匹配单位控制者是 电脑) (匹配单位是 死亡 为 FLASE) (匹配单位是 是触发单位所有者的

7、敌人 为 TRUE) 的单位做动作 LOOP 命令 选取的单位 发布 攻击 到 A触发3_事件:任意单位死亡条件:死亡的单位类型是 毒蛇守卫LV2动作: 关闭 触发2触发4_初始关闭事件:每0.2事件条件:动作:选择 B 为圆心 范围600 满足条件 (匹配的单位的类型是 暗影撒满 为 TRUE) (匹配单位控制者是 电脑) (匹配单位是 死亡 为 FLASE) (匹配单位是 是触发单位所有者的 敌人 为 TRUE) 的单位做动作 LOOP 命令 B 发布 人族 龙鹰骑士_空中锁链 到 A触发5_事件:任意单位 开始释放技能条件:释放的技能是 枷锁动作:关闭 触发4触发6_事件:任意单位 释放

8、技能结束条件:释放的技能是 枷锁动作:命令 B 发布 中立 那家海女巫_叉状闪电 到 A 命令 B 发布 中立 攻击 到 A几个组合的T就可以让电脑使用出强大的组合技能,就就是基本T做的AI下面的几页帖子在继续写其他的方面的AI 呵呵 教程 如何创建一个魔兽RPG的AI系统(转).从某地方挖出的如何创建一个魔兽RPG的AI系统作者:Blade.dk翻译:通魔作坊?onlyxuyang译文: 这篇文章将帮助你制作一个简单但是十分酷的英雄对战地图的人工智能。 这个你将学习的人工智能系统不是非常完美。我们将创建的是一个可以攻击其它英雄、可以自己拣物品、学习和使用技能的人工智能系统,但是还是无法与人类

9、玩家相比。 但是,当你学习了基础的知识以后你应该可以自己改进它。前提需要:JASS基础-这篇文章使用JASS来制作示例,所以你必须了解JASS。在理论上它也可以在T中做出来,但是我不推荐那样做,因为用T来制作可能导致内存泄露、大量不必要的代码以及在T中是无法使用JASS的返回值BUG和游戏缓存系统的。如果你不熟悉JASS,请预先补充一下你自己的JASS知识。你同样必须知道什么是代码行,如果你不知道的话,请补充自己的知识。基于游戏缓存以及返回值BUG的系统注意事项:-我们将要制作的AI系统达不到人类的水平,但是比什么都没有强。而且我认为当你理解了基础以后可以自己改进它。-你不用完全按照我说的做;

10、我按做我的想法做,但是如果你的想法更好或者你觉得自己的做法更舒服,请按照你自己的想法做。我并不完美,这篇文章也不可能完美,但是我希望它可以对你有所帮助。-你可以使用在我的演示地图里面的AI系统而不自己动手(如果你那样做了,请告诉我一声),但是我建议你自己动手写,因为地图可能很复杂而且你可以自己动手写一个AI系统中学到更多的知识。初始化部分:首先在WE中创建一个触发条件为玩家1-玩家1(红色)离开游戏的触发器,然后把它转换为JASS。我们需要这个触发器来监视玩家离开游戏,那样我们才能为这个玩家开启人工智能。现在它只监视一号玩家离开游戏,所以我们在正式地图中需要使用一个循环来监视从0-11号的玩家

11、。我们希望这个AI系统可以使用技能。听起来似乎很难,其实很简单。我们只需要使英雄学习技能,那么他们就可以自己使用。注意:电脑控制的英雄释放自定义技能的情况总是和它释放这个自定义技能的基础技能的情况相同(这里翻译的有点含糊不清,自定义技能的基础技能的意思是.基础技能是游戏本身带有的技能,自定义技能都是以某个基础技能为基础的.这样说做过图的大大应该可以明白吧?).所以如果你的自定义技能是以沉默为基础技能的,电脑控制的英雄就会在对战地图中应该使用沉默的情况使用这个技能。千万不要将技能以通魔(Channel)为基础,因为电脑从来不会使用它们,即使改变技能的OrderString也没有什么用。为了知道每

12、个英雄都拥有什么技能,我们创建了一个游戏缓存(game cache)来保存它。在演示地图中我的触发器在地图的初始化部分创建了一个游戏缓存并将它保存在全局变量 udg_GameCache 中。需要注意的是缓存必须在我们使用它之前初始化,所以我在地图的初始化时间中创建了它。在我的地图中我写了一个函数SetupSkills.在这个AI触发器的InitTrig函数中我使用了库函数ExecuteFunc来开启另外一个线程执行这个函数。这是为了防止地图的初始化时间太长。jass: Copy code我的SetupSkills函数如下:function SetupSkills takes nothing r

13、eturns nothing local string h / Create a local string variable/ Paladin / Here well initialise the Paladins 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

14、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)

15、/ 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( ) loop exitwhen i 11 call TriggerRegisterPlayerEventLeave( gg_trg_AI, Player(i) ) set i = i + 1 en

16、dloop call TriggerAddAction( gg_trg_AI, function PlayerLeaves ) call ExecuteFunc(SetupSkills)endfunction 为英雄开启AI系统为了控制AI我们使用了一个定时器(timer).我写了一个函数StartAI来获取一个单位的类型:英雄(请在演示地图中查看这个函数)。这个函数只是创建一个定时器,并且绑定在这个英雄身上,并且开启这个定时器。这是演示地图中的空的AILoop函数和StartAI函数(这里给的只是一个框架,等下我们将展示一些动作函数,但是你起码必须先把function和endfunction

17、写上去以保证WE不报错) :jass: Copy codefunction AILoop takes nothing returns nothingendfunctionfunction StartAI takes unit hero returns nothing local timer m = CreateTimer() call AttachObject(m, hero, hero) call TimerStart(m, 0, false, function AILoop) set m = nullendfunction 注意,我的这个StartAI函数通过将periodic参数设置为f

18、alse来达到使定时器只执行一次的目的(以后我们还会来讨论它的).现在,你就可以在你的英雄选择系统中当由电脑控制的玩家选择英雄时调用这个函数,并且在玩家离开游戏的时候执行这个函数。检测玩家是否拥有一个英雄,如果它拥有,调用这个函数来开启那个英雄的AI系统。例如:jass: Copy codefunction PlayerLeaves takes nothing returns nothing local player p = GetTriggerPlayer() call DisplayTextToForce(bj_FORCE_ALL_PLAYERS, GetPlayerName(p)+ ha

19、s left the game.) if udg_HeroGetPlayerId(p) != null then call StartAI(udg_HeroGetPlayerId(p) endif set p = nullendfunction 注意:这个函数将使AI系统控制离开的玩家的英雄,但是这也不是必要的,你也可以做别的事情。使这个AI做些什么当定时器终止的时候我们希望它做了这些事情: 如果英雄死亡,等待他复活。 如果英雄将要死亡,命令他移动到地图中心的生命泉水。 如果英雄状态良好,检测是否有敌人在附近。如果有,则命令英雄攻击它。 否则就检测是否有物品在附近,如果有的话,发送一个巧妙 的

20、命令让英雄拣起它。然后命令英雄巡逻到地图的一个随机坐标。 如果英雄是活着的而且有未使用的技能点,学习一个技能。我们由变量的声明开始。注意在我函数里面的实变量e,它定义了在定时器再次启动前所经过的时间,这样我们就可以在英雄死亡的时候等待短一点的时间,而在他攻击的时候等待长一点的时间。这个变量初始化值为5。jass: Copy code局部变量的声明:function AILoop takes nothing returns nothing local string a = GetAttachmentTable(GetExpiredTimer() local unit h = GetTableUn

21、it(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 我们由检测英雄是否死亡开始,如果他死亡了,设

22、置e为1.5(因为在复活以后等待5秒的时间太长了,我们并不想这样).当英雄的生命值l为0时,设置e为1.5来使定时器更加频繁的检测英雄是否复活. if l = 0 then set e = 1.5 endif接着我检测英雄的生命是否低于最大生命值的20%.如果是的,命令英雄移动到生命泉并且设置e为3.当英雄的生命值少于最大生命值的20%时,命令英雄移动到生命泉的位置。 if l 0 and IsPlayerEnemy(GetOwningPlayer(GetFilterUnit(), GetOwningPlayer(GetAttachedUnit(GetExpiredTimer(), hero)

23、endfunction else 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 else call IssueT

24、argetOrder(h, attack, f) endif call DestroyGroup(g) call DestroyBoolExpr(b) endif 如果没有敌人存在,再检测物品.如果发现物品,再检测是否为一个提升状态的物品.如果不是,检测英雄物品栏是否有空栏,有的话就命令英雄将它拣起来.jass: Copy codefunction AISetItem takes nothing returns nothing set bj_lastRemovedItem=GetEnumItem()endfunctionfunction AIItemFilter takes nothing r

25、eturns boolean return IsItemVisible(GetFilterItem() and GetWidgetLife(GetFilterItem() 0endfunctionfunction 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 UnitItemI

26、nSlot(u, 4) = null or UnitItemInSlot(u, 5) = nullendfunction 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_lastRemovedIt

27、em) = ITEM_TYPE_POWERUP or AIHasEmptyInventorySlot(h) then call IssueTargetOrder(h, smart, bj_lastRemovedItem) else endif call RemoveRect(i) call DestroyBoolExpr(be) 如果物品栏没有空位,或者没有发现物品,则命令英雄到一个随机地点寻找新的目标. else set r = GetRandomLocInRect(bj_mapInitialPlayableArea) call IssuePointOrderLoc(h, patrol, r

28、) call RemoveLocation(r) 收藏 分享 linzefei 发短消息 加为好友 linzefei (橙zi 174)当前离线 我从来没出现过主题108 精华2 积分50383 阅读权限120 在线时间3947 小时 最后登录2012-9-11 荣誉版主UID101045 帖子6181 EXP5 影币1445 威望141 荣誉1 贡献4 金币1156 注册时间2007-3-14 沙发 发表于 2008-11-16 05:45 | 只看该作者 - 制图理论 - 对于传统PVE,RPG地图设计的一些看法现在我们需要检测的是英雄是否有未使用的技能点(将这个函数与进攻/拣取物品/前进到随机地点等模块分开).如果英雄有未使用的技能点,调用函数来使英雄学习技能.在

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1