#!/usr/bin/python # -*- coding: GBK -*- # #--------------------------------------------------------------------- ##@package AIType_60 # @todo: ÍòÄê±ùÀεÚÒ»¹ØBossÕÙ»½ÊÞAI (Êͷż¼ÄÜ£¬±»Íæ¼Ò´òËÀºó´¥·¢¶ÔBossÊͷż¼ÄÜ) # # @author zhangd # @date 2011-07-18 12:00 # @version 1.2 # # @note: # @change: "2011-07-19 11:20" Alee Êä³ö×¢ÊÍÐÞ¸Ä # @change: "2011-07-19 21:00" zhangd ÐÞ¸Äbuff²»Ë¢ÐÂbug #------------------------------------------------------------------------------ """Version = 2011-07-19 21:00""" #--------------------------------------------------------------------- #µ¼Èë import ChConfig import IPY_GameWorld import GameWorld import NPCCommon import BaseAttack import ChConfig import SkillShell import FBDefenseCommon import GameObj #--------------------------------------------------------------------- #--------------------------------------------------------------------- ## ³õʼ»¯ # @param curNPC µ±Ç°npc # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def DoInit(curNPC): curNPC.GetNPCAngry().Init(ChConfig.Def_NormalNPCAngryCount) curNPC.SetIsNeedProcess(True) return ## Ö´ÐÐAI # @param curNPC µ±Ç°npc # @param tick µ±Ç°Ê±¼ä # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def ProcessAI(curNPC, tick): #NPCÒÑËÀÍö£¬Ìø³ö if curNPC.IsAlive() != True: return npcControl = NPCCommon.NPCControl(curNPC) #ÕÙ»½ÊÞ³¬¹ý´æ»îʱ¼ä, ÉèÖÃËÀÍö if curNPC.GetLastTime() != 0 and tick - curNPC.GetBornTime() >= curNPC.GetLastTime(): npcControl.SetKilled() return #Ë¢ÐÂ×Ô¼ºµÄbuff npcControl.RefreshBuffState(tick) if GameObj.GetHP(curNPC) == 0 : # BUFFË¢ÐÂÖпÉÄܻᵼÖÂNPCËÀÍö return #---¹¥»÷Âß¼­--- #ʹÓü¼Äܳɹ¦ if __NPCUseSkill(curNPC, tick): return curNPCControl = NPCCommon.NPCControl(curNPC) npcControl.RefreshAngryList(tick) curAngry = npcControl.GetMaxAngryTag() if not curAngry: return #³ðºÞ¶ÔÏóÀàÐÍ,³ðºÞ¶ÔÏóID curNPCAngryType = curAngry.GetObjType() curNPCAngryID = curAngry.GetObjID() curTag = GameWorld.GetObj(curNPCAngryID, curNPCAngryType) if curTag == None or GameObj.GetHP(curTag) <= 0: return tagDist = GameWorld.GetDist(curNPC.GetPosX(), curNPC.GetPosY(), curTag.GetPosX(), curTag.GetPosY()) #ʹÓÃÆÕͨ¹¥»÷ if tagDist > curNPC.GetAtkDist(): curNPCControl.MoveToObj_Detel(curTag) return #ÅжϹ«¹²CD if tick - curNPC.GetAttackTick() < curNPC.GetAtkInterval(): #¹¥»÷¼ä¸ôûÓе½, ·µ»Ø return if curNPCControl.FixTagPos(curTag.GetPosX(), curTag.GetPosY()): #ÐÞÕýÕâ¸öNPCµÄÕ¾Á¢Î»Öà return #ÆÕͨ¹¥»÷ BaseAttack.Attack(curNPC, curTag, None, tick) return ## npcʹÓü¼ÄÜÂß¼­ # @param curNPC µ±Ç°npc # @param tick µ±Ç°Ê±¼ä # @return ÊÇ·ñÊͷųɹ¦ # @remarks npcʹÓü¼ÄÜÂß¼­£¨ÓÐÄ¿±êµÄ£© def __NPCUseSkill(curNPC, tick): curTag = NPCCommon.GetSummonNPCOwner(IPY_GameWorld.gotNPC, curNPC) if not curTag: #GameWorld.Log("AIType_60£¬curNpcID=%s, ÕÙ»½ÊÞÖ÷ÈËÒÑËÀ,ÕÙ»½ÊÞÈ´»î×Å,ÎÞ·¨¶ÔBossÊͷż¼ÄÜ"%curNPC.GetNPCID()) return #»ñµÃ¼¼ÄܹÜÀíÆ÷ skillManager = curNPC.GetSkillManager() curSkill = skillManager.GetSkillByIndex(0) if curSkill == None: GameWorld.ErrLog("Êý¾Ý¿âÎÞ·¨²éÕÒ NPC = %s µÄµÚ1¸ö¼¼ÄÜ"%curNPC.GetNPCID()) return #¼¼ÄÜCDδµ½ if tick - curSkill.GetLastUseTick() < curSkill.GetCoolDownTime(): return #²»ÔÚ¼¼ÄܵĹ¥»÷¾àÀëÄÚ tagDist = GameWorld.GetDist(curNPC.GetPosX(), curNPC.GetPosY(), curTag.GetPosX(), curTag.GetPosY()) if tagDist > curSkill.GetAtkDist(): curNPCControl = NPCCommon.NPCControl(curNPC) curNPCControl.MoveToObj_Detel(curTag) return #ʹÓü¼ÄÜ result = SkillShell.NPCUseSkillTag(curNPC, curTag, curSkill, tick) return result ## ÕÙ»½ÊÞ±»Íæ¼Ò´òËÀ´¥·¢»Ö¸´BossѪÁ¿¼¼ÄÜ # @param curNPC µ±Ç°npc # @param curPlayer É˺¦ÕßÍæ¼Ò # @param skill É˺¦Ê¹Óü¼ÄÜ # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def OnAttackDieByPlayer(curNPC, curPlayer, skill): GameObj.SetHP(curNPC, 1) #»ñµÃ¼¼ÄܹÜÀíÆ÷ skillManager = curNPC.GetSkillManager() curSkill = skillManager.GetSkillByIndex(1) if not curSkill: return curTag = NPCCommon.GetSummonNPCOwner(IPY_GameWorld.gotNPC, curNPC) if not curTag: return tick = GameWorld.GetGameWorld().GetTick() result = SkillShell.NPCUseSkillTag(curNPC, curTag, curSkill, tick) GameObj.SetHP(curNPC, 0) return