| | |
| | | nowLayerCnt = buff.GetLayer()
|
| | | GameWorld.DebugLogEx(" 已经存在该buff: buffID=%s,skillTypeID=%s,ownerID=%s,buffRepeat=%s", buffID, skillTypeID, ownerID, buffRepeat)
|
| | |
|
| | | resetAddTiming = False # 一般只有覆盖的才重新计算回合,视为重新添加
|
| | | remainTime = buffSkill.GetLastTime()
|
| | | updLayerCnt = addLayerCnt
|
| | | if buffRepeat == 3: # 叠加层级
|
| | | updLayerCnt = nowLayerCnt + addLayerCnt
|
| | | if maxLayerCnt and updLayerCnt > maxLayerCnt:
|
| | | updLayerCnt = maxLayerCnt
|
| | | GameWorld.DebugLogEx(" 叠加层级: nowLayerCnt=%s,addLayerCnt=%s,updLayerCnt=%s,maxLayerCnt=%s", nowLayerCnt, addLayerCnt, updLayerCnt, maxLayerCnt)
|
| | | elif buffRepeat == 1: # 延长回合
|
| | | addTime = buffSkill.GetLastTime()
|
| | | remainTime = buff.GetRemainTime() + addTime
|
| | | GameWorld.DebugLogEx(" 延长回合: addTime=%s,updRemainTime=%s", addTime, remainTime)
|
| | | else:
|
| | | GameWorld.DebugLogEx(" 默认覆盖")
|
| | | resetAddTiming = True
|
| | |
|
| | | # 重置回合、CD、值等
|
| | | buff.SetAddTiming(batObj.GetTiming())
|
| | | buff.SetRemainTime(buffSkill.GetLastTime())
|
| | | if resetAddTiming:
|
| | | buff.SetAddTiming(batObj.GetTiming())
|
| | | buff.SetRemainTime(remainTime)
|
| | | buff.SetLayer(updLayerCnt)
|
| | | buff.SetBuffValueList(buffValueList)
|
| | | buff.ResetEffectValueEx()
|
| | |
| | | DoBuffDel(turnFight, batObj, curBuff, relatedSkill)
|
| | | return
|
| | |
|
| | | def DoBuffDel(turnFight, batObj, curBuff, relatedSkill=None, afterLogic=False, tagObj=None, noRefreshAttr=False, isSync=True):
|
| | | def DoBuffDel(turnFight, batObj, curBuff, relatedSkill=None, afterLogic=False, tagObj=None, noRefreshAttr=False, isSync=True, afterTriggerData=None):
|
| | | '''删除buff
|
| | | @param relatedSkill: 关联的技能
|
| | | @param afterLogic: 是否需要在关联技能处理完毕后才处理删除后续逻辑,如通知,触发被动等
|
| | | @param tagObj: 由谁引起的buff删除
|
| | | @param noRefreshAttr: 不刷新属性
|
| | | @return: isRefreshAttr 是否需要刷属性,如果设置了 noRefreshAttr,则要在外层刷属性
|
| | | @return: afterTriggerData afterLogic为True时,附带的被动触发数据,因为buff被删除后该buff自带的被动效果也会被删除,所以先缓存供后续处理
|
| | | '''
|
| | |
|
| | | release = True # 释放buff实例
|
| | |
| | | SyncBuffDel(turnFight, buffObjID, buffID, relatedSkillID)
|
| | | if afterLogic and relatedSkill:
|
| | | tagObjID = tagObj.GetID() if tagObj else buffObjID
|
| | | relatedSkill.AddAfterLogic(ChConfig.AfterLogic_DelBuff, [buffObjID, curBuff, tagObjID])
|
| | | relatedSkill.AddAfterLogic(ChConfig.AfterLogic_DelBuff, [buffObjID, curBuff, tagObjID, afterTriggerData])
|
| | |
|
| | | #buff消失的触发
|
| | | for effectIndex in range(0, skillData.GetEffectCount()):
|
| | |
| | | '''
|
| | |
|
| | | objID = batObj.GetID()
|
| | | befHP = batObj.GetHP()
|
| | | befMaxHP = batObj.GetMaxHP()
|
| | |
|
| | | batAttrDict = batObj.ResetBattleEffect()
|
| | |
|
| | | befHP = batObj.GetHP()
|
| | | befMaxHP = batObj.GetMaxHP()
|
| | | GameWorld.DebugLogEx("RefreshBuffAttr ID:%s,atk=%s,def=%s,hp=%s/%s,batAttrDict=%s",
|
| | | objID, batObj.GetAtk(), batObj.GetDef(), befHP, befMaxHP, batAttrDict)
|
| | |
|
| | |
| | | skillData = buff.GetSkillData()
|
| | |
|
| | | effExDict = buff.GetEffectExDict()
|
| | | for effID, effValueEx in effExDict.items():
|
| | | for effCalcInfo, effValueEx in effExDict.items():
|
| | | effID, calcType = effCalcInfo
|
| | | if effID not in ChConfig.AttrIDList:
|
| | | continue
|
| | | attrID = effID
|
| | | attrValue = effValueEx * layer
|
| | | if calcType == 2: # 减少,其他默认增加
|
| | | attrValue = -attrValue
|
| | | buffsAttrDict[attrID] = buffsAttrDict.get(attrID, 0) + attrValue
|
| | | skbufAttrDict[attrID] = skbufAttrDict.get(attrID, 0) + attrValue
|
| | |
|
| | |
| | | if befHP and aftMaxHP > befMaxHP:
|
| | | aftHP += (aftMaxHP - befMaxHP)
|
| | | batObj.SetHP(aftHP, isNotify)
|
| | | elif aftHP > aftMaxHP:
|
| | | aftHP = aftMaxHP
|
| | | 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())
|
| | | return
|