lost temple 3c ai(ai怎么选英雄啊)
很多朋友对于lost temple 3c ai和lost temple dota 3c ai怎么选英雄啊不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!
lost temple 3c ai 怎么用
我是从这http://bbs.wow8.org/thread-152120-1-1.html帖子转来的很详细,你可以看看.
★1★main程序
+ShingoJassHighlighter0.41
functionmaintakesnothingreturnsnothing
setai_player=Player(GetAiPlayer())
setstart_loc=GetStartLocationLoc(GetPlayerStartLocation(Player(GetAiPlayer()-10)))
ifGetPlayerController(Player(GetAiPlayer()-10))==MAP_CONTROL_COMPUTERthen
setally=true
endif
callSetMeleeAI()//开始对战AI
callSetDefendPlayer(true)//设置单位攻击时防御
callSetHeroesBuyItems(true)//设置英雄自动买物品
callSetHeroesFlee(true)//设置英雄生命值少时自动逃跑
callSetHeroesTakeItems(true)//设置英闷销雄自动捡物品
callSetIgnoreInjured(true)//设置单位冲罩敏忽视伤害(战斗时红血都不自动跑)
callSetPeonsRepair(true)//设置农民自动维修
callSetRandomPaths(true)//设置随机路线(估计在进攻,逃跑随机路线)
callSetSmartArtillery(true)//设置炮兵巧妙攻击。(太近会走开点去攻击?)
callSetTargetHeroes(true)//设置英雄目标。(为主要目标?)
callSetUnitsFlee(true)//设置单位可以逃跑
callSetWatchMegaTargets(true)//开始对战AI
callSetCaptainChanges(true)//设置监视大单位(主要的)。
callCreateCaptains()//创建队长(好像是英雄带领小兵)
callStartThread(functionattack_loop)//开始线程,运行(functionattack_loop)
callStartThread(functioncheck_hp)//开始线程,运行(functioncheck_hp)
endfunction
★2★全局变量
+ShingoJassHighlighter0.41
globals
unitarrayaihero//设置英雄单位
integerhero_num=0//用于计算英雄数量
groupudg_g=CreateGroup()//用于记录AI玩家所有单位
booleanflee=false//设置是否逃跑
booleanfinishMF=false//设置是否散枝MF
booleanattack_enemy=false//设置是否攻击敌人
booleanally=false//设置是否攻击盟友
realratio=1//radio是用于判断生命比的整数
integercount=0//记录游戏开始秒数
locationstart_loc//玩家开始的地方
endglobals
★3★功能程序
+ShingoJassHighlighter0.41
functionsetup_forcetakesnothingreturnsnothing//AI玩家开始寻找生命大于15%可以攻击的英雄进入攻击组
localunitu=null
localintegeri=1
callRemoveInjuries()
callInitAssault()//初始化攻击队伍
if(GetPlayerState(ai_player,PLAYER_STATE_RESOURCE_FOOD_CAP)-80)!=hero_numthen
callGroupEnumUnitsOfPlayer(udg_g,ai_player,null)//选取AI玩家的所有单位
loop
exitwheni>hero_num
callGroupRemoveUnit(udg_g,aihero<i>)
seti=i+1
endloop
loop
setu=FirstOfGroup(udg_g)
exitwhenu==null
ifIsUnitType(u,UNIT_TYPE_HERO)==truethen
sethero_num=hero_num+1
setaihero[hero_num]=u//设置aihero[1~n]=u
endif
callGroupRemoveUnit(udg_g,u)//移除单位u
endloop
callGroupClear(udg_g)//清楚单位组
endif
seti=1
loop
exitwheni>hero_num
ifGetUnitState(aihero<i>,UNIT_STATE_LIFE)/GetUnitState(aihero<i>,UNIT_STATE_MAX_LIFE)>0.15then//选取英雄生命百分比大于15%的(radio是用于判断生命比的整数)
callAddAssault(1,GetUnitTypeId(aihero<i>))//英雄加入攻击组
endif
seti=i+1
endloop
endfunction
functionstart_attacktakesunittargetreturnsnothing//开始攻击
localintegerindex=0
loop
exitwhenCaptainRetreating()andflee//(如果队长逃跑and逃跑是真的)就退出
exitwhenratio==0
exitwhennotUnitAlive(target)//(如果target不是存活的)就退出
exitwhenUnitInvis(target)andnotIsUnitDetected(target,ai_player)//(如果单位隐形and单位侦查)就退出
callAttackMoveKill(target)//攻击移动直到杀死target
callSleep(3)//停止3秒
ifindex>=5then
setindex=0
callsetup_force()//命令AI玩家开始寻找生命大于15%可以攻击的英雄进入攻击组
endif
setindex=index+1
endloop//实际上此loop的功能是每3秒选取英雄去攻击,逃跑的话就停止
setindex=0
loop
exitwhennotCaptainInCombat(true)//当队长不在战斗时就退出
callSleep(2)//停止3秒
ifindex>=8then
setindex=0
callsetup_force()//命令AI玩家开始寻找生命大于15%可以攻击的英雄进入攻击组
endif
setindex=index+1
endloop//实际上此loop的功能是每2秒队长在战斗时选取英雄进入攻击组
endfunction
functionattack_sequencetakesnothingreturnsnothing//战斗顺序(此函数实际是寻找敌人,先寻找敌人的分基地,没有就主基地,找不到就去MF)
localunittarget=null
localunitu=null
ifallythen//如果ally是真的,就做下面动作
settarget=GetAllianceTarget()//设置target是同盟的主基地
iftarget!=nullthen//如果同盟的主基地存在,就做下面动作
setattack_enemy=true//设置攻击敌人开始
callsetup_force()//命令AI玩家开始寻找生命大于15%可以攻击的英雄进入攻击组
callstart_attack(target)//调用开始攻击target的函数
callSetAllianceTarget(null)//
setattack_enemy=false//设置攻击敌人关闭
return//跳过下列动作
endif
endif
ifcount>100andGetRandomInt(0,200+count)>300then//如果count大于100and随机整数0或200+count大于300就做下列动作
setu=CreateUnitAtLoc(ai_player,'h000',start_loc,270)//设置u是新建的单位在开始点
settarget=GetEnemyExpansion()//设置target是敌人的分基地
iftarget!=nullthen//*如果target存在就做下面动作
callKillUnit(u)//杀死u
callSetAllianceTarget(target)//
callsetup_force()//命令AI玩家开始寻找生命大于15%可以攻击的英雄进入攻击组
callstart_attack(target)//调用开始攻击target的函数
return//跳过下列动作
else//*如果target不存在就做下面动作
callStartGetEnemyBase()//开始寻找敌人基地
loop
exitwhennotWaitGetEnemyBase()//当不寻找敌人的时候就退出循环
callSleep(1)
endloop//实际上是每一秒都判断是否寻找的英雄
settarget=GetEnemyBase()//设置target时敌人的主基地
callKillUnit(u)//杀死u
endif
setu=null
iftarget!=nullthen//如果target不等于没有,就做下列动作
setattack_enemy=true//设置攻击敌人开始
callSetAllianceTarget(target)//
callsetup_force()//命令AI玩家开始寻找生命大于15%可以攻击的英雄进入攻击组
callstart_attack(target)//调用开始攻击target的函数
setattack_enemy=false//设置攻击敌人关闭
return//跳过下列动作
endif
endif
settarget=GetCreepCamp(0,R2I(5*hero_num*ratio),false)//设置target是中立敌对单位的营地(中立单位最小的等级为0,最大为5*英雄总数量*ratio,没有飞行单位)
iftarget!=nullthen//如果target存在,就做下列动作
callSetAllianceTarget(target)//
callsetup_force()//命令AI玩家开始寻找生命大于15%可以攻击的英雄进入攻击组
callstart_attack(target)//调用开始攻击target的函数
setfinishMF=true//设置正在MF为真(MF是指打中立怪升级)
return//跳过下列动作
endif
ifGetRandomInt(1,2)==1then//随机整数1或2等于1就做下列动作
settarget=GetCreepCamp(0,R2I(8*hero_num*ratio),false)//设置target是中立敌对单位的营地
iftarget!=nullthen//如果target存在,就做下列动作
callSetAllianceTarget(target)//
callsetup_force()//命令AI玩家开始寻找生命大于15%可以攻击的英雄进入攻击组
callstart_attack(target)//调用开始攻击target的函数
setfinishMF=true//设置正在MF为真(MF是指打中立怪升级)
endif
endif
callSleep(10)//停止10秒
endfunction
functionattack_looptakesnothingreturnsnothing
localintegerindex=0
callSetCaptainHome(0,GetLocationX(start_loc),GetLocationY(start_loc))//设置组在家的点<组,x坐标,y坐标>
callSetCaptainHome(1,GetLocationX(start_loc),GetLocationY(start_loc))//设置组在家的点<组,x坐标,y坐标>,组的参数:ATTACK_CAPTAIN=1;攻击组DEFENSE_CAPTAIN=2;防御组BOTH_CAPTAINS=3攻击和防御组;
loop
callSleep(3)//停止3秒(实际上是进入循环每3秒做下列动作一次)
exitwhenGetPlayerState(ai_player,PLAYER_STATE_RESOURCE_FOOD_CAP)>80//当AI玩家食物多于80就退出循环
endloop
callSleep(2)//停止2秒
callsetup_force()//命令AI玩家开始寻找生命大于15%可以攻击的英雄进入攻击组
loop
setindex=1
loop
callSleep(1)//停止1秒
exitwhenfinishMFandnotflee//当正在MF的时候and不逃跑为真的时候退出循环
callSleep(1)//停止1秒
exitwhennotCaptainRetreating()andratio>0//当队长不逃跑的时候andratio大于0的时候退出循环
exitwhenindex>=10
setindex=index+1
endloop
iffinishMFthen//如果正在MF,就做下列动作
setfinishMF=false//设置不MF
endif
iffleethen//如果正在逃跑,就做下列动作
callSleep(25-ratio*20)//停止25-ratio*20秒(radio是用于判断生命比的整数)
endif
callattack_sequence()//调用攻击函数
endloop
endfunction
functioncheck_hptakesnothingreturnsnothing//检测Hp
localintegeri=0
localrealx=0
localrealy=0
localrealz=0
localrealr1=0
localrealr2=0
localunitu=null
loop
callSleep(3)//停止3秒(实际上是进入循环每3秒做下列动作一次)
setu=GetCreepCamp(0,0,false)//设置u是中立敌对的目标
seti=1
setx=0
sety=0
setz=0
loop
exitwheni>hero_num//当i大于总英雄人数是就退出循环
setr1=GetUnitState(aihero<i>,UNIT_STATE_LIFE)//设置r1是英雄i号的现在生命值(i=1,2.3,......)
setr2=GetUnitState(aihero<i>,UNIT_STATE_MAX_LIFE)//设置r2是英雄i号的最大生命值(i=1,2.3,......)
setx=x+r1//设置x等于x+r1,即循环后所有英雄总的生命值
sety=y+r2//设置y等于x+r2,即循环后所有英雄总的最大生命值
ifr1>0then//如果英雄的生命值大于0,就做下列动作
setz=z+r2//设置z等于z+r2,即循环后所有活着的英雄总的最大生命值
endif
seti=i+1
endloop
ifz>0then//如果Z大于0做下列动作
setratio=x/y//设置ratio等于x/y,即所有英雄现在生命值和最大生命值的比
ifx/z<0.5then//如果所有英雄现在生命值和最大生命值的比小于0.5,就做下列动作
callSetGroupsFlee(true)//设置队伍可以逃跑
setflee=true//设置队伍可以逃跑
else
callSetGroupsFlee(false)//如果不是的话,就设置队伍不能逃跑
setflee=false//设置队伍现在不逃跑
endif
else//如果Z小于0做下列动作
setratio=0//设置radio为0
callSetGroupsFlee(true)//设置队伍可以逃跑
setflee=true//设置队伍现在正在逃跑
endif//实际上每三秒就判断生命值
ifattack_enemythen
callSetGroupsFlee(true)//如果攻击敌人的话
setflee=true//设置队伍可以逃跑
endif
ifcount<200then
setcount=count+1
endif//实际上每三秒就设置count+1
endloop
endfunction
收藏分享110鱼妹莫鱼
lost temple 3c AI 怎么才能让电脑自己选英雄啊
2楼正解,但没有说明白。电脑不可以选英雄。AI紧紧针对队长的,哈,现在还没有人能够开发队员角色那种能力,估计比开发能下国际象棋的深蓝还要难。
理解,都希望能够单机玩这个游戏。
对于你的问题补充回答:那种lt我也玩过,是类似澄海的3C。还有,你不了解AI的制作过程,澄海3C类似于CS的机器人,派渗都有几樱羡哪种套路的,而Lt3c很难设计几套完整的练级路线。
这个回答是最合理,正确的脊码!
lost temple dota 3c ai怎么选英雄啊
我是地图的作者,有什么疑问,可以问我。
-RD模式就不用多作介绍了吧
-AP/-AS/-AA/-AI模式就跟dota的选择誉消一样咯
-random:随机选择一个英雄(只生效一次,rd模式下该命令是没效的)
-reoick:重新选择一个英雄(只生效一次,rd模式下该命令也是没效的,游戏开始前12秒该命令也是没效的)
-AP/-AS/-AA/-AI/-RD:以上这些命令需要由主机(第一个非电脑控制的玩家)键入,而且互不兼容,也就是只能选择一个模式。
双方队长玩家:嗯,是不能选择dota里面的任何液虚坦一个英雄。队长双方玩家的功能正在开发中。目前正闹桐在更新中
...类似与3C,图用的是lost temple的图,要带AI的
最好瞎侍的PK就是《HeroPKv1.18完全终结版》
纯英雄PK图。
下载地搭罩图磨枝吵:http://war3.uuu9.com/Soft/200502/269.shtml
lost temple 3c ai和lost temple dota 3c ai怎么选英雄啊的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!