From c215892f0f794eb86a641e56a99d535faeab3a7f Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 20 十一月 2025 18:49:05 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(赵云所有技能;增加效果5023 6019 6020;5011效果增加可验证战斗类型;5022效果支持多属性;战斗增减伤改名;增加触发方式28~39)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6019.py |   29 +++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6020.py |   32 ++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5023.py |   45 +++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5022.py |   10 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py                       |   11 ++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5011.py |    9 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py                     |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py                      |   90 ++++++++++++++----
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                             |   22 +++
 9 files changed, 221 insertions(+), 29 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
index 1128578..5e7ae6c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
@@ -383,6 +383,7 @@
     
     def GetSkillData(self): return self._skillData
     def GetSkillID(self): return self._skillData.GetSkillID()
+    def GetCurBuffState(self): return self._skillData.GetCurBuffState()
     def GetAddTiming(self): return self._addTiming
     def SetAddTiming(self, addTiming):
         self._addTiming = addTiming
@@ -416,6 +417,7 @@
     def GetEffectValueEx(self, effID): return self._effExDict.get(effID, 0)
     def ResetEffectValueEx(self): self._effExDict = {}
     def AddEffectValueEx(self, effID, valueEx): self._effExDict[effID] = self._effExDict.get(effID, 0) + valueEx
+    def GetEffectExDict(self): return self._effExDict
     def GetHaloObjIDList(self): return self._haloObjIDList
     def SetHaloObjIDList(self, haloObjIDList): self._haloObjIDList = haloObjIDList
     def AddHaloObjID(self, objID):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index a4937b9..0bf8cb5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -160,8 +160,8 @@
 AttrID_WuFinalDamPerDef,                    # 对吴减伤 62
 AttrID_QunFinalDamPer,                      # 对群增伤 63
 AttrID_QunFinalDamPerDef,                   # 对群减伤 64
-AttrID_SkillPer,                            # 技能增伤 65
-AttrID_SkillPerDef,                         # 技能减伤 66
+AttrID_BatDamPer,                           # 战斗增伤 65
+AttrID_BatDamPerDef,                        # 战斗减伤 66
 AttrID_PursueDamPer,                        # 追击增伤 67
 AttrID_PursueDamPerDef,                     # 追击减伤 68
 AttrID_ComboDamPer,                         # 连击增伤 69
@@ -181,7 +181,7 @@
                         AttrID_ShieldPer, AttrID_ShieldPerDef, AttrID_DOTPer, AttrID_DOTPerDef,
                         AttrID_WeiFinalDamPer, AttrID_WeiFinalDamPerDef, AttrID_ShuFinalDamPer, AttrID_ShuFinalDamPerDef,
                         AttrID_WuFinalDamPer, AttrID_WuFinalDamPerDef, AttrID_QunFinalDamPer, AttrID_QunFinalDamPerDef,
-                        AttrID_SkillPer, AttrID_SkillPerDef, AttrID_PursueDamPer, AttrID_PursueDamPerDef,
+                        AttrID_BatDamPer, AttrID_BatDamPerDef, AttrID_PursueDamPer, AttrID_PursueDamPerDef,
                         AttrID_ComboDamPer, AttrID_ComboDamPerDef, AttrID_XPRecoverPer, AttrID_PVPDamPer, AttrID_PVPDamPerDef
                         ]
 
@@ -3973,7 +3973,19 @@
 TriggerWay_BeDOTHurt, # 受到持续伤害 25
 TriggerWay_EnemyDie, # 敌方单位死亡时 26
 TriggerWay_FriendDie, # 己方单位死亡时 27
-) = range(1, 1 + 27)
+TriggerWay_Combo, # 连击时 28
+TriggerWay_Pursue, # 追击时 29
+TriggerWay_Stun, # 击晕时 30
+TriggerWay_SuperHit, # 暴击时 31
+TriggerWay_Parry, # 格挡时 32
+TriggerWay_Miss, # 闪避时 33
+TriggerWay_AtkBack, # 反击时 34
+TriggerWay_BeStun, # 被击晕时 35
+TriggerWay_BeSuperHit, # 被暴击时 36
+TriggerWay_BeParry, # 被格挡时 37
+TriggerWay_BeMiss, # 被闪避时 38
+TriggerWay_BeAtkBack, # 被反击时 39
+) = range(1, 1 + 39)
 
 # 不加载的被动触发方式,一般用于本技能固定触发逻辑用的
 TriggerWayNoLoadList = [TriggerWay_CurSkillEff, TriggerWay_CurSkillEffLst]
