| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
| ##@package NPCAI.AIType_3  | 
| #  | 
| # @todo:ÎïÆ·ÕÙ»½ÊÞAI  | 
| # @author hxp  | 
| # @date 2015-4-16  | 
| # @version 1.0  | 
| #  | 
| # ÏêϸÃèÊö: ÎïÆ·ÕÙ»½ÊÞAI, ÓгðºÞʱ½øÐз´»÷  | 
| #  | 
| #---------------------------------------------------------------------  | 
| """Version = 2015-04-16 15:00"""  | 
| #---------------------------------------------------------------------  | 
|   | 
| import IPY_GameWorld  | 
| import GameWorld  | 
| import NPCCommon  | 
| import BaseAttack  | 
| import ChConfig  | 
| import AICommon  | 
| import GameObj  | 
| #---------------------------------------------------------------------  | 
|   | 
| ## ³õʼ³ðºÞ  | 
| #  @param curNPC ÊµÀý  | 
| #  @return None  | 
| def DoInit(curNPC):  | 
|     curNPC.GetNPCAngry().Init(ChConfig.Def_BossAngryCount)  | 
|     return  | 
|   | 
|   | 
| ## AIÑ»·µ÷ÓÃ  | 
| #  @param curNPC ÊµÀý  | 
| #  @return None  | 
| def ProcessAI(curNPC, tick):  | 
|       | 
|     if not curNPC.IsAlive():  | 
|         #NPCËÀÍö  | 
|         return  | 
|       | 
|     curNPCControl = NPCCommon.NPCControl(curNPC)  | 
|     if curNPC.GetLastTime() != 0 and tick - curNPC.GetBornTime() >= curNPC.GetLastTime():  | 
|         #ÕÙ»½ÊÞ³¬¹ý´æ»îʱ¼ä, ÉèÖÃËÀÍö  | 
|         curNPCControl.SetKilled()  | 
|         return  | 
|   | 
|     if not curNPC.GetCanAttack():  | 
|         curNPC.SetCanAttack(True)  | 
|           | 
|     #Ë¢ÐÂ×Ô¼ºµÄbuff  | 
|     curNPCControl.RefreshBuffState(tick)  | 
|     if GameObj.GetHP(curNPC) == 0 :  | 
|         # BUFFË¢ÐÂÖпÉÄܻᵼÖÂNPCËÀÍö  | 
|         return  | 
|       | 
|     if curNPC.GetCurAction() == IPY_GameWorld.laNPCMove and curNPC.GetCurMoveType() == IPY_GameWorld.mtRun:  | 
|         return  | 
|   | 
|     #Ë¢ÐÂ×Ô¼º³ðºÞ¶ÈÁÐ±í  | 
|     curNPCControl.RefreshAngryList(tick)  | 
|       | 
|     if not curNPC.GetIsNeedProcess():  | 
|         return  | 
|       | 
|     curAngry = curNPCControl.GetMaxAngryTag()  | 
|     if curAngry == None:  | 
|         return  | 
|       | 
|     #¹¥»÷Âß¼  | 
|     __NPCFight(curNPC, curAngry.GetObjID(), curAngry.GetObjType(), tick)  | 
|     return  | 
|   | 
|   | 
| ## Õ½¶·  | 
| #  @param curNPC ÊµÀý  | 
| #  @param tagID ¹¥»÷Ä¿±êID  | 
| #  @param tagType ¹¥»÷Ä¿±êÀàÐÍ  | 
| #  @param tick µ±Ç°Ê±¼ä  | 
| #  @return None  | 
| def __NPCFight(curNPC, tagID, tagType, tick):  | 
|     curNPCControl = NPCCommon.NPCControl(curNPC)  | 
|       | 
|     #¿ªÊ¼¹¥»÷  | 
|     curTag = GameWorld.GetObj(tagID, tagType)  | 
|       | 
|     if curTag == None or GameObj.GetHP(curTag) <= 0:  | 
|         return  | 
|       | 
|     tagDist = GameWorld.GetDist(curNPC.GetPosX(), curNPC.GetPosY(), curTag.GetPosX(), curTag.GetPosY())  | 
|       | 
|     #---ÓÅÏÈÊͷż¼ÄÜ---  | 
|     if AICommon.DoAutoUseSkill(curNPC, curTag, tagDist, tick):  | 
|         return  | 
|   | 
|     #---ÊÍ·ÅÆÕͨ¹¥»÷---  | 
|     if tagDist > curNPC.GetAtkDist():  | 
|         curNPCControl.MoveToObj_Detel(curTag)  | 
|         return  | 
|       | 
|     #¹¥»÷Âß¼  | 
|     if tick - curNPC.GetAttackTick() < curNPC.GetAtkInterval():  | 
|         #¹¥»÷¼ä¸ôûÓе½, ·µ»Ø  | 
|         return  | 
|       | 
|     if curNPCControl.FixTagPos(curTag.GetPosX(), curTag.GetPosY()):  | 
|         #ÐÞÕýÕâ¸öNPCµÄÕ¾Á¢Î»Öà  | 
|         return  | 
|       | 
|     #ÆÕͨ¹¥»÷  | 
|     BaseAttack.Attack(curNPC, curTag, None, tick)  | 
|     return  | 
|   |