129 【战斗】战斗系统-服务端(关银屏所有技能;增加触发类型44-敌军行动后 45-友军行动后;增加效果6022 6023 6024)
4个文件已修改
3个文件已添加
147 ■■■■■ 已修改文件
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5023.py 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6022.py 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6023.py 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6024.py 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
@@ -1978,6 +1978,19 @@
            break
        
    TurnPassive.OnTriggerPassiveEffect(turnFight, curBatObj, ChConfig.TriggerWay_HeroActionEnd)
    batObjMgr = BattleObj.GetBatObjMgr()
    for faction in [ChConfig.Def_FactionA, ChConfig.Def_FactionB]:
        batFaction = turnFight.getBatFaction(faction)
        for lineupNum in batFaction.lineupDict.keys():
            batLineup = batFaction.getBatlineup(lineupNum)
            for lineupObjID in batLineup.posObjIDDict.values():
                lineupObj = batObjMgr.getBatObj(lineupObjID)
                if not lineupObj.IsAlive():
                    continue
                if lineupObj.GetFaction() != curBatObj.GetFaction():
                    TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_EnemyAction, curBatObj)
                else:
                    TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendAction, curBatObj)
    return True
def SetObjKilled(turnFight, gameObj, killer=None, useSkill=None):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -932,7 +932,8 @@
HurtAtkType_PoisonCureSuck,    # 吸血毒奶 11
HurtAtkType_HarmSelf,          # 自残 12
HurtAtkType_CaorenProtect,     # 本次伤害有受曹仁防护标记 13
) = range(14)
HurtAtkType_IgnoreShield,      # 无视承伤盾 14
) = range(15)
#伤害类型
(
@@ -4003,7 +4004,9 @@
TriggerWay_Revive, # 复活时 41
TriggerWay_BigTurnStartByDead, # 大回合开始时(死亡后有效) 42
TriggerWay_WhenDie, # 死亡时(自己) 43
) = range(1, 1 + 43)
TriggerWay_EnemyAction, # 敌方行动后 44
TriggerWay_FriendAction, # 友方行动后(包含自己) 45
) = range(1, 1 + 45)
# 不加载的被动触发方式,一般用于本技能固定触发逻辑用的
TriggerWayNoLoadList = [TriggerWay_CurSkillEff, TriggerWay_CurSkillEffLst]
@@ -4018,7 +4021,7 @@
# 被动效果ID,属性类的直接使用属性ID当做效果ID
PassiveEff_AddBuffLayerByWeight = 6001 # 根据权重随机添加buff层数 数值1-[[权重,层级], ...]
PassiveEff_ChangeHurtType = 6002 # 变更本次伤害类型
PassiveEff_ChangeHurtType = 6002 # 变更本次伤害类型(可验证目标状态)
PassiveEff_ChangeHurtMulti = 6003 # 变更伤害倍值(可增可减)
PassiveEff_AddSkillPer = 6004 # 增加本次技能万分比(验证目标状态)
PassiveEff_AddSkillPerByDeadTeammate = 6005 # 增加本次技能万分比(按队友死亡数)
@@ -4038,9 +4041,13 @@
PassiveEff_AddBatDamPerByTagLostHP = 6019 # 战斗增伤(按目标已损失生命)
PassiveEff_AddSkillPerByBuffState = 6020 # 增加技能系数(验证由buff状态触发的)
PassiveEff_AddBuffLayer = 6021 # 添加buff层级时额外增加x层
PassiveEff_IgnoreShield = 6022 # 穿盾效果,无视护盾值
PassiveEff_ChangeHurtTypeByBuff = 6023 # 变更本次伤害类型(可验证由xx状态buff触发的)
PassiveEff_ReduceLayer5023 = 6024 # 减少5023效果所需的buff状态层数
# 被动效果ID有触发值时就返回的
PassiveEffHappenValueList = [PassiveEff_ChangeHurtType, PassiveEff_ImmuneControlBuff, PassiveEff_MustSuperHit, PassiveEff_SkillInvalid]
PassiveEffHappenValueList = [PassiveEff_ChangeHurtType, PassiveEff_ImmuneControlBuff, PassiveEff_MustSuperHit, PassiveEff_SkillInvalid,
                             PassiveEff_IgnoreShield]
