| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
| ##@package NPCAI.AIType_223  | 
| #  | 
| # @todo:×·×ÙÔ¤¾¯×Ô±¬  | 
| # @author hxp  | 
| # @date 2017-11-23  | 
| # @version 1.0  | 
| #  | 
| # ÏêϸÃèÊö: ×·×ÙÔ¤¾¯×Ô±¬AI£¬»á×Ô¶¯×·×ÙÊÓÒ°Äڿɹ¥»÷Ä¿±ê£¬ÔÚNPC¹¥»÷·¶Î§ÄÚ»áÔ¤¾¯×Ô±¬  | 
| #  | 
| #-------------------------------------------------------------------------------  | 
| #"""Version = 2017-11-23 22:00"""  | 
| #-------------------------------------------------------------------------------  | 
|   | 
| import ChConfig  | 
| import NPCCommon  | 
| import SkillShell  | 
| import GameWorld  | 
| import AICommon  | 
| import GameObj  | 
| #---------------------------------------------------------------------  | 
|   | 
|   | 
|   | 
| #---------------------------------------------------------------------  | 
| ## ³õʼ»¯  | 
| #  @param curNPC µ±Ç°npc  | 
| #  @return None  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷.  | 
| def DoInit(curNPC):  | 
|     curNPC.GetNPCAngry().Init(ChConfig.Def_SummonNPC_Angry_Count)  | 
|     return  | 
|   | 
| ## Ö´ÐÐAI  | 
| #  @param curNPC µ±Ç°npc  | 
| #  @param tick µ±Ç°Ê±¼ä  | 
| #  @return None  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷.  | 
| def ProcessAI(curNPC, tick):  | 
|     #1.¼ì²éÕâ¸öNPCµÄ³ðºÞÁÐ±í£¬ Èç¹û³ðºÞÁбíΪ¿Õ£¬ ²»´¦Àí  | 
|     if curNPC.IsAlive() != True:  | 
|         #NPCËÀÍö, ½øÈëËÀÍöµ¹¼ÆÊ±  | 
|         return  | 
|       | 
|     #»ñµÃNPC¹ÜÀíÆ÷  | 
|     npcControl = NPCCommon.NPCControl(curNPC)  | 
|   | 
|     skillWarnRet = AICommon.DoNPCSkillWarningProcess(curNPC, tick)  | 
|     if skillWarnRet > 0:  | 
|         if skillWarnRet == 1:  | 
|             #GameWorld.DebugLog("Ô¤¾¯×Ô±¬½áÊø...")  | 
|             npcControl.SetKilled()  | 
|         return  | 
|       | 
|     if curNPC.GetLastTime() != 0 and tick - curNPC.GetBornTime() >= curNPC.GetLastTime():  | 
|         __DoDestructWarn(npcControl, curNPC, tick)  | 
|         return  | 
|       | 
|     #Ë¢ÐÂ×Ô¼º³ðºÞ¶ÈÁÐ±í  | 
|     npcControl.RefreshAngryList(tick)  | 
|       | 
|     #±éÀú³ðºÞÁÐ±í  | 
|     for i in xrange(curNPC.GetNPCAngry().GetAngryCount()):  | 
|         curAngry = curNPC.GetNPCAngry().GetAngryValueTag(i)  | 
|         if curAngry == None or curAngry.GetObjID() == 0:  | 
|             continue  | 
|           | 
|         curObj = GameWorld.GetObj(curAngry.GetObjID(), curAngry.GetObjType())  | 
|         if curObj == None or GameObj.GetHP(curObj) <= 0:  | 
|             continue  | 
|           | 
|         # ³¬³ö¹¥»÷¾àÀ룬ÏòÄ¿±êÒÆ¶¯  | 
|         if GameWorld.GetDist(curNPC.GetPosX(), curNPC.GetPosY(), curObj.GetPosX(), curObj.GetPosY()) > curNPC.GetAtkDist():  | 
|             npcControl.MoveToObj_Detel(curObj)  | 
|         else:  | 
|             # ×Ô±¬Ô¤¾¯  | 
|             __DoDestructWarn(npcControl, curNPC, tick)  | 
|               | 
|         return  | 
|           | 
|     # Ã»ÓÐÕÒµ½Ä¿±êÔòËæ»úÒÆ¶¯  | 
|     AICommon.NormalNPCFree_Move(curNPC, tick)  | 
|     return  | 
|   | 
| def __DoDestructWarn(npcControl, curNPC, tick):  | 
|     #GameWorld.DebugLog("Ö´ÐÐ×Ô±¬Ô¤¾¯...")  | 
|     skillManager = curNPC.GetSkillManager()  | 
|     #´Ó¼¼ÄܹÜÀíÆ÷,»ñÈ¡¿ÉÒÔʹÓõļ¼ÄÜ  | 
|     curSkill = skillManager.GetSkillByIndex(0)  | 
|     if not curSkill:  | 
|         return  | 
|       | 
|     if SkillShell.NPCUseSkillWarn(curNPC, None, curSkill, tick):  | 
|         return  | 
|       | 
|     SkillShell.NPCUseSkill(curNPC, curSkill, tick)  | 
|     npcControl.SetKilled()  | 
|     return  | 
|   | 
|   |