| | |
| | |
|
| | | # 统计伤血,可能单个技能对同一目标造成多次伤害
|
| | | totalHurtValue = 0
|
| | | isSuperHit, isStun, isSuckHP = False, False, False
|
| | | isSuckHP = False
|
| | | missObjIDList, immuneObjIDList = [], [] # 闪避、免疫对象ID列表
|
| | | stunObjIDList, superHitObjIDList, parryObjIDList = [], [], []
|
| | | beHurtObjIDList = [] # 受伤的对象ID列表
|
| | | for hurtObj in useSkill.GetHurtObjListAll():
|
| | | hurtObjID = hurtObj.GetObjID()
|
| | |
| | |
|
| | | if hurtObj.HaveHurtType(ChConfig.HurtType_Parry):
|
| | | DoHeroSpecialty(turnFight, tagObj, ChConfig.HeroSpecialty_Parry, relatedSkillID)
|
| | | if hurtObjID not in parryObjIDList:
|
| | | parryObjIDList.append(hurtObjID)
|
| | |
|
| | | if hurtObj.HaveHurtType(ChConfig.HurtType_SuperHit):
|
| | | isSuperHit = True
|
| | | if hurtObjID not in superHitObjIDList:
|
| | | superHitObjIDList.append(hurtObjID)
|
| | |
|
| | | if hurtObj.HaveHurtType(ChConfig.HurtType_Stun):
|
| | | isStun = True
|
| | | if hurtObjID not in stunObjIDList:
|
| | | stunObjIDList.append(hurtObjID)
|
| | |
|
| | | if hurtObj.GetSuckHP() > 0:
|
| | | isSuckHP = True
|
| | |
| | | curObj.SetLastHurtValue(totalHurtValue)
|
| | |
|
| | | # 群攻只触发一次特长
|
| | | if isSuperHit:
|
| | | if superHitObjIDList:
|
| | | DoHeroSpecialty(turnFight, curObj, ChConfig.HeroSpecialty_SuperHit, relatedSkillID)
|
| | | if isStun:
|
| | | if stunObjIDList:
|
| | | DoHeroSpecialty(turnFight, curObj, ChConfig.HeroSpecialty_Stun, relatedSkillID)
|
| | | if isSuckHP:
|
| | | DoHeroSpecialty(turnFight, curObj, ChConfig.HeroSpecialty_SuckHP, relatedSkillID)
|
| | |
| | | if tagID in beHurtObjIDList:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeHurt, curObj, connSkill=useSkill)
|
| | |
|
| | | # 受到任意效果时(除直接攻击外的任意效果,如buff、dot、治疗、额外怒技)
|
| | | if not isAttackDirect:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeAnyEffect, curObj, connSkill=useSkill)
|
| | | |
| | | # 额外目标不再触发以下内容
|
| | | if isExObj:
|
| | | continue
|
| | | |
| | | # 直接攻击
|
| | | if isAttackDirect and not isExObj:
|
| | | if isAttackDirect:
|
| | | if not triggerOne:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_AttackOverDirectOne, tagObj, connSkill=useSkill)
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_AttackOverDirect, tagObj, connSkill=useSkill)
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeAttackedDirect, curObj, connSkill=useSkill)
|
| | | # 持续伤害
|
| | | elif not isAttackDirect:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeAnyEffect, curObj, connSkill=useSkill)
|
| | | # 受到持续伤害
|
| | | if tagID in beHurtObjIDList and not isExObj:
|
| | | if tagID in beHurtObjIDList:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeDOTHurt, curObj, connSkill=useSkill)
|
| | |
|
| | | # 使用技能后
|
| | | if isUseSkill and not isExObj:
|
| | | if isUseSkill:
|
| | | if not triggerOne:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_UseSkillOverOne, tagObj, connSkill=useSkill)
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_UseSkillOver, tagObj, connSkill=useSkill)
|
| | |
|
| | | # 击晕
|
| | | if tagID in stunObjIDList:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_Stun, tagObj, connSkill=useSkill)
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeStun, curObj, connSkill=useSkill)
|
| | | |
| | | # 暴击
|
| | | if tagID in superHitObjIDList:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_SuperHit, tagObj, connSkill=useSkill)
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeSuperHit, curObj, connSkill=useSkill)
|
| | | |
| | | # 格挡
|
| | | if tagID in missObjIDList:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_BeParry, tagObj, connSkill=useSkill)
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_Parry, curObj, connSkill=useSkill)
|
| | | |
| | | # 闪避
|
| | | if tagID in missObjIDList:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_BeMiss, tagObj, connSkill=useSkill)
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_Miss, curObj, connSkill=useSkill)
|
| | | |
| | | # 连击
|
| | | if batType == ChConfig.TurnBattleType_Combo and not isExObj:
|
| | | if batType == ChConfig.TurnBattleType_Combo:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_Combo, tagObj, connSkill=useSkill)
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeCombo, curObj, connSkill=useSkill)
|
| | | # 追击
|
| | | elif batType == ChConfig.TurnBattleType_Pursue and not isExObj:
|
| | | elif batType == ChConfig.TurnBattleType_Pursue:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_Pursue, tagObj, connSkill=useSkill)
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BePursue, curObj, connSkill=useSkill)
|
| | | # 反击
|
| | | elif batType == ChConfig.TurnBattleType_AtkBack:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_AtkBack, tagObj, connSkill=useSkill)
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeAtkBack, curObj, connSkill=useSkill)
|
| | |
|
| | | triggerOne = True # 设置已经触发过一次
|
| | |
|
| | |
| | |
|
| | | def OnUsePassiveSkill(turnFight, batObj, tagObj, passiveSkill, connSkill=None, effSkillID=0, effectID=0, connBuff=None):
|
| | | '''被动触发使用技能
|
| | | @param passiveSkill: 释放的被动技能
|
| | | @param passiveSkill: 释放的被动技能 或 技能ID
|
| | | @param connSkill: 由什么技能引起的
|
| | | @param effSkillID: 被动效果所属的技能ID
|
| | | @param effectID: 被动效果ID
|
| | |
| | | '''
|
| | | if not passiveSkill:
|
| | | return
|
| | | if isinstance(passiveSkill, int):
|
| | | passiveSkillID = passiveSkill
|
| | | passiveSkill = batObj.GetSkillManager().FindSkillByID(passiveSkillID)
|
| | | if not passiveSkill:
|
| | | passiveSkill = IpyGameDataPY.GetIpyGameData("Skill", passiveSkillID)
|
| | | if not passiveSkill:
|
| | | return
|
| | | |
| | | bySkillID = 0
|
| | | if connSkill:
|
| | | bySkillID = connSkill.GetSkillID()
|
| | |
| | | dDOTPerDef = defObj.GetBatAttrValue(ChConfig.AttrID_DOTPerDef)
|
| | | GameWorld.DebugLog("aDOTPer=%s,dDOTPerDef=%s" % (aDOTPer, dDOTPerDef))
|
| | |
|
| | | aAddSkillPer = 0 # 技能增伤
|
| | | aAddSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.AttrID_SkillPer, curSkill)
|
| | | #aAddSkillPer = 0 # 技能增伤
|
| | | aBatDamPer, dBatDamPerDef = 0, 0 # 战斗增减伤
|
| | | aBatDamPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.AttrID_BatDamPer, curSkill)
|
| | | aBatDamPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddBatDamPerByTagLostHP, curSkill)
|
| | |
|
| | | # 物法增减伤
|
| | | if pmType == IPY_GameWorld.ghtMag: # 法伤
|
| | |
| | | dAngerSkillPerDef /= 10000.0
|
| | | aDOTPer /= 10000.0
|
| | | dDOTPerDef /= 10000.0
|
| | | aAddSkillPer /= 10000.0
|
| | | aBatDamPer /= 10000.0
|
| | | dBatDamPerDef /= 10000.0
|
| | | aPMDamPer /= 10000.0
|
| | | dPMDamPerDef /= 10000.0
|
| | | aSuperDamPer /= 10000.0
|
| | |
| | |
|
| | | if calcType != ChConfig.Def_Calc_Attack:
|
| | | aAtk = GetCalcBaseValue(calcType, atkObj, defObj, curSkill)
|
| | | GameWorld.DebugLog("伤血计算: atkID=%s,defID=%s,skillID=%s,atkSkillPer=%s,calcType=%s,aAtk=%s,dDef=%s,dHP=%s/%s,hurtTypes=%s,aAddSkillPer=%s,aFinalDamPer=%s" |
| | | % (atkID, defID, skillID, atkSkillPer, calcType, aAtk, dDef, dHP, dMaxHP, hurtTypes, aAddSkillPer, aFinalDamPer))
|
| | | GameWorld.DebugLog("伤血计算: atkID=%s,defID=%s,skillID=%s,atkSkillPer=%s,calcType=%s,aAtk=%s,dDef=%s,dHP=%s/%s,hurtTypes=%s,aBatDamPer=%s,aFinalDamPer=%s" |
| | | % (atkID, defID, skillID, atkSkillPer, calcType, aAtk, dDef, dHP, dMaxHP, hurtTypes, aBatDamPer, aFinalDamPer))
|
| | | GameWorld.DebugLog("aCountry=%s,dCountry=%s,aCountryDamPer=%s,dCountryDamPerDef=%s" % (aCountry, dCountry, aCountryDamPer, dCountryDamPerDef))
|
| | |
|
| | | if isTurnNormalSkill:
|
| | |
| | | atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPerByJob, curSkill)
|
| | | atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPerByBuffLayer, curSkill)
|
| | | atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPerByDeadTeammate, curSkill)
|
| | | atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPerByBuffState, curSkill)
|
| | | return atkSkillPer
|
| | |
|
| | | def CanSuperHit(turnFight, atkObj, defObj, curSkill):
|