1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/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 = 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:
        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):
    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
#===============================================================================