| | |
| | | DoBuffDel(turnFight, batObj, curBuff, relatedSkill)
|
| | | return
|
| | |
|
| | | def DoBuffDel(turnFight, batObj, curBuff, relatedSkill=None, afterLogic=False, tagObj=None):
|
| | | def DoBuffDel(turnFight, batObj, curBuff, relatedSkill=None, afterLogic=False, tagObj=None, noRefreshAttr=False, isSync=True):
|
| | | '''删除buff
|
| | | @param relatedSkill: 关联的技能
|
| | | @param afterLogic: 是否需要在关联技能处理完毕后才处理删除后续逻辑,如通知,触发被动等
|
| | | @param tagObj: 由谁引起的buff删除
|
| | | @param noRefreshAttr: 不刷新属性
|
| | | @return: isRefreshAttr 是否需要刷属性,如果设置了 noRefreshAttr,则要在外层刷属性
|
| | | '''
|
| | |
|
| | | release = True
|
| | | isSync = True
|
| | | release = True # 释放buff实例
|
| | | #isSync = True
|
| | | relatedSkillID = relatedSkill.GetSkillID() if relatedSkill else 0
|
| | | if afterLogic and relatedSkill:
|
| | | release = False
|
| | |
| | | if haveBuffPassiveEff:
|
| | | batObj.GetPassiveEffManager().DelBuffPassiveEffect(buffID)
|
| | |
|
| | | if isRefreshAttr:
|
| | | if isRefreshAttr and not noRefreshAttr:
|
| | | RefreshBuffAttr(batObj)
|
| | |
|
| | | if skillType == ChConfig.Def_SkillType_Halo and ownerID == buffObjID:
|
| | |
| | | if not haloBuff:
|
| | | continue
|
| | | DoBuffDel(turnFight, haloObj, haloBuff, relatedSkill, afterLogic, tagObj)
|
| | | return
|
| | | return isRefreshAttr
|
| | |
|
| | | def DoBuffDelAfterLogicOver(turnFight, buffObjID, curBuff, relatedSkill):
|
| | | ## buff删除后续处理逻辑处理完毕
|
| | |
| | | if callFunc:
|
| | | callFunc(turnFight, batObj, curBuff, **kwargs)
|
| | | return
|
| | |
|
| | | def DoBuffByDead(turnFight, batObj):
|
| | | ## 死亡处理buff
|
| | | isRefreshAttr = False
|
| | | objID = batObj.GetID()
|
| | | buffMgr = batObj.GetBuffManager()
|
| | | for index in range(buffMgr.GetBuffCount())[::-1]:
|
| | | buff = buffMgr.GetBuffByIndex(index)
|
| | | buffID = buff.GetBuffID()
|
| | | skillID = buff.GetSkillID()
|
| | | if buff.GetBuffRetain()&pow(2, ChConfig.BuffRetainType_Dead):
|
| | | GameWorld.DebugLog("死亡不清除的buff: objID=%s,buffID=%s,skillID=%s" % (objID, buffID, skillID))
|
| | | continue
|
| | | if DoBuffDel(turnFight, batObj, buff, noRefreshAttr=True, isSync=False): # 可不通知,前端默认都清除,复活后重新同步
|
| | | isRefreshAttr = True
|
| | | |
| | | if isRefreshAttr:
|
| | | RefreshBuffAttr(batObj)
|
| | | |
| | | return
|
| | |
|
| | | def DoBuffByRevive(turnFight, batObj):
|
| | | ## 复活处理buff
|
| | |
|
| | | isRefreshAttr = False
|
| | | objID = batObj.GetID()
|
| | | buffMgr = batObj.GetBuffManager()
|
| | | for index in range(buffMgr.GetBuffCount()):
|
| | | buff = buffMgr.GetBuffByIndex(index)
|
| | | buffID = buff.GetBuffID()
|
| | | skillID = buff.GetSkillID()
|
| | | if buff.GetBuffRetain()&pow(2, ChConfig.BuffRetainType_Revive):
|
| | | GameWorld.DebugLog("复活不清除的buff: objID=%s,buffID=%s,skillID=%s" % (objID, buffID, skillID))
|
| | | SyncBuffRefresh(turnFight, batObj, buff, isNewAdd=True) # 复活时还存在的buff通知前端视为新添加的
|
| | | continue
|
| | | if DoBuffDel(turnFight, batObj, buff, noRefreshAttr=True, isSync=False): # 复活可不通知删除的buff
|
| | | isRefreshAttr = True
|
| | | |
| | | if isRefreshAttr:
|
| | | RefreshBuffAttr(batObj)
|
| | | |
| | | # 重新添加本阵营有效光环
|
| | | batObjMgr = BattleObj.GetBatObjMgr()
|
| | | batLineup = batObj.GetBatLineup()
|
| | | for tagObjID in batLineup.posObjIDDict.values():
|
| | | tagObj = batObjMgr.getBatObj(tagObjID)
|
| | | if not tagObj.IsAlive():
|
| | | continue
|
| | | tagBuffMgr = tagObj.GetBuffManager()
|
| | | for index in range(tagBuffMgr.GetBuffCount()):
|
| | | buff = tagBuffMgr.GetBuffByIndex(index)
|
| | | haloObjIDList = buff.GetHaloObjIDList()
|
| | | if not haloObjIDList or objID not in haloObjIDList:
|
| | | continue
|
| | | if buff.GetOwnerID() != tagObjID:
|
| | | # 非光源
|
| | | continue
|
| | | haloSkillID = buff.GetSkillID()
|
| | | GameWorld.DebugLog("复活后重新添加本阵营光环: objID=%s,ownerID=%s,haloSkillID=%s" % (objID, tagObjID, haloSkillID))
|
| | | haloSkill = tagObj.GetSkillManager().FindSkillByID(haloSkillID)
|
| | | if not haloSkill:
|
| | | continue
|
| | | OnAddBuff(turnFight, batObj, haloSkill, buffOwner=tagObj)
|
| | | |
| | | # 光源重新添加有效光环,根据光源是否还有效规则优化,待处理
|
| | | return
|
| | |
|
| | | def RefreshBuffAttr(batObj, isInit=False):
|
| | | ''' 刷新buff属性,如果有涉及到buff属性变更的,只能全部buff重新刷
|
| | | '''
|