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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package Skill.TurnPassive
#
# @todo:»ØºÏ±»¶¯´¥·¢¹ÜÀí
# @author hxp
# @date 2025-8-11
# @version 1.0
#
# ÏêϸÃèÊö: »ØºÏ±»¶¯¹ÜÀí£¬Ö÷Òª±»¶¯´¥·¢µÄ¼¼ÄÜ¡¢buffµÈ¹ÜÀí
#
#-------------------------------------------------------------------------------
#"""Version = 2025-8-11 ÏÂÎç3:47:07"""
#-------------------------------------------------------------------------------
 
import GameWorld
import PassiveTrigger
import ChConfig
 
GameWorld.ImportAll("Script\\Skill\\", "PassiveTrigger")
 
def RefreshPassive(batObj):
    ''' Ë¢Ð±»¶¯Ð§¹û£¬Ò»°ã¿ÉÄÜ´æÔÚÓÚ¼¼ÄÜ»òbuffÖÐ
    '''
    passiveEffMgr = batObj.GetPassiveEffManager()
    skillEffInfo = passiveEffMgr.RefreshSkillPassiveEffect()
    buffEffInfo = passiveEffMgr.RefreshBuffPassiveEffect()
    skillEffInfo and GameWorld.DebugLog("    ±»¶¯¼¼ÄÜЧ¹û: %s" % skillEffInfo)
    buffEffInfo and GameWorld.DebugLog("    ±»¶¯BuffЧ¹û: %s" % buffEffInfo)
    return
 
def OnTriggerPassiveEffect(turnFight, batObj, triggerType, connSkill=None):
    ''' ´¥·¢±»¶¯Ð§¹û£¬¿ÉÄÜ´¥·¢¼¼ÄÜ¡¢buff£¬Ðè¸ù¾ÝÓÅÏȼ¶´¥·¢
    '''
    passiveEffMgr = batObj.GetPassiveEffManager()
    effInfoList = passiveEffMgr.GetPassiveEffByTrigger(triggerType, connSkill=connSkill)
    if not effInfoList:
        return
    # [["skill/buff", skillID/buffID, effIDList], ...]
    GameWorld.DebugLog("´¥·¢±»¶¯: triggerType=%s,objID=%s,%s" % (triggerType, batObj.GetID(), effInfoList))
    for effInfo in effInfoList:
        sign = effInfo[0]
        if sign == "skill":
            skillID, effIDList = effInfo[1:]
            __doTriggerPassiveEffectBySkill(turnFight, batObj, skillID, effIDList, connSkill)
            
        elif sign == "buff":
            buffID, effIDList = effInfo[1:]
            __doTriggerPassiveEffectByBuff(turnFight, batObj, buffID, effIDList, connSkill)
            
    return
 
def __doTriggerPassiveEffectBySkill(turnFight, batObj, skillID, effIDList, connSkill=None):
    return
 
def __doTriggerPassiveEffectByBuff(turnFight, batObj, buffID, effIDList, connSkill=None):
    buffMgr = batObj.GetBuffManager()
    curBuff = buffMgr.GetBuff(buffID)
    if not curBuff:
        return
    skillData = curBuff.GetSkillData()
    
    for effID in effIDList:
        curEffect = skillData.GetEffectByID(effID)
        if not curEffect:
            continue
        pyName = "PassiveEff_%s" % effID
        callFunc = GameWorld.GetExecFunc(PassiveTrigger, "%s.%s" % (pyName, "DoBuffEffectLogic"))
        if not callFunc:
            continue
        callFunc(turnFight, batObj, curBuff, curEffect, connSkill)
        
    return
 
def GetTriggerPassiveValue(batObj, triggerType, tagObj=None, useSkill=None):
    ''' »ñÈ¡´¥·¢±»¶¯µÄÖµ£¬Ò»°ãÓÃÓÚijÖÖÌõ¼þϲŻá²úÉúµÄÖµ£¬ÈçxxÇé¿öÏÂÊôÐԱ仯 »ò xxÇé¿öÏÂÊÇ·ñ·¢Éúʲô
    @return: ´¥·¢µÄÖµ£¬0-ûÓд¥·¢»ò±¾Éí´¥·¢µÄֵΪ0£»´óÓÚ0-´¥·¢µÄ¾ßÌåÖµ
    '''
    return 0
