ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
@@ -179,12 +179,15 @@
                continue
            buffID = buff.GetBuffID()
            nowLayerCnt = buff.GetLayer()
            GameWorld.DebugLogEx("    已经存在该buff: buffID=%s,skillTypeID=%s,ownerID=%s,buffRepeat=%s", buffID, skillTypeID, ownerID, buffRepeat)
            GameWorld.DebugLogEx("    已经存在该buff: buffID=%s,skillTypeID=%s,ownerID=%s,buffRepeat=%s,nowLayerCnt=%s/%s", buffID, skillTypeID, ownerID, buffRepeat, nowLayerCnt, maxLayerCnt)
            
            resetAddTiming = False # 一般只有覆盖的才重新计算回合,视为重新添加
            remainTime = buffSkill.GetLastTime()
            updLayerCnt = addLayerCnt
            if buffRepeat == 3: # 叠加层级
                if maxLayerCnt and nowLayerCnt >= maxLayerCnt:
                    GameWorld.DebugLogEx("    已达最大层数: nowLayerCnt=%s/%s", nowLayerCnt, maxLayerCnt)
                    return
                updLayerCnt = nowLayerCnt + addLayerCnt
                if maxLayerCnt and updLayerCnt > maxLayerCnt:
                    updLayerCnt = maxLayerCnt
@@ -226,11 +229,12 @@
    ownerID = buffOwner.GetID()
    buffID = buff.GetBuffID()
    timing = batObj.GetTiming()
    skillType = buffSkill.GetSkillType()
    remainTime = buffSkill.GetLastTime()
    remainTime += TurnPassive.GetTriggerEffectValue(turnFight, buffOwner, batObj, ChConfig.PassiveEff_AddBuffTime, buffSkill)
    
    GameWorld.DebugLogEx("    __addNewBuff. buffID=%s,skillID=%s,ownerID=%s,relatedSkillID=%s,timing=%s,remainTime=%s,setLayerCnt=%s",
                         buffID, skillID, ownerID, relatedSkillID, timing, remainTime, setLayerCnt, curID)
    GameWorld.DebugLogEx("    __addNewBuff. buffID=%s,skillID=%s,ownerID=%s,relatedSkillID=%s,timing=%s,remainTime=%s,setLayerCnt=%s,afterLogic=%s",
                         buffID, skillID, ownerID, relatedSkillID, timing, remainTime, setLayerCnt, afterLogic, curID)
    buff.SetAddTiming(timing) # 武将当前在什么时机就设置为什么时机
    buff.SetOwnerID(ownerID)
    buff.SetRemainTime(remainTime)
@@ -240,11 +244,13 @@
    if curBuffState:
        buffMgr.AddBuffState(curBuffState, buffID)
        
    if buffSkill.GetSkillType() == ChConfig.Def_SkillType_Halo:
    if skillType == ChConfig.Def_SkillType_Halo:
        __addHaloBuffEffObjID(curID, buff, skillID, ownerID, haloSrcBuff)
        
    if afterLogic and buffSkill:
        buffSkill.AddAfterLogic(ChConfig.AfterLogic_AddBuff, [batObj, buff, buffOwner])
        if bySkill:
            bySkill.AddAfterLogic(ChConfig.AfterLogic_AddBuff, [batObj, buff, buffOwner])
    elif isSync:
        SyncBuffRefresh(turnFight, batObj, buff, relatedSkillID, isNewAdd=True)
        
@@ -253,6 +259,10 @@
    #添加buff时有需要后置处理触发被动的,如受控
    if curBuffState and IsControlledHardState(curBuffState):
        buffSkill.AddAfterLogic(ChConfig.AfterLogic_TriggerAddBuff, [ChConfig.TriggerWay_BeControlledHard, batObj, buff, buffOwner])
    #添加持续减益buff
    if skillType == ChConfig.Def_SkillType_LstDepBuff:
        buffSkill.AddAfterLogic(ChConfig.AfterLogic_TriggerAddBuff, [ChConfig.TriggerWay_AddDOTBuff, batObj, buff, buffOwner])
        
    return buff
