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