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