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