hxp
4 天以前 4e3d1ff7e0b98fc18b0b6e63e449f3d7577c0ba6
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
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package Skill.PassiveTrigger.PassiveEff_5009
#
# @todo:¼ì²â³¡ÉÏ×î¸ß²ãbuff¸´ÖÆbuffµ½Ä¿±êÉÏ
# @author hxp
# @date 2025-10-28
# @version 1.0
#
# ÏêϸÃèÊö: ¼ì²â³¡ÉÏ×î¸ß²ãbuff¸´ÖÆbuffµ½Ä¿±êÉÏ
#
#-------------------------------------------------------------------------------
#"""Version = 2025-10-28 10:30"""
#-------------------------------------------------------------------------------
 
import TurnBuff
import GameWorld
import BattleObj
import ChConfig
 
def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs):
    #effectID = curEffect.GetEffectID()
    buffStateList = curEffect.GetEffectValue(0)
    includeFriend = curEffect.GetEffectValue(1) # Í³¼ÆbuffʱÊÇ·ñ°üº¬¼º·½µ¥Î»
    GameWorld.DebugLog("¼ì²â¸´ÖÆ×î¸ß²ãbuff! buffStateList=%s,includeFriend=%s" % (buffStateList, includeFriend))
    if not buffStateList:
        return
    
    faction = batObj.GetFaction()
    lineupNum = batObj.GetLineupNum()
    if includeFriend:
        tagFaction = faction
    else:
        tagFaction = ChConfig.Def_FactionB if faction == ChConfig.Def_FactionA else ChConfig.Def_FactionA
        
    batFaction = turnFight.getBatFaction(tagFaction)
    batLineup = batFaction.getBatlineup(lineupNum)
    
    maxLayer = 0
    maxLayerBuffList = []
    batObjMgr = BattleObj.GetBatObjMgr()
    for objID in batLineup.posObjIDDict.values():
        tObj = batObjMgr.getBatObj(objID)
        if not tObj:
            continue
        
        layerTotal = 0
        curBuffList = []
        buffMgr = tObj.GetBuffManager()
        for buffState in buffStateList:
            buffList = buffMgr.FindBuffListByState(buffState)
            if not buffList:
                #GameWorld.DebugLog("Ä¿±êûÓиÃ״̬buff! objID=%s,buffState=%s" % (objID, buffState))
                continue
            for buff in buffList:
                if buff.GetIsCopy():
                    #GameWorld.DebugLog("±¾ÉíÊǸ´ÖƵÄbuff²»Ëã! objID=%s,buffID=%s" % (objID, buff.GetBuffID()))
                    continue
                layerTotal += buff.GetLayer()
            curBuffList += buffList
        GameWorld.DebugLog("Ä¿±ê¸Ã״̬buff! objID=%s,layerTotal=%s" % (objID, layerTotal))
        
        if maxLayer < layerTotal:
            maxLayer = layerTotal
            maxLayerBuffList = curBuffList
            
    if not maxLayerBuffList:
        return
    
    # ¸´ÖƸøÄ¿±ê
    buffOwner = batObj
    for tagBuff in maxLayerBuffList:
        skillID = tagBuff.GetSkillID()
        addBuff = TurnBuff.DoAddBuffBySkillID(turnFight, tagObj, skillID, buffOwner, connSkill, isSync=False)
        if not addBuff:
            GameWorld.DebugLog("¸´ÖÆÌí¼Óbuffʧ°Ü! skillID=%s" % skillID)
            continue
        GameWorld.DebugLog("¸´ÖÆÌí¼Óbuff³É¹¦! skillID=%s,addBuffID=%s" % (skillID, addBuff.GetBuffID()))
        TurnBuff.CopyBuff(turnFight, batObj, addBuff, tagBuff, connSkill, True, refreshTimeLayer=False)
        
    return True