| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #  | 
| #  | 
| ##@package AIType_64.py  | 
| #  | 
| # @todo:ÕÙ»½ÊÞAI (Áú¾í·ç)  | 
| #  | 
| # @author jiang  | 
| # @date 2012-07-13  | 
| # @version 1.1  | 
| # @note:  | 
| # @change: "2014-09-13 16:00" hxp Ð޸Ĺ¥»÷ºó²»ÔÙÒÆ¶¯£¬Ôö¼ÓÊͷż¼ÄÜCD  | 
| #  | 
| #------------------------------------------------------------------------------   | 
| """Version = 2014-09-13 16:00"""  | 
| #------------------------------------------------------------------------------   | 
| # µ¼Èë  | 
| import GameWorld  | 
| import IPY_GameWorld  | 
| import ChConfig  | 
| import NPCCommon  | 
| import SkillShell  | 
| import math  | 
| 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):  | 
|       | 
|     #NPCÒÑËÀÍö£¬Ìø³ö  | 
|     if curNPC.IsAlive() != True:  | 
|         return  | 
|       | 
|     #»ñµÃNPC¹ÜÀíÆ÷  | 
|     npcControl = NPCCommon.NPCControl(curNPC)  | 
|     if curNPC.GetLastTime() != 0 and tick - curNPC.GetBornTime() >= curNPC.GetLastTime():  | 
|         npcControl.SetKilled()  | 
|         return  | 
|       | 
|     tagPosX = curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_CycloneTagPosX)  | 
|     tagPosY = curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_CycloneTagPosY)  | 
|   | 
|     if curNPC.GetCurAction() != IPY_GameWorld.laNPCMove:  | 
|         #ÒѾµ½´ïÄ¿±êµã  | 
|         if GameWorld.GetDist(curNPC.GetPosX(), curNPC.GetPosY(), tagPosX, tagPosY) <= 0:  | 
|             npcControl.SetKilled()  | 
|             return  | 
|       | 
|     # MX£º¹¥»÷ºó²»ÔÙÒÆ¶¯  | 
|     if GameWorld.GetMap().IsValidPos(tagPosX, tagPosY) and curNPC.GetCurAction() != IPY_GameWorld.laNPCAttack:  | 
|         curNPC.SetCurAction(IPY_GameWorld.laNPCMove)  | 
|         curNPC.Move(tagPosX, tagPosY)  | 
|           | 
|     #Ë¢ÐÂ×Ô¼º³ðºÞ¶ÈÁÐ±í  | 
|     npcControl.RefreshAngryList(tick)  | 
|       | 
|     #±éÀú³ðºÞÁбíÕÒµ½×î½üµÄ,²¢´¥·¢  | 
|     for i in range(0, 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  | 
|           | 
|         #ÓÐNPC¿¿½ü,µ±³¬¹ý¹¥»÷¾àÀë  | 
|         if GameWorld.GetDist(curNPC.GetPosX(), curNPC.GetPosY(),   | 
|                              curObj.GetPosX(), curObj.GetPosY()) > curNPC.GetSight():  | 
|             continue  | 
|           | 
|         #½øÈëÕ½¶·  | 
|         NPCFight(curNPC, npcControl, curObj, tick)  | 
|       | 
|     return  | 
|   | 
|   | 
| ## npc¹¥»÷Âß¼  | 
| #  @param curNPC µ±Ç°npc  | 
| #  @param npcControl NPC¹ÜÀíÆ÷  | 
| #  @param curObj Ä¿±êʵÀý  | 
| #  @param tick µ±Ç°Ê±¼ä  | 
| #  @return None  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷.  | 
| def NPCFight(curNPC, npcControl, curObj, tick):  | 
|       | 
|     #»ñµÃ¼¼ÄܹÜÀíÆ÷  | 
|     skillManager = curNPC.GetSkillManager()  | 
|       | 
|     #´Ó¼¼ÄܹÜÀíÆ÷,»ñÈ¡¿ÉÒÔʹÓõļ¼ÄÜ  | 
|     curSkill = skillManager.GetSkillByIndex(0)  | 
|       | 
|     if curSkill == None:  | 
|         GameWorld.ErrLog("Áú¾í·ç = %s Êý¾Ý¿â²éÕÒ¼¼ÄÜʧ°Ü"%curNPC.GetName())  | 
|         return  | 
|       | 
|     #¹¥»÷¼ä¸ô  | 
|     if tick - curSkill.GetLastUseTick() < curSkill.GetCoolDownTime():  | 
|         return  | 
|       | 
|     if curNPC.GetCurAction() != IPY_GameWorld.laNPCAttack:  | 
|         curNPC.SetCurAction(IPY_GameWorld.laNPCAttack)  | 
|       | 
|     #´¥·¢¼¼ÄÜ  | 
|     SkillShell.ObjAutoUseSkill(curNPC, curObj, curSkill, tick)  | 
|     return  | 
|   |