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
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package Skill.PassiveTrigger.PassiveEff_5008
#
# @todo:ת»¯Ä¿±êÉíÉÏÀàÐÍbuff£¨É¾³ý¾ÉµÄת»»³ÉÆäËûbuff£©
# @author hxp
# @date 2025-09-26
# @version 1.0
#
# ÏêϸÃèÊö: ×ª»¯Ä¿±êÉíÉÏÀàÐÍbuff£¨É¾³ý¾ÉµÄת»»³ÉÆäËûbuff£©
#
#-------------------------------------------------------------------------------
#"""Version = 2025-09-26 16:30"""
#-------------------------------------------------------------------------------
 
import TurnBuff
import GameWorld
import random
 
def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs):
    skillTypeList = curEffect.GetEffectValue(0) # buff¼¼ÄÜÀàÐÍ
    changeLayers = max(1, curEffect.GetEffectValue(1)) # ×ª»¯²ãÊý
    changeToSkillID = curEffect.GetEffectValue(2) # ×ª»¯ÎªÆäËûbuff¼¼ÄÜID
    
    tagBuffList = []
    buffMgr = tagObj.GetBuffManager()
    for index in range(buffMgr.GetBuffCount()):
        buff = buffMgr.GetBuffByIndex(index)
        skillData = buff.GetSkillData()
        if skillData.GetSkillType() not in skillTypeList:
            continue
        if skillData.GetDispersedLimit():
            continue
        tagBuffList.append(buff)
        
    if not tagBuffList:
        GameWorld.DebugLog("Ä¿±êûÓпÉת»¯µÄbuff: tagID=%s,skillTypeList=%s" % (tagObj.GetID(), skillTypeList))
        return
    
    random.shuffle(tagBuffList) # Ëæ»ú
    
    changeToLayer = 0
    for tagBuff in tagBuffList:
        if changeLayers <= 0:
            break
        skillID = tagBuff.GetSkillID()
        curLayer = max(1, tagBuff.GetLayer()) # ÖÁÉÙËã1²ã
        if curLayer > changeLayers:
            updLayer = curLayer - changeLayers
            changeLayers = 0
            changeToLayer += changeLayers
        else:
            updLayer = 0
            changeLayers -= curLayer
            changeToLayer += curLayer
        GameWorld.DebugLog("ת»¯buff: tagID=%s,tagBuffID=%s,skillID=%s,curLayer=%s,updLayer=%s,changeToLayer=%s" 
                           % (tagObj.GetID(), tagBuff.GetBuffID(), skillID, curLayer, updLayer, changeToLayer))
        TurnBuff.DoBuffLayerChange(turnFight, tagObj, tagBuff, updLayer, connSkill)
        
    if changeToLayer <= 0:
        return
    
    buffOwner = batObj
    TurnBuff.DoAddBuffBySkillID(turnFight, tagObj, changeToSkillID, buffOwner, connSkill, setLayerCnt=changeToLayer)
    return True