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