ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
@@ -257,7 +257,7 @@
            continue
        
        if curEffect.GetTriggerWay():
            if curEffect.GetTriggerSrc() not in [ChConfig.TriggerSrc_Skill, ChConfig.TriggerSrc_SkillSelf] and refreshType == 1:
            if refreshType == 1 and curEffect.GetTriggerBuffEnable():
                passiveEffMgr.AddBuffPassiveEffect(curBuff, skillData, curEffect)
                
        elif effectID in ChConfig.AttrIDList:
@@ -336,15 +336,17 @@
    DoBuffDel(turnFight, batObj, curBuff, relatedSkill)
    return
def DoBuffDel(turnFight, batObj, curBuff, relatedSkill=None, afterLogic=False, tagObj=None):
def DoBuffDel(turnFight, batObj, curBuff, relatedSkill=None, afterLogic=False, tagObj=None, noRefreshAttr=False, isSync=True):
    '''删除buff
    @param relatedSkill: 关联的技能
    @param afterLogic: 是否需要在关联技能处理完毕后才处理删除后续逻辑,如通知,触发被动等
    @param tagObj: 由谁引起的buff删除
    @param noRefreshAttr: 不刷新属性
    @return: isRefreshAttr 是否需要刷属性,如果设置了 noRefreshAttr,则要在外层刷属性
    '''
    
    release = True
    isSync = True
    release = True # 释放buff实例
    #isSync = True
    relatedSkillID = relatedSkill.GetSkillID() if relatedSkill else 0
    if afterLogic and relatedSkill:
        release = False
@@ -386,7 +388,7 @@
            if triggerWay == ChConfig.TriggerWay_BuffDel:
                TurnPassive.OnTriggerPassiveEffect(turnFight, batObj, ChConfig.TriggerWay_BuffDel, connBuff=curBuff)
                
            if curEffect.GetTriggerSrc() not in [ChConfig.TriggerSrc_Skill, ChConfig.TriggerSrc_SkillSelf]:
            if curEffect.GetTriggerBuffEnable():
                haveBuffPassiveEff = True
                
        elif effectID in ChConfig.AttrIDList:
@@ -395,7 +397,7 @@
    if haveBuffPassiveEff:
        batObj.GetPassiveEffManager().DelBuffPassiveEffect(buffID)
        
    if isRefreshAttr:
    if isRefreshAttr and not noRefreshAttr:
        RefreshBuffAttr(batObj)
        
    if skillType == ChConfig.Def_SkillType_Halo and ownerID == buffObjID:
@@ -412,7 +414,7 @@
            if not haloBuff:
                continue
            DoBuffDel(turnFight, haloObj, haloBuff, relatedSkill, afterLogic, tagObj)
    return
    return isRefreshAttr
def DoBuffDelAfterLogicOver(turnFight, buffObjID, curBuff, relatedSkill):
    ## buff删除后续处理逻辑处理完毕
@@ -429,7 +431,73 @@
    if callFunc:
        callFunc(turnFight, batObj, curBuff, **kwargs)
    return
def DoBuffByDead(turnFight, batObj):
    ## 死亡处理buff
    isRefreshAttr = False
    objID = batObj.GetID()
    buffMgr = batObj.GetBuffManager()
    for index in range(buffMgr.GetBuffCount())[::-1]:
        buff = buffMgr.GetBuffByIndex(index)
        buffID = buff.GetBuffID()
        skillID = buff.GetSkillID()
        if buff.GetBuffRetain()&pow(2, ChConfig.BuffRetainType_Dead):
            GameWorld.DebugLog("死亡不清除的buff: objID=%s,buffID=%s,skillID=%s" % (objID, buffID, skillID))
            continue
        if DoBuffDel(turnFight, batObj, buff, noRefreshAttr=True, isSync=False): # 可不通知,前端默认都清除,复活后重新同步
            isRefreshAttr = True
    if isRefreshAttr:
        RefreshBuffAttr(batObj)
    return
def DoBuffByRevive(turnFight, batObj):
    ## 复活处理buff
    
    isRefreshAttr = False
    objID = batObj.GetID()
    buffMgr = batObj.GetBuffManager()
    for index in range(buffMgr.GetBuffCount()):
        buff = buffMgr.GetBuffByIndex(index)
        buffID = buff.GetBuffID()
        skillID = buff.GetSkillID()
        if buff.GetBuffRetain()&pow(2, ChConfig.BuffRetainType_Revive):
            GameWorld.DebugLog("复活不清除的buff: objID=%s,buffID=%s,skillID=%s" % (objID, buffID, skillID))
            SyncBuffRefresh(turnFight, batObj, buff, isNewAdd=True) # 复活时还存在的buff通知前端视为新添加的
            continue
        if DoBuffDel(turnFight, batObj, buff, noRefreshAttr=True, isSync=False): # 复活可不通知删除的buff
            isRefreshAttr = True
    if isRefreshAttr:
        RefreshBuffAttr(batObj)
    # 重新添加本阵营有效光环
    batObjMgr = BattleObj.GetBatObjMgr()
    batLineup = batObj.GetBatLineup()
    for tagObjID in batLineup.posObjIDDict.values():
        tagObj = batObjMgr.getBatObj(tagObjID)
        if not tagObj.IsAlive():
            continue
        tagBuffMgr = tagObj.GetBuffManager()
        for index in range(tagBuffMgr.GetBuffCount()):
            buff = tagBuffMgr.GetBuffByIndex(index)
            haloObjIDList = buff.GetHaloObjIDList()
            if not haloObjIDList or objID not in haloObjIDList:
                continue
            if buff.GetOwnerID() != tagObjID:
                # 非光源
                continue
            haloSkillID = buff.GetSkillID()
            GameWorld.DebugLog("复活后重新添加本阵营光环: objID=%s,ownerID=%s,haloSkillID=%s" % (objID, tagObjID, haloSkillID))
            haloSkill = tagObj.GetSkillManager().FindSkillByID(haloSkillID)
            if not haloSkill:
                continue
            OnAddBuff(turnFight, batObj, haloSkill, buffOwner=tagObj)
    # 光源重新添加有效光环,根据光源是否还有效规则优化,待处理
    return
def RefreshBuffAttr(batObj, isInit=False):
    ''' 刷新buff属性,如果有涉及到buff属性变更的,只能全部buff重新刷
    '''
@@ -458,7 +526,7 @@
            if effID not in ChConfig.AttrIDList:
                continue
            if effect.GetTriggerSrc() not in [ChConfig.TriggerSrc_Skill]:
                # 技能时仅技能有效
                # 技能属性仅技能时有效
                continue
            attrID = effID
            attrValue = effect.GetEffectValue(0)
@@ -491,7 +559,7 @@
            effID = effect.GetEffectID()
            if effID not in ChConfig.AttrIDList:
                continue
            if effect.GetTriggerSrc() and effect.GetTriggerSrc() not in [ChConfig.TriggerSrc_Buff, ChConfig.TriggerSrc_BuffSelf]:
            if not (not effect.GetTriggerSrc() or effect.GetTriggerBuffEnable()):
                # buff时,不配默认有效,或仅buff有效
                continue
            attrID = effID