#    attacker = FindRealAttacker(attacker)
#    if not attacker:
#        return 0
#    
#    stopPassiveSkill = False   # ±»¶¯¼¼Äܲ»ÄÜÔÙ´¥·¢±»¶¯¼¼ÄÜ£¬µ«¿ÉÒÔ´¥·¢Ì츳¼¼ÄÜ
#    if useSkill and SkillCommon.isPassiveSkill(useSkill) and isStopPassiveSkill:
#        #GameWorld.DebugLog("±»¶¯¼¼Äܲ»ÄÜÔٴδ¥·¢±»¶¯¼¼ÄÜ")
#        #return 0
#        if not PassPassiveLimit(useSkill):
#            stopPassiveSkill = True
#
#
#    passiveEff = GetPassiveEffManager().GetPassiveEff(attacker)
#    if not passiveEff:
#        return 0
#    buffDict = passiveEff.GetBuffsByTriggerType(triggerType)
#    if not buffDict:
#        return 0
#    
#    # µ±Ç°Õ½¶·¹ØÏµ pvp pve
#    battleRelationType = AttackCommon.GetBattleRelationType(attacker, defender)
#    if not AttackCommon.CheckBattleRelationType(attacker, defender, useSkill, battleRelationType):
#        return 0
#    
#    useSkillID = useSkill.GetSkillID() if useSkill else 0
#    #tick = GameWorld.GetGameWorld().GetTick()
#    curValue = 0
#    
#    for skillID, effectList in buffDict.items():
#        if skillID == useSkillID:
#            continue
#        curSkill = GameWorld.GetGameData().GetSkillBySkillID(skillID)
#        if not curSkill:
#            continue
#        
#        if not IsValidPassiveSkill(curSkill):
#            continue
#        
#        triggerCount = 0 # ³É¹¦´¥·¢´ÎÊý
#        for effectInfo in effectList:
#            if stopPassiveSkill and curSkill.GetFuncType() != ChConfig.Def_SkillFuncType_GiftSkill:
#                # Ö»ÓÐÌ츳²Å¿ÉÒÔÔٴα»´¥·¢
#                continue 
#            passiveEffect = effectInfo[0]
#            # ±»¶¯´¥·¢µÄ¼¼ÄÜ
#            pyName = "PassiveBuff_%s"%passiveEffect.GetEffectID()
#            
#            callFunc = GameWorld.GetExecFunc(PassiveBuff, "%s.%s" % (pyName, "CheckCanHappen"))
#            if not callFunc:
#                continue
#            
#            # Ìõ¼þ²»Âú×ã
#            if not callFunc(attacker, defender, passiveEffect, skillID, useSkill=useSkill, ownerID=effectInfo[1], ownerType=effectInfo[2]):
#                continue
#            
#            callFunc = GameWorld.GetExecFunc(PassiveBuff, "%s.%s" % (pyName, "GetValue"))
#            if callFunc is None:
#                continue
#            
#            # Èç±»¶¯¼¼ÄÜ£ºÇ§»ÃÚ¤Ñ×ÕæÊµÉ˺¦´Ó2±ä4±¶
#            #curValue += GetPassiveSkillValueByTriggerType(attacker, defender, curSkill, ChConfig.TriggerType_PassiveBuffValue)
#            value = callFunc(attacker, defender, passiveEffect)
#            if triggerType in TriggerValueMaxList:
#                curValue = max(curValue, value) # È¡×î´óÖµ
#            elif triggerType in TriggerValueMinList:
#                if not curValue:
#                    curValue = value
#                elif value > 0:
#                    curValue = min(curValue, value) # È¡×îСֵ
#            else:
#                curValue += value
#                
#            triggerCount += 1
#            
#        if triggerCount:
#            OnTriggerBuffDel(attacker, curSkill, triggerCount)
#            
#    return curValue