| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #  | 
| # @todo:   | 
| #  | 
| # @author: Alee  | 
| # @date 2017-12-7 ÏÂÎç05:18:11  | 
| # @version 1.0  | 
| #  | 
| # @note: ³ÖÐø¶¾É˺¦£¬ÕæÊµ¼ÆËã  | 
| #  | 
| #---------------------------------------------------------------------  | 
| #µ¼Èë  | 
| import SkillCommon  | 
| import GameWorld  | 
| import ChConfig  | 
| import GameObj  | 
| import AttackCommon  | 
| import SkillShell  | 
| import PassiveBuffEffMng  | 
| import BaseAttack  | 
| import BuffSkill  | 
| #---------------------------------------------------------------------  | 
| #È«¾Ö±äÁ¿  | 
| #---------------------------------------------------------------------  | 
|   | 
| #---------------------------------------------------------------------  | 
| #Â߼ʵÏÖ  | 
| ## ³ÖÐøÐÔBuff´¦Àí   | 
| #  @param defender ³ÐÊÜÕß  | 
| #  @param curBuff µ±Ç°Buff  | 
| #  @param curEffect BuffЧ¹û  | 
| #  @param tick µ±Ç°Ê±¼ä  | 
| #  @return None  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷.  | 
| def ProcessBuff(defender, curBuff, curEffect, processBuffTick, tick):  | 
|     if curBuff.GetValue2() == 0:  | 
|         return  | 
|       | 
|     layer = max(curBuff.GetLayer(), 1)  | 
|     #µ¥´ÎÉ˺¦, ¶¾Óв㼶µÄÇé¿ö  | 
|     singleDecHP = curBuff.GetValue()*layer  | 
|     #GameWorld.DebugLog("1033---------%s-%s-%s-%s"%(curBuff.GetValue(), layer, hurtPer, singleDecHP ) )  | 
|     #buffÓµÓÐÕß  | 
|     buffOwner = SkillCommon.GetBuffOwner(curBuff)  | 
|       | 
|     curBuffSkillID = curBuff.GetSkill().GetSkillTypeID()  | 
|       | 
|     # SkillLostHPǰµ÷ÓàËÀÍö»òÕ߯äËûÇé¿ö»áÈ¡ÏûcurBuff  | 
|     curBuff.SetValue2(max(curBuff.GetValue2() - 1, 0))  | 
|     SkillCommon.SkillLostHP(defender, curBuffSkillID, buffOwner, singleDecHP, tick, hurtType=ChConfig.Def_HurtType_Bleed)  | 
|       | 
|     return  | 
|   | 
|   | 
| ##³ÖÐøÉ˺¦Buff, ¸ù¾Ý¹¥»÷ÕßÉ˺¦¼ÆËã  | 
| # @param attacker ¹¥»÷ÕßʵÀý  | 
| # @param curSkill ¼¼ÄÜʵÀý  | 
| # @param curEffect µ±Ç°¼¼ÄÜЧ¹û1  | 
| # @return ×ÜÖµ  | 
| def CalcBuffValue(attacker, defender, curSkill, changeBuffValueDict):  | 
|     curEffect = curSkill.GetEffect(0)  | 
|     skillPer = curEffect.GetEffectValue(0)/float(ChConfig.Def_MaxRateValue)  | 
|     skillEnhance = curEffect.GetEffectValue(1)  | 
|       | 
|     # ¿Í»§¶Ë±íÏÖÆ®×ÖΪÁ÷Ѫ£¬ÎÞÐè֪ͨÆäËûÉËѪÀàÐÍ  | 
|     hurtValue, hurtType = AttackCommon.CalcHurtHP(attacker, defender, curSkill,   | 
|                             skillEnhance, skillPer, GameWorld.GetGameWorld().GetTick(),   | 
|                             ChConfig.Def_Skill_HappenState_HitOn)  | 
|   | 
|       | 
|     # µ¥´ÎÉ˺¦Öµ£¬É˺¦ÀàÐÍ  | 
|     return [hurtValue, hurtType]  | 
|   | 
| # ´ÎÊý£¨ÅäºÏЧ¹ûID9999µÄ¼ä¸ô£©  | 
| def DoAddBuffOver(curObj, curBuff, curEffect, tick, buffOwner):  | 
|     if not buffOwner:  | 
|         return  | 
|     buffTick = SkillShell.GetProcessBuffTick(curBuff.GetSkill(), buffOwner)  | 
|       | 
|     curBuff.SetValue2(curBuff.GetRemainTime()/buffTick)  | 
|     return  | 
|   | 
| # ÏûʧǰÈçÓÐδִÐдÎÊýÔò²¹ÉÏ  | 
| #  @param defender ³ÐÊÜÕß  | 
| def OnBuffDisappear(defender, curSkill, curBuff, curEffect, tick):  | 
|     #ÒѾËÀÍö²»´¥·¢  | 
|     if GameObj.GetHP(defender) <= 0:  | 
|         return  | 
|       | 
|     count = curBuff.GetValue2()  | 
|     #ÎÞÊ£Óà  | 
|     if count > 0:  | 
|       | 
|         SkillCommon.SkillLostHP(defender, curSkill.GetSkillTypeID(), SkillCommon.GetBuffOwner(curBuff),   | 
|                                 curBuff.GetValue()*count, tick, hurtType=ChConfig.Def_HurtType_Bleed)  | 
|     #ÒѾËÀÍö²»´¥·¢  | 
|     if GameObj.GetHP(defender) <= 0:  | 
|         return  | 
|       | 
|     BuffBoom(defender, curSkill, curBuff, tick)  | 
|     return  | 
|   | 
| # buff±¬Õ¨£¬É˺¦ËãÊÍ·ÅbuffÕߣ¬Í¨Öª¿Í»§¶Ë±íÏÖΪÖÐBUFFÕß,ĿǰֻÄÜ´¦ÀíÒ»ÖÖ±¬Õ¨  | 
| def BuffBoom(defender, curSkill, curBuff, tick):  | 
|     #buffÓµÓÐÕß  | 
|     attacker = SkillCommon.GetBuffOwner(curBuff)  | 
|     if not attacker:  | 
|         return  | 
|       | 
|     skills = PassiveBuffEffMng.GetPassiveSkillByTriggerType(attacker, defender, curSkill, ChConfig.TriggerType_BuffBoom)  | 
|   | 
|     if not skills:  | 
|         return  | 
|       | 
|     boomSkill = skills[0]  | 
|     curEffect = curSkill.GetEffect(0)  | 
|     skillPer = curEffect.GetEffectValue(0)  | 
|     skillEnhance = curEffect.GetEffectValue(1)  | 
|   | 
|     BaseAttack.AttackAreaDefenderNotify(attacker, defender, defender.GetPosX(), defender.GetPosY(), boomSkill,  | 
|                             skillPer, skillEnhance, tick)  | 
|       | 
|     return  | 
|   | 
|   | 
|   | 
|       | 
|   |