| | |
| | | #"""Version = 2025-09-16 14:30"""
|
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | def GetHappenValue(attacker, defender, curEffect, effSkill, **skillkwargs):
|
| | | import GameWorld
|
| | | import TurnBuff
|
| | |
|
| | | def GetHappenValue(attacker, defender, curEffect, effSkill, effBuff, connSkill, **skillkwargs):
|
| | |
|
| | | checkInStateList = curEffect.GetEffectValue(2)
|
| | | if checkInStateList:
|
| | | if not defender.CheckInState(checkInStateList):
|
| | | return 0
|
| | | |
| | | attrID = curEffect.GetEffectID()
|
| | | attrValue = curEffect.GetEffectValue(0)
|
| | | calcType = curEffect.GetEffectValue(1)
|
| | | if calcType == 2: # 减少,其他默认增加
|
| | | attrValue = -attrValue
|
| | | # 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))
|
| | |
|
| | | # 12-根据自己buff层级增加
|
| | | elif calcType == 12:
|
| | | if "turnFight" not in skillkwargs:
|
| | | return
|
| | | turnFight = skillkwargs["turnFight"]
|
| | | buffState = curEffect.GetEffectValue(2) # 自己身上buff状态
|
| | | isDelBuff = curEffect.GetEffectValue(3) # 触发效果后是否扣除buff
|
| | | layerTotal = 0
|
| | | buffMgr = attacker.GetBuffManager()
|
| | | for buff in buffMgr.FindBuffListByState(buffState):
|
| | | layerTotal += buff.GetLayer()
|
| | | if isDelBuff:
|
| | | TurnBuff.DoBuffDel(turnFight, attacker, buff, connSkill)
|
| | | attrValue *= layerTotal
|
| | | GameWorld.DebugLogEx("按自己buff层级增加属性: attrID=%s,attrValue=%s,buffState=%s,layerTotal=%s", attrID, attrValue, buffState, layerTotal)
|
| | | |
| | | # 13-根据对方buff状态种数
|
| | | elif calcType == 13:
|
| | | buffStateList = curEffect.GetEffectValue(2) # 对方处于xx状态 [状态1, 状态2, ...]
|
| | | isMulti = curEffect.GetEffectValue(3) # 存在多种状态时是否叠加属性
|
| | | stateCount = 0
|
| | | buffMgr = defender.GetBuffManager()
|
| | | for buffState in buffStateList:
|
| | | if buffMgr.IsInBuffState(buffState):
|
| | | stateCount += 1
|
| | | if not stateCount:
|
| | | return
|
| | | if isMulti and stateCount > 1:
|
| | | attrValue *= stateCount
|
| | | GameWorld.DebugLogEx("按目标buff状态种数增加属性: attrID=%s,attrValue=%s,buffStateList=%s,stateCount=%s,isMulti=%s", |
| | | attrID, attrValue, buffStateList, stateCount, isMulti)
|
| | | |
| | | 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
|