#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
#-------------------------------------------------------------------------------  
 | 
#  
 | 
##@package NPCAI.AIType_197  
 | 
#  
 | 
# @todo:ÅÜÅÜÅÜ  
 | 
# @author hxp  
 | 
# @date 2017-11-25  
 | 
# @version 1.0  
 | 
#  
 | 
# ÏêϸÃèÊö: ÅÜÅÜÅÜ  
 | 
#  
 | 
#-------------------------------------------------------------------------------  
 | 
#"""Version = 2017-11-25 16:00"""  
 | 
#-------------------------------------------------------------------------------  
 | 
import IPY_GameWorld  
 | 
import IpyGameDataPY  
 | 
import GameWorld  
 | 
import NPCCommon  
 | 
import OperControlManager  
 | 
import ChConfig  
 | 
import GameObj  
 | 
#-------------------------------------------------------------------------------  
 | 
Def_NPCKey_PointIndex = "PointIndex" # µ±Ç°Ä¿±êµãË÷Òý  
 | 
  
 | 
## ³õʼ»¯  
 | 
#  @param curNPC µ±Ç°npc  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def DoInit(curNPC):  
 | 
    return  
 | 
  
 | 
def OnNPCReborn(curNPC):  
 | 
    curNPC.SetDict(Def_NPCKey_PointIndex, 0)  
 | 
    #curNPC.SetVisible(True)  
 | 
    curNPC.SetIsNeedProcess(True)  
 | 
    return  
 | 
  
 | 
## Ö´ÐÐAI  
 | 
#  @param curNPC µ±Ç°npc  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def ProcessAI(curNPC, tick):  
 | 
    curNPCAction = curNPC.GetCurAction()  
 | 
      
 | 
    if curNPCAction == IPY_GameWorld.laNPCDie or not curNPC.IsAlive():  
 | 
        return  
 | 
      
 | 
    npcControl = NPCCommon.NPCControl(curNPC)  
 | 
    #Ë¢ÐÂ×Ô¼ºµÄbuff  
 | 
    npcControl.RefreshBuffState(tick)  
 | 
    if GameObj.GetHP(curNPC) == 0 :  
 | 
        # BUFFË¢ÐÂÖпÉÄܻᵼÖÂNPCËÀÍö  
 | 
        return  
 | 
      
 | 
    ai197PointDict = IpyGameDataPY.GetFuncEvalCfg("AI197Point")  
 | 
    mapID = GameWorld.GetMap().GetMapID()  
 | 
    # Ö§³ÖJson¸ñʽkey£¬¿Í»§¶ËÐèÒªÓõ½  
 | 
    if str(mapID) in ai197PointDict:  
 | 
        movePointList = ai197PointDict[str(mapID)]  
 | 
    elif mapID in ai197PointDict:  
 | 
        movePointList = ai197PointDict[mapID]  
 | 
    else:  
 | 
        GameWorld.ErrLog("µØÍ¼Ã»ÓÐÅäÖÃAI197NPCÅÜÅÜÅÜÒÆ¶¯Ä¿±êÏß·µã£¡mapID=%s" % mapID)  
 | 
        return  
 | 
    if not movePointList:  
 | 
        return  
 | 
    pointIndex = curNPC.GetDictByKey(Def_NPCKey_PointIndex)  
 | 
    destPosX, destPosY = movePointList[pointIndex]  
 | 
    curPosX, curPosY = curNPC.GetPosX(), curNPC.GetPosY()  
 | 
    curDis = GameWorld.GetDist(curPosX, curPosY, destPosX, destPosY)  
 | 
    #Èç¹ûÀëÄ¿±êµã±È½Ï½üµÄ»° È¡ÏÂÒ»¸öÄ¿±êµã  
 | 
    while curDis <= 6 and pointIndex < len(movePointList) - 1:  
 | 
        pointIndex += 1  
 | 
        curNPC.SetDict(Def_NPCKey_PointIndex, pointIndex)  
 | 
        destPosX, destPosY = movePointList[pointIndex]  
 | 
        curDis = GameWorld.GetDist(curPosX, curPosY, destPosX, destPosY)  
 | 
          
 | 
    if curDis != 0:  
 | 
        if curNPC.GetCurAction() == IPY_GameWorld.laNPCMove:  
 | 
            return  
 | 
          
 | 
          
 | 
        #²»¿ÉÒÆ¶¯ÐÐΪ״̬, ·þÎñ¶ËÏÞÖÆ  
 | 
        if not OperControlManager.IsObjCanDoAction(curNPC,  
 | 
                                                   ChConfig.Def_Obj_ActState_ServerAct,  
 | 
                                                   IPY_GameWorld.oalMove):  
 | 
            return    
 | 
          
 | 
        curNPC.Move(destPosX, destPosY)  
 | 
        return  
 | 
      
 | 
    # µ½´ïÄ¿µÄµØ  
 | 
    #curNPC.SetVisible(False)  
 | 
    NPCCommon.SetDeadEx(curNPC)  
 | 
    return  
 | 
  
 | 
  
 |