##EasyReadMore##

2009年12月22日 星期二

[教程] 通向DIY AI之路系列教程---之司馬懿怎麼S掉自己的N




文章網址:http://bbs.wow8.org/thread-130523-1-1.html

其實這個知識我再7月份發過一次,但現在還是來說下(注意:我基本引用的都是0.51的AI文件裡的函數)

下面我們來看0.51AI文件裡關於控制司馬懿S掉N的那個函數:在comonn.ai的2400行左右。

function CastTargetSkillByOderIdDelayed takes unit TheUnit,integer abilcode,integer Order ,unit TheTaget,real delay returns boolean
local player ThePlayer=ai_player
local integer PlayerID=GetPlayerId(ThePlayer)
local location Loc=null

local boolean Casted
set Loc=GetUnitLoc(TheTaget)

call SetPlayerAbilityAvailable(ThePlayer,abilcode,true)

set Casted=IssuePointOrderByIdLoc(TheUnit,Order,Loc)
call Sleep(delay-0.25)..............註釋:delay的值是2.00
     if not IsUnitInRangeLoc(TheTaget,Loc,250) then
    call IssueImmediateOrder(TheUnit,"stop")
    call debugstr("stop dazhao sima==========================")
    call SetPlayerAbilityAvailable(ThePlayer,abilcode,false)
    call RemoveLocation(Loc)
    set Loc=null
    return false
    endif
call Sleep(0.55)
call SetPlayerAbilityAvailable(ThePlayer,abilcode,false)
call RemoveLocation(Loc)
set Loc=null

return(Casted)
endfunction

函數開始都是jass自定義的局部變量。具體大家看紅色大字那三行。
其實意思是這樣:在AI司馬懿放技能過1.75秒後檢查敵人和技能釋放點的距離要是大於250就命令其S掉。

那麼我們可以在第2行加些限制條件,比如敵人HP小於100.那麼就變成了這樣:


call Sleep(delay-0.25)
     if not IsUnitInRangeLoc(TheTaget,Loc,250)  or GetHP(TheTarge)<100 then
    call IssueImmediateOrder(TheUnit,"stop")

這樣就實現了我的那個AI CN 版本中的敵人HP<100S掉大招


沒有留言:

張貼留言

※怎麼下載?Xuite硬碟MediaFireBadongoSendSpace
※文章可以轉貼嗎?可以,不過要註明出處、標示本站連結。
※載點可以轉貼嗎?不可以,不能盜連。
※建議瀏覽器:Chrome 或 Firefox 或 Opera 或 IE7以上
!請按+1來支持本站!