From e80aa0f81f59070d748e1a20410805f0a87bd381 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期日, 14 十二月 2025 17:34:07 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(关银屏所有技能;增加触发类型44-敌军行动后 45-友军行动后;增加效果6022 6023 6024)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py |   44 ++++++++++++++++++++++++++++----------------
 1 files changed, 28 insertions(+), 16 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
index e4f017d..9b56267 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -1279,16 +1279,14 @@
     
     # 优先处理afterLogic,可再预先汇总一些会触发被动的信息
     relatedSkillID = useSkill.GetSkillID()
-    shieldBrokenList = [] # 记录盾破
+    delBuffAfterEffList = [] # buff消失后要触发的被动,一般用于后置处理的逻辑
     afterLogicList = useSkill.GetAfterLogicList()
     for logicType, logicData in afterLogicList:
         if logicType == ChConfig.AfterLogic_DelBuff:
-            buffObjID, buff, tagObjID = logicData
-            buffSkillData = buff.GetSkillData()
-            buffSkillTypeID = buffSkillData.GetSkillTypeID()
+            buffObjID, buff, tagObjID, afterTriggerData = logicData
             TurnBuff.DoBuffDelAfterLogicOver(turnFight, buffObjID, buff, useSkill)
-            if SkillCommon.isDamageShieldSkill(buffSkillData):
-                shieldBrokenList.append([buffObjID, tagObjID, buffSkillTypeID])
+            if afterTriggerData:
+                delBuffAfterEffList.append([buffObjID, buff, tagObjID, afterTriggerData])
                 
         elif logicType == ChConfig.AfterLogic_AddBuff:
             batObj = logicData[0]
@@ -1397,11 +1395,13 @@
     
     # ========== 以下触发被动 ==========
     
-    # 破盾时
-    for buffObjID, tagObjID, buffSkillTypeID in shieldBrokenList:
+    # buff消失后置处理的被动,优先处理,如破盾,区别于被动方式  ChConfig.TriggerWay_BuffDel(立即触发)
+    for buffObjID, buff, tagObjID, afterTriggerData in delBuffAfterEffList:
+        triggerWay, effInfoList = afterTriggerData
         buffObj = batObjMgr.getBatObj(buffObjID)
-        tagObj = batObjMgr.getBatObj(tagObjID)
-        TurnPassive.OnTriggerPassiveEffect(turnFight, buffObj, ChConfig.TriggerWay_ShieldBroken, tagObj, connSkillTypeID=buffSkillTypeID)
+        tagObj = batObjMgr.getBatObj(tagObjID) # 导致该buff消失的目标
+        GameWorld.DebugLogEx("buff消失后置处理的被动: buffObjID=%s,tagObjID=%s,triggerWay=%s,%s", buffObjID, tagObjID, triggerWay, effInfoList)
+        TurnPassive.OnTriggerPassiveEffList(turnFight, buffObj, triggerWay, tagObj, effInfoList, connSkill=useSkill, connBuff=buff)
         
     # 有击杀时
     for index, tagObj in enumerate(killObjList):
@@ -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,8 +2129,10 @@
         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()
         if isEx:
@@ -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():
@@ -2471,7 +2481,9 @@
             shieldHurtValue -= decShieldValue # 承伤值
             if decShieldValue >= buffValue:
                 GameWorld.DebugLogEx("        删除盾: buffID=%s,剩余盾伤=%s", buffID, shieldHurtValue)
-                TurnBuff.DoBuffDel(turnFight, defObj, buff, relatedSkill=curSkill, afterLogic=True, tagObj=atkObj)
+                #盾破时buff会被删除,导致绑定在该buff上的被动效果同步被清除,后续就无法触发盾破后被动,固先取出来
+                effInfoList = defObj.GetPassiveEffManager().GetPassiveEffByTrigger(ChConfig.TriggerWay_ShieldBroken, connSkillTypeID=buffSkillID)
+                TurnBuff.DoBuffDel(turnFight, defObj, buff, relatedSkill=curSkill, afterLogic=True, tagObj=atkObj, afterTriggerData=[ChConfig.TriggerWay_ShieldBroken, effInfoList])
             else:
                 updShieldValue = buffValue - decShieldValue
                 GameWorld.DebugLogEx("        更新盾: updShieldValue=%s,剩余盾伤=%s", updShieldValue, shieldHurtValue)
@@ -2492,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):
     '''计算反弹反弹伤害

--
Gitblit v1.8.0