#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
##@package Skill.PassiveTrigger.PassiveEff_5028
|
#
|
# @todo:ת»¯Ä¿±êÉíÉÏijÖÖ״̬buff£¨É¾³ý¾ÉµÄת»»³ÉÆäËûbuff£©
|
# @author hxp
|
# @date 2025-12-22
|
# @version 1.0
|
#
|
# ÏêϸÃèÊö: ת»¯Ä¿±êÉíÉÏijÖÖ״̬buff£¨É¾³ý¾ÉµÄת»»³ÉÆäËûbuff£©
|
#
|
#-------------------------------------------------------------------------------
|
#"""Version = 2025-12-22 16:30"""
|
#-------------------------------------------------------------------------------
|
|
import TurnBuff
|
import GameWorld
|
import TurnPassive
|
import ChConfig
|
import random
|
|
def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs):
|
buffState = curEffect.GetEffectValue(0) # buff״̬
|
changeLayers = max(1, curEffect.GetEffectValue(1)) # ת»¯²ãÊý
|
rate = curEffect.GetEffectValue(2) # ת»¯¸ÅÂÊ
|
changeToSkillID = curEffect.GetEffectValue(3) # ת»¯ÎªÆäËûbuff¼¼ÄÜID
|
|
if not GameWorld.CanHappen(rate):
|
GameWorld.DebugLogEx("5028¸ÅÂʲ»×ª»¯! rate=%s", rate)
|
return
|
|
tagBuffList = []
|
buffMgr = tagObj.GetBuffManager()
|
for buff in buffMgr.FindBuffListByState(buffState):
|
skillData = buff.GetSkillData()
|
if skillData.GetDispersedLimit():
|
continue
|
tagBuffList.append(buff)
|
|
if not tagBuffList:
|
GameWorld.DebugLog("Ä¿±êûÓпÉת»¯µÄbuff: tagID=%s,buffState=%s" % (tagObj.GetID(), buffState))
|
return
|
|
random.shuffle(tagBuffList) # Ëæ»ú
|
if changeLayers < len(tagBuffList):
|
# ²»×ãʱ²Å¶îÍâÈ¡ÆäËû±»¶¯Ôö¼ÓµÄ
|
effSkillTypeID = effSkill.GetSkillTypeID()
|
changeLayers += TurnPassive.GetTriggerEffectValue(turnFight, batObj, tagObj, ChConfig.PassiveEff_AddChangeLayers5008, connSkillTypeID=effSkillTypeID, **kwargs)
|
|
remainLayers = changeLayers # Ê£Óà¿Éת²ãÊý
|
changeToLayer = 0 # ×îÖÕת²ãÊý
|
for tagBuff in tagBuffList:
|
if remainLayers <= 0:
|
break
|
skillID = tagBuff.GetSkillID()
|
curLayer = max(1, tagBuff.GetLayer()) # ÖÁÉÙËã1²ã
|
if curLayer > remainLayers:
|
updLayer = curLayer - remainLayers
|
changeToLayer += remainLayers
|
remainLayers = 0
|
else:
|
updLayer = 0
|
changeToLayer += curLayer
|
remainLayers -= 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
|
|
if not changeToSkillID:
|
changeToSkillID = effSkill.GetSkillID()
|
|
buffOwner = batObj
|
TurnBuff.DoAddBuffBySkillID(turnFight, tagObj, changeToSkillID, buffOwner, connSkill, setLayerCnt=changeToLayer)
|
return True
|