#!/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  
 | 
import AttackCommon  
 | 
  
 | 
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 = 10000  
 | 
    skillEnhance = 0  
 | 
      
 | 
    if skillEffect != None:  
 | 
        #¼¼ÄÜÔöÇ¿°Ù·Ö±È  
 | 
        skillPer = skillEffect.GetEffectValue(0)  
 | 
        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)  
 | 
    PassiveBuffEffMng.OnPassiveBuffTrigger(tagObj, None, curSkill, ChConfig.TriggerType_Buff_AttackSubLayer, tick)  
 | 
    if GameObj.GetHP(tagObj) > 0 and not AttackCommon.GetIsDead(tagObj):  
 | 
        if tagObj.GetDictByKey(ChConfig.Def_PlayerKey_1314HurtCount):  
 | 
            # ÐèҪʱ¼äÅäºÏ£¬²»È»»áµ¼ÖÂÉ˺¦»¹Ã»¼ÆËãÍê±Ï buffÌáǰÏûʧÁË  
 | 
            curBuff.SetValue(curBuff.GetValue() + 1)  
 | 
            tagObj.SetDict(ChConfig.Def_PlayerKey_1314HurtCount, 0)  
 | 
              
 | 
        if curBuff.GetValue() == 0:  
 | 
            # ÈÃÏÂÒ»´ÎÑ»·È¡Ïûbuff£¬¿Í»§¶ËÍ˳öÐýת  
 | 
            curBuff.SetRemainTime(1)  
 | 
  
 | 
  
 | 
#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, buffOwner):  
 | 
    Attack(curObj, addBuff, tick)   #Á¢¼´Ö´ÐÐÒ»´Î¹¥»÷  
 | 
    if GameObj.GetHP(curObj) != 0 and not AttackCommon.GetIsDead(curObj):  
 | 
        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  
 | 
#===============================================================================  
 | 
  
 | 
  
 | 
         
 |