#!/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  
 | 
  
 | 
  
 |