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