#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # ##@package Skill.TurnPassive # # @todo:»ØºÏ±»¶¯´¥·¢¹ÜÀí # @author hxp # @date 2025-8-11 # @version 1.0 # # ÏêϸÃèÊö: »ØºÏ±»¶¯¹ÜÀí£¬Ö÷Òª±»¶¯´¥·¢µÄ¼¼ÄÜ¡¢buffµÈ¹ÜÀí # #------------------------------------------------------------------------------- #"""Version = 2025-8-11 ÏÂÎç3:47:07""" #------------------------------------------------------------------------------- import GameWorld import PassiveTrigger import ChConfig GameWorld.ImportAll("Script\\Skill\\", "PassiveTrigger") def RefreshPassive(batObj): ''' ˢб»¶¯Ð§¹û£¬Ò»°ã¿ÉÄÜ´æÔÚÓÚ¼¼ÄÜ»òbuffÖÐ ''' passiveEffMgr = batObj.GetPassiveEffManager() skillEffInfo = passiveEffMgr.RefreshSkillPassiveEffect() buffEffInfo = passiveEffMgr.RefreshBuffPassiveEffect() skillEffInfo and GameWorld.DebugLog(" ±»¶¯¼¼ÄÜЧ¹û: %s" % skillEffInfo) buffEffInfo and GameWorld.DebugLog(" ±»¶¯BuffЧ¹û: %s" % buffEffInfo) return def OnTriggerPassiveEffect(turnFight, batObj, triggerWay, tagObj=None, connSkill=None, connSkillTypeID=0): ''' ´¥·¢±»¶¯Ð§¹û£¬¿ÉÄÜ´¥·¢¼¼ÄÜ¡¢buff£¬Ðè¸ù¾ÝÓÅÏȼ¶´¥·¢ ''' passiveEffMgr = batObj.GetPassiveEffManager() if not connSkillTypeID and connSkill: connSkillTypeID = connSkill.GetSkillTypeID() effInfoList = passiveEffMgr.GetPassiveEffByTrigger(triggerWay, connSkillTypeID) if not effInfoList: return # [["skill/buff", skillID/buffID, effIDList], ...] 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, tagObj, triggerWay, skillID, effIDList, connSkill) elif sign == "buff": buffID, effIDList = effInfo[1:] __doTriggerPassiveEffectByBuff(turnFight, batObj, tagObj, triggerWay, buffID, effIDList, connSkill) return def __doTriggerPassiveEffectBySkill(turnFight, batObj, tagObj, triggerWay, skillID, effIDList, connSkill=None): skillMgr = batObj.GetSkillManager() effSkill = skillMgr.FindSkillByID(skillID) if not effSkill: return for effID in effIDList: curEffect = effSkill.GetEffectByID(effID, triggerWay) if not curEffect: continue 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 GetTriggerEffectValue(turnFight, atkObj, defObj, calcEffID, connSkill=None): ''' »ñÈ¡´¥·¢±»¶¯µÄÖµ£¬Ò»°ãÓÃÓÚijÖÖÌõ¼þϲŻá²úÉúµÄÖµ£¬ÈçxxÇé¿öÏÂÊôÐԱ仯 »ò xxÇé¿öÏÂÊÇ·ñ·¢Éúʲô @param calcEffID: ÐèҪͳ¼ÆµÄЧ¹ûID£¬¿ÉÒÔÊÇÊôÐÔID»òÕ߯äËû×Ô¶¨ÒåЧ¹ûID @return: ´¥·¢µÄÖµ£¬0-ûÓд¥·¢»ò±¾Éí´¥·¢µÄֵΪ0£»·Ç0-´¥·¢µÄ¾ßÌåÖµ ''' triggerWay = ChConfig.TriggerWay_CalcEffValue passiveEffMgr = atkObj.GetPassiveEffManager() connSkillTypeID = connSkill.GetSkillTypeID() if connSkill else 0 effInfoList = passiveEffMgr.GetPassiveEffByTrigger("%s_%s" % (triggerWay, calcEffID), connSkillTypeID) if not effInfoList: return 0 curValue = 0 skillMgr = atkObj.GetSkillManager() buffMgr = atkObj.GetBuffManager() # [["skill/buff", skillID/buffID, effIDList], ...] tagID = defObj.GetID() if defObj else 0 GameWorld.DebugLog("ͳ¼Æ±»¶¯Ð§¹ûÖµ: calcEffID=%s,objID=%s,tagID=%s,%s" % (calcEffID, atkObj.GetID(), tagID, effInfoList)) for effInfo in effInfoList: sign = effInfo[0] if sign == "skill": skillID, effIDList = effInfo[1:] effSkill = skillMgr.FindSkillByID(skillID) elif sign == "buff": buffID, effIDList = effInfo[1:] effBuff = buffMgr.GetBuff(buffID) if not effBuff: continue effSkill = effBuff.GetSkillData() else: continue if not effSkill: continue for effID in effIDList: effect = effSkill.GetEffectByID(effID, triggerWay) if not effect: continue effID = effect.GetEffectID() if not effID or effID != calcEffID: continue if effID in ChConfig.AttrIDList: pyName = "PassiveEff_Attr" else: pyName = "PassiveEff_%s" % effID callFunc = GameWorld.GetExecFunc(PassiveTrigger, "%s.%s" % (pyName, "GetHappenValue")) if not callFunc: continue value = callFunc(atkObj, defObj, effect, effSkill) if value is None: continue 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) return curValue