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