129 【战斗】战斗系统-服务端(甘夫人潜能1、3;增加使用技能后触发方式9;层级buff属性支持;)
3个文件已修改
64 ■■■■■ 已修改文件
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -4278,8 +4278,8 @@
TriggerWay_HeroActionStart, # 武将行动前    6
TriggerWay_HeroActionEnd, # 武将行动后    7
TriggerWay_CalcEffValue, # 统计计算效果值时  8
TriggerWay_9, # 9
TriggerWay_AttackOverDirect, # 直接攻击后 (非buff攻击)10
TriggerWay_UseSkillOver, # 使用技能后(每个目标触发一次)9
TriggerWay_AttackOverDirect, # 直接攻击后(除dot或buff外的攻击,每个目标触发一次)10
TriggerWay_BeAttackedDirect, # 受到直接攻击时 (非buff攻击)11
TriggerWay_ShieldBroken, # 承伤盾被击破时 12
TriggerWay_CurSkillEff, # 本技能/buff释放后,一般用于本技能/buff释放后触发,仅该技能释放后有效 13
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
@@ -100,11 +100,11 @@
                if buff.GetOwnerID() != ownerID:
                    continue
                buffID = buff.GetBuffID()
                nowLayerCnt = buff.GetLayer()
                GameWorld.DebugLog("    已经存在该buff: buffID=%s,skillTypeID=%s,ownerID=%s,buffRepeat=%s" % (buffID, skillTypeID, ownerID, buffRepeat))
                
                updLayerCnt = addLayerCnt
                if buffRepeat == 3: # 叠加层级
                    nowLayerCnt = buff.GetLayer()
                    maxLayerCnt = buffSkill.GetLayerMax()
                    updLayerCnt = nowLayerCnt + addLayerCnt
                    if maxLayerCnt and updLayerCnt > maxLayerCnt:
@@ -123,6 +123,8 @@
                else:
                    SyncBuffRefresh(turnFight, batObj, buff, relatedSkillID, isNewAdd=True)
                    
                if nowLayerCnt != updLayerCnt:
                    RefreshBuffEffect(turnFight, batObj, buff, False)
                break
            
            return True
@@ -157,58 +159,44 @@
    else:
        SyncBuffRefresh(turnFight, batObj, buff, relatedSkillID, isNewAdd=True)
        
    DoBuffAddOver(turnFight, batObj, buffSkill, buff, buffOwner)
    RefreshBuffEffect(turnFight, batObj, buff, True)
    return
def DoBuffAddOver(turnFight, batObj, buffSkill, addBuff, buffOwner):
    ## buff添加成功后处理
def RefreshBuffEffect(turnFight, batObj, curBuff, isNewBuff=False):
    ## 刷新buff效果
    
    isRefreshAttr = False # 是否刷属性
    
    #atkType = buffSkill.GetAtkType()
    #if atkType:
    #    callFunc = GameWorld.GetExecFunc(TurnBuffs, "BuffAtkType_%d.%s" % (atkType, "OnBuffAddOver"))
    #    if callFunc:
    #        callFunc(turnFight, batObj, buffSkill, addBuff, buffOwner)
    skillData = curBuff.GetSkillData()
    passiveEffMgr = batObj.GetPassiveEffManager()
    # buff效果加入
    for effectIndex in range(0, buffSkill.GetEffectCount()):
        curEffect = buffSkill.GetEffect(effectIndex)
    for effectIndex in range(0, skillData.GetEffectCount()):
        curEffect = skillData.GetEffect(effectIndex)
        effectID = curEffect.GetEffectID()
        if effectID == 0:
            continue
        
        if curEffect.GetTriggerWay():
            if curEffect.GetTriggerSrc() not in [ChConfig.TriggerSrc_Skill, ChConfig.TriggerSrc_SkillSelf]:
                passiveEffMgr.AddBuffPassiveEffect(addBuff, buffSkill, curEffect)
            if curEffect.GetTriggerSrc() not in [ChConfig.TriggerSrc_Skill, ChConfig.TriggerSrc_SkillSelf] and isNewBuff:
                passiveEffMgr.AddBuffPassiveEffect(curBuff, skillData, curEffect)
                
        elif effectID in ChConfig.AttrIDList:
            isRefreshAttr = True
            
        else:
            callFunc = GameWorld.GetExecFunc(TurnBuffs, "Buff_%d.%s" % (effectID, "OnBuffAddOver"))
            if callFunc:
                callFunc(turnFight, batObj, buffSkill, addBuff, curEffect, buffOwner)
    if isRefreshAttr:
        RefreshBuffAttr(batObj)
        
    return
def DecBuffLayer(turnFight, batObj, curBuff, decLayer=1, relatedSkillID=0):
    ## 减少buff层级
    curLayer = curBuff.GetLayer()
    if not curLayer:
        return
    updLayer = max(0, curLayer - decLayer)
    curBuff.SetLayer(updLayer)
def DoBuffLayerChange(turnFight, batObj, curBuff, updLayer, relatedSkill=None):
    ## buff层级变更
    if updLayer > 0:
        curBuff.SetLayer(updLayer)
        relatedSkillID = relatedSkill.GetSkillID() if relatedSkill else 0
        SyncBuffRefresh(turnFight, batObj, curBuff, relatedSkillID)
        RefreshBuffEffect(turnFight, batObj, curBuff, False)
        return
    objID = batObj.GetID()
    buffID = curBuff.GetBuffID()
    SyncBuffDel(turnFight, objID, buffID, relatedSkillID)
    DoBuffDel(turnFight, batObj, curBuff, relatedSkill)
    return
def DoBuffDel(turnFight, batObj, curBuff, relatedSkill=None, afterLogic=False, tagObj=None):
@@ -303,6 +291,7 @@
    buffMgr = batObj.GetBuffManager()
    for index in range(buffMgr.GetBuffCount()):
        buff = buffMgr.GetBuffByIndex(index)
        layer = max(1, buff.GetLayer())
        skillData = buff.GetSkillData()
        for eIndex in range(skillData.GetEffectCount()):
            effect = skillData.GetEffect(eIndex)
@@ -310,13 +299,13 @@
            if effID not in ChConfig.AttrIDList:
                continue
            attrID = effID
            attrValue = effect.GetEffectValue(0)
            attrValue = effect.GetEffectValue(0) * layer
            calcType = effect.GetEffectValue(1)
            if calcType == 2: # 减少,其他默认增加
                attrValue = -attrValue
            buffAttrDict[attrID] = buffAttrDict.get(attrID, 0) + attrValue
            
    GameWorld.DebugLog("    __addBuffAttr buffAttrDict=%s" % buffAttrDict)
    GameWorld.DebugLog("    buffAttrDict=%s" % buffAttrDict)
    
    objID = batObj.GetID()
    # 先计算百分比加成或降低的
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -766,14 +766,17 @@
        
    for tagObj in useSkill.GetTagObjList():
        tagID = tagObj.GetID()
        if tagID == curID or tagID in missObjIDList:
            # 自己或对方闪避了不再触发被动
        if tagID in missObjIDList:
            continue
        
        # 直接攻击
        if isUseSkill and not SkillCommon.IsBuff(useSkill) and useSkill.GetSkillType() in [ChConfig.Def_SkillType_Atk]:
            TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_AttackOverDirect, tagObj, connSkill=useSkill)
            TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeAttackedDirect, curObj, connSkill=useSkill)
        # 使用技能后
        if isUseSkill:
            TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_UseSkillOver, tagObj, connSkill=useSkill)
            
    if killObjList:
        tagObj = killObjList[0]
@@ -1237,7 +1240,7 @@
    parryYJBuff = buffMgr.FindBuffByState(ChConfig.BatObjState_ParryYJ)
    if parryYJBuff and parryYJBuff.GetLayer():
        GameWorld.DebugLog("格挡印记格挡了: buffID=%s,buffLayer=%s" % (parryYJBuff.GetBuffID(), parryYJBuff.GetLayer()))
        TurnBuff.DecBuffLayer(turnFight, defObj, parryYJBuff, 1, curSkill.GetSkillID())
        TurnBuff.DoBuffLayerChange(turnFight, defObj, parryYJBuff, parryYJBuff.GetLayer() - 1, curSkill)
        return True
    
    aParryRateDef = atkObj.GetBatAttrValue(ChConfig.AttrID_ParryRateDef)