# 被动效果ID触发值取最大值的
PassiveEffValueMaxList = [PassiveEff_ChangeHurtMulti]
# 被动效果ID触发值取最小值的
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5023.py
@@ -18,12 +18,13 @@
import TurnBuff
import GameWorld
import TurnSkill
import TurnPassive
import ChConfig
def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs):
    buffState = curEffect.GetEffectValue(0)
    needLayers = curEffect.GetEffectValue(1) # 达到多少层时才消耗
    delLayers = curEffect.GetEffectValue(2) # 扣除层数
    exSkillID = curEffect.GetEffectValue(3) # 释放技能ID
    exSkillID = curEffect.GetEffectValue(2) # 释放技能ID
    if not buffState or not needLayers:
        return
    
@@ -31,12 +32,16 @@
    if not curBuff:
        return
    buffLayers = curBuff.GetLayer()
    reduecLayer = TurnPassive.GetTriggerEffectValue(turnFight, batObj, tagObj, ChConfig.PassiveEff_ReduceLayer5023, connSkillTypeID=curBuff.GetSkillTypeID(), reduceBuffState=buffState)
    if reduecLayer:
        needLayers = max(0, needLayers - reduecLayer)
        GameWorld.DebugLogEx("减少5023效果所需消耗的buff层级! buffState=%s,reduecLayer=%s,needLayers=%s", buffState, reduecLayer, needLayers)
    if buffLayers < needLayers:
        GameWorld.DebugLog("buff状态层数不足不触发! buffState=%s,buffLayers=%s < %s" % (buffState, buffLayers, needLayers))
        GameWorld.DebugLogEx("buff状态层数不足不触发! buffState=%s,buffLayers=%s < %s", buffState, buffLayers, needLayers)
        return
    updLayer = buffLayers - delLayers
    GameWorld.DebugLog("扣除buff层释放技能: buffState=%s,buffLayers=%s,delLayers=%s" % (buffState, buffLayers, delLayers))
    if delLayers:
    updLayer = buffLayers - needLayers
    GameWorld.DebugLogEx("消耗buff层释放技能: buffState=%s,buffLayers=%s,delLayers=%s,updLayer=%s", buffState, buffLayers, needLayers, updLayer)
        TurnBuff.DoBuffLayerChange(turnFight, batObj, curBuff, updLayer, connSkill)
        
    if exSkillID:
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6022.py
New file
@@ -0,0 +1,22 @@
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package Skill.PassiveTrigger.PassiveEff_6022
#
# @todo:穿盾效果,无视护盾值
# @author hxp
# @date 2025-12-14
# @version 1.0
#
# 详细描述: 穿盾效果,无视护盾值
#
#-------------------------------------------------------------------------------
#"""Version = 2025-12-14 17:30"""
#-------------------------------------------------------------------------------
import GameWorld
def GetHappenValue(attacker, defender, curEffect, effSkill, effBuff, connSkill, **skillkwargs):
    GameWorld.DebugLogEx("穿盾效果,无视护盾值")
    return 1
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6023.py
New file
@@ -0,0 +1,32 @@
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package Skill.PassiveTrigger.PassiveEff_6023
#
# @todo:变更本次伤害类型
# @author hxp
# @date 2025-12-14
# @version 1.0
#
# 详细描述: 变更本次伤害类型
#
#-------------------------------------------------------------------------------
#"""Version = 2025-12-14 17:30"""
#-------------------------------------------------------------------------------
import GameWorld
def GetHappenValue(attacker, defender, curEffect, effSkill, effBuff, connSkill, **skillkwargs):
    byBuffState = curEffect.GetEffectValue(1) # 验证由xx状态buff触发的
    if byBuffState and connSkill:
        byBuff = connSkill.GetByBuff()
        if not byBuff:
            #GameWorld.DebugLogEx("非由buff触发的不变更")
            return
        if byBuff.GetCurBuffState() != byBuffState:
            GameWorld.DebugLogEx("非由该buff状态触发的不变更! buffState=%s != %s" % (byBuff.GetCurBuffState(), byBuffState))
            return
    attrValue = curEffect.GetEffectValue(0)
    return attrValue
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6024.py
New file
@@ -0,0 +1,30 @@
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package Skill.PassiveTrigger.PassiveEff_6024
#
# @todo:减少5023效果所需的buff状态层数
# @author hxp
# @date 2025-12-14
# @version 1.0
#
# 详细描述: 减少5023效果所需的buff状态层数
#
#-------------------------------------------------------------------------------
#"""Version = 2025-12-14 17:30"""
#-------------------------------------------------------------------------------
#import GameWorld
def GetHappenValue(attacker, defender, curEffect, effSkill, effBuff, connSkill, **skillkwargs):
    if "reduceBuffState" not in skillkwargs:
        return
    reduceBuffState = skillkwargs["reduceBuffState"]
    effBuffState = curEffect.GetEffectValue(0) # buff״̬
    if effBuffState != reduceBuffState:
        #GameWorld.DebugLogEx("减少所需消耗的buff层状态不一致! reduceBuffState=%s != effBuffState(%s)", reduceBuffState, effBuffState)
        return
    reduceLayer = curEffect.GetEffectValue(1) # 减少所需层数
    #GameWorld.DebugLogEx("减少所需消耗的buff层! reduceBuffState=%s,reduceLayer=%s", reduceBuffState, reduceLayer)
    return reduceLayer
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -1809,6 +1809,8 @@
    batType = curSkill.GetBatType()
    
    changeHurtType = TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_ChangeHurtType, curSkill)
    if not changeHurtType:
        changeHurtType = TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_ChangeHurtTypeByBuff, curSkill)
    if changeHurtType == 1:
        ignoreDef = True
        GameWorld.DebugLogEx("强制变更本次伤害为无视防御! skillID=%s", skillID)
@@ -2127,7 +2129,9 @@
        defObj, hurtValue, hurtTypes, immuneHurt = hurtInfo[:4]
        isEx = hurtInfo[4] if len(hurtInfo) > 4 else 0 # 是否是额外目标
        
        lostHP = DoLostHP(turnFight, atkObj, defObj, hurtValue, curSkill, lostType, hpCanNegative=True, immuneHurt=immuneHurt)
        lostHP, ignoreShield = DoLostHP(turnFight, atkObj, defObj, hurtValue, curSkill, lostType, hpCanNegative=True, immuneHurt=immuneHurt)
        if ignoreShield:
            hurtTypes |= pow(2, ChConfig.HurtAtkType_IgnoreShield)
        
        #伤害结构体
        defID = defObj.GetID()
@@ -2415,9 +2419,10 @@
    @param hpCanNegative: 扣除后的生命是否允许负值
    @param immuneHurt: 免疫的伤害值
    @param isSkillSelfTag: 是否技能自身的直接目标,如平摊伤害目标、溅射伤害目标这种就不算直接目标
    @return: lostHP
    @return: lostHP, ignoreShield
    '''
    
    ignoreShield = None
    if immuneHurt > 0:
        buffMgr = defObj.GetBuffManager()
        wudiBuffList = buffMgr.FindBuffListByState(ChConfig.BatObjState_Wudi)
@@ -2432,7 +2437,7 @@
                                 defObj.GetID(), buff.GetBuffID(), buffSkillID, buffValue, immuneHurt, updBuffValue, lostType)
            
    if hurtValue <= 0:
        return 0
        return 0, ignoreShield
    
    atkID = atkObj.GetID()
    defID = defObj.GetID()
@@ -2443,6 +2448,11 @@
    shieldBuffList = []
    buffMgr = defObj.GetBuffManager()
    for buff in buffMgr.FindBuffListByState(ChConfig.BatObjState_DamShield):
        if ignoreShield == None:
            if TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_IgnoreShield, curSkill):
                ignoreShield = True # 无视承伤盾
                break
            ignoreShield = False
        skillData = buff.GetSkillData()
        remainTime = buff.GetRemainTime() # 剩余回合
        if not skillData.GetLastTime():
@@ -2494,7 +2504,7 @@
    GameWorld.DebugLogEx("    扣血: atkID=%s,defID=%s,hurtValue=%s,lostType=%s,lostHP=%s,dHP=%s,updHP=%s/%s", 
                         atkID, defID, hurtValue, lostType, lostHP, dHP, defObj.GetHP(), defObj.GetMaxHP())
    TurnAttack.AddTurnObjHurtValue(atkObj, defObj, hurtValue, lostHP, skillID, lostType)
    return lostHP
    return lostHP, ignoreShield
def CalcBounceHP(turnFight, atkObj, defObj, hurtObj, curSkill):
    '''计算反弹反弹伤害