qw2478hf 发表于 2020-7-5 10:12:31

做了个最简单攻击移动AI

globals
unitaihero                //记录玩家的英雄
unitstore
player aipag                   //记录AI玩家
boolean aitaopao=false          //设置是否逃跑,一开始false表示不在,如果ture表示在
boolean aiattack=false//设置攻击状态,一开始false表示不在攻击,如果ture表示在攻击
boolean aigouwu=false       //设置是否在购买物品,一开始false表示不在,如果ture表示在
boolean aisfjn=false   //设置是否在使用技能,一开始false表示不在,如果ture表示在
boolean aibuxue=false         //判断英雄是否在补血
real ratio=1                //ratio是用于判断生命比的整数
integer count=0             //记录游戏开始秒数
group bug=CreateGroup()         //用于记录AI玩家所有单位
timer t=CreateTimer()
endglobals

function xqyingx takes nothing returns nothing//选取英雄
local unit u=null
call GroupEnumUnitsOfPlayer(bug,aipag,null)   //选取AI玩家的所有单位
loop
set u=FirstOfGroup(bug)                      //设置u是单位组的第一个单位
exitwhen u==null                              //当u为没有单位时
if IsUnitType(u,UNIT_TYPE_HERO)==true then      //如果单位u是英雄
set aihero=u                              //设置aihero就是英雄了
endif
call GroupRemoveUnit(bug,u)                  //移除单位u后,单位组内就没有u这个单位了
endloop
endfunction



function attackrpg takes nothing returns nothing      
local integer cmd
call Sleep(1)
set cmd = WaitForSignal()             // 得到命令被承认,让AI起作用
if cmd == 0 then
call xqyingx()
endif         
loop                                    //开始进入循环
call IssuePointOrderById(aihero, 851983, -1671,-986)                        
call Sleep (1)
endloop
endfunction




function main takes nothing returns nothing
setaipag=Player(GetAiPlayer())      //用变量记录当前的AI玩家为       ai_player                                 
call SetMeleeAI()                           //开始对战AI
call SetHeroesBuyItems(false)                //设置英雄自动买物品
call SetHeroesFlee(false)                  //设置英雄生命值少时自动逃跑
call SetHeroesTakeItems(true)               //设置英雄自动捡物品
call SetIgnoreInjured(true)               //在集结部队进攻时,忽略生命值低于50%的单位   
call SetRandomPaths(true)                     //增加AI的选择目的地的随机性
call SetTargetHeroes(false)                        
call CreateCaptains()                     //创建攻击组
call StartThread(function attackrpg)      // 开始线程,运行(function attack_loop)
call TimerStart(t,99999.,false,null)    //逆推技能CD 判断
endfunction

攻击移动目标点 只要改下坐标点就行了,至于修改 说下T转J 红色BJ不能 移植到AI里 ,单位组的 F开头的选取也不能

附带两个AI里能用的JASS 单位组 call GroupEnumUnitsInRangeOfLoc(g,Loc,Radius,null) 点选取callGroupEnumUnitsInRange(g,X,Y,Radius,null) 坐标选取 其实就是JASS的说.

qw2478hf 发表于 2020-7-5 10:20:01

顺带问下 懂JASS的 大佬, 我做的技能用户使用没有任何BUG ,但只要是电脑位置一用 就出BUG ,比如BUFF 添加出错,选取的单位 只有属性伤害,风暴只锤给不到,但是代码肯定没问题 施法马甲去掉蝗虫也一样 BUG 绝望了

qw2478hf 发表于 2020-7-5 10:24:12

刚开始以为是 调用JASS 选取问题, 换成BJ F开头的选取也一样出问题,最后 马甲的创建全部换成T里的函数 还是出错 ......... 但用户,玩家用 怎么都没BUG 怪事 有人碰到过这种事情么

qw2478hf 发表于 2020-7-5 21:15:29

蝗虫单位 玩家能选取到 ,电脑不行--------------   好像是老问题了 我吐了 好久没碰WE 忘了

qw2478hf 发表于 2020-7-5 21:21:17

解决方法是,设置召唤类型,须移动一次,再选取吐了呀

qw2478hf 发表于 2020-7-6 11:46:16

关于电脑施法   马甲 不施法的BUG 只能关掉AI 得用AI脚本关 .否则电脑能控制 ,造成不放技能,比如锤子 放不出 蜂群放不出 BUFF给不到,但玩家用又正常诡异BUG

qw2478hf 发表于 2020-7-6 12:38:05

研究出两种方法解决 电脑控制马甲 导致不放技能, 添加蝗虫 和设置工人 类型都会被控制 , (最直接的 就把种族 设置成无,这样就不能认别,类型机械类,) 其次就是关闭AI 。 保险点而言 还是设置种族和 类型, 最后添加蝗虫

YCMabc157249 发表于 2021-2-4 09:37:39

支持一下、、、、、、、、。
页: [1]
查看完整版本: 做了个最简单攻击移动AI