hxp
3 天以前 71685e76b8f23242fd3e5ec2a1c934579efafb96
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
@@ -21,7 +21,6 @@
import IpyGameDataPY
import TurnBuffs
import BattleObj
import ObjPool
import TurnPassive
GameWorld.ImportAll("Script\\Skill\\", "TurnBuffs")
@@ -69,13 +68,11 @@
        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):
@@ -180,18 +177,26 @@
            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()
@@ -364,13 +369,14 @@
    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实例
@@ -401,7 +407,7 @@
        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()):
@@ -448,7 +454,6 @@
    ## 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):
@@ -531,11 +536,11 @@
    '''
    
    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)
    
@@ -574,11 +579,14 @@
        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
            
@@ -634,13 +642,16 @@
        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
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()
@@ -656,7 +667,7 @@
    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