| | |
| | | import IpyGameDataPY
|
| | | import TurnBuffs
|
| | | import BattleObj
|
| | | import ObjPool
|
| | | import TurnPassive
|
| | |
|
| | | GameWorld.ImportAll("Script\\Skill\\", "TurnBuffs")
|
| | |
| | | return
|
| | | ownerID = buffOwner.GetID() if buffOwner else 0
|
| | | tagObjList = [batObj]
|
| | | poolMgr = ObjPool.GetPoolMgr()
|
| | | useSkill = poolMgr.acquire(BattleObj.PySkill, skillIpyData, ownerID)
|
| | | useSkill = BattleObj.PySkill(skillIpyData, ownerID)
|
| | | useSkill.SetTagObjList(tagObjList)
|
| | |
|
| | | addBuff = OnAddBuff(turnFight, batObj, useSkill, buffOwner, bySkill, afterLogic, isSync=isSync, setLayerCnt=setLayerCnt)
|
| | |
|
| | | poolMgr.release(useSkill)
|
| | | return addBuff
|
| | |
|
| | | def OnAddBuff(turnFight, batObj, buffSkill, buffOwner=None, bySkill=None, afterLogic=False, isSync=True, **kwargs):
|
| | |
| | | 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()):
|
| | |
| | | ## buff删除后续处理逻辑处理完毕
|
| | | relatedSkillID = relatedSkill.GetSkillID() if relatedSkill else 0
|
| | | SyncBuffDel(turnFight, buffObjID, curBuff.GetBuffID(), relatedSkillID)
|
| | | ObjPool.GetPoolMgr().release(curBuff)
|
| | | return
|
| | |
|
| | | def DoBuffProcess(turnFight, batObj, curBuff, **kwargs):
|
| | |
| | |
|
| | | def SyncBuffRefresh(turnFight, curBatObj, curBuff, relatedSkillID=0, isNewAdd=False):
|
| | | ## @param curBatObj: 该buff的持有者,即在谁身上
|
| | | clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCBuffRefresh)
|
| | | clientPack = ChPyNetSendPack.tagSCBuffRefresh()
|
| | | clientPack.ObjID = curBatObj.GetID()
|
| | | clientPack.BuffID = curBuff.GetBuffID()
|
| | | clientPack.SkillID = curBuff.GetSkillID()
|
| | |
| | | return
|
| | |
|
| | | def SyncBuffDel(turnFight, objID, buffID, relatedSkillID=0):
|
| | | clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCBuffDel)
|
| | | clientPack = ChPyNetSendPack.tagSCBuffDel()
|
| | | clientPack.ObjID = objID
|
| | | clientPack.BuffID = buffID
|
| | | clientPack.RelatedSkillID = relatedSkillID
|