129 【战斗】战斗系统-服务端(王异技能;支持被动增加暴击率;支持被动变更伤害类型;)
| | |
| | | TriggerSrc_SkillSelf = 3 # 本技能有效
|
| | | TriggerSrc_BuffSelf = 4 # 本buff有效
|
| | |
|
| | | # 被动效果ID,属性类的直接使用属性ID当做效果ID
|
| | | PassiveEff_AddBuffLayerByWeight = 6001 # 根据权重随机添加buff层数 数值1-[[权重,层级], ...]
|
| | | PassiveEff_ChangeHurtType = 6002 # 变更伤害类型: 值1-伤害类型;值2-可附加验证处于xx状态 [状态1, 状态2, ...]
|
| | |
|
| | | # 被动效果ID有触发值时就返回的
|
| | | PassiveEffHappenValueList = [PassiveEff_ChangeHurtType]
|
| | | # 被动效果ID触发值取最大值的
|
| | | PassiveEffValueMaxList = []
|
| | | # 被动效果ID触发值取最小值的
|
| | | PassiveEffValueMinList = []
|
| | |
|
| | | (
|
| | | TriggerType_BeSuperHit, # 被暴击触发技能 1
|
| | | TriggerType_BuffState, # 进入4012的某个状态触发技能
|
| New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | ##@package Skill.PassiveTrigger.PassiveEff_6002
|
| | | #
|
| | | # @todo:变更本次伤害类型
|
| | | # @author hxp
|
| | | # @date 2025-09-16
|
| | | # @version 1.0
|
| | | #
|
| | | # 详细描述: 变更本次伤害类型
|
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #"""Version = 2025-09-16 17:00"""
|
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | def GetHappenValue(attacker, defender, curEffect, effSkill, **skillkwargs):
|
| | | checkInStateList = curEffect.GetEffectValue(1)
|
| | | if checkInStateList:
|
| | | if not defender.CheckInState(checkInStateList):
|
| | | return
|
| | | |
| | | attrValue = curEffect.GetEffectValue(0)
|
| | | return attrValue
|
| | |
| | | checkInStateList = curEffect.GetEffectValue(2)
|
| | | if checkInStateList:
|
| | | if not defender.CheckInState(checkInStateList):
|
| | | return 0
|
| | | return
|
| | |
|
| | | attrValue = curEffect.GetEffectValue(0)
|
| | | calcType = curEffect.GetEffectValue(1)
|
| | |
| | | skillTypeID = buffSkill.GetSkillTypeID()
|
| | | buffRepeat = buffSkill.GetBuffRepeat()
|
| | | addLayerCnt = buffSkill.GetLayerCnt()
|
| | | addLayerEff = buffSkill.GetEffectByID(6001)
|
| | | addLayerEff = buffSkill.GetEffectByID(ChConfig.PassiveEff_AddBuffLayerByWeight)
|
| | | if addLayerEff:
|
| | | addLayerCnt = GameWorld.GetResultByWeightList(addLayerEff.GetEffectValues(), addLayerCnt)
|
| | |
|
| | |
| | | if value is None:
|
| | | continue
|
| | |
|
| | | #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
|
| | | 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)
|
| | |
| | | def CalcHurtHP(turnFight, atkObj, defObj, curSkill, atkSkillValue, atkSkillPer, **kwargs):
|
| | | '''计算伤害,默认按攻击计算
|
| | | '''
|
| | | |
| | | skillID = curSkill.GetSkillID()
|
| | | pmType = GetPMType(atkObj, curSkill)
|
| | | ignoreDef = IsIgnoreDef(curSkill)
|
| | |
|
| | | changeHurtType = TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_ChangeHurtType, curSkill)
|
| | | if changeHurtType == 1:
|
| | | ignoreDef = True
|
| | | GameWorld.DebugLog("强制变更本次伤害为无视防御! skillID=%s" % skillID)
|
| | | |
| | | atkID = atkObj.GetID()
|
| | | defID = defObj.GetID()
|
| | |
|
| | | skillID = curSkill.GetSkillID()
|
| | | isTurnNormalSkill = SkillCommon.isTurnNormalSkill(curSkill)
|
| | | isAngerSkill = SkillCommon.isAngerSkill(curSkill)
|
| | | isDot = ("damageoftime" in kwargs)
|
| | |
| | | isSuperHit, isParry, isStun = False, False, False
|
| | | aSuperDamPer, dSuperDamPerDef = 0, 0
|
| | | if not isDot:
|
| | | isSuperHit = CanSuperHit(atkObj, defObj) # 是否暴击
|
| | | isSuperHit = CanSuperHit(turnFight, atkObj, defObj, curSkill) # 是否暴击
|
| | | isParry = (isTurnNormalSkill and CanParry(turnFight, atkObj, defObj, curSkill)) # 是否格挡,仅针对普攻
|
| | | isStun = CanStun(turnFight, atkObj, defObj, curSkill) # 是否击晕
|
| | |
|
| | |
| | | hurtValue = max(1, int(hurtValue)) # 负值、保底防范
|
| | | return hurtValue, hurtTypes
|
| | |
|
| | | def CanSuperHit(atkObj, defObj):
|
| | | def CanSuperHit(turnFight, atkObj, defObj, curSkill):
|
| | | aSuperHitRate = atkObj.GetBatAttrValue(ChConfig.AttrID_SuperHitRate)
|
| | | aSuperHitRate += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.AttrID_SuperHitRate, curSkill)
|
| | | dSuperHitRateDef = defObj.GetBatAttrValue(ChConfig.AttrID_SuperHitRateDef)
|
| | | happenRate = eval(IpyGameDataPY.GetFuncCompileCfg("SuperHitCfg", 1))
|
| | | if GameWorld.CanHappen(happenRate):
|