##EasyReadMore##

2009年12月22日 星期二

[教程] 通向DIY AI之路系列教程---之關羽是如何實現完美貼人




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

本帖最後由 ROUSTAR31 於 2009-11-5 14:42 編輯

大家一定覺得電腦關羽的風車貼人很犀利吧。

那麼我來剖析下關羽貼人在AI文件裡是怎麼一個原理。

下面來看關羽施法部分的貼人函數。由於牽扯到比較多的內容,我盡量詳細點。

if HeroD!=null  and IsImmune(mHero)  then
    set zs_action_prioty_arry[54]=90
endif
if HeroD!=null  and IsImmune(mHero) and mHeroLevel>11 and MyHeroHP>500  then
    set zs_action_prioty_arry[54]=103
endif

這是從關羽的施法條件函數里截取出來的。

HeroD是敵方英雄,mHero是AI自己。ISmmune是判斷目標是否魔法免疫

那麼綠色那部分意思就是:如果在檢測範圍內敵人武將存在,且自己是魔法免疫的那麼定義54號施法函數的優先級為90.

又牽扯到優先級的問題,基本這個是數字越大,優先級越高。優先級懂嗎?就是如果AI某個時間能同時做幾件事,那麼是那個優先級數字高的先起作用。

紅色那行其實就是對關羽血量和風車等級判斷後,讓54號施法函數優先級進一步提高到103。

好的,那麼看完了條件,我們來看動作。

if index==54 then
   if rangeToHeroD>400 and can_UseFeiXie(mHero) then
   set loc=GetLocBetweenTwoUnitsRangeToFirst(HeroD,mHero,-180)
   call UseFeiXie(loc)
   call RemoveLocation(loc)
   set loc=null
   endif
   if (rangeToHeroD>260 or GetUnitMoveSpeed(HeroD)>390) and can_TuiMoDao(mHero) then
    call UseTuiMoDao(HeroD)
   endif
  

先來看,這部分是什麼意思。

我來個翻譯吧。

假如施法函數號=54,那麼
  假如離敵人距離>400,且自己可以使用飛鞋,那麼
   設置點變量loc=獲取自己和敵人直線方向上距離敵人-180的點,方向為自己指向敵人。
   命令使用飛鞋飛到點loc。
   釋放點。
  清空點的handle.
  結束
假如離敵人距離大於260或者敵人移動速度>390 且自己可以使用退魔刀,那麼
   對敵人使用退魔刀
 

————————————偶是分割線————————————————————————
   set loc=GetLocBetweenTwoUnitsRangeToFirst(HeroD,mHero,-180)
   call gotoLocation(mHero,loc,30)
   call RemoveLocation(loc)
   set loc=null
   call Sleep(0.2)

——————————講解關鍵部分————————————
上面的就是跟人函數了,就是每隔0.2秒獲取自己和敵人180範圍內的點,然後走到這個點30範圍內。
無敵跟人就是這樣的了。


沒有留言:

張貼留言

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