129 【战斗】战斗系统-服务端(技能变更主线阵容战斗中更新技能;B428增加通知是否是添加buff的;buff叠加规则0 4 5;增加效果5002结算目标某种状态持续buff所有回合效果)
| | |
| | | effDict = self._AffectBuffDict[key]
|
| | | if buffID not in effDict:
|
| | | effDict[buffID] = []
|
| | | effDict[buffID].append(effectID)
|
| | | effIDList = effDict[buffID]
|
| | | if effectID not in effIDList:
|
| | | effIDList.append(effectID)
|
| | | return
|
| | |
|
| | | def DelBuffPassiveEffect(self, buffID):
|
| | |
| | | TurnPassive.RefreshPassive(self)
|
| | | return
|
| | |
|
| | | def UpdInitBatAttr(self, initAttrDict):
|
| | | def UpdInitBatAttr(self, initAttrDict, skillIDList):
|
| | | ## 更新战斗属性,一般只有主阵容需要更新,战斗中养成、装备变化等引起的主阵容属性变更时需要实时更新
|
| | | self._initAttrDict = initAttrDict
|
| | | learnNewSkill = False
|
| | | for skillID in skillIDList:
|
| | | if self._skillMgr.LearnSkillByID(skillID):
|
| | | learnNewSkill = True
|
| | | TurnBuff.RefreshBuffAttr(self)
|
| | | if learnNewSkill: # 有学新技能时重刷技能被动
|
| | | self._passiveEffMgr.RefreshSkillPassiveEffect()
|
| | | return
|
| | |
|
| | | def ResetBattleEffect(self):
|
| | |
| | | ("Value1", c_int),
|
| | | ("Value2", c_int),
|
| | | ("Value3", c_int),
|
| | | ("IsAdd", c_ubyte), # 是否是添加/覆盖的,1-是;0-否一般为buff的数据刷新
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | self.Value1 = 0
|
| | | self.Value2 = 0
|
| | | self.Value3 = 0
|
| | | self.IsAdd = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | OwnerID:%d,
|
| | | Value1:%d,
|
| | | Value2:%d,
|
| | | Value3:%d
|
| | | Value3:%d,
|
| | | IsAdd:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | |
| | | self.OwnerID,
|
| | | self.Value1,
|
| | | self.Value2,
|
| | | self.Value3
|
| | | self.Value3,
|
| | | self.IsAdd
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | | continue
|
| | | lineupHero = lineup.GetLineupHero(posNum)
|
| | | if lineupHero.heroBatAttrDict:
|
| | | batObj.UpdInitBatAttr(lineupHero.heroBatAttrDict)
|
| | | batObj.UpdInitBatAttr(lineupHero.heroBatAttrDict, lineupHero.heroSkillIDList)
|
| | | else:
|
| | | GameWorld.DebugLog("主阵容没有在战斗中,不需要处理", playerID)
|
| | |
|
| | |
| | |
|
| | | import TurnBuff
|
| | |
|
| | | def DoBuffEffectLogic(turnFight, batObj, tagObj, curBuff, curEffect, connSkill):
|
| | | def DoBuffEffectLogic(turnFight, batObj, tagObj, effBuff, curEffect, connSkill):
|
| | | #结算一次扣除1回合
|
| | | remainTime = max(0, curBuff.GetRemainTime() - 1)
|
| | | curBuff.SetRemainTime(remainTime)
|
| | | remainTime = max(0, effBuff.GetRemainTime() - 1)
|
| | | effBuff.SetRemainTime(remainTime)
|
| | |
|
| | | TurnBuff.DoBuffProcess(turnFight, batObj, curBuff)
|
| | | TurnBuff.DoBuffProcess(turnFight, batObj, effBuff)
|
| | |
|
| | | if remainTime <= 0:
|
| | | TurnBuff.DoBuffDel(turnFight, batObj, curBuff)
|
| | | TurnBuff.DoBuffDel(turnFight, batObj, effBuff)
|
| | | else:
|
| | | TurnBuff.SyncBuffRefresh(turnFight, batObj, curBuff)
|
| | | TurnBuff.SyncBuffRefresh(turnFight, batObj, effBuff)
|
| | |
|
| | | return
|
| | | return True
|
| New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | ##@package Skill.PassiveTrigger.PassiveEff_5002
|
| | | #
|
| | | # @todo:结算目标某种状态持续buff所有回合效果
|
| | | # @author hxp
|
| | | # @date 2025-08-28
|
| | | # @version 1.0
|
| | | #
|
| | | # 详细描述: 结算目标某种状态持续buff所有回合效果
|
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #"""Version = 2025-08-28 10:30"""
|
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | import TurnBuff
|
| | | import GameWorld
|
| | | import IpyGameDataPY
|
| | | import TurnSkill
|
| | |
|
| | | def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill):
|
| | | effectID = curEffect.GetEffectID()
|
| | | buffState = curEffect.GetEffectValue(0)
|
| | | needLayers = curEffect.GetEffectValue(1) # 累计达到多少层时才结算
|
| | | noDel = curEffect.GetEffectValue(2) # 是否不扣除剩余回合,默认0-扣除 1-不扣除
|
| | | exSkillID = curEffect.GetEffectValue(3) # 额外释放技能ID,0不释放(可对buff携带者或重设目标)
|
| | | #GameWorld.DebugLog("DoBuffEffectLogic: effectID=%s, buffState=%s, needLayers=%s, noDel=%s, exSkillID=%s" % (effectID, buffState, needLayers, noDel, exSkillID))
|
| | | if not buffState or not needLayers:
|
| | | return
|
| | | |
| | | layerTotal = 0
|
| | | buffList = []
|
| | | buffMgr = tagObj.GetBuffManager()
|
| | | for index in range(buffMgr.GetBuffCount()):
|
| | | buff = buffMgr.GetBuffByIndex(index)
|
| | | skillData = buff.GetSkillData()
|
| | | if skillData.GetCurBuffState() != buffState:
|
| | | continue
|
| | | layerTotal += buff.GetLayer()
|
| | | buffList.append(buff)
|
| | | |
| | | if layerTotal < needLayers:
|
| | | GameWorld.DebugLog("buff状态总层数不足不触发! buffState=%s,layerTotal=%s < %s" % (buffState, layerTotal, needLayers))
|
| | | return
|
| | | |
| | | GameWorld.DebugLog("结算目标某种状态持续buff所有回合效果: layerTotal=%s,buffCnt=%s,noDel=%s" % (layerTotal, len(buffList), noDel))
|
| | | for buff in buffList:
|
| | | GameWorld.DebugLog("buffID=%s,RemainTime=%s" % (buff.GetBuffID(), buff.GetRemainTime()))
|
| | | for _ in range(buff.GetRemainTime()):
|
| | | TurnBuff.DoBuffProcess(turnFight, tagObj, buff)
|
| | | if noDel:
|
| | | continue
|
| | | TurnBuff.DoBuffDel(turnFight, tagObj, buff)
|
| | | |
| | | if exSkillID:
|
| | | effSkillID = effSkill.GetSkillID()
|
| | | passiveSkill = IpyGameDataPY.GetIpyGameData("Skill", exSkillID)
|
| | | if passiveSkill:
|
| | | TurnSkill.OnUsePassiveSkill(turnFight, batObj, tagObj, passiveSkill, connSkill, effSkillID, effectID)
|
| | | |
| | | return True
|
| | |
| | |
|
| | | import TurnSkill
|
| | | import IpyGameDataPY
|
| | | import GameWorld
|
| | | import ChConfig
|
| | |
|
| | | def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill):
|
| | | effectID = curEffect.GetEffectID()
|
| | | skillID = curEffect.GetEffectValue(0) # 技能ID,为0时释放本技能
|
| | | if not skillID:
|
| | | passiveSkill = effSkill
|
| | |
| | | passiveSkill = IpyGameDataPY.GetIpyGameData("Skill", skillID)
|
| | | if not passiveSkill:
|
| | | return
|
| | | passiveSkillID = passiveSkill.GetSkillID()
|
| | | # 继承主技能目标
|
| | | if passiveSkill.GetTagAim() == ChConfig.SkillTagAim_MainSkill:
|
| | | happenRate = passiveSkill.GetHappenRate()
|
| | | GameWorld.DebugLog("被动触发技能,继承主技能目标! effectID=%s,passiveSkillID=%s,happenRate=%s" % (effectID, passiveSkillID, happenRate))
|
| | | tagObjList = [tagObj]
|
| | | passiveTagObjList = []
|
| | | for tagObj in tagObjList:
|
| | | tagID = tagObj.GetID()
|
| | | if not tagObj.IsAlive():
|
| | | GameWorld.DebugLog(" 已被击杀不触发: tagID=%s" % (tagID))
|
| | | continue
|
| | | if happenRate and happenRate != ChConfig.Def_MaxRateValue and not GameWorld.CanHappen(happenRate, ChConfig.Def_MaxRateValue):
|
| | | GameWorld.DebugLog(" 概率不触发: tagID=%s,happenRate=%s" % (tagID, happenRate))
|
| | | continue
|
| | | passiveTagObjList.append(tagObj)
|
| | | effectID = curEffect.GetEffectID()
|
| | | effSkillID = effSkill.GetSkillID()
|
| | | return TurnSkill.OnUsePassiveSkill(turnFight, batObj, tagObj, passiveSkill, connSkill, effSkillID, effectID)
|
| | |
|
| | | if passiveTagObjList:
|
| | | TurnSkill.OnUseSkill(turnFight, batObj, passiveSkill, passiveTagObjList, batType=ChConfig.TurnBattleType_Passive, bySkill=connSkill)
|
| | | else:
|
| | | GameWorld.DebugLog("被动触发技能,重新锁定目标! effectID=%s,passiveSkillID=%s" % (effectID, passiveSkillID))
|
| | | TurnSkill.OnUseSkill(turnFight, batObj, passiveSkill, batType=ChConfig.TurnBattleType_Passive, bySkill=connSkill)
|
| | | |
| | | return
|
| | |
|
| | | def DoBuffEffectLogic(turnFight, batObj, tagObj, curBuff, curEffect, connSkill):
|
| | | def DoBuffEffectLogic(turnFight, batObj, tagObj, effBuff, curEffect, connSkill):
|
| | | return DoSkillEffectLogic(turnFight, batObj, tagObj, None, curEffect, connSkill)
|
| | |
| | | % (curID, skillID, buffSkill.GetAtkType(), buffValueList, ownerID, relatedSkillID))
|
| | |
|
| | | skillTypeID = buffSkill.GetSkillTypeID()
|
| | | # 先简单做下能加上即可
|
| | | buffRepeat = buffSkill.GetBuffRepeat()
|
| | | #buff重复获得时的叠加规则
|
| | | #以下规则默认针对的是相同施法者,即相同来源的处理
|
| | | #如果有针对不同施法者的规则会说明
|
| | | #0 覆盖:重置剩余回合,效果覆盖
|
| | | #1 延长回合
|
| | | #2 |
| | | #3 叠加层级
|
| | | #4 独立:回合、效果独立计算
|
| | | #5 唯一,强制覆盖不同来源同状态buff,如嘲讽状态
|
| | | |
| | | buffMgr = batObj.GetBuffManager()
|
| | | |
| | | if buffRepeat == 4: # 4 独立:回合、效果独立计算
|
| | | pass # 不处理,直接跳过添加新buff
|
| | | elif buffRepeat == 5: # 5 唯一,强制覆盖不同来源同状态buff,如嘲讽状态
|
| | | buffState = buffSkill.GetCurBuffState()
|
| | | for index in range(buffMgr.GetBuffCount())[::-1]:
|
| | | buff = buffMgr.GetBuffByIndex(index)
|
| | | if buffState and buff.GetCurBuffState() != buffState:
|
| | | continue
|
| | | # 删除相同状态的buff
|
| | | DoBuffDel(turnFight, batObj, buff, bySkill, afterLogic, buffOwner)
|
| | | else:
|
| | | buffList = buffMgr.FindBuffBySkillTypeID(skillTypeID)
|
| | | if buffList:
|
| | | # buff堆叠逻辑,待处理,先直接通知
|
| | | for buff in buffList:
|
| | | if not buff:
|
| | | continue
|
| | | GameWorld.DebugLog(" 已经存在该buff: buffID=%s,skillTypeID=%s" % (buff.GetBuffID(), skillTypeID))
|
| | | if buff.GetOwnerID() != ownerID:
|
| | | continue
|
| | | GameWorld.DebugLog(" 已经存在该buff,默认覆盖: buffID=%s,skillTypeID=%s,ownerID=%s" % (buff.GetBuffID(), skillTypeID, ownerID))
|
| | | # 重置回合、CD、值等
|
| | | buff.SetCalcTime(turnFight.getTimeline())
|
| | | buff.SetRemainTime(buffSkill.GetLastTime())
|
| | | buff.SetLayer(buffSkill.GetLayerCnt())
|
| | | buff.SetBuffValueList(buffValueList)
|
| | | if afterLogic and bySkill:
|
| | | bySkill.AddAfterLogic(ChConfig.AfterLogic_AddBuff, [batObj, buff, buffOwner])
|
| | | else:
|
| | | SyncBuffRefresh(turnFight, batObj, buff, relatedSkillID)
|
| | | SyncBuffRefresh(turnFight, batObj, buff, relatedSkillID, isNewAdd=True)
|
| | |
|
| | | return True
|
| | |
|
| | | __AddNewBuff(turnFight, batObj, buffMgr, buffSkill, buffValueList, buffOwner, bySkill, afterLogic)
|
| | | __addNewBuff(turnFight, batObj, buffMgr, buffSkill, buffValueList, buffOwner, bySkill, afterLogic)
|
| | | return True
|
| | |
|
| | | def __AddNewBuff(turnFight, batObj, buffMgr, buffSkill, buffValueList, buffOwner, bySkill=None, afterLogic=False):
|
| | | skillID = buffSkill.GetSkillID()
|
| | | relatedSkillID = bySkill.GetSkillID() if bySkill else 0
|
| | | def __addNewBuff(turnFight, batObj, buffMgr, buffSkill, buffValueList, buffOwner, bySkill=None, afterLogic=False):
|
| | | curID = batObj.GetID()
|
| | | ownerID = buffOwner.GetID()
|
| | | skillID = buffSkill.GetSkillID()
|
| | | buff = buffMgr.AddBuff(skillID)
|
| | | if not buff:
|
| | | GameWorld.DebugLog(" 添加buff失败! skillID=%s" % skillID, curID)
|
| | | return False
|
| | | return
|
| | | relatedSkillID = bySkill.GetSkillID() if bySkill else 0
|
| | | ownerID = buffOwner.GetID()
|
| | | buffID = buff.GetBuffID()
|
| | | GameWorld.DebugLog(" AddBuffOK. buffID=%s,skillID=%s,ownerID=%s,relatedSkillID=%s,timeline=%s" |
| | | |
| | | GameWorld.DebugLog(" __addNewBuff. buffID=%s,skillID=%s,ownerID=%s,relatedSkillID=%s,timeline=%s" |
| | | % (buffID, skillID, ownerID, relatedSkillID, turnFight.getTimeline()), curID)
|
| | | buff.SetOwnerID(ownerID)
|
| | | buff.SetCalcTime(turnFight.getTimeline())
|
| | |
| | | if afterLogic and bySkill:
|
| | | bySkill.AddAfterLogic(ChConfig.AfterLogic_AddBuff, [batObj, buff, buffOwner])
|
| | | else:
|
| | | SyncBuffRefresh(turnFight, batObj, buff, relatedSkillID)
|
| | | SyncBuffRefresh(turnFight, batObj, buff, relatedSkillID, isNewAdd=True)
|
| | |
|
| | | DoBuffAddOver(turnFight, batObj, buffSkill, buff, buffOwner)
|
| | | return
|
| | |
| | | GameWorld.DebugLog(" 最终属性 ID:%s,atk=%s,def=%s,hp=%s/%s" % (objID, batObj.GetAtk(), batObj.GetDef(), aftHP, aftMaxHP))
|
| | | return
|
| | |
|
| | | def SyncBuffRefresh(turnFight, curBatObj, curBuff, relatedSkillID=0):
|
| | | def SyncBuffRefresh(turnFight, curBatObj, curBuff, relatedSkillID=0, isNewAdd=False):
|
| | | clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCBuffRefresh)
|
| | | clientPack.ObjID = curBatObj.GetID()
|
| | | clientPack.BuffID = curBuff.GetBuffID()
|
| | |
| | | clientPack.Value1 = curBuff.GetValue1()
|
| | | clientPack.Value2 = curBuff.GetValue2()
|
| | | clientPack.Value3 = curBuff.GetValue3()
|
| | | clientPack.IsAdd = 1 if isNewAdd else 0
|
| | | turnFight.addBatPack(clientPack)
|
| | | return
|
| | |
|
| | |
| | |
|
| | | def __doTriggerPassiveEffectByBuff(turnFight, batObj, tagObj, triggerWay, buffID, effIDList, connSkill=None):
|
| | | buffMgr = batObj.GetBuffManager()
|
| | | curBuff = buffMgr.GetBuff(buffID)
|
| | | if not curBuff:
|
| | | effBuff = buffMgr.GetBuff(buffID)
|
| | | if not effBuff:
|
| | | return
|
| | | skillData = curBuff.GetSkillData()
|
| | | skillData = effBuff.GetSkillData()
|
| | |
|
| | | for effID in effIDList:
|
| | | curEffect = skillData.GetEffectByID(effID, triggerWay)
|
| | | if not curEffect:
|
| | | continue
|
| | | DoBuffEffectLogic(turnFight, batObj, tagObj, curBuff, curEffect, connSkill)
|
| | | DoBuffEffectLogic(turnFight, batObj, tagObj, effBuff, curEffect, connSkill)
|
| | |
|
| | | return
|
| | |
|
| | | def DoBuffEffectLogic(turnFight, batObj, tagObj, curBuff, curEffect, connSkill):
|
| | | def DoBuffEffectLogic(turnFight, batObj, tagObj, effBuff, curEffect, connSkill):
|
| | | effID = curEffect.GetEffectID()
|
| | | if not effID:
|
| | | return
|
| | |
| | | callFunc = GameWorld.GetExecFunc(PassiveTrigger, "%s.%s" % (pyName, "DoBuffEffectLogic"))
|
| | | if not callFunc:
|
| | | return
|
| | | callFunc(turnFight, batObj, tagObj, curBuff, curEffect, connSkill)
|
| | | callFunc(turnFight, batObj, tagObj, effBuff, curEffect, connSkill)
|
| | | return
|
| | |
|
| | | def GetTriggerPassiveValue(batObj, triggerType, tagObj=None, useSkill=None):
|
| | |
| | | __doCostZhanchui(turnFight, curBatObj, useSkill)
|
| | | __doSkillUserAnger(turnFight, curBatObj, useSkill)
|
| | |
|
| | | DoBeAttackResult(turnFight, curBatObj, useSkill)
|
| | | DoBeAttackResult(turnFight, curBatObj, useSkill, True)
|
| | | return
|
| | |
|
| | | def DoCombo(turnFight, curBatObj, useSkill):
|
| | |
| | | % (atkObj.GetID(), happenRate, aComboRate, dComboRateDef, comboNum))
|
| | | return False
|
| | |
|
| | | def DoBeAttackResult(turnFight, curObj, useSkill):
|
| | | def DoBeAttackResult(turnFight, curObj, useSkill, isUseSkill=False):
|
| | | '''被攻击结果
|
| | | @param curObj: 施法方或buff归属方
|
| | | @param isUseSkill: 是否是直接使用技能的攻击结果
|
| | | '''
|
| | |
|
| | | curID = curObj.GetID()
|
| | |
| | | shieldBrokenList.append([buffObjID, tagObjID, buffSkillTypeID])
|
| | |
|
| | | elif logicType == ChConfig.AfterLogic_AddBuff:
|
| | | batObj, buff, _ = logicData
|
| | | TurnBuff.SyncBuffRefresh(turnFight, batObj, buff, relatedSkillID)
|
| | | batObj = logicData[0]
|
| | | buff = logicData[1]
|
| | | TurnBuff.SyncBuffRefresh(turnFight, batObj, buff, relatedSkillID, isNewAdd=True)
|
| | |
|
| | | elif logicType == ChConfig.AfterLogic_SyncBuff:
|
| | | buffObj, buff, _, _ = logicData
|
| | | buffObj = logicData[0]
|
| | | buff = logicData[1]
|
| | | TurnBuff.SyncBuffRefresh(turnFight, buffObj, buff, relatedSkillID)
|
| | |
|
| | | # 统计击杀
|
| | |
| | | FBLogic.OnPlayerLineupAttackResult(curPlayer, curObj, killObjIDList, useSkill, turnFight.mapID, turnFight.funcLineID)
|
| | |
|
| | | # 优先触发本技能额外效果,注:仅该技能释放后该技能的额外效果视为主技能的效果,优先级最高
|
| | | if isUseSkill:
|
| | | __DoCurSkillEff(turnFight, curObj, useSkill, missObjIDList)
|
| | |
|
| | | # ========== 以下触发被动 ==========
|
| | |
| | | continue
|
| | |
|
| | | # 直接攻击
|
| | | if not SkillCommon.IsBuff(useSkill) and useSkill.GetSkillType() in [ChConfig.Def_SkillType_Atk]:
|
| | | if isUseSkill and not SkillCommon.IsBuff(useSkill) and useSkill.GetSkillType() in [ChConfig.Def_SkillType_Atk]:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_AttackOverDirect, tagObj, connSkill=useSkill)
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeAttackedDirect, curObj, connSkill=useSkill)
|
| | |
|
| | |
| | | continue
|
| | |
|
| | | effID = curEffect.GetEffectID()
|
| | | GameWorld.DebugLog("执行额外技能效果: %s, missObjIDList=%s" % (effID, missObjIDList))
|
| | | if effID == 5010:
|
| | | # 额外技能效果
|
| | | __doUseEnhanceSkill(turnFight, curObj, useSkill, curEffect, missObjIDList)
|
| | |
| | |
|
| | | for tagObj in useSkill.GetTagObjList():
|
| | | tagID = tagObj.GetID()
|
| | | GameWorld.DebugLog(" tagID=%s" % (tagID))
|
| | | if tagID in missObjIDList:
|
| | | # 闪避了不触发
|
| | | continue
|
| | |
| | | OnUseSkill(turnFight, curBatObj, enhanceSkillData, batType=ChConfig.TurnBattleType_Enhance, bySkill=useSkill)
|
| | | return
|
| | |
|
| | | def OnUsePassiveSkill(turnFight, batObj, tagObj, passiveSkill, connSkill=None, effSkillID=0, effectID=0):
|
| | | '''被动触发使用技能
|
| | | @param passiveSkill: 释放的被动技能
|
| | | @param connSkill: 由什么技能引起的
|
| | | @param effSkillID: 被动效果所属的技能ID
|
| | | @param effectID: 被动效果ID
|
| | | 注:可能由A引起触发B技能的效果释放技能C
|
| | | '''
|
| | | if not passiveSkill:
|
| | | return
|
| | | isOK = False
|
| | | passiveSkillID = passiveSkill.GetSkillID()
|
| | | # 继承主技能目标
|
| | | if passiveSkill.GetTagAim() == ChConfig.SkillTagAim_MainSkill:
|
| | | happenRate = passiveSkill.GetHappenRate()
|
| | | GameWorld.DebugLog("被动触发技能,继承主技能目标! effSkillID=%s,effectID=%s,passiveSkillID=%s,happenRate=%s" % (effSkillID, effectID, passiveSkillID, happenRate))
|
| | | if not tagObj:
|
| | | return
|
| | | tagID = tagObj.GetID()
|
| | | if not tagObj.IsAlive():
|
| | | GameWorld.DebugLog(" 已被击杀不触发: tagID=%s" % (tagID))
|
| | | return
|
| | | if happenRate and happenRate != ChConfig.Def_MaxRateValue and not GameWorld.CanHappen(happenRate, ChConfig.Def_MaxRateValue):
|
| | | GameWorld.DebugLog(" 概率不触发: tagID=%s,happenRate=%s" % (tagID, happenRate))
|
| | | return
|
| | | passiveTagObjList = [tagObj]
|
| | | isOK = OnUseSkill(turnFight, batObj, passiveSkill, passiveTagObjList, batType=ChConfig.TurnBattleType_Passive, bySkill=connSkill)
|
| | | else:
|
| | | GameWorld.DebugLog("被动触发技能,重新锁定目标! effSkillID=%s,effectID=%s,passiveSkillID=%s" % (effSkillID, effectID, passiveSkillID))
|
| | | isOK = OnUseSkill(turnFight, batObj, passiveSkill, batType=ChConfig.TurnBattleType_Passive, bySkill=connSkill)
|
| | | |
| | | return isOK
|
| | |
|
| | | def __doSkillHurtHP(turnFight, attacker, defObj, curSkill):
|
| | | ## 执行技能伤血,只计算伤血,其他逻辑等技能同步后再处理
|
| | | # @return: None - 没有执行成功,即忽略该目标
|