#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
##@package Skill.PassiveTrigger.PassiveEff_Attr
|
#
|
# @todo:±»¶¯´¥·¢ÊôÐÔ
|
# @author hxp
|
# @date 2025-09-16
|
# @version 1.0
|
#
|
# ÏêϸÃèÊö: ±»¶¯´¥·¢ÊôÐÔ
|
#
|
#-------------------------------------------------------------------------------
|
#"""Version = 2025-09-16 14:30"""
|
#-------------------------------------------------------------------------------
|
|
import GameWorld
|
|
def GetHappenValue(attacker, defender, curEffect, effSkill, effBuff, connSkill, **skillkwargs):
|
|
attrID = curEffect.GetEffectID()
|
attrValue = curEffect.GetEffectValue(0)
|
calcType = curEffect.GetEffectValue(1)
|
# 10-¸ù¾Ý¶Ô·½buff²ã¼¶Ôö¼Ó
|
if calcType == 10:
|
buffStateList = curEffect.GetEffectValue(2)
|
maxValue = curEffect.GetEffectValue(3) # ÀÛ¼Æ×î¸ßÔö¼ÓÖµ
|
checkBatType = curEffect.GetEffectValue(4) # ÑéÖ¤¹¥»÷ÀàÐÍ 0-²»ÑéÖ¤£»1-Á¬»÷£»2-×·»÷£»3-·´»÷
|
if checkBatType:
|
if not connSkill:
|
return
|
if connSkill.GetBatType() != checkBatType:
|
#GameWorld.DebugLog("¶îÍâÊôÐÔЧ¹û·Ç¸ÃÕ½¶·ÀàÐͲ»´¥·¢: checkBatType=%s,skillBatType=%s" % (checkBatType, connSkill.GetBatType()))
|
return
|
|
layerTotal = 0
|
buffMgr = defender.GetBuffManager()
|
for buffState in buffStateList:
|
for buff in buffMgr.FindBuffListByState(buffState):
|
layerTotal += max(1, buff.GetLayer())
|
attrValue *= layerTotal
|
if maxValue and attrValue > maxValue:
|
attrValue = maxValue
|
GameWorld.DebugLogEx("°´¶Ô·½buff²ã¼¶Ôö¼ÓÊôÐÔ: attrID=%s,attrValue=%s,buffStateList=%s,layerTotal=%s,maxValue=%s,checkBatType=%s",
|
attrID, attrValue, buffStateList, layerTotal, maxValue, checkBatType)
|
# 11-¸ù¾Ý×Ô¼ºÒÑËðʧѪÁ¿°Ù·Ö±È
|
elif calcType == 11:
|
curHP = attacker.GetHP()
|
maxHP = attacker.GetMaxHP()
|
lostPer = int((maxHP - curHP) / float(maxHP) * 100) # Ö»ËãÈ¡Õû
|
attrValue = lostPer * attrValue
|
GameWorld.DebugLog("°´×ÔÉíÒÑËðʧÉúÃü°Ù·Ö±ÈÔö¼ÓÊôÐÔ: attrID=%s,attrValue=%s,curHP=%s/%s,lostPer=%s"
|
% (attrID, attrValue, curHP, maxHP, lostPer))
|
|
else:
|
checkInStateList = curEffect.GetEffectValue(2)
|
if checkInStateList:
|
if not defender.CheckInState(checkInStateList):
|
return
|
|
onlyOwner = curEffect.GetEffectValue(3) # ÊÇ·ñ½ö¶ÔbuffÊ©·¨ÕßÓÐЧ£¬Ä¬ÈÏ0-·ñ£¬1-ÊÇ
|
if onlyOwner:
|
if not effBuff:
|
return
|
if effBuff.GetOwnerID() != defender.GetID():
|
return
|
|
if calcType == 2: # ¼õÉÙ£¬ÆäËûĬÈÏÔö¼Ó
|
attrValue = -attrValue
|
|
return attrValue
|