#!/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 GetTriggerPassiveValue(batObj, triggerType, tagObj=None, useSkill=None): ''' »ñÈ¡´¥·¢±»¶¯µÄÖµ£¬Ò»°ãÓÃÓÚijÖÖÌõ¼þϲŻá²úÉúµÄÖµ£¬ÈçxxÇé¿öÏÂÊôÐԱ仯 »ò xxÇé¿öÏÂÊÇ·ñ·¢Éúʲô @return: ´¥·¢µÄÖµ£¬0-ûÓд¥·¢»ò±¾Éí´¥·¢µÄֵΪ0£»´óÓÚ0-´¥·¢µÄ¾ßÌåÖµ ''' return 0 # attacker = FindRealAttacker(attacker) # if not attacker: # return 0 # # stopPassiveSkill = False # ±»¶¯¼¼Äܲ»ÄÜÔÙ´¥·¢±»¶¯¼¼ÄÜ£¬µ«¿ÉÒÔ´¥·¢Ì츳¼¼ÄÜ # if useSkill and SkillCommon.isPassiveSkill(useSkill) and isStopPassiveSkill: # #GameWorld.DebugLog("±»¶¯¼¼Äܲ»ÄÜÔٴδ¥·¢±»¶¯¼¼ÄÜ") # #return 0 # if not PassPassiveLimit(useSkill): # stopPassiveSkill = True # # # passiveEff = GetPassiveEffManager().GetPassiveEff(attacker) # if not passiveEff: # return 0 # buffDict = passiveEff.GetBuffsByTriggerType(triggerType) # if not buffDict: # return 0 # # # µ±Ç°Õ½¶·¹ØÏµ pvp pve # battleRelationType = AttackCommon.GetBattleRelationType(attacker, defender) # if not AttackCommon.CheckBattleRelationType(attacker, defender, useSkill, battleRelationType): # return 0 # # useSkillID = useSkill.GetSkillID() if useSkill else 0 # #tick = GameWorld.GetGameWorld().GetTick() # curValue = 0 # # for skillID, effectList in buffDict.items(): # if skillID == useSkillID: # continue # curSkill = GameWorld.GetGameData().GetSkillBySkillID(skillID) # if not curSkill: # continue # # if not IsValidPassiveSkill(curSkill): # continue # # triggerCount = 0 # ³É¹¦´¥·¢´ÎÊý # for effectInfo in effectList: # if stopPassiveSkill and curSkill.GetFuncType() != ChConfig.Def_SkillFuncType_GiftSkill: # # Ö»ÓÐÌ츳²Å¿ÉÒÔÔٴα»´¥·¢ # continue # passiveEffect = effectInfo[0] # # ±»¶¯´¥·¢µÄ¼¼ÄÜ # pyName = "PassiveBuff_%s"%passiveEffect.GetEffectID() # # callFunc = GameWorld.GetExecFunc(PassiveBuff, "%s.%s" % (pyName, "CheckCanHappen")) # if not callFunc: # continue # # # Ìõ¼þ²»Âú×ã # if not callFunc(attacker, defender, passiveEffect, skillID, useSkill=useSkill, ownerID=effectInfo[1], ownerType=effectInfo[2]): # continue # # callFunc = GameWorld.GetExecFunc(PassiveBuff, "%s.%s" % (pyName, "GetValue")) # if callFunc is None: # continue # # # Èç±»¶¯¼¼ÄÜ£ºÇ§»ÃÚ¤Ñ×ÕæÊµÉ˺¦´Ó2±ä4±¶ # #curValue += GetPassiveSkillValueByTriggerType(attacker, defender, curSkill, ChConfig.TriggerType_PassiveBuffValue) # value = callFunc(attacker, defender, passiveEffect) # 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 # # triggerCount += 1 # # if triggerCount: # OnTriggerBuffDel(attacker, curSkill, triggerCount) # # return curValue