ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
@@ -31,13 +31,11 @@
    buffEffInfo and GameWorld.DebugLog("    被动Buff效果: %s" % buffEffInfo)
    return
def OnTriggerPassiveEffect(turnFight, batObj, triggerWay, tagObj=None, connSkill=None, connSkillTypeID=0):
def OnTriggerPassiveEffect(turnFight, batObj, triggerWay, tagObj=None, connSkill=None, connSkillTypeID=0, connBuff=None, **kwargs):
    ''' 触发被动效果,可能触发技能、buff,需根据优先级触发
    '''
    passiveEffMgr = batObj.GetPassiveEffManager()
    if not connSkillTypeID and connSkill:
        connSkillTypeID = connSkill.GetSkillTypeID()
    effInfoList = passiveEffMgr.GetPassiveEffByTrigger(triggerWay, connSkillTypeID)
    effInfoList = passiveEffMgr.GetPassiveEffByTrigger(triggerWay, connSkill, connSkillTypeID, connBuff)
    if not effInfoList:
        return
    # [["skill/buff", skillID/buffID, effIDList], ...]
@@ -47,17 +45,19 @@
        sign = effInfo[0]
        if sign == "skill":
            skillID, effIDList = effInfo[1:]
            __doTriggerPassiveEffectBySkill(turnFight, batObj, tagObj, triggerWay, skillID, effIDList, connSkill)
            __doTriggerPassiveEffectBySkill(turnFight, batObj, tagObj, triggerWay, skillID, effIDList, connSkill, connBuff, **kwargs)
            
        elif sign == "buff":
            buffID, effIDList = effInfo[1:]
            __doTriggerPassiveEffectByBuff(turnFight, batObj, tagObj, triggerWay, buffID, effIDList, connSkill)
            __doTriggerPassiveEffectByBuff(turnFight, batObj, tagObj, triggerWay, buffID, effIDList, connSkill, connBuff, **kwargs)
            
    return
def __doTriggerPassiveEffectBySkill(turnFight, batObj, tagObj, triggerWay, skillID, effIDList, connSkill=None):
def __doTriggerPassiveEffectBySkill(turnFight, batObj, tagObj, triggerWay, skillID, effIDList, connSkill=None, connBuff=None, **kwargs):
    skillMgr = batObj.GetSkillManager()
    effSkill = skillMgr.FindSkillByID(skillID)
    if not effSkill and connSkill and connSkill.GetSkillID() == skillID:
        effSkill = connSkill
    if not effSkill:
        return
    
@@ -65,11 +65,11 @@
        curEffect = effSkill.GetEffectByID(effID, triggerWay)
        if not curEffect:
            continue
        DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill)
        DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs)
        
    return
def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill):
def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff=None, **kwargs):
    effID = curEffect.GetEffectID()
    if not effID:
        return
@@ -77,12 +77,14 @@
    callFunc = GameWorld.GetExecFunc(PassiveTrigger, "%s.%s" % (pyName, "DoSkillEffectLogic"))
    if not callFunc:
        return
    callFunc(turnFight, batObj, tagObj, effSkill, curEffect, connSkill)
    callFunc(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs)
    return
def __doTriggerPassiveEffectByBuff(turnFight, batObj, tagObj, triggerWay, buffID, effIDList, connSkill=None):
def __doTriggerPassiveEffectByBuff(turnFight, batObj, tagObj, triggerWay, buffID, effIDList, connSkill=None, connBuff=None, **kwargs):
    buffMgr = batObj.GetBuffManager()
    effBuff = buffMgr.GetBuff(buffID)
    if not effBuff and connBuff and connBuff.GetBuffID() == buffID:
        effBuff = connBuff
    if not effBuff:
        return
    skillData = effBuff.GetSkillData()
@@ -91,11 +93,11 @@
        curEffect = skillData.GetEffectByID(effID, triggerWay)
        if not curEffect:
            continue
        DoBuffEffectLogic(turnFight, batObj, tagObj, effBuff, curEffect, connSkill)
        DoBuffEffectLogic(turnFight, batObj, tagObj, effBuff, curEffect, connSkill, connBuff, **kwargs)
        
    return
def DoBuffEffectLogic(turnFight, batObj, tagObj, effBuff, curEffect, connSkill):
def DoBuffEffectLogic(turnFight, batObj, tagObj, effBuff, curEffect, connSkill, connBuff, **kwargs):
    effID = curEffect.GetEffectID()
    if not effID:
        return
@@ -103,10 +105,10 @@
    callFunc = GameWorld.GetExecFunc(PassiveTrigger, "%s.%s" % (pyName, "DoBuffEffectLogic"))
    if not callFunc:
        return
    callFunc(turnFight, batObj, tagObj, effBuff, curEffect, connSkill)
    callFunc(turnFight, batObj, tagObj, effBuff, curEffect, connSkill, connBuff, **kwargs)
    return
def GetTriggerEffectValue(turnFight, atkObj, defObj, calcEffID, connSkill=None):
def GetTriggerEffectValue(turnFight, atkObj, defObj, calcEffID, connSkill=None, **kwargs):
    ''' 获取触发被动的值,一般用于某种条件下才会产生的值,如xx情况下属性变化 或 xx情况下是否发生什么
    @param calcEffID: 需要统计的效果ID,可以是属性ID或者其他自定义效果ID
    @return: 触发的值,0-没有触发或本身触发的值为0;非0-触发的具体值
@@ -114,8 +116,7 @@
    
    triggerWay = ChConfig.TriggerWay_CalcEffValue
    passiveEffMgr = atkObj.GetPassiveEffManager()
    connSkillTypeID = connSkill.GetSkillTypeID() if connSkill else 0
    effInfoList = passiveEffMgr.GetPassiveEffByTrigger("%s_%s" % (triggerWay, calcEffID), connSkillTypeID)
    effInfoList = passiveEffMgr.GetPassiveEffByTrigger("%s_%s" % (triggerWay, calcEffID), connSkill)
    if not effInfoList:
        return 0
    
@@ -130,6 +131,8 @@
        if sign == "skill":
            skillID, effIDList = effInfo[1:]
            effSkill = skillMgr.FindSkillByID(skillID)
            if not effSkill and connSkill and connSkill.GetSkillID() == skillID:
                effSkill = connSkill
        elif sign == "buff":
            buffID, effIDList = effInfo[1:]
            effBuff = buffMgr.GetBuff(buffID)
@@ -158,19 +161,22 @@
            callFunc = GameWorld.GetExecFunc(PassiveTrigger, "%s.%s" % (pyName, "GetHappenValue"))
            if not callFunc:
                continue
            value = callFunc(atkObj, defObj, effect, effSkill)
            value = callFunc(atkObj, defObj, effect, effSkill, **kwargs)
            if value is None:
                continue
            
            #if triggerType in TriggerValueMaxList:
            #    curValue = max(curValue, value) # 取最大值
            #elif triggerType in TriggerValueMinList:
            #    if not curValue:
            #        curValue = value
            #    elif value > 0:
            #        curValue = min(curValue, value) # 取最小值
            #else:
            curValue += value
            if effID in ChConfig.PassiveEffHappenValueList:
                if value:
                    return value
            elif effID in ChConfig.PassiveEffValueMaxList:
                curValue = max(curValue, value) # 取最大值
            elif effID in ChConfig.PassiveEffValueMinList:
                if not curValue:
                    curValue = value
                elif value > 0:
                    curValue = min(curValue, value) # 取最小值
            else:
                curValue += value
            #if skillTypeID not in Def_PassiveSkillValueNoCD:
            #    if curSkill.GetCoolDownTime():
            #        SkillCommon.SetSkillRemainTime(curSkill, 0, tick, attacker)