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