@@ -4003,6 +4015,8 @@
 PassiveEff_AddShieldHurtPer = 6016 # 对护盾造成伤害加成
 PassiveEff_SkillInvalid = 6017 # 使技能无效
 PassiveEff_AddAngerSkillPerByXP = 6018 # 增加怒气技能伤害(按消耗怒气值)
+PassiveEff_AddBatDamPerByTagLostHP = 6019 # 战斗增伤(按目标已损失生命)
+PassiveEff_AddSkillPerByBuffState = 6020 # 增加技能系数(验证由buff状态触发的)
 
 # 被动效果ID有触发值时就返回的
 PassiveEffHappenValueList = [PassiveEff_ChangeHurtType, PassiveEff_ImmuneControlBuff, PassiveEff_MustSuperHit, PassiveEff_SkillInvalid]
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5011.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5011.py
index a93acd6..30bcb0e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5011.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5011.py
@@ -17,10 +17,12 @@
 
 import TurnSkill
 import IpyGameDataPY
+import GameWorld
 
 def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs):
     skillID = curEffect.GetEffectValue(0) # 技能ID,为0时释放本技能
     checkHPInfo = curEffect.GetEffectValue(1) # 可附加验证生命值[计算方式, 百分比]
+    checkBatType = curEffect.GetEffectValue(2) # 验证攻击类型 0-不验证;1-连击;2-追击;3-反击
     if checkHPInfo:
         checkType, checkHPPer = checkHPInfo
         nowPer = batObj.GetHP() / float(batObj.GetMaxHP()) * 100
@@ -33,6 +35,13 @@
             if nowPer < checkHPPer:
                 return
             
+    if checkBatType:
+        if not connSkill:
+            return
+        if connSkill.GetBatType() != checkBatType:
+            GameWorld.DebugLog("5011效果非该战斗类型不触发: checkBatType=%s,skillBatType=%s" % (checkBatType, connSkill.GetBatType()))
+            return
+        
     if not skillID:
         passiveSkill = effSkill
     else:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5022.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5022.py
index 9a62939..dc46601 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5022.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5022.py
@@ -18,8 +18,10 @@
 import GameWorld
 
 def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs):
-    attrID = curEffect.GetEffectValue(0)
-    attrValue = curEffect.GetEffectValue(1)
-    GameWorld.DebugLog("额外增加buff效果ID/属性ID值: attrID=%s,attrValue=%s" % (attrID, attrValue))
-    connBuff.AddEffectValueEx(attrID, attrValue)
+    effValues = curEffect.GetEffectValues()
+    for index in range(0, len(effValues), 2):
+        attrID = effValues[index]
+        attrValue = effValues[index + 1] if len(effValues) > index + 1 else 0
+        GameWorld.DebugLog("额外增加buff效果ID/属性ID值: attrID=%s,attrValue=%s" % (attrID, attrValue))
+        connBuff.AddEffectValueEx(attrID, attrValue)
     return True
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5023.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5023.py
new file mode 100644
index 0000000..aef81a4
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5023.py
@@ -0,0 +1,45 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Skill.PassiveTrigger.PassiveEff_5023
+#
+# @todo:消耗某个buff状态层级
+# @author hxp
+# @date 2025-11-20
+# @version 1.0
+#
+# 详细描述: 消耗某个buff状态层级
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-11-20 19:00"""
+#-------------------------------------------------------------------------------
+
+import TurnBuff
+import GameWorld
+import TurnSkill
+
+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
+    if not buffState or not needLayers:
+        return
+    
+    curBuff = batObj.GetBuffManager().FindBuffByState(buffState)
+    if not curBuff:
+        return
+    buffLayers = curBuff.GetLayer()
+    if buffLayers < needLayers:
+        GameWorld.DebugLog("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:
+        TurnBuff.DoBuffLayerChange(turnFight, batObj, curBuff, updLayer, connSkill)
+        
+    if exSkillID:
+        TurnSkill.OnUsePassiveSkill(turnFight, batObj, tagObj, exSkillID, connBuff=connBuff)
+            
+    return True
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6019.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6019.py
new file mode 100644
index 0000000..c571332
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6019.py
@@ -0,0 +1,29 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Skill.PassiveTrigger.PassiveEff_6019
+#
+# @todo:战斗增伤(按目标已损失生命)
+# @author hxp
+# @date 2025-11-20
+# @version 1.0
+#
+# 详细描述: 战斗增伤(按目标已损失生命)
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-11-20 19:00"""
+#-------------------------------------------------------------------------------
+
+import GameWorld
+
+def GetHappenValue(attacker, defender, curEffect, effSkill, effBuff, connSkill, **skillkwargs):
+    perLostPer = curEffect.GetEffectValue(0) #每损失百分比
+    perAddPer = curEffect.GetEffectValue(1) #增伤万分比
+    curHP = defender.GetHP()
+    maxHP = defender.GetMaxHP()
+    lostHP = max(0, maxHP - curHP)
+    lostPer = lostHP / float(maxHP) * 100
+    addDamPer = lostPer / perLostPer * perAddPer
+    GameWorld.DebugLog("按目标已损失生命: defID=%s,lostHP=%s,lostPer=%s,addDamPer=%s,HP:%s/%s" % (defender.GetID(), lostHP, lostPer, addDamPer, curHP, maxHP))
+    return addDamPer
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6020.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6020.py
new file mode 100644
index 0000000..c2fe235
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6020.py
@@ -0,0 +1,32 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Skill.PassiveTrigger.PassiveEff_6020
+#
+# @todo:增加技能系数(验证由buff状态触发的)
+# @author hxp
+# @date 2025-11-20
+# @version 1.0
+#
+# 详细描述: 增加技能系数(验证由buff状态触发的)
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-11-20 19:00"""
+#-------------------------------------------------------------------------------
+
+import GameWorld
+
+def GetHappenValue(attacker, defender, curEffect, effSkill, effBuff, connSkill, **skillkwargs):
+    addPer = curEffect.GetEffectValue(0) # 增加的万分比
+    byBuffState = curEffect.GetEffectValue(1) # 验证由什么buff状态触发的
+    if byBuffState and connSkill:
+        byBuff = connSkill.GetByBuff()
+        if not byBuff:
+            #GameWorld.DebugLog("非由buff触发的")
+            return
+        if byBuff.GetCurBuffState() != byBuffState:
+            GameWorld.DebugLog("非由该buff状态触发的! buffState=%s != %s" % (byBuff.GetCurBuffState(), byBuffState))
+            return
+    GameWorld.DebugLog("增加技能系数(验证由buff状态触发的): addPer=%s,byBuffState=%s" % (addPer, byBuffState))
+    return addPer
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
index 17425ce..38074fd 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
@@ -475,6 +475,15 @@
         layer = max(1, buff.GetLayer())
         skillData = buff.GetSkillData()
         
+        effExDict = buff.GetEffectExDict()
+        for effID, effValueEx in effExDict.items():
+            if effID not in ChConfig.AttrIDList:
+                continue
+            attrID = effID
+            attrValue = effValueEx * layer
+            buffsAttrDict[attrID] = buffsAttrDict.get(attrID, 0) + attrValue
+            skbufAttrDict[attrID] = skbufAttrDict.get(attrID, 0) + attrValue
+            
         for eIndex in range(skillData.GetEffectCount()):
             effect = skillData.GetEffect(eIndex)
             effID = effect.GetEffectID()
@@ -484,7 +493,7 @@
                 # buff时,不配默认有效,或仅buff有效
                 continue
             attrID = effID
-            attrValue = (effect.GetEffectValue(0) + buff.GetEffectValueEx(attrID)) * layer
+            attrValue = effect.GetEffectValue(0) * layer
             calcType = effect.GetEffectValue(1)
             if calcType == 2: # 减少,其他默认增加
                 attrValue = -attrValue
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 63485a9..c505673 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -1207,8 +1207,9 @@
         
     # 统计伤血,可能单个技能对同一目标造成多次伤害
     totalHurtValue = 0
-    isSuperHit, isStun, isSuckHP = False, False, False
+    isSuckHP = False
     missObjIDList, immuneObjIDList = [], [] # 闪避、免疫对象ID列表
+    stunObjIDList, superHitObjIDList, parryObjIDList = [], [], []
     beHurtObjIDList = [] # 受伤的对象ID列表
     for hurtObj in useSkill.GetHurtObjListAll():
         hurtObjID = hurtObj.GetObjID()
@@ -1236,13 +1237,17 @@
                 
         if hurtObj.HaveHurtType(ChConfig.HurtType_Parry):
             DoHeroSpecialty(turnFight, tagObj, ChConfig.HeroSpecialty_Parry, relatedSkillID)
-            
+            if hurtObjID not in parryObjIDList:
+                parryObjIDList.append(hurtObjID)
+                
         if hurtObj.HaveHurtType(ChConfig.HurtType_SuperHit):
-            isSuperHit = True
-            
+            if hurtObjID not in superHitObjIDList:
+                superHitObjIDList.append(hurtObjID)
+                
         if hurtObj.HaveHurtType(ChConfig.HurtType_Stun):
-            isStun = True
-            
+            if hurtObjID not in stunObjIDList:
+                stunObjIDList.append(hurtObjID)
+                
         if hurtObj.GetSuckHP() > 0:
             isSuckHP = True
             
@@ -1251,9 +1256,9 @@
         curObj.SetLastHurtValue(totalHurtValue)
         
     # 群攻只触发一次特长
-    if isSuperHit:
+    if superHitObjIDList:
         DoHeroSpecialty(turnFight, curObj, ChConfig.HeroSpecialty_SuperHit, relatedSkillID)
-    if isStun:
+    if stunObjIDList:
         DoHeroSpecialty(turnFight, curObj, ChConfig.HeroSpecialty_Stun, relatedSkillID)
     if isSuckHP:
         DoHeroSpecialty(turnFight, curObj, ChConfig.HeroSpecialty_SuckHP, relatedSkillID)
@@ -1314,31 +1319,64 @@
         if tagID in beHurtObjIDList:
             TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeHurt, curObj, connSkill=useSkill)
             
+        #  受到任意效果时(除直接攻击外的任意效果,如buff、dot、治疗、额外怒技)
+        if not isAttackDirect:
+            TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeAnyEffect, curObj, connSkill=useSkill)
+            
+        # 额外目标不再触发以下内容
+        if isExObj:
+            continue
+        
         # 直接攻击
-        if isAttackDirect and not isExObj:
+        if isAttackDirect:
             if not triggerOne:
                 TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_AttackOverDirectOne, tagObj, connSkill=useSkill)
             TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_AttackOverDirect, tagObj, connSkill=useSkill)
             TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeAttackedDirect, curObj, connSkill=useSkill)
         # 持续伤害
         elif not isAttackDirect:
-            TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeAnyEffect, curObj, connSkill=useSkill)
             # 受到持续伤害
-            if tagID in beHurtObjIDList and not isExObj:
+            if tagID in beHurtObjIDList:
                 TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeDOTHurt, curObj, connSkill=useSkill)
                 
         # 使用技能后
-        if isUseSkill and not isExObj:
+        if isUseSkill:
             if not triggerOne:
                 TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_UseSkillOverOne, tagObj, connSkill=useSkill)
             TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_UseSkillOver, tagObj, connSkill=useSkill)
             
+        # 击晕
+        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 tagID in superHitObjIDList:
+            TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_SuperHit, tagObj, connSkill=useSkill)
+            TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeSuperHit, curObj, connSkill=useSkill)
+            
+        # 格挡
+        if tagID in missObjIDList:
+            TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_BeParry, tagObj, connSkill=useSkill)
+            TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_Parry, curObj, connSkill=useSkill)
+            
+        # 闪避
+        if tagID in missObjIDList:
+            TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_BeMiss, tagObj, connSkill=useSkill)
+            TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_Miss, curObj, connSkill=useSkill)
+            
         # 连击
-        if batType == ChConfig.TurnBattleType_Combo and not isExObj:
+        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)
         # 追击
-        elif batType == ChConfig.TurnBattleType_Pursue and not isExObj:
+        elif batType == ChConfig.TurnBattleType_Pursue:
+            TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_Pursue, tagObj, connSkill=useSkill)
             TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BePursue, curObj, connSkill=useSkill)
+        # 反击
+        elif batType == ChConfig.TurnBattleType_AtkBack:
+            TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_AtkBack, tagObj, connSkill=useSkill)
+            TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeAtkBack, curObj, connSkill=useSkill)
             
         triggerOne = True # 设置已经触发过一次
         
@@ -1557,7 +1595,7 @@
 
 def OnUsePassiveSkill(turnFight, batObj, tagObj, passiveSkill, connSkill=None, effSkillID=0, effectID=0, connBuff=None):
     '''被动触发使用技能
-    @param passiveSkill: 释放的被动技能
+    @param passiveSkill: 释放的被动技能 或 技能ID
     @param connSkill: 由什么技能引起的
     @param effSkillID: 被动效果所属的技能ID
     @param effectID: 被动效果ID
@@ -1565,6 +1603,14 @@
     '''
     if not passiveSkill:
         return
+    if isinstance(passiveSkill, int):
+        passiveSkillID = passiveSkill
+        passiveSkill = batObj.GetSkillManager().FindSkillByID(passiveSkillID)
+        if not passiveSkill:
+            passiveSkill = IpyGameDataPY.GetIpyGameData("Skill", passiveSkillID)
+        if not passiveSkill:
+            return
+        
     bySkillID = 0
     if connSkill:
         bySkillID = connSkill.GetSkillID()
@@ -1710,8 +1756,10 @@
         dDOTPerDef = defObj.GetBatAttrValue(ChConfig.AttrID_DOTPerDef)
         GameWorld.DebugLog("aDOTPer=%s,dDOTPerDef=%s" % (aDOTPer, dDOTPerDef))
         
-    aAddSkillPer = 0 # 技能增伤
-    aAddSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.AttrID_SkillPer, curSkill)
+    #aAddSkillPer = 0 # 技能增伤
+    aBatDamPer, dBatDamPerDef = 0, 0 # 战斗增减伤
+    aBatDamPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.AttrID_BatDamPer, curSkill)
+    aBatDamPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddBatDamPerByTagLostHP, curSkill)
     
     # 物法增减伤
     if pmType == IPY_GameWorld.ghtMag: # 法伤
@@ -1756,7 +1804,8 @@
     dAngerSkillPerDef /= 10000.0
     aDOTPer /= 10000.0
     dDOTPerDef /= 10000.0
-    aAddSkillPer /= 10000.0
+    aBatDamPer /= 10000.0
+    dBatDamPerDef /= 10000.0
     aPMDamPer /= 10000.0
     dPMDamPerDef /= 10000.0
     aSuperDamPer /= 10000.0
@@ -1774,8 +1823,8 @@
     
     if calcType != ChConfig.Def_Calc_Attack:
         aAtk = GetCalcBaseValue(calcType, atkObj, defObj, curSkill)
-    GameWorld.DebugLog("伤血计算: atkID=%s,defID=%s,skillID=%s,atkSkillPer=%s,calcType=%s,aAtk=%s,dDef=%s,dHP=%s/%s,hurtTypes=%s,aAddSkillPer=%s,aFinalDamPer=%s" 
-                       % (atkID, defID, skillID, atkSkillPer, calcType, aAtk, dDef, dHP, dMaxHP, hurtTypes, aAddSkillPer, aFinalDamPer))
+    GameWorld.DebugLog("伤血计算: atkID=%s,defID=%s,skillID=%s,atkSkillPer=%s,calcType=%s,aAtk=%s,dDef=%s,dHP=%s/%s,hurtTypes=%s,aBatDamPer=%s,aFinalDamPer=%s" 
+                       % (atkID, defID, skillID, atkSkillPer, calcType, aAtk, dDef, dHP, dMaxHP, hurtTypes, aBatDamPer, aFinalDamPer))
     GameWorld.DebugLog("aCountry=%s,dCountry=%s,aCountryDamPer=%s,dCountryDamPerDef=%s" % (aCountry, dCountry, aCountryDamPer, dCountryDamPerDef))
     
     if isTurnNormalSkill:
@@ -1832,6 +1881,7 @@
     atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPerByJob, curSkill)
     atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPerByBuffLayer, curSkill)
     atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPerByDeadTeammate, curSkill)
+    atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPerByBuffState, curSkill)
     return atkSkillPer
 
 def CanSuperHit(turnFight, atkObj, defObj, curSkill):

--
Gitblit v1.8.0