#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # #------------------------------------------------------------------------------- # ##@package NPCAI.AIType_3 # # @todo:ÎïÆ·ÕÙ»½ÊÞAI # @author hxp # @date 2015-4-16 # @version 1.0 # # ÏêϸÃèÊö: ÎïÆ·ÕÙ»½ÊÞAI, ÓгðºÞʱ½øÐз´»÷ # #--------------------------------------------------------------------- """Version = 2015-04-16 15:00""" #--------------------------------------------------------------------- import IPY_GameWorld import GameWorld import NPCCommon import BaseAttack import ChConfig import AICommon import GameObj #--------------------------------------------------------------------- ## ³õʼ³ðºÞ # @param curNPC ʵÀý # @return None def DoInit(curNPC): curNPC.GetNPCAngry().Init(ChConfig.Def_BossAngryCount) return ## AIÑ­»·µ÷Óà # @param curNPC ʵÀý # @return None def ProcessAI(curNPC, tick): if not curNPC.IsAlive(): #NPCËÀÍö return curNPCControl = NPCCommon.NPCControl(curNPC) if curNPC.GetLastTime() != 0 and tick - curNPC.GetBornTime() >= curNPC.GetLastTime(): #ÕÙ»½ÊÞ³¬¹ý´æ»îʱ¼ä, ÉèÖÃËÀÍö curNPCControl.SetKilled() return if not curNPC.GetCanAttack(): curNPC.SetCanAttack(True) #Ë¢ÐÂ×Ô¼ºµÄbuff curNPCControl.RefreshBuffState(tick) if GameObj.GetHP(curNPC) == 0 : # BUFFË¢ÐÂÖпÉÄܻᵼÖÂNPCËÀÍö return if curNPC.GetCurAction() == IPY_GameWorld.laNPCMove and curNPC.GetCurMoveType() == IPY_GameWorld.mtRun: return #Ë¢ÐÂ×Ô¼º³ðºÞ¶ÈÁбí curNPCControl.RefreshAngryList(tick) if not curNPC.GetIsNeedProcess(): return curAngry = curNPCControl.GetMaxAngryTag() if curAngry == None: return #¹¥»÷Âß¼­ __NPCFight(curNPC, curAngry.GetObjID(), curAngry.GetObjType(), tick) return ## Õ½¶· # @param curNPC ʵÀý # @param tagID ¹¥»÷Ä¿±êID # @param tagType ¹¥»÷Ä¿±êÀàÐÍ # @param tick µ±Ç°Ê±¼ä # @return None def __NPCFight(curNPC, tagID, tagType, tick): curNPCControl = NPCCommon.NPCControl(curNPC) #¿ªÊ¼¹¥»÷ curTag = GameWorld.GetObj(tagID, tagType) if curTag == None or GameObj.GetHP(curTag) <= 0: return tagDist = GameWorld.GetDist(curNPC.GetPosX(), curNPC.GetPosY(), curTag.GetPosX(), curTag.GetPosY()) #---ÓÅÏÈÊͷż¼ÄÜ--- if AICommon.DoAutoUseSkill(curNPC, curTag, tagDist, tick): return #---ÊÍ·ÅÆÕͨ¹¥»÷--- if tagDist > curNPC.GetAtkDist(): curNPCControl.MoveToObj_Detel(curTag) return #¹¥»÷Âß¼­ if tick - curNPC.GetAttackTick() < curNPC.GetAtkInterval(): #¹¥»÷¼ä¸ôûÓе½, ·µ»Ø return if curNPCControl.FixTagPos(curTag.GetPosX(), curTag.GetPosY()): #ÐÞÕýÕâ¸öNPCµÄÕ¾Á¢Î»Öà return #ÆÕͨ¹¥»÷ BaseAttack.Attack(curNPC, curTag, None, tick) return