| | |
| | | if not skillID:
|
| | | return
|
| | |
|
| | | skillType = useSkill.GetSkillType()
|
| | | byTriggerWay = kwargs["byTriggerWay"] if "byTriggerWay" in kwargs else 0 # 不使用参数名 triggerWay, 防止传递过程中参数混乱
|
| | | if not curBatObj.IsAlive():
|
| | | if useSkill.GetSkillType() == ChConfig.Def_SkillType_Revive and useSkill.GetTagAim() == ChConfig.SkillTagAim_Self:
|
| | | if skillType == ChConfig.Def_SkillType_Revive and useSkill.GetTagAim() == ChConfig.SkillTagAim_Self:
|
| | | GameWorld.DebugLogEx("死亡时使用复活自己的技能! skillID=%s", skillID)
|
| | | else:
|
| | | if byTriggerWay in ChConfig.DeadCanTriggerWayList:
|
| | |
| | | if not tagObjList and isRemove:
|
| | | return
|
| | |
|
| | | if tagObjList and skillType == ChConfig.Def_SkillType_Revive:
|
| | | for tagObj in tagObjList[::-1]:
|
| | | if tagObj.CheckInState(ChConfig.BatObjState_RebornLimit):
|
| | | GameWorld.DebugLogEx(" 目标被禁止复活不处理! tagID=%s", tagObj.GetID())
|
| | | tagObjList.remove(tagObj)
|
| | | |
| | | if not tagObjList:
|
| | | # 可扩展其他目标选择,如复活技能没有死亡单位时则使用另外的效果
|
| | | GameWorld.DebugLogEx("找不到技能目标! skillID=%s,mapID=%s,funcLineID=%s", skillID, turnFight.mapID, turnFight.funcLineID, turnFight.getReqPlayerID())
|
| | | if useSkill.GetSkillType() == ChConfig.Def_SkillType_Revive:
|
| | | if skillType == ChConfig.Def_SkillType_Revive and not isinstance(useSkill, IpyGameDataPY.IPY_Skill):
|
| | | otherEff = useSkill.GetEffectByID(ChConfig.SkillEff_ReviveNoUse)
|
| | | if otherEff:
|
| | | otherSkillID = otherEff.GetEffectValue(0)
|
| | |
| | | addPer = addPerMax
|
| | | GameWorld.DebugLogEx("司马懿特殊潜能技能额外增加比例: frozenCnt=%s,addPer=%s" % (frozenCnt, addPer))
|
| | |
|
| | | addBatDamPer = TurnPassive.GetTriggerEffectValue(turnFight, curBatObj, None, ChConfig.PassiveEff_AddBatDamPerByLayer, useSkill)
|
| | | |
| | | # 计算伤害
|
| | | calcHurtResults = []
|
| | | for tagBatObj in useSkill.GetTagObjList():
|
| | | hurtValue, hurtTypes, immuneHurt = __calcSkillHurt(turnFight, curBatObj, tagBatObj, useSkill, addPer)
|
| | | hurtValue, hurtTypes, immuneHurt = __calcSkillHurt(turnFight, curBatObj, tagBatObj, useSkill, addPer, addBatDamPer)
|
| | | calcHurtResults.append([tagBatObj, hurtValue, hurtTypes, immuneHurt])
|
| | |
|
| | | DoSkillHurtHP(turnFight, curBatObj, useSkill, calcHurtResults)
|
| | | return
|
| | |
|
| | | def __calcSkillHurt(turnFight, atkObj, defObj, curSkill, addPer=0):
|
| | | def __calcSkillHurt(turnFight, atkObj, defObj, curSkill, addPer=0, addBatDamPer=0):
|
| | | ## 计算技能伤害,只计算值,不做实际处理
|
| | | # @param addPer: 外部指定增加的比例
|
| | | # @return: hurtValue, hurtTypes, immuneHurt
|
| | | atkSkillPer = curSkill.GetSkillPer() + addPer
|
| | | atkSkillValue = curSkill.GetSkillValue()
|
| | | hurtValue, hurtTypes = CalcFormatHurt(turnFight, atkObj, defObj, curSkill, atkSkillValue, atkSkillPer)
|
| | | hurtValue, hurtTypes = CalcFormatHurt(turnFight, atkObj, defObj, curSkill, atkSkillValue, atkSkillPer, addBatDamPer)
|
| | | hurtValue, hurtTypes, immuneHurt = CalcHurtWithBuff(turnFight, atkObj, defObj, hurtValue, hurtTypes)
|
| | | return hurtValue, hurtTypes, immuneHurt
|
| | |
|
| | |
| | | if IsNeedSyncSkill(useSkill):
|
| | | Sync_UseSkill(turnFight, curBatObj, useSkill)
|
| | |
|
| | | __doSkillUserAnger(turnFight, curBatObj, useSkill)
|
| | | __doSkillUserAnger(turnFight, curBatObj, useSkill, **kwargs)
|
| | |
|
| | | DoBeAttackResult(turnFight, curBatObj, useSkill)
|
| | | return
|
| | |
| | | elif not isAttackDirect:
|
| | | # 受到持续伤害
|
| | | if tagID in beHurtObjIDList:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeDOTHurt, curObj, connSkill=useSkill)
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_DOTHurt, tagObj, connSkill=useSkill, connBuff=timeBuff)
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeDOTHurt, curObj, connSkill=useSkill, connBuff=timeBuff)
|
| | |
|
| | | # 使用技能后
|
| | | if isUseSkill:
|
| | |
| | |
|
| | | return
|
| | |
|
| | | def __doSkillUserAnger(turnFight, curBatObj, useSkill):
|
| | | def __doSkillUserAnger(turnFight, curBatObj, useSkill, **kwargs):
|
| | | ## 技能释放者怒气相关
|
| | | if SkillCommon.isAngerSkill(useSkill):
|
| | | curBatObj.SetXP(0)
|
| | | if "noUseXP" in kwargs:
|
| | | kwargs.pop("noUseXP")
|
| | | GameWorld.DebugLogEx("本次不消耗怒气")
|
| | | else:
|
| | | curBatObj.SetXP(0)
|
| | | elif SkillCommon.isTurnNormalSkill(useSkill) and useSkill.GetBatType() == ChConfig.TurnBattleType_Normal:
|
| | | addXP = IpyGameDataPY.GetFuncCfg("AngerXP", 3)
|
| | | AddFightXP(curBatObj, addXP, "skillID:%s" % useSkill.GetSkillID())
|
| | |
| | | for tagObj in tagObjList:
|
| | | tagID = tagObj.GetID()
|
| | | if not tagObj.IsAlive():
|
| | | GameWorld.DebugLogEx(" 已被击杀不触发: tagID=%s", tagID)
|
| | | continue
|
| | | if enhanceSkillData.GetCurBuffState() == ChConfig.BatObjState_RebornLimit:
|
| | | GameWorld.DebugLogEx(" 禁止复活buff允许对死亡对象释放: tagID=%s", tagID)
|
| | | else:
|
| | | GameWorld.DebugLogEx(" 已被击杀不触发: tagID=%s", tagID)
|
| | | continue
|
| | | if tagID in effIgnoreObjIDList:
|
| | | GameWorld.DebugLogEx(" 闪避或免疫的不触发: tagID=%s", tagID)
|
| | | continue
|
| | |
| | |
|
| | | return isOK
|
| | |
|
| | | def CalcFormatHurt(turnFight, atkObj, defObj, curSkill, atkSkillValue, atkSkillPer, **kwargs):
|
| | | def CalcFormatHurt(turnFight, atkObj, defObj, curSkill, atkSkillValue, atkSkillPer, addBatDamPer=0, **kwargs):
|
| | | '''按公式计算伤害,默认按攻击计算
|
| | | '''
|
| | |
|
| | |
| | | aDOTPer = atkObj.GetBatAttrValue(ChConfig.AttrID_DOTPer)
|
| | | dDOTPerDef = defObj.GetBatAttrValue(ChConfig.AttrID_DOTPerDef)
|
| | | GameWorld.DebugLogEx("aDOTPer=%s,dDOTPerDef=%s", aDOTPer, dDOTPerDef)
|
| | | |
| | | if curSkill.GetCurBuffState() in ChConfig.BurnStateList:
|
| | | aDOTPer += atkObj.GetBatAttrValue(ChConfig.AttrID_DOTBurnPer)
|
| | | dDOTPerDef += defObj.GetBatAttrValue(ChConfig.AttrID_DOTBurnPerDef)
|
| | | GameWorld.DebugLogEx("是灼烧: aDOTPer=%s,dDOTPerDef=%s", aDOTPer, dDOTPerDef)
|
| | | |
| | | #aAddSkillPer = 0 # 技能增伤
|
| | | aBatDamPer, dBatDamPerDef = 0, 0 # 战斗增减伤
|
| | | dBatDamPerDef = 0 # 战斗增减伤
|
| | | aBatDamPer = atkObj.GetBatAttrValue(ChConfig.AttrID_BatDamPer)
|
| | | aBatDamPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.AttrID_BatDamPer, curSkill)
|
| | | aBatDamPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddBatDamPerByTagLostHP, curSkill)
|
| | | aBatDamPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddBatDamPerByLayer, curSkill)
|
| | | aBatDamPer += addBatDamPer
|
| | |
|
| | | # 物法增减伤
|
| | | if pmType == IPY_GameWorld.ghtMag: # 法伤
|