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