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