@@ -577,9 +587,14 @@
    befHP = batObj.GetHP()
    befMaxHP = batObj.GetMaxHP()
    
    isMingge = batObj.GetPosNum() == ChConfig.TFPosNum_Mingge
    mgObj = None
    if not isMingge:
        mgObj = batObj.GetTFBatLineup().getMinggeObj()
    mgObjID = mgObj.GetID() if mgObj else 0
    batAttrDict = batObj.ResetBattleEffect()
    GameWorld.DebugLogEx("RefreshBuffAttr ID:%s,atk=%s,def=%s,hp=%s/%s,batAttrDict=%s",
                         objID, batObj.GetAtk(), batObj.GetDef(), befHP, befMaxHP, batAttrDict)
    GameWorld.DebugLogEx("RefreshBuffAttr ID:%s,atk=%s,def=%s,hp=%s/%s,isMingge=%s(%s),batAttrDict=%s",
                         objID, batObj.GetAtk(), batObj.GetDef(), befHP, befMaxHP, isMingge, mgObjID, batAttrDict)
    
    skbufAttrDict = {}
    
@@ -654,11 +669,22 @@
    
    objID = batObj.GetID()
    # 先计算百分比加成或降低的
    mgHaveAttrPer = False # 命格加成对友军有效
    perIDList = ChConfig.AttrPerDict.values()
    for attrID, attrPerID in ChConfig.AttrPerDict.items():
        if attrPerID not in skbufAttrDict:
        attrPerValue = 0
        if attrPerID in skbufAttrDict:
            attrPerValue += skbufAttrDict[attrPerID] # 可能是负值
        if mgObj:
            attrPerValue += mgObj.GetBatAttrValue(attrPerID)
            if attrPerValue:
                GameWorld.DebugLogEx("    命格额外加成: attrID=%s,attrPerID=%s,attrPerValue=%s", attrID, attrPerID, attrPerValue)
        elif isMingge and attrPerValue:
            mgHaveAttrPer = True
            batObj.SetBatAttrValue(attrPerID, attrPerValue)
            GameWorld.DebugLogEx("    命格保存加成: attrID=%s,attrPerID=%s,attrPerValue=%s", attrID, attrPerID, attrPerValue)
        if not attrPerValue:
            continue
        attrPerValue = skbufAttrDict[attrPerID] # 可能是负值
        attrValue = batObj.GetBatAttrValue(attrID, False)
        if attrValue <= 0:
            continue
@@ -690,6 +716,21 @@
            batObj.SetHP(aftHP, isNotify)
    GameWorld.DebugLogEx("    befHP=%s/%s, aftHP=%s/%s", befHP, befMaxHP, aftHP, aftMaxHP)
    GameWorld.DebugLogEx("    最终属性 ID:%s,atk=%s,def=%s,hp=%s/%s,%s", objID, batObj.GetAtk(), batObj.GetDef(), aftHP, aftMaxHP, batObj.GetBatAttrDict())
    # 命格刷属性
    if mgHaveAttrPer and isMingge and not isInit:
        batLineup = batObj.GetTFBatLineup()
        batObjMgr = BattleObj.GetBatObjMgr()
        heroObjIDList = batLineup.getBatHeroObjIDList()
        GameWorld.DebugLogEx("命格有加成属性同步刷新本阵容武将属性: heroObjIDList=%s", heroObjIDList)
        for heroObjID in heroObjIDList:
            heroObj = batObjMgr.getBatObj(heroObjID)
            if not heroObj:
                continue
            if not heroObj.IsAlive():
                continue
            RefreshBuffAttr(heroObj)
    return
def SyncBuffRefresh(turnFight, curBatObj, curBuff, relatedSkillID=0, isNewAdd=False):