| | |
| | | continue
|
| | | buffID = buff.GetBuffID()
|
| | | nowLayerCnt = buff.GetLayer()
|
| | | GameWorld.DebugLogEx(" 已经存在该buff: buffID=%s,skillTypeID=%s,ownerID=%s,buffRepeat=%s", buffID, skillTypeID, ownerID, buffRepeat)
|
| | | GameWorld.DebugLogEx(" 已经存在该buff: buffID=%s,skillTypeID=%s,ownerID=%s,buffRepeat=%s,nowLayerCnt=%s/%s", buffID, skillTypeID, ownerID, buffRepeat, nowLayerCnt, maxLayerCnt)
|
| | |
|
| | | resetAddTiming = False # 一般只有覆盖的才重新计算回合,视为重新添加
|
| | | remainTime = buffSkill.GetLastTime()
|
| | | updLayerCnt = addLayerCnt
|
| | | if buffRepeat == 3: # 叠加层级
|
| | | if maxLayerCnt and nowLayerCnt >= maxLayerCnt:
|
| | | GameWorld.DebugLogEx(" 已达最大层数: nowLayerCnt=%s/%s", nowLayerCnt, maxLayerCnt)
|
| | | return
|
| | | updLayerCnt = nowLayerCnt + addLayerCnt
|
| | | if maxLayerCnt and updLayerCnt > maxLayerCnt:
|
| | | updLayerCnt = maxLayerCnt
|
| | |
| | | buff.SetLayer(updLayerCnt)
|
| | | buff.SetBuffValueList(buffValueList)
|
| | | buff.ResetEffectValueEx()
|
| | | if afterLogic and bySkill:
|
| | | bySkill.AddAfterLogic(ChConfig.AfterLogic_AddBuff, [batObj, buff, buffOwner])
|
| | | if afterLogic and buffSkill:
|
| | | buffSkill.AddAfterLogic(ChConfig.AfterLogic_AddBuff, [batObj, buff, buffOwner])
|
| | | elif isSync:
|
| | | SyncBuffRefresh(turnFight, batObj, buff, relatedSkillID, isNewAdd=True)
|
| | |
|
| | | RefreshBuffEffect(turnFight, batObj, buff, buffSkill, buffOwner, refreshType=2)
|
| | | return buff
|
| | |
|
| | | newBuff = __addNewBuff(turnFight, batObj, buffMgr, buffSkill, buffValueList, buffOwner, bySkill, afterLogic, setLayerCnt=addLayerCnt, isSync=isSync)
|
| | | if skillType == ChConfig.Def_SkillType_Halo and newBuff:
|
| | | __addHaloBuffEffObjID(curID, newBuff, skillID, ownerID, haloSrcBuff)
|
| | | newBuff = __addNewBuff(turnFight, batObj, buffMgr, buffSkill, buffValueList, buffOwner, bySkill, afterLogic, setLayerCnt=addLayerCnt, isSync=isSync, haloSrcBuff=haloSrcBuff)
|
| | | return newBuff
|
| | |
|
| | | def __addNewBuff(turnFight, batObj, buffMgr, buffSkill, buffValueList, buffOwner, bySkill=None, afterLogic=False, setLayerCnt=0, isSync=True):
|
| | | def __addNewBuff(turnFight, batObj, buffMgr, buffSkill, buffValueList, buffOwner, bySkill=None, afterLogic=False, setLayerCnt=0, isSync=True, haloSrcBuff=None):
|
| | | curID = batObj.GetID()
|
| | | skillID = buffSkill.GetSkillID()
|
| | | buff = buffMgr.AddBuff(skillID)
|
| | |
| | | ownerID = buffOwner.GetID()
|
| | | buffID = buff.GetBuffID()
|
| | | timing = batObj.GetTiming()
|
| | | skillType = buffSkill.GetSkillType()
|
| | | remainTime = buffSkill.GetLastTime()
|
| | | remainTime += TurnPassive.GetTriggerEffectValue(turnFight, buffOwner, batObj, ChConfig.PassiveEff_AddBuffTime, buffSkill)
|
| | |
|
| | | GameWorld.DebugLogEx(" __addNewBuff. buffID=%s,skillID=%s,ownerID=%s,relatedSkillID=%s,timing=%s,remainTime=%s,setLayerCnt=%s", |
| | | buffID, skillID, ownerID, relatedSkillID, timing, remainTime, setLayerCnt, curID)
|
| | | GameWorld.DebugLogEx(" __addNewBuff. buffID=%s,skillID=%s,ownerID=%s,relatedSkillID=%s,timing=%s,remainTime=%s,setLayerCnt=%s,afterLogic=%s", |
| | | buffID, skillID, ownerID, relatedSkillID, timing, remainTime, setLayerCnt, afterLogic, curID)
|
| | | buff.SetAddTiming(timing) # 武将当前在什么时机就设置为什么时机
|
| | | buff.SetOwnerID(ownerID)
|
| | | buff.SetRemainTime(remainTime)
|
| | |
| | | if curBuffState:
|
| | | buffMgr.AddBuffState(curBuffState, buffID)
|
| | |
|
| | | if afterLogic and bySkill:
|
| | | bySkill.AddAfterLogic(ChConfig.AfterLogic_AddBuff, [batObj, buff, buffOwner])
|
| | | if skillType == ChConfig.Def_SkillType_Halo:
|
| | | __addHaloBuffEffObjID(curID, buff, skillID, ownerID, haloSrcBuff)
|
| | | |
| | | if afterLogic and buffSkill:
|
| | | buffSkill.AddAfterLogic(ChConfig.AfterLogic_AddBuff, [batObj, buff, buffOwner])
|
| | | if bySkill:
|
| | | bySkill.AddAfterLogic(ChConfig.AfterLogic_AddBuff, [batObj, buff, buffOwner])
|
| | | elif isSync:
|
| | | SyncBuffRefresh(turnFight, batObj, buff, relatedSkillID, isNewAdd=True)
|
| | |
|
| | | RefreshBuffEffect(turnFight, batObj, buff, buffSkill, buffOwner, refreshType=1)
|
| | |
|
| | | #受控时
|
| | | #添加buff时有需要后置处理触发被动的,如受控
|
| | | if curBuffState and IsControlledHardState(curBuffState):
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, batObj, ChConfig.TriggerWay_BeControlledHard, tagObj=buffOwner, connSkill=buffSkill, connBuff=buff)
|
| | | batObjMgr = BattleObj.GetBatObjMgr()
|
| | | ownerBatLineup = buffOwner.GetBatLineup()
|
| | | for lineupObjID in ownerBatLineup.posObjIDDict.values():
|
| | | lineupObj = batObjMgr.getBatObj(lineupObjID)
|
| | | if not lineupObj.IsAlive():
|
| | | continue
|
| | | # 敌方被控时
|
| | | if lineupObj.GetFaction() != batObj.GetFaction():
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_EnemyBeControlledHard, batObj, connSkill=buffSkill)
|
| | | |
| | | buffSkill.AddAfterLogic(ChConfig.AfterLogic_TriggerAddBuff, [ChConfig.TriggerWay_BeControlledHard, batObj, buff, buffOwner])
|
| | | |
| | | #添加持续减益buff
|
| | | if skillType == ChConfig.Def_SkillType_LstDepBuff:
|
| | | buffSkill.AddAfterLogic(ChConfig.AfterLogic_TriggerAddBuff, [ChConfig.TriggerWay_AddDOTBuff, batObj, buff, buffOwner])
|
| | | |
| | | return buff
|
| | |
|
| | | def IsControlledHardState(state):
|
| | |
| | | if not batFaction:
|
| | | return
|
| | | batLineup = batFaction.getBatlineup(1)
|
| | | if ChConfig.HeroID_Simayi not in batLineup.heroObjIDDict:
|
| | | return
|
| | | smyObjID = batLineup.heroObjIDDict[ChConfig.HeroID_Simayi]
|
| | | smyObj = BattleObj.GetBatObjMgr().getBatObj(smyObjID)
|
| | | smyObj = batLineup.getHeroObj(ChConfig.HeroID_Simayi)
|
| | | if not smyObj or not smyObj.IsAlive():
|
| | | return
|
| | | smySkillID = ChConfig.SkillID_SmyFanzhao
|
| | |
| | | haloSrcBuff.AddHaloObjID(curID) # 光源先添加新目标
|
| | | haloObjIDList = haloSrcBuff.GetHaloObjIDList()
|
| | | newBuff.SetHaloObjIDList(haloObjIDList) # 新buff直接同步设置为光源有效目标
|
| | | newBuff.SetLayer(haloSrcBuff.GetLayer()) # 同步为光源的层级
|
| | |
|
| | | batObjMgr = BattleObj.GetBatObjMgr()
|
| | | for haloObjID in haloObjIDList:
|
| | |
| | |
|
| | | # 重新添加本阵营有效光环
|
| | | batObjMgr = BattleObj.GetBatObjMgr()
|
| | | batLineup = batObj.GetBatLineup()
|
| | | for tagObjID in batLineup.posObjIDDict.values():
|
| | | batLineup = batObj.GetTFBatLineup()
|
| | | for tagObjID in batLineup.getAllPosObjIDList():
|
| | | tagObj = batObjMgr.getBatObj(tagObjID)
|
| | | if not tagObj.IsAlive():
|
| | | continue
|
| | |
| | | GameWorld.DebugLogEx("复活后重新添加本阵营光环: objID=%s,ownerID=%s,haloSkillID=%s", objID, tagObjID, haloSkillID)
|
| | | haloSkill = tagObj.GetSkillManager().FindSkillByID(haloSkillID)
|
| | | if not haloSkill:
|
| | | DoAddBuffBySkillID(turnFight, batObj, haloSkillID, buffOwner=tagObj)
|
| | | continue
|
| | | OnAddBuff(turnFight, batObj, haloSkill, buffOwner=tagObj)
|
| | |
|
| | |
| | | befHP = batObj.GetHP()
|
| | | befMaxHP = batObj.GetMaxHP()
|
| | |
|
| | | isMingge = batObj.GetPosNum() == ChConfig.TFPosNum_Mingge
|
| | | mgObj = None
|
| | | if not isMingge:
|
| | | mgObj = batObj.GetTFBatLineup().getMinggeObj()
|
| | | mgObjID = mgObj.GetID() if mgObj else 0
|
| | | batAttrDict = batObj.ResetBattleEffect()
|
| | | GameWorld.DebugLogEx("RefreshBuffAttr ID:%s,atk=%s,def=%s,hp=%s/%s,batAttrDict=%s", |
| | | objID, batObj.GetAtk(), batObj.GetDef(), befHP, befMaxHP, batAttrDict)
|
| | | GameWorld.DebugLogEx("RefreshBuffAttr ID:%s,atk=%s,def=%s,hp=%s/%s,isMingge=%s(%s),batAttrDict=%s", |
| | | objID, batObj.GetAtk(), batObj.GetDef(), befHP, befMaxHP, isMingge, mgObjID, batAttrDict)
|
| | |
|
| | | skbufAttrDict = {}
|
| | |
|
| | |
| | |
|
| | | objID = batObj.GetID()
|
| | | # 先计算百分比加成或降低的
|
| | | mgHaveAttrPer = False # 命格加成对友军有效
|
| | | perIDList = ChConfig.AttrPerDict.values()
|
| | | for attrID, attrPerID in ChConfig.AttrPerDict.items():
|
| | | if attrPerID not in skbufAttrDict:
|
| | | attrPerValue = 0
|
| | | if attrPerID in skbufAttrDict:
|
| | | attrPerValue += skbufAttrDict[attrPerID] # 可能是负值
|
| | | if mgObj:
|
| | | attrPerValue += mgObj.GetBatAttrValue(attrPerID)
|
| | | if attrPerValue:
|
| | | GameWorld.DebugLogEx(" 命格额外加成: attrID=%s,attrPerID=%s,attrPerValue=%s", attrID, attrPerID, attrPerValue)
|
| | | elif isMingge and attrPerValue:
|
| | | mgHaveAttrPer = True
|
| | | batObj.SetBatAttrValue(attrPerID, attrPerValue)
|
| | | GameWorld.DebugLogEx(" 命格保存加成: attrID=%s,attrPerID=%s,attrPerValue=%s", attrID, attrPerID, attrPerValue) |
| | | if not attrPerValue:
|
| | | continue
|
| | | attrPerValue = skbufAttrDict[attrPerID] # 可能是负值
|
| | | attrValue = batObj.GetBatAttrValue(attrID, False)
|
| | | if attrValue <= 0:
|
| | | continue
|
| | |
| | | batObj.SetHP(aftHP, isNotify)
|
| | | GameWorld.DebugLogEx(" befHP=%s/%s, aftHP=%s/%s", befHP, befMaxHP, aftHP, aftMaxHP)
|
| | | GameWorld.DebugLogEx(" 最终属性 ID:%s,atk=%s,def=%s,hp=%s/%s,%s", objID, batObj.GetAtk(), batObj.GetDef(), aftHP, aftMaxHP, batObj.GetBatAttrDict())
|
| | | |
| | | # 命格刷属性
|
| | | if mgHaveAttrPer and isMingge and not isInit:
|
| | | batLineup = batObj.GetTFBatLineup()
|
| | | batObjMgr = BattleObj.GetBatObjMgr()
|
| | | heroObjIDList = batLineup.getBatHeroObjIDList()
|
| | | GameWorld.DebugLogEx("命格有加成属性同步刷新本阵容武将属性: heroObjIDList=%s", heroObjIDList)
|
| | | for heroObjID in heroObjIDList:
|
| | | heroObj = batObjMgr.getBatObj(heroObjID)
|
| | | if not heroObj:
|
| | | continue
|
| | | if not heroObj.IsAlive():
|
| | | continue
|
| | | RefreshBuffAttr(heroObj)
|
| | | |
| | | return
|
| | |
|
| | | def SyncBuffRefresh(turnFight, curBatObj, curBuff, relatedSkillID=0, isNewAdd=False):
|