| | |
| | | #执行添加buff
|
| | |
|
| | | #光环技能,需先添加施法者
|
| | | if useSkill.GetSkillType() == ChConfig.Def_SkillType_Halo:
|
| | | if useSkill.GetSkillType() in ChConfig.Def_HaloSkill_List:
|
| | | curID = curBatObj.GetID()
|
| | | skillID = useSkill.GetSkillID()
|
| | | GameWorld.DebugLogEx("光环技能先给施法者添加光源buff! skillID=%s,ownerID=%s", skillID, curID)
|
| | |
| | | triggerOne = False
|
| | | batType = useSkill.GetBatType()
|
| | | isAttackDirect = (isUseSkill and SkillCommon.isAttackDirectSkill(useSkill)) # 是否直接攻击
|
| | | objTriigerWayInfo = {} # 敌友已触发的列表,一般用于控制每人只触发一次的 {objID:{triggerWay:triggerCnt, ...}}
|
| | | for tagObj in tagObjListAll:
|
| | | tagID = tagObj.GetID()
|
| | |
|
| | |
| | |
|
| | | # 连击
|
| | | if batType == ChConfig.TurnBattleType_Combo:
|
| | | if not triggerOne:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_ComboOne, tagObj, connSkill=useSkill)
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_Combo, tagObj, connSkill=useSkill)
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeCombo, curObj, connSkill=useSkill)
|
| | | if curMGObj and ChConfig.TriggerWay_Combo not in mgTriggerWayList:
|
| | |
| | | if not lineupObj.IsAlive():
|
| | | continue
|
| | |
|
| | | if lineupObjID not in objTriigerWayInfo:
|
| | | objTriigerWayInfo[lineupObjID] = {}
|
| | | objTriigerWayCntDict = objTriigerWayInfo[lineupObjID]
|
| | | |
| | | # 直接攻击
|
| | | if isAttackDirect:
|
| | | if not triggerOne:
|
| | |
| | | if not triggerOne:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendDotHurt, tagObj, connSkill=useSkill, byFriendObj=curObj)
|
| | |
|
| | | # 敌方被控时
|
| | | # 敌方被控时 - 默认为友军造成的
|
| | | if tagID in beControlledHardDict and lineupObj.GetFaction() != tagObj.GetFaction():
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_EnemyBeControlledHard, tagObj, connSkill=useSkill)
|
| | | |
| | | tagBuff = beControlledHardDict[tagID]
|
| | | # 敌方被冰冻
|
| | | if tagBuff.GetCurBuffState() == ChConfig.BatObjState_Frozen:
|
| | | if ChConfig.TriggerWay_FriendCausesFrozen not in objTriigerWayCntDict:
|
| | | objTriigerWayCntDict[ChConfig.TriggerWay_FriendCausesFrozen] = 1
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendCausesFrozen, tagObj, connSkill=useSkill)
|
| | | |
| | | # 连击
|
| | | if batType == ChConfig.TurnBattleType_Combo:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendCombo, tagObj, connSkill=useSkill, byFriendObj=curObj)
|
| | | |
| | | if isAttackDirect:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendComboHurt, tagObj, connSkill=useSkill, byFriendObj=curObj)
|
| | | # 追击
|
| | | elif batType == ChConfig.TurnBattleType_Pursue:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendPursue, tagObj, connSkill=useSkill, byFriendObj=curObj)
|
| | | if isAttackDirect:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendPursueHurt, tagObj, connSkill=useSkill, byFriendObj=curObj)
|
| | |
|
| | | triggerOne = True # 设置已经触发过一次
|
| | |
|
| | |
| | |
|
| | | fightPoint = max(curPlayer.GetFightPoint(), 1) # 主线战斗消耗倍值,默认1
|
| | | costZhanchuiTotal = costZhanchui * fightPoint
|
| | | if not PlayerControl.PayMoney(curPlayer, ShareDefine.TYPE_Price_Xiantao, costZhanchuiTotal, isNotify=False):
|
| | | if not PlayerControl.PayMoney(curPlayer, ShareDefine.TYPE_Price_Xiantao, costZhanchuiTotal, "UseSkill", isNotify=False):
|
| | | # 不足时,有多少扣多少
|
| | | nowMoney = PlayerControl.GetMoney(curPlayer, ShareDefine.TYPE_Price_Xiantao)
|
| | | PlayerControl.PayMoney(curPlayer, ShareDefine.TYPE_Price_Xiantao, min(nowMoney, costZhanchuiTotal), isNotify=False)
|
| | | PlayerControl.PayMoney(curPlayer, ShareDefine.TYPE_Price_Xiantao, min(nowMoney, costZhanchuiTotal), "UseSkill", isNotify=False)
|
| | |
|
| | | return
|
| | |
|
| | |
| | | bySkillID = connBuff.GetSkillID()
|
| | | passiveSkillID = passiveSkill.GetSkillID()
|
| | | if passiveSkillID == bySkillID:
|
| | | #GameWorld.DebugLogEx("###被动触发技能不触发自身,防止死循环! effSkillID=%s,effectID=%s,passiveSkillID=%s", effSkillID, effectID, passiveSkillID)
|
| | | return
|
| | | |
| | | if not connSkill or connSkill.GetObjID() == batObj.GetID():
|
| | | GameWorld.DebugLogEx("###被动触发技能不触发自身,防止死循环! effSkillID=%s,effectID=%s,passiveSkillID=%s", effSkillID, effectID, passiveSkillID)
|
| | | return
|
| | | # 不同施法者的相同技能ID可触发,如双方都有相同武将相同技能的情况下,如吕玲绮
|
| | | |
| | | if hasattr(passiveSkill, "GetRemainTime") and passiveSkill.GetRemainTime() > 0:
|
| | | #GameWorld.DebugLogEx("被动触发技能CD中! skillID=%s,RemainTime=%s", passiveSkillID, passiveSkill.GetRemainTime())
|
| | | return
|
| | |
| | | pmType = GetPMType(atkObj, curSkill)
|
| | | ignoreDef = IsIgnoreDef(curSkill)
|
| | | batType = curSkill.GetBatType()
|
| | | atkMGObj = atkObj.GetTFBatLineup().getMinggeObj()
|
| | | defMGObj = defObj.GetTFBatLineup().getMinggeObj()
|
| | |
|
| | | changeHurtType = TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_ChangeHurtType, curSkill)
|
| | | if not changeHurtType:
|
| | |
| | | if not isDot:
|
| | | aMissRateDef = atkObj.GetBatAttrValue(ChConfig.AttrID_AbsoluteMissRateDef)
|
| | | dMissRate = defObj.GetBatAttrValue(ChConfig.AttrID_AbsoluteMissRate)
|
| | | if defMGObj:
|
| | | dMissRate += defMGObj.GetBatAttrValue(ChConfig.AttrID_AbsoluteMissRate)
|
| | | missNum = curSkill.GetTagMissNum(defID)
|
| | | if dMissRate > 0:
|
| | | missRate = eval(IpyGameDataPY.GetFuncCompileCfg("MissCfg", 1))
|
| | |
| | | aSuperDamPer = IpyGameDataPY.GetFuncCfg("SuperHitCfg", 2) * 10000
|
| | | aSuperDamPer += atkObj.GetBatAttrValue(ChConfig.AttrID_SuperDamPer)
|
| | | aSuperDamPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.AttrID_SuperDamPer, curSkill)
|
| | | |
| | | if atkMGObj:
|
| | | aSuperDamPer += atkMGObj.GetBatAttrValue(ChConfig.AttrID_SuperDamPer)
|
| | | dSuperDamPerDef = defObj.GetBatAttrValue(ChConfig.AttrID_SuperDamPerDef)
|
| | |
|
| | | if isParry:
|
| | |
| | | aFinalDamPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddFinalDamPer, curSkill)
|
| | | aFinalDamPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.AttrID_FinalDamPer, curSkill)
|
| | |
|
| | | if defMGObj:
|
| | | dFinalDamPerDef += defMGObj.GetBatAttrValue(ChConfig.AttrID_FinalDamPerDef)
|
| | | |
| | | #招架 - 无视攻击方最终增伤百分比
|
| | | dZhaojia = defObj.GetBatAttrValue(ChConfig.AttrID_Zhaojia)
|
| | | aZhaojiaDef = atkObj.GetBatAttrValue(ChConfig.AttrID_ZhaojiaDef)
|
| | |
| | | aDOTPer += atkObj.GetBatAttrValue(ChConfig.AttrID_DOTBurnPer)
|
| | | dDOTPerDef += defObj.GetBatAttrValue(ChConfig.AttrID_DOTBurnPerDef)
|
| | | GameWorld.DebugLogEx("是灼烧: aDOTPer=%s,dDOTPerDef=%s", aDOTPer, dDOTPerDef)
|
| | | if atkMGObj:
|
| | | aDOTPer += atkMGObj.GetBatAttrValue(ChConfig.AttrID_DOTPer)
|
| | |
|
| | | #aAddSkillPer = 0 # 技能增伤
|
| | | dBatDamPerDef = 0 # 战斗增减伤
|
| | |
| | | aBatDamPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.AttrID_BatDamPer, curSkill)
|
| | | aBatDamPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddBatDamPerByTagLostHP, curSkill)
|
| | | aBatDamPer += addBatDamPer
|
| | | |
| | | if atkMGObj:
|
| | | aBatDamPer += TurnPassive.GetTriggerEffectValue(turnFight, atkMGObj, defObj, ChConfig.AttrID_BatDamPer, curSkill)
|
| | | |
| | | # 物法增减伤
|
| | | if pmType == IPY_GameWorld.ghtMag: # 法伤
|
| | | aPMDamPer = atkObj.GetBatAttrValue(ChConfig.AttrID_MagDamPer)
|
| | |
| | | if batType == ChConfig.TurnBattleType_Combo:
|
| | | aComboDamPer = atkObj.GetBatAttrValue(ChConfig.AttrID_ComboDamPer)
|
| | | dComboDamPerDef = defObj.GetBatAttrValue(ChConfig.AttrID_ComboDamPerDef)
|
| | | |
| | | if atkMGObj:
|
| | | aComboDamPer += atkMGObj.GetBatAttrValue(ChConfig.AttrID_ComboDamPer)
|
| | | aPursueDamPer, dPursueDamPerDef = 0, 0 # 追击增伤
|
| | | if batType == ChConfig.TurnBattleType_Pursue:
|
| | | aPursueDamPer = atkObj.GetBatAttrValue(ChConfig.AttrID_PursueDamPer)
|
| | | dPursueDamPerDef = defObj.GetBatAttrValue(ChConfig.AttrID_PursueDamPerDef)
|
| | | |
| | | if atkMGObj:
|
| | | aPursueDamPer += atkMGObj.GetBatAttrValue(ChConfig.AttrID_PursueDamPer)
|
| | | |
| | | aPVPDamPer, dPVPDamPerDef = 0, 0 # PVP
|
| | | if turnFight.isPVP() > 0:
|
| | | aPVPDamPer = atkObj.GetBatAttrValue(ChConfig.AttrID_PVPDamPer)
|
| | |
| | | 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)
|
| | | atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPerByBeFrozenCnt, curSkill)
|
| | | return atkSkillPer
|
| | |
|
| | | def CanSuperHit(turnFight, atkObj, defObj, curSkill):
|
| | |
| | | connSkillTypeID = buff.GetSkillTypeID()
|
| | | damBackPer += TurnPassive.GetTriggerEffectValue(turnFight, defObj, atkObj, ChConfig.PassiveEff_AddDamBackPerByBuffLayer, connSkillTypeID=connSkillTypeID)
|
| | |
|
| | | defMGObj = defObj.GetTFBatLineup().getMinggeObj()
|
| | | if defMGObj:
|
| | | mgBuffMgr = defMGObj.GetBuffManager()
|
| | | for buff in mgBuffMgr.FindBuffListByState(ChConfig.BatObjState_DamBackShield):
|
| | | damBackPer += buff.GetValue1() * max(1, buff.GetLayer())
|
| | | |
| | | if damBackPer <= 0:
|
| | | return
|
| | |
|
| | |
| | | # dot施法者已死亡不再吸血
|
| | | return
|
| | |
|
| | | atkMGObj = atkObj.GetTFBatLineup().getMinggeObj()
|
| | | aSuckHPPer = atkObj.GetBatAttrValue(ChConfig.AttrID_SuckHPPer)
|
| | | if atkMGObj:
|
| | | aSuckHPPer += atkMGObj.GetBatAttrValue(ChConfig.AttrID_SuckHPPer)
|
| | | aCurePer = atkObj.GetBatAttrValue(ChConfig.AttrID_CurePer)
|
| | |
|
| | | dSuckHPPerDef = defObj.GetBatAttrValue(ChConfig.AttrID_SuckHPPerDef)
|