#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
#-------------------------------------------------------------------------------  
 | 
#  
 | 
#-------------------------------------------------------------------------------  
 | 
#  
 | 
##@package SkillModule_15  
 | 
#  
 | 
# @todo: NPCרÓÃÕÒµ½µ±Ç°³ðºÞÁбíÖÐ×î´ó³ðºÞÕߣ¬Èç¹ûÔÚÊÓÒ°ÖÐÔòË²ÒÆ¹ýÈ¥  
 | 
# @author Alee  
 | 
# @date 2011-02-25 17:30  
 | 
# @version 1.2  
 | 
#  
 | 
# ÏêϸÃèÊö:NPCרÓÃÕÒµ½µ±Ç°³ðºÞÁбíÖÐ×î´ó³ðºÞÕߣ¬Èç¹ûÔÚÊÓÒ°ÖÐÔòË²ÒÆ¹ýÈ¥  
 | 
  
 | 
# @change: "2011-03-08 16:30" Alee ÐÞ¸Ä×î´ó³ðºÞÕßÅжϣ¬²»Ò»¶¨ÊÇÍæ¼Ò  
 | 
# @change: "2011-03-09 12:00" Alee »ñÈ¡¶ÔÏóʱºòÅжÏʵÀýÊÇ·ñ´æÔÚ  
 | 
#------------------------------------------------------------------------------   
 | 
"""Version = 2011-03-09 12:00"""  
 | 
#------------------------------------------------------------------------------  
 | 
#µ¼Èë  
 | 
import GameWorld  
 | 
import BaseAttack  
 | 
import NPCCommon  
 | 
import IPY_GameWorld  
 | 
import GameMap  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#È«¾Ö±äÁ¿  
 | 
#---------------------------------------------------------------------  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##NPCרÓÃÕÒµ½µ±Ç°³ðºÞÁбíÖÐ×î´ó³ðºÞÕߣ¬Èç¹ûÔÚÊÓÒ°ÖÐÔòË²ÒÆ¹ýÈ¥  
 | 
# @param attacker ¹¥»÷ÕßʵÀý  
 | 
# @param attacker ¹¥»÷ÕßʵÀý  
 | 
# @param defender ·ÀÊØÕßʵÀý  
 | 
# @param curSkill ¼¼ÄÜʵÀý  
 | 
# @param tagRoundPosX ÇøÓò×ø±êX  
 | 
# @param tagRoundPosY ÇøÓò×ø±êY  
 | 
# @param isEnhanceSkill ÊÇ·ñΪ¸½¼Ó¼¼ÄÜ  
 | 
# @param tick Ê±¼ä´Á  
 | 
# @return ·µ»ØÖµÎªÕæ, Êͷųɹ¦  
 | 
# @remarks NPCרÓÃÕÒµ½µ±Ç°³ðºÞÁбíÖÐ×î´ó³ðºÞÕߣ¬Èç¹ûÔÚÊÓÒ°ÖÐÔòË²ÒÆ¹ýÈ¥  
 | 
def UseSkill(attacker, defender, curSkill, tagRoundPosX, tagRoundPosY, isEnhanceSkill, tick):  
 | 
    #²»ÊÇNPC²»´¦Àí  
 | 
    if attacker.GetGameObjType() != IPY_GameWorld.gotNPC:  
 | 
        return  
 | 
      
 | 
    #Ë²ÒÆÖÁ×î´ó³ðºÞÍæ¼ÒÅÔ±ß, Ê§°Ü²»ÉèÖÃCD  
 | 
    if not ReSetPosToMaxAngryPlayer(attacker, tick):  
 | 
        return   
 | 
      
 | 
    #´¦Àí¼¼ÄÜ´¥·¢ºÍ¹¥»÷³É¹¦Âß¼  
 | 
    return BaseAttack.DoSkillEx_AttackSucess(attacker, defender, curSkill, tick, isEnhanceSkill)  
 | 
  
 | 
  
 | 
## Ë²ÒÆÖÁ×î´ó³ðºÞÍæ¼ÒÅﱧ  
 | 
#  @param curNPC µ±Ç°NPC  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return ÊÇ·ñÊͷųɹ¦  
 | 
#  @remarks Ë²ÒÆÖÁ×î´ó³ðºÞÍæ¼ÒÅﱧ  
 | 
def ReSetPosToMaxAngryPlayer(curNPC, tick):  
 | 
    #ÖØÅųðºÞÁÐ±í  
 | 
    curNPC.GetNPCAngry().Resort(tick)  
 | 
  
 | 
    curMaxAngry = NPCCommon.NPCControl(curNPC).GetMaxAngryTag()  
 | 
    if curMaxAngry == None:  
 | 
        return False  
 | 
  
 | 
    # Ä¿±êÔÚÊÓÒ°·¶Î§ÄÚ  
 | 
    tagObj = GetMaxAngryObjInSight(curNPC, curMaxAngry)  
 | 
    if tagObj == None:  
 | 
        return False  
 | 
      
 | 
    #---Ë²ÒÆµ½Ä¿±êÅÔ,¿É¹¥»÷·¶Î§---  
 | 
    curFindPos = GameMap.GetEmptyPlaceInArea(tagObj.GetPosX(), tagObj.GetPosY(), curNPC.GetAtkDist())  
 | 
      
 | 
    curNPC.ResetPos(curFindPos.GetPosX(), curFindPos.GetPosY(), 1)  
 | 
    return  True  
 | 
  
 | 
  
 | 
## ÅжÏÄ¿±êÊÇ·ñÔÚNPCÊÓÒ°·¶Î§ÄÚ  
 | 
#  @param curNPC µ±Ç°NPC  
 | 
#  @param curAngryTag ¹¥»÷³ðºÞÄ¿±ê  
 | 
#  @return Íæ¼ÒʵÀý  
 | 
#  @remarks ÅжÏÄ¿±êÊÇ·ñÔÚNPCÊÓÒ°·¶Î§ÄÚ  
 | 
def GetMaxAngryObjInSight(curNPC, curAngryTag):  
 | 
    tagObj = GameWorld.GetObj(curAngryTag.GetObjID(), curAngryTag.GetObjType())  
 | 
      
 | 
    if tagObj == None:  
 | 
        return tagObj  
 | 
      
 | 
    #ÅжÏÄ¿±êÊÇ·ñÔÚÊÓÒ°ÄÚ  
 | 
    if curNPC.GetSight() < GameWorld.GetDistEx(curNPC.GetPosX(), curNPC.GetPosY(),   
 | 
                                               tagObj.GetPosX(), tagObj.GetPosY()):  
 | 
        return None  
 | 
      
 | 
    return tagObj  
 | 
  
 |