| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #  | 
| # @todo: ÓÉ·þÎñ¶ËÖ÷µ¼É˺¦µÄ³ÖÐøÐÔ¼¼ÄÜ  | 
| #  | 
| # @author: Alee  | 
| # @date 2017-11-3 ÏÂÎç04:22:55  | 
| # @version 1.0  | 
| #  | 
| # @note: 2017-12-08 Ìí¼Ó±»¶¯Ôö¼Ó¼¼ÄÜÉ˺¦  | 
| #  | 
| #---------------------------------------------------------------------  | 
|   | 
|   | 
| #µ¼Èë  | 
| import GameWorld  | 
| import SkillCommon  | 
| import BaseAttack  | 
| import ChConfig  | 
| import PassiveBuffEffMng  | 
| import SkillShell  | 
| import GameObj  | 
| import IPY_GameWorld  | 
|   | 
| def ProcessBuff(tagObj, curBuff, curEffect, processBuffTick, tick):  | 
|     Attack(tagObj, curBuff, tick)  | 
|       | 
| #¼ä¸ô¹¥»÷£¬buffvalueµÚÒ»¸öֵΪ¹¥»÷´ÎÊý  | 
| def Attack(tagObj, curBuff, tick):  | 
|     if curBuff.GetValue() == 0:  | 
|         return  | 
|       | 
|     curSkill = curBuff.GetSkill()  | 
|     srcPosX, srcPosY = tagObj.GetPosX(), tagObj.GetPosY()  | 
|   | 
|     #¹¥»÷Ч¹û  | 
|     skillEffect = SkillCommon.GetSkillEffectByEffectID(curSkill, ChConfig.Def_Skill_Effect_Attack)  | 
|     skillPer = 1  | 
|     skillEnhance = 0  | 
|       | 
|     if skillEffect != None:  | 
|         #¼¼ÄÜÔöÇ¿°Ù·Ö±È  | 
|         skillPer = (skillEffect.GetEffectValue(0)) / float(ChConfig.Def_MaxRateValue)  | 
|         multiple = curSkill.GetEffect(0).GetEffectValue(0) - curBuff.GetValue() + 1  # µÚ¼¸´Î¹¥»÷  | 
|         skillPer += multiple*PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(tagObj, None, curSkill, ChConfig.TriggerType_AddSingleSkillPer)  | 
|         #¼¼ÄÜÔöǿֵ  | 
|         skillEnhance = skillEffect.GetEffectValue(1)  | 
|     else:  | 
|         GameWorld.ErrLog("ûÓй¥»÷Ч¹ûÏî%s ID=%s, Lv=%s"%(ChConfig.Def_Skill_Effect_Attack,   | 
|                                                      curSkill.GetSkillID(), curSkill.GetSkillLV()))  | 
|     skillMatrix = None  | 
|     if curSkill.GetAtkType() == 12:     # ÓнǶȹ¥»÷  | 
|         attackRad = curSkill.GetAtkRadius()  | 
|           | 
|         attackMatrix = ChConfig.Def_Angle_MatrixDict.get(attackRad)  | 
|         if attackMatrix == None:  | 
|             GameWorld.ErrLog("ÀàÐÍ´íÎó(%s), ÓнǶȵĹ¥»÷¾ØÕó"%attackRad)  | 
|             return False  | 
|           | 
|         srcPosX, srcPosY = tagObj.GetPosX(), tagObj.GetPosY()  | 
|         tagRoundPosX, tagRoundPosY = tagObj.GetUseSkillPosX(), tagObj.GetUseSkillPosY()  | 
|         skillMatrix = GameWorld.MatrixCircle(attackMatrix, srcPosX, srcPosY, tagRoundPosX, tagRoundPosY)  | 
|           | 
|         #¼ÆËãÆ«ÒÆ²úÉú¶µã£¬²¹×ãÄ¿±êµã  | 
|         desDist = GameWorld.GetDist(srcPosX, srcPosY, tagRoundPosX, tagRoundPosY)  | 
|         atkDist = curSkill.GetAtkDist()  | 
|         if atkDist != 0 and desDist <= atkDist:  | 
|             insertIndex = int(desDist/float(atkDist)*len(skillMatrix))  | 
|             if (tagRoundPosX, tagRoundPosY) not in skillMatrix:  | 
|                 skillMatrix.insert(insertIndex, (tagRoundPosX, tagRoundPosY))  | 
|            | 
|     #¹¥»÷´ÎÊý´¦Àí£¬ÅäÖÃΪ0µÄ˵Ã÷ÊÇÒÔ³ÖÐøÊ±¼äΪÖ÷  | 
|     # SwordStormAttack ¿ÉÄÜÒò±»¶¯µ¼ÖÂ×Ô¼ºËÀÍö£¬ËùÒÔ²»ÄÜÔÚ¹¥»÷ºó´¦Àí  | 
|     curBuff.SetValue(max(curBuff.GetValue() - 1, 0))  | 
|            | 
|               | 
|     BaseAttack.SwordStormAttack(tagObj, srcPosX, srcPosY, curSkill, skillPer,   | 
|                                 skillEnhance, skillMatrix, tick)  | 
|   | 
|   | 
|       | 
|   | 
| #buffvalueµÚÒ»¸öֵΪ¹¥»÷´ÎÊý£¬ µÚ¶þ¸öֵΪ±»¶¯ÔöÇ¿  | 
| def CalcBuffValue(attacker, defender, curSkill, changeBuffValueDict):  | 
|     curEffect = curSkill.GetEffect(0)  | 
|     return [curEffect.GetEffectValue(0)]  | 
|           | 
|   | 
| ## Ìí¼ÓBUFFºóµÄÂß¼  | 
| #  @param None  | 
| #  @return None  | 
| def DoAddBuffOver(curObj, addBuff, curEffect, tick):  | 
|     Attack(curObj, addBuff, tick)   #Á¢¼´Ö´ÐÐÒ»´Î¹¥»÷  | 
|     if GameObj.GetHP(curObj) != 0:  | 
|         addBuff.SetProcessInterval(tick)  | 
|     return  | 
|           | 
|   | 
|   | 
| #===============================================================================  | 
| # def OnBuffDisappear(defender, curSkill, curBuff, curEffect, tick):  | 
| #    # ÊÓÒ°ÄÚbuffÖÖ×Ó±¬Õ¨  | 
| #    # ¶àÖÖÖÖ×ÓµÄÇé¿ö²»Ö§³Ö  | 
| #    skillID = PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defender, None, curSkill, ChConfig.TriggerType_BeBoomSeed)  | 
| #    seedSkill = GameWorld.GetGameData().GetSkillBySkillID(skillID)  | 
| #    if not seedSkill:  | 
| #        return  | 
| #      | 
| #    SkillShell.UsePassiveTriggerSkill(defender, seedSkill, None, tick)  | 
| #    return  | 
| #===============================================================================  | 
|   | 
|   | 
|          |