From 986730e2725816f2eb9ad6fd645c513de931aa41 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 21 一月 2026 11:52:04 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(命格技能七杀、皇灵、贪狼、司命、破军、天机;增加绝对闪避及抗性属性 81 82;格挡buff支持层级;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py |   62 ++++++++++++++++++++++--------
 1 files changed, 45 insertions(+), 17 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 47f606b..3636b76 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -163,8 +163,8 @@
     angerOverflow = curBatObj.GetAngerOverflow()
     
     bySkillID = bySkill.GetSkillID() if bySkill else 0
-    GameWorld.DebugLogEx("◆使用技能: curID=%s,skillID=%s,tagCnt=%s,batType=%s,bySkillID=%s,HP:%s/%s,angerOverflow=%s,curXP=%s,oneActionUseCnt=%s", 
-                         objID, skillID, len(tagObjList), batType, bySkillID, curBatObj.GetHP(), curBatObj.GetMaxHP(), angerOverflow, curXP, oneActionUseCnt)
+    GameWorld.DebugLogEx("◆使用技能: skillID=%s,curID=%s,tagCnt=%s,batType=%s,bySkillID=%s,HP:%s/%s,angerOverflow=%s,curXP=%s,oneActionUseCnt=%s", 
+                         skillID, objID, len(tagObjList), batType, bySkillID, curBatObj.GetHP(), curBatObj.GetMaxHP(), angerOverflow, curXP, oneActionUseCnt)
     # 以下为技能可以使用的处理,之后的逻辑默认技能使用成功
     
     if isinstance(useSkill, IpyGameDataPY.IPY_Skill):
@@ -1647,7 +1647,11 @@
         if tagID in missObjIDList:
             TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_BeMiss, tagObj, connSkill=useSkill)
             TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_Miss, curObj, connSkill=useSkill)
-            
+            tagMGObj = tagObj.GetTFBatLineup().getMinggeObj()
+            if tagMGObj and ChConfig.TriggerWay_Miss not in mgTriggerWayList:
+                mgTriggerWayList.append(ChConfig.TriggerWay_Miss)
+                TurnPassive.OnTriggerPassiveEffect(turnFight, tagMGObj, ChConfig.TriggerWay_Miss, curObj, connSkill=useSkill, byBatObj=tagObj)
+                
         # 免疫
         if tagID in immuneObjIDList:
             TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_ImmuneHurt, curObj, connSkill=useSkill)
@@ -1695,7 +1699,10 @@
         if tagID in stunObjIDList:
             TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_Stun, tagObj, connSkill=useSkill)
             TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeStun, curObj, connSkill=useSkill)
-            
+            if curMGObj and ChConfig.TriggerWay_Stun not in mgTriggerWayList:
+                mgTriggerWayList.append(ChConfig.TriggerWay_Stun)
+                TurnPassive.OnTriggerPassiveEffect(turnFight, curMGObj, ChConfig.TriggerWay_Stun, tagObj, connSkill=useSkill, byBatObj=curObj)
+                
         # 控制
         if tagID in beControlledHardDict:
             buff = beControlledHardDict[tagID]
@@ -1715,22 +1722,35 @@
         if tagID in superHitObjIDList:
             TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_SuperHit, tagObj, connSkill=useSkill)
             TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeSuperHit, curObj, connSkill=useSkill)
-            
+            if curMGObj and ChConfig.TriggerWay_SuperHit not in mgTriggerWayList:
+                mgTriggerWayList.append(ChConfig.TriggerWay_SuperHit)
+                TurnPassive.OnTriggerPassiveEffect(turnFight, curMGObj, ChConfig.TriggerWay_SuperHit, tagObj, connSkill=useSkill, byBatObj=curObj)
+                
         # 格挡
         if tagID in parryObjIDList:
             TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_BeParry, tagObj, connSkill=useSkill)
             TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_Parry, curObj, connSkill=useSkill)
-            
+            tagMGObj = tagObj.GetTFBatLineup().getMinggeObj()
+            if tagMGObj and ChConfig.TriggerWay_Parry not in mgTriggerWayList:
+                mgTriggerWayList.append(ChConfig.TriggerWay_Parry)
+                TurnPassive.OnTriggerPassiveEffect(turnFight, tagMGObj, ChConfig.TriggerWay_Parry, curObj, connSkill=useSkill, byBatObj=tagObj)
+                
         # 吸血
         if tagID in suckObjIDList:
             if not triggerOne:
                 TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_SuckHPOne, tagObj, connSkill=useSkill)
             TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeSuckHP, curObj, connSkill=useSkill)
-            
+            if curMGObj and ChConfig.TriggerWay_SuckHPOne not in mgTriggerWayList:
+                mgTriggerWayList.append(ChConfig.TriggerWay_SuckHPOne)
+                TurnPassive.OnTriggerPassiveEffect(turnFight, curMGObj, ChConfig.TriggerWay_SuckHPOne, tagObj, connSkill=useSkill, byBatObj=curObj)
+                
         # 连击
         if batType == ChConfig.TurnBattleType_Combo:
             TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_Combo, tagObj, connSkill=useSkill)
             TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeCombo, curObj, connSkill=useSkill)
+            if curMGObj and ChConfig.TriggerWay_Combo not in mgTriggerWayList:
+                mgTriggerWayList.append(ChConfig.TriggerWay_Combo)
+                TurnPassive.OnTriggerPassiveEffect(turnFight, curMGObj, ChConfig.TriggerWay_Combo, tagObj, connSkill=useSkill, byBatObj=curObj)
         # 追击
         elif batType == ChConfig.TurnBattleType_Pursue:
             TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_Pursue, tagObj, connSkill=useSkill)
@@ -2148,23 +2168,31 @@
     isAngerSkill = SkillCommon.isAngerSkill(curSkill)
     isDot = ("damageoftime" in kwargs)
     
-    mustHit = False # 是否必命中
-    if not isTurnNormalSkill: # 仅普攻判断是否闪避
-        mustHit = True
-        
-    angerOverflow = atkObj.GetAngerOverflow() # 怒气溢出值
-    
-    #命中公式 攻击方类型不同,公式不同
-    if not mustHit and not curSkill.GetEffectByID(ChConfig.SkillEff_MustHit) and not defObj.IsInControlledHard():
+    # 常规闪避 - 仅针对普攻
+    if isTurnNormalSkill and not curSkill.GetEffectByID(ChConfig.SkillEff_MustHit) and not defObj.IsInControlledHard():
         aMissRateDef = atkObj.GetBatAttrValue(ChConfig.AttrID_MissRateDef) #atkObj.GetHit() # 抗闪避率 - 命中
         dMissRate = defObj.GetBatAttrValue(ChConfig.AttrID_MissRate) # 闪避率
         missNum = curSkill.GetTagMissNum(defID)
         missRate = eval(IpyGameDataPY.GetFuncCompileCfg("MissCfg", 1))
         if GameWorld.CanHappen(missRate):
             GameWorld.DebugLogEx("闪避了! missRate=%s,dMissRate=%s,aMissRateDef=%s,missNum=%s", missRate, dMissRate, aMissRateDef, missNum)
-            curSkill.SetTagMissNum(defID, missRate + 1)
+            curSkill.SetTagMissNum(defID, missNum + 1)
             return 0, pow(2, ChConfig.HurtAtkType_Miss)
         
+    # 绝对闪避 - 除dot外的所有技能,因为绝对闪避不触发常规闪避的被动,所以在常规闪避后判断
+    if not isDot:
+        aMissRateDef = atkObj.GetBatAttrValue(ChConfig.AttrID_AbsoluteMissRateDef)
+        dMissRate = defObj.GetBatAttrValue(ChConfig.AttrID_AbsoluteMissRate)
+        missNum = curSkill.GetTagMissNum(defID)
+        if dMissRate > 0:
+            missRate = eval(IpyGameDataPY.GetFuncCompileCfg("MissCfg", 1))
+            if GameWorld.CanHappen(missRate):
+                GameWorld.DebugLogEx("绝对闪避了! missRate=%s,dAbsoluteMissRate=%s,aAbsoluteMissRateDef=%s,missNum=%s", missRate, dMissRate, aMissRateDef, missNum)
+                curSkill.SetTagMissNum(defID, missNum + 1)
+                return 0, pow(2, ChConfig.HurtAtkType_AbsoluteMiss)
+            
+    angerOverflow = atkObj.GetAngerOverflow() # 怒气溢出值
+    
     hurtTypes = pow(2, ChConfig.HurtAtkType_Hurt)
     
     isSuperHit, isParry, isStun = False, False, False
@@ -2895,7 +2923,7 @@
     damBackPer = 0
     buffMgr = defObj.GetBuffManager()
     for buff in buffMgr.FindBuffListByState(ChConfig.BatObjState_DamBackShield):
-        damBackPer += buff.GetValue1()
+        damBackPer += buff.GetValue1() * max(1, buff.GetLayer())
         connSkillTypeID = buff.GetSkillTypeID()
         damBackPer += TurnPassive.GetTriggerEffectValue(turnFight, defObj, atkObj, ChConfig.PassiveEff_AddDamBackPerByBuffLayer, connSkillTypeID=connSkillTypeID)
         

--
Gitblit v1.8.0