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