#!/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, triggerType, connSkill=None):
|
''' ´¥·¢±»¶¯Ð§¹û£¬¿ÉÄÜ´¥·¢¼¼ÄÜ¡¢buff£¬Ðè¸ù¾ÝÓÅÏȼ¶´¥·¢
|
'''
|
passiveEffMgr = batObj.GetPassiveEffManager()
|
effInfoList = passiveEffMgr.GetPassiveEffByTrigger(triggerType, connSkill=connSkill)
|
if not effInfoList:
|
return
|
# [["skill/buff", skillID/buffID, effIDList], ...]
|
GameWorld.DebugLog("´¥·¢±»¶¯: triggerType=%s,objID=%s,%s" % (triggerType, batObj.GetID(), effInfoList))
|
for effInfo in effInfoList:
|
sign = effInfo[0]
|
if sign == "skill":
|
skillID, effIDList = effInfo[1:]
|
__doTriggerPassiveEffectBySkill(turnFight, batObj, skillID, effIDList, connSkill)
|
|
elif sign == "buff":
|
buffID, effIDList = effInfo[1:]
|
__doTriggerPassiveEffectByBuff(turnFight, batObj, 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:
|
return
|
skillData = curBuff.GetSkillData()
|
|
for effID in effIDList:
|
curEffect = skillData.GetEffectByID(effID)
|
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)
|
|
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
|