#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
#-------------------------------------------------------------------------------  
 | 
#  
 | 
#-------------------------------------------------------------------------------  
 | 
#  
 | 
##@package SkillModule_23  
 | 
#  
 | 
# @todo: Åµ¶Õ¶  
 | 
# @author whx  
 | 
# @date 2012-05-23 17:30  
 | 
# @version 1.0  
 | 
#  
 | 
# ÏêϸÃèÊö:ŵ¶Õ¶  
 | 
#  
 | 
#------------------------------------------------------------------------------   
 | 
"""Version = 2012-05-23 17:30"""  
 | 
#------------------------------------------------------------------------------  
 | 
#µ¼Èë  
 | 
  
 | 
import ChConfig  
 | 
import GameWorld  
 | 
import BaseAttack  
 | 
import PlayerControl  
 | 
import IPY_GameWorld  
 | 
import Player_Attack_Player  
 | 
import GameObj  
 | 
#---------------------------------------------------------------------  
 | 
#È«¾Ö±äÁ¿  
 | 
#---------------------------------------------------------------------  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##ŵ¶Õ¶  
 | 
# @param attacker ¹¥»÷ÕßʵÀý  
 | 
# @param defender ·ÀÊØÕßʵÀý  
 | 
# @param curSkill ¼¼ÄÜʵÀý  
 | 
# @param tagRoundPosX ÇøÓò×ø±êX  
 | 
# @param tagRoundPosY ÇøÓò×ø±êY  
 | 
# @param isEnhanceSkill ÊÇ·ñΪ¸½¼Ó¼¼ÄÜ  
 | 
# @param tick Ê±¼ä´Á  
 | 
# @return ·µ»ØÖµÎªÕæ, Êͷųɹ¦  
 | 
def UseSkill(attacker, defender, curSkill, tagRoundPosX, tagRoundPosY, isEnhanceSkill, tick):  
 | 
    destX = defender.GetPosX()  
 | 
    destY = defender.GetPosY()  
 | 
      
 | 
    if attacker.GetGameObjType() != IPY_GameWorld.gotPlayer:  
 | 
        GameWorld.ErrLog("·ÇÍæ¼Ò²»¿ÉÊÍ·Å")  
 | 
        return False  
 | 
      
 | 
    #ÏÈÅжϸÃÍæ¼ÒÄÜ·ñ¹¥»÷£¬·ÀÖ¹×ÔÉíѪÁ¿¿Û³ýµ«Ã»Óй¥»÷  
 | 
    if not Player_Attack_Player.GetCanAttack(attacker, defender, curSkill, tick):  
 | 
        return False  
 | 
      
 | 
    #ÊÇÕϰµã,²»ÄÜÊÍ·Å£¬Ìø³ö  
 | 
    if not GameWorld.GetMap().CanMove(destX, destY):  
 | 
        PlayerControl.NotifyCode(attacker, "04BBF813-7A30-47A8-927DE1ACCC4F378E")  
 | 
        return False  
 | 
      
 | 
    #ѪÁ¿ÉÏÏÞ  
 | 
    attackerMaxHP = GameObj.GetMaxHP(attacker)  
 | 
    defenderMaxHP = GameObj.GetMaxHP(defender)  
 | 
    disHP = max(0, attackerMaxHP - defenderMaxHP)  
 | 
      
 | 
    #Ч¹û1µÄAÖµ£ºÑªÁ¿²îµÄÍò·ÖÂÊ£¬BÖµ¹Ì¶¨É˺¦  
 | 
    skillEffect = curSkill.GetEffect(0)  
 | 
    skillPer = skillEffect.GetEffectValue(0) / float(ChConfig.Def_MaxRateValue)  
 | 
    addSkillHert = int(skillEffect.GetEffectValue(1) + disHP*skillPer)  
 | 
      
 | 
    #Ч¹û2µÄAÖµ£º×ÔÉíѪÁ¿µÄÍò·ÖÂÊ,BÖµ¹Ì¶¨É˺¦  
 | 
    selfSkillEffect = curSkill.GetEffect(1)  
 | 
    selfSkillPer = selfSkillEffect.GetEffectValue(0) / float(ChConfig.Def_MaxRateValue)  
 | 
    addSelfSkillHert = selfSkillEffect.GetEffectValue(1)  
 | 
      
 | 
    #Ïȿ۳ý×ÔÉíѪÁ¿  
 | 
    attackerHP = GameObj.GetHP(attacker)  
 | 
    #·ÀÖ¹²ß»®±íÅäÖÃΪ0  
 | 
    curHP = int(max(attackerHP * (1 - selfSkillPer) - addSelfSkillHert, 1))  
 | 
    GameObj.SetHP(attacker, curHP)  
 | 
      
 | 
    #ʹÓü¼ÄÜ  
 | 
    result = BaseAttack.Attack(attacker, defender, curSkill, tick, 0,   
 | 
                                   addSkillHert, 1, isEnhanceSkill)  
 | 
  
 | 
    #·þÎñ¶ËÖÃλ  
 | 
    GameWorld.ResetPlayerPos(attacker, destX, destY, curSkill.GetSkillID())  
 | 
      
 | 
    return result  
 | 
     
 |