| | |
| | | buffEffInfo and GameWorld.DebugLog(" 被动Buff效果: %s" % buffEffInfo)
|
| | | return
|
| | |
|
| | | def OnTriggerPassiveEffect(turnFight, batObj, triggerType, connSkill=None):
|
| | | def OnTriggerPassiveEffect(turnFight, batObj, triggerWay, tagObj=None, connSkill=None, connSkillTypeID=0):
|
| | | ''' 触发被动效果,可能触发技能、buff,需根据优先级触发
|
| | | '''
|
| | | passiveEffMgr = batObj.GetPassiveEffManager()
|
| | | effInfoList = passiveEffMgr.GetPassiveEffByTrigger(triggerType, connSkill=connSkill)
|
| | | if not connSkillTypeID and connSkill:
|
| | | connSkillTypeID = connSkill.GetSkillTypeID()
|
| | | effInfoList = passiveEffMgr.GetPassiveEffByTrigger(triggerWay, connSkillTypeID)
|
| | | if not effInfoList:
|
| | | return
|
| | | # [["skill/buff", skillID/buffID, effIDList], ...]
|
| | | GameWorld.DebugLog("触发被动: triggerType=%s,objID=%s,%s" % (triggerType, batObj.GetID(), effInfoList))
|
| | | tagID = tagObj.GetID() if tagObj else 0
|
| | | GameWorld.DebugLog("触发被动: triggerWay=%s,objID=%s,tagID=%s,%s" % (triggerWay, batObj.GetID(), tagID, effInfoList))
|
| | | for effInfo in effInfoList:
|
| | | sign = effInfo[0]
|
| | | if sign == "skill":
|
| | | skillID, effIDList = effInfo[1:]
|
| | | __doTriggerPassiveEffectBySkill(turnFight, batObj, skillID, effIDList, connSkill)
|
| | | __doTriggerPassiveEffectBySkill(turnFight, batObj, tagObj, triggerWay, skillID, effIDList, connSkill)
|
| | |
|
| | | elif sign == "buff":
|
| | | buffID, effIDList = effInfo[1:]
|
| | | __doTriggerPassiveEffectByBuff(turnFight, batObj, buffID, effIDList, connSkill)
|
| | | __doTriggerPassiveEffectByBuff(turnFight, batObj, tagObj, triggerWay, buffID, effIDList, connSkill)
|
| | |
|
| | | return
|
| | |
|
| | | def __doTriggerPassiveEffectBySkill(turnFight, batObj, skillID, effIDList, connSkill=None):
|
| | | return
|
| | |
|
| | | def __doTriggerPassiveEffectByBuff(turnFight, batObj, buffID, effIDList, connSkill=None):
|
| | | buffMgr = batObj.GetBuffManager()
|
| | | curBuff = buffMgr.GetBuff(buffID)
|
| | | if not curBuff:
|
| | | def __doTriggerPassiveEffectBySkill(turnFight, batObj, tagObj, triggerWay, skillID, effIDList, connSkill=None):
|
| | | skillMgr = batObj.GetSkillManager()
|
| | | effSkill = skillMgr.FindSkillByID(skillID)
|
| | | if not effSkill:
|
| | | return
|
| | | skillData = curBuff.GetSkillData()
|
| | |
|
| | | for effID in effIDList:
|
| | | curEffect = skillData.GetEffectByID(effID)
|
| | | curEffect = effSkill.GetEffectByID(effID, triggerWay)
|
| | | if not curEffect:
|
| | | continue
|
| | | pyName = "PassiveEff_%s" % effID
|
| | | callFunc = GameWorld.GetExecFunc(PassiveTrigger, "%s.%s" % (pyName, "DoBuffEffectLogic"))
|
| | | if not callFunc:
|
| | | continue
|
| | | callFunc(turnFight, batObj, curBuff, curEffect, connSkill)
|
| | | DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill)
|
| | |
|
| | | return
|
| | |
|
| | | def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill):
|
| | | effID = curEffect.GetEffectID()
|
| | | if not effID:
|
| | | return
|
| | | pyName = "PassiveEff_%s" % effID
|
| | | callFunc = GameWorld.GetExecFunc(PassiveTrigger, "%s.%s" % (pyName, "DoSkillEffectLogic"))
|
| | | if not callFunc:
|
| | | return
|
| | | callFunc(turnFight, batObj, tagObj, effSkill, curEffect, connSkill)
|
| | | return
|
| | |
|
| | | def __doTriggerPassiveEffectByBuff(turnFight, batObj, tagObj, triggerWay, buffID, effIDList, connSkill=None):
|
| | | buffMgr = batObj.GetBuffManager()
|
| | | effBuff = buffMgr.GetBuff(buffID)
|
| | | if not effBuff:
|
| | | return
|
| | | skillData = effBuff.GetSkillData()
|
| | | |
| | | for effID in effIDList:
|
| | | curEffect = skillData.GetEffectByID(effID, triggerWay)
|
| | | if not curEffect:
|
| | | continue
|
| | | DoBuffEffectLogic(turnFight, batObj, tagObj, effBuff, curEffect, connSkill)
|
| | | |
| | | return
|
| | |
|
| | | def DoBuffEffectLogic(turnFight, batObj, tagObj, effBuff, curEffect, connSkill):
|
| | | effID = curEffect.GetEffectID()
|
| | | if not effID:
|
| | | return
|
| | | pyName = "PassiveEff_%s" % effID
|
| | | callFunc = GameWorld.GetExecFunc(PassiveTrigger, "%s.%s" % (pyName, "DoBuffEffectLogic"))
|
| | | if not callFunc:
|
| | | return
|
| | | callFunc(turnFight, batObj, tagObj, effBuff, curEffect, connSkill)
|
| | | return
|
| | |
|
| | | def GetTriggerPassiveValue(batObj, triggerType, tagObj=None, useSkill=None):
|
| | | ''' 获取触发被动的值,一般用于某种条件下才会产生的值,如xx情况下属性变化 或 xx情况下是否发生什么
|
| | | @return: 触发的值,0-没有触发或本身触发的值为0;大于0-触发的具体值
|