| | |
| | | @param refreshTimeLayer: 刷新剩余时间、层级
|
| | | '''
|
| | | skillData = curBuff.GetSkillData()
|
| | | curBuff.SetCalcTime(turnFight.getTimeline())
|
| | | curBuff.SetAddTiming(curBatObj.GetTiming())
|
| | | if refreshTimeLayer:
|
| | | curBuff.SetRemainTime(max(tagBuff.GetRemainTime(), skillData.GetLastTime()))
|
| | | curBuff.SetLayer(max(tagBuff.GetLayer(), skillData.GetLayerMax()))
|
| | |
| | | GameWorld.DebugLog(" 默认覆盖")
|
| | |
|
| | | # 重置回合、CD、值等
|
| | | buff.SetCalcTime(turnFight.getTimeline())
|
| | | buff.SetAddTiming(batObj.GetTiming())
|
| | | buff.SetRemainTime(buffSkill.GetLastTime())
|
| | | buff.SetLayer(updLayerCnt)
|
| | | buff.SetBuffValueList(buffValueList)
|
| | | buff.ResetEffectValueEx()
|
| | | if afterLogic and bySkill:
|
| | | bySkill.AddAfterLogic(ChConfig.AfterLogic_AddBuff, [batObj, buff, buffOwner])
|
| | | elif isSync:
|
| | | SyncBuffRefresh(turnFight, batObj, buff, relatedSkillID, isNewAdd=True)
|
| | |
|
| | | if nowLayerCnt != updLayerCnt:
|
| | | RefreshBuffEffect(turnFight, batObj, buff, False)
|
| | | RefreshBuffEffect(turnFight, batObj, buff, buffSkill, buffOwner, refreshType=2)
|
| | | return buff
|
| | |
|
| | | return __addNewBuff(turnFight, batObj, buffMgr, buffSkill, buffValueList, buffOwner, bySkill, afterLogic, setLayerCnt=addLayerCnt, isSync=isSync)
|
| | |
| | | relatedSkillID = bySkill.GetSkillID() if bySkill else 0
|
| | | ownerID = buffOwner.GetID()
|
| | | buffID = buff.GetBuffID()
|
| | | timing = batObj.GetTiming()
|
| | |
|
| | | GameWorld.DebugLog(" __addNewBuff. buffID=%s,skillID=%s,ownerID=%s,relatedSkillID=%s,timeline=%s" |
| | | % (buffID, skillID, ownerID, relatedSkillID, turnFight.getTimeline()), curID)
|
| | | GameWorld.DebugLog(" __addNewBuff. buffID=%s,skillID=%s,ownerID=%s,relatedSkillID=%s,timing=%s" |
| | | % (buffID, skillID, ownerID, relatedSkillID, timing), curID)
|
| | | buff.SetAddTiming(timing) # 武将当前在什么时机就设置为什么时机
|
| | | buff.SetOwnerID(ownerID)
|
| | | buff.SetCalcTime(turnFight.getTimeline())
|
| | | buff.SetRemainTime(buffSkill.GetLastTime())
|
| | | buff.SetLayer(setLayerCnt)
|
| | | buff.SetBuffValueList(buffValueList)
|
| | |
| | | elif isSync:
|
| | | SyncBuffRefresh(turnFight, batObj, buff, relatedSkillID, isNewAdd=True)
|
| | |
|
| | | RefreshBuffEffect(turnFight, batObj, buff, True)
|
| | | RefreshBuffEffect(turnFight, batObj, buff, buffSkill, buffOwner, refreshType=1)
|
| | | return buff
|
| | |
|
| | | def RefreshBuffEffect(turnFight, batObj, curBuff, isNewBuff=False):
|
| | | def RefreshBuffEffect(turnFight, batObj, curBuff, buffSkill=None, buffOwner=None, refreshType=0):
|
| | | ## 刷新buff效果
|
| | | # @param buffSkill: 添加该buff时对应的buff技能ID,可能为None,如非添加时的刷新
|
| | | # @param refreshType: 0-普通刷新;1-新添加刷新;2-覆盖刷新
|
| | |
|
| | | isRefreshAttr = False # 是否刷属性
|
| | |
|
| | |
| | | continue
|
| | |
|
| | | if curEffect.GetTriggerWay():
|
| | | if curEffect.GetTriggerSrc() not in [ChConfig.TriggerSrc_Skill, ChConfig.TriggerSrc_SkillSelf] and isNewBuff:
|
| | | if curEffect.GetTriggerSrc() not in [ChConfig.TriggerSrc_Skill, ChConfig.TriggerSrc_SkillSelf] and refreshType == 1:
|
| | | passiveEffMgr.AddBuffPassiveEffect(curBuff, skillData, curEffect)
|
| | |
|
| | | elif effectID in ChConfig.AttrIDList:
|
| | | isRefreshAttr = True
|
| | |
|
| | | if refreshType and buffSkill and buffOwner:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, buffOwner, ChConfig.TriggerWay_BuffAddByOwner, connSkill=buffSkill, connBuff=curBuff)
|
| | | |
| | | if isRefreshAttr:
|
| | | RefreshBuffAttr(batObj)
|
| | |
|
| | |
| | | curBuff.SetLayer(updLayer)
|
| | | relatedSkillID = relatedSkill.GetSkillID() if relatedSkill else 0
|
| | | SyncBuffRefresh(turnFight, batObj, curBuff, relatedSkillID)
|
| | | RefreshBuffEffect(turnFight, batObj, curBuff, False)
|
| | | RefreshBuffEffect(turnFight, batObj, curBuff)
|
| | | return
|
| | | DoBuffDel(turnFight, batObj, curBuff, relatedSkill)
|
| | | return
|
| | |
| | | GameWorld.DebugLog("RefreshBuffAttr ID:%s,atk=%s,def=%s,hp=%s/%s,batAttrDict=%s"
|
| | | % (objID, batObj.GetAtk(), batObj.GetDef(), befHP, befMaxHP, batAttrDict))
|
| | |
|
| | | skbufAttrDict = {}
|
| | | |
| | | # 属性技能
|
| | | skillAttrDict = {}
|
| | | skillManager = batObj.GetSkillManager()
|
| | | for index in range(0, skillManager.GetSkillCount()):
|
| | | curSkill = skillManager.GetSkillByIndex(index)
|
| | | if not curSkill:
|
| | | continue
|
| | | for eIndex in range(curSkill.GetEffectCount()):
|
| | | effect = curSkill.GetEffect(eIndex)
|
| | | effID = effect.GetEffectID()
|
| | | if effID not in ChConfig.AttrIDList:
|
| | | continue
|
| | | if effect.GetTriggerWay():
|
| | | continue
|
| | | attrID = effID
|
| | | attrValue = effect.GetEffectValue(0)
|
| | | calcType = effect.GetEffectValue(1)
|
| | | if calcType == 2: # 减少,其他默认增加
|
| | | attrValue = -attrValue
|
| | | skillAttrDict[attrID] = skillAttrDict.get(attrID, 0) + attrValue
|
| | | skbufAttrDict[attrID] = skbufAttrDict.get(attrID, 0) + attrValue
|
| | | skillAttrDict and GameWorld.DebugLog(" skillAttrDict=%s" % skillAttrDict)
|
| | | |
| | | # buff
|
| | | buffAttrDict = {} # buff属性 {attrID:value, } value可能是负值
|
| | | buffsAttrDict = {} # buff属性 {attrID:value, } value可能是负值
|
| | | buffMgr = batObj.GetBuffManager()
|
| | | for index in range(buffMgr.GetBuffCount()):
|
| | | buff = buffMgr.GetBuffByIndex(index)
|
| | | layer = max(1, buff.GetLayer())
|
| | | skillData = buff.GetSkillData()
|
| | | atkType = skillData.GetAtkType()
|
| | | if atkType:
|
| | | callFunc = GameWorld.GetExecFunc(TurnBuffs, "BuffAtkType_%d.%s" % (atkType, "CalcBuffAttrEx"))
|
| | | if callFunc:
|
| | | callFunc(batObj, buff, skillData, layer, buffAttrDict)
|
| | | |
| | | |
| | | for eIndex in range(skillData.GetEffectCount()):
|
| | | effect = skillData.GetEffect(eIndex)
|
| | | effID = effect.GetEffectID()
|
| | | if effID not in ChConfig.AttrIDList:
|
| | | continue
|
| | | attrID = effID
|
| | | attrValue = effect.GetEffectValue(0) * layer
|
| | | attrValue = (effect.GetEffectValue(0) + buff.GetEffectValueEx(attrID)) * layer
|
| | | calcType = effect.GetEffectValue(1)
|
| | | if calcType == 2: # 减少,其他默认增加
|
| | | attrValue = -attrValue
|
| | | buffAttrDict[attrID] = buffAttrDict.get(attrID, 0) + attrValue
|
| | | buffsAttrDict[attrID] = buffsAttrDict.get(attrID, 0) + attrValue
|
| | | skbufAttrDict[attrID] = skbufAttrDict.get(attrID, 0) + attrValue
|
| | |
|
| | | GameWorld.DebugLog(" buffAttrDict=%s" % buffAttrDict)
|
| | | buffsAttrDict and GameWorld.DebugLog(" buffsAttrDict=%s" % buffsAttrDict)
|
| | | GameWorld.DebugLog(" skbufAttrDict=%s" % skbufAttrDict)
|
| | |
|
| | | objID = batObj.GetID()
|
| | | # 先计算百分比加成或降低的
|
| | | perIDList = ChConfig.AttrPerDict.values()
|
| | | for attrID, attrPerID in ChConfig.AttrPerDict.items():
|
| | | if attrPerID not in buffAttrDict:
|
| | | if attrPerID not in skbufAttrDict:
|
| | | continue
|
| | | attrPerValue = buffAttrDict[attrPerID] # 可能是负值
|
| | | attrPerValue = skbufAttrDict[attrPerID] # 可能是负值
|
| | | attrValue = batObj.GetBatAttrValue(attrID, False)
|
| | | if attrValue <= 0:
|
| | | continue
|
| | |
| | | GameWorld.DebugLog(" attrID=%s(PerID:%s),attrValue=%s(PerValue:%s),updValue=%s" % (attrID, attrPerID, attrValue, attrPerValue, updValue))
|
| | |
|
| | | # 再累加非百分比的固定值
|
| | | for attrID, addValue in buffAttrDict.items():
|
| | | for attrID, addValue in skbufAttrDict.items():
|
| | | if attrID in perIDList:
|
| | | continue
|
| | | attrValue = batObj.GetBatAttrValue(attrID, False)
|