From 0c96af08f55d05ab40eae9f940467dd8eafae44c Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 16 九月 2025 14:07:53 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(增加属性ID技能增伤65、技能减伤66;曹轶技能;被动触发增加属性支持;)

---
 PySysDB/生成IpyGameDataPY/IpyGameDataPYTemp.py                                                                |    4 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py                       |    4 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py                     |   32 ++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py                        |    4 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py                    |  150 +++++++++++-------------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py                      |   73 +++++------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                             |   14 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_Attr.py |   30 +++++
 8 files changed, 176 insertions(+), 135 deletions(-)

diff --git "a/PySysDB/\347\224\237\346\210\220IpyGameDataPY/IpyGameDataPYTemp.py" "b/PySysDB/\347\224\237\346\210\220IpyGameDataPY/IpyGameDataPYTemp.py"
index 185d462..9d5abc0 100644
--- "a/PySysDB/\347\224\237\346\210\220IpyGameDataPY/IpyGameDataPYTemp.py"
+++ "b/PySysDB/\347\224\237\346\210\220IpyGameDataPY/IpyGameDataPYTemp.py"
@@ -291,7 +291,7 @@
     
     def __StrToList(self, strValue):
         setList = []
-        if ("[" in strValue and "]" in strValue) or ("(" in strValue and ")" in strValue):
+        if (strValue.startswith("[") and strValue.endswith("]")) or (strValue.startswith("(") and strValue.endswith(")")):
             setList = eval(strValue)
         elif strValue in ["0", "-", ""]:
             pass
@@ -301,6 +301,8 @@
             for value in strValue.split(ChConfig.Def_Str_Montant):
                 if value.isdigit():
                     value = int(value)
+                elif (value.startswith("[") and value.endswith("]")) or (value.startswith("(") and value.endswith(")")):
+                    value = eval(value)
                 setList.append(value)
             if setList:
                 setList = tuple(setList)
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 8b7a961..e49c8f3 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
@@ -45,7 +45,7 @@
         effList = []
         
         # 优先取关联技能的
-        if connSkillTypeID and connSkillTypeID not in [ChConfig.TriggerSrc_Skill, ChConfig.TriggerSrc_Buff]:
+        if connSkillTypeID and connSkillTypeID not in [ChConfig.TriggerSrc_Skill, ChConfig.TriggerSrc_Buff, ChConfig.TriggerSrc_SkillSelf, ChConfig.TriggerSrc_BuffSelf]:
             # 技能
             key = (triggerWay, connSkillTypeID)
             if key in self._AffectSkillDict:
@@ -99,13 +99,19 @@
             return
         if triggerWay == ChConfig.TriggerWay_CurSkillEff:
             return
-        if triggerSrc == ChConfig.TriggerSrc_Buff:
+        if triggerSrc in [ChConfig.TriggerSrc_Buff, ChConfig.TriggerSrc_BuffSelf]:
             # buff有效的不加进来
             return
         
         skillID = curSkill.GetSkillID()
         effectID = effect.GetEffectID()
         
+        if triggerWay == ChConfig.TriggerWay_CalcEffValue:
+            triggerWay = "%s_%s" % (triggerWay, effectID)
+            
+        if triggerSrc == ChConfig.TriggerSrc_SkillSelf:
+            triggerSrc = curSkill.GetSkillTypeID()
+            
         key = (triggerWay, triggerSrc)
         if key not in self._AffectSkillDict:
             self._AffectSkillDict[key] = {}
@@ -143,13 +149,19 @@
             return
         if triggerWay == ChConfig.TriggerWay_CurSkillEff:
             return
-        if triggerSrc == ChConfig.TriggerSrc_Skill:
+        if triggerSrc in [ChConfig.TriggerSrc_Skill, ChConfig.TriggerSrc_SkillSelf]:
             # 技能有效的不加进来
             return
         
         buffID = buff.GetBuffID()
         effectID = effect.GetEffectID()
         
+        if triggerWay == ChConfig.TriggerWay_CalcEffValue:
+            triggerWay = "%s_%s" % (triggerWay, effectID)
+            
+        if triggerSrc == ChConfig.TriggerSrc_BuffSelf:
+            triggerSrc = skillData.GetSkillTypeID()
+            
         key = (triggerWay, triggerSrc)
         if key not in self._AffectBuffDict:
             self._AffectBuffDict[key] = {}
@@ -720,8 +732,20 @@
         #    return False
         return True
     
-    def IsInState(self, state):
+    def CheckInState(self, checkInState):
         ## 是否处于某种状态下
+        if isinstance(checkInState, int):
+            checkInStateList = [checkInState]
+        elif isinstance(checkInState, list) or isinstance(checkInState, tuple):
+            checkInStateList = checkInState
+        else:
+            return False
+        for state in checkInStateList:
+            if self._buffMgr.IsInBuffState(state):
+                return True
+        return False
+    def IsInState(self, state):
+        ## 是否处于指定状态下
         return self._buffMgr.IsInBuffState(state)
     
     def IsInControlled(self):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index fc0c34a..98578b9 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -160,7 +160,9 @@
 AttrID_WuFinalDamPerDef,                    # 对吴减伤 62
 AttrID_QunFinalDamPer,                      # 对群增伤 63
 AttrID_QunFinalDamPerDef,                   # 对群减伤 64
-) = range(1, 1 + 64)
+AttrID_SkillPer,                            # 技能增伤 65
+AttrID_SkillPerDef,                         # 技能减伤 66
+) = range(1, 1 + 66)
 
 # 需要计算的武将战斗属性ID列表
 CalcBattleAttrIDList = [AttrID_Atk, AttrID_Def, AttrID_MaxHP, AttrID_StunRate, AttrID_StunRateDef, 
@@ -4270,8 +4272,8 @@
 TriggerWay_HeroTurnEnd, # 武将回合开始时    5
 TriggerWay_HeroActionStart, # 武将行动前    6
 TriggerWay_HeroActionEnd, # 武将行动后    7
-TriggerWay_CalcTagInState, # 攻击计算时对方处于xx状态时(参数:状态1|2|...)一般用于攻击时属性计算  8
-TriggerWay_AttackOverTagInState, # 攻击计算后对方处于xx状态时(参数:状态1|2|...)一般用于攻击后触发效果  9
+TriggerWay_CalcEffValue, # 统计计算效果值时  8
+TriggerWay_9, # 9
 TriggerWay_AttackOverDirect, # 直接攻击后 (非buff攻击)10
 TriggerWay_BeAttackedDirect, # 受到直接攻击时 (非buff攻击)11
 TriggerWay_ShieldBroken, # 承伤盾被击破时 12
@@ -4279,8 +4281,10 @@
 ) = range(1, 1 + 13)
 
 # 被动触发有效来源
-TriggerSrc_Skill = 1
-TriggerSrc_Buff = 2
+TriggerSrc_Skill = 1    # 身上技能有效
+TriggerSrc_Buff = 2     # 身上buff有效
+TriggerSrc_SkillSelf = 3    # 本技能有效
+TriggerSrc_BuffSelf = 4     # 本buff有效
 
 (
 TriggerType_BeSuperHit, # 被暴击触发技能 1
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index ac11826..f345268 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -6915,7 +6915,7 @@
     
     def __StrToList(self, strValue):
         setList = []
-        if ("[" in strValue and "]" in strValue) or ("(" in strValue and ")" in strValue):
+        if (strValue.startswith("[") and strValue.endswith("]")) or (strValue.startswith("(") and strValue.endswith(")")):
             setList = eval(strValue)
         elif strValue in ["0", "-", ""]:
             pass
@@ -6925,6 +6925,8 @@
             for value in strValue.split(ChConfig.Def_Str_Montant):
                 if value.isdigit():
                     value = int(value)
+                elif (value.startswith("[") and value.endswith("]")) or (value.startswith("(") and value.endswith(")")):
+                    value = eval(value)
                 setList.append(value)
             if setList:
                 setList = tuple(setList)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_Attr.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_Attr.py
new file mode 100644
index 0000000..2cdd501
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_Attr.py
@@ -0,0 +1,30 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Skill.PassiveTrigger.PassiveEff_Attr
+#
+# @todo:被动触发属性
+# @author hxp
+# @date 2025-09-16
+# @version 1.0
+#
+# 详细描述: 被动触发属性
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-09-16 14:30"""
+#-------------------------------------------------------------------------------
+
+def GetHappenValue(attacker, defender, curEffect, effSkill, **skillkwargs):
+    
+    checkInStateList = curEffect.GetEffectValue(2)
+    if checkInStateList:
+        if not defender.CheckInState(checkInStateList):
+            return 0
+        
+    attrValue = curEffect.GetEffectValue(0)
+    calcType = curEffect.GetEffectValue(1)
+    if calcType == 2: # 减少,其他默认增加
+        attrValue = -attrValue
+        
+    return attrValue
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 4d70727..fdf6480 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
@@ -179,7 +179,7 @@
             continue
         
         if curEffect.GetTriggerWay():
-            if curEffect.GetTriggerSrc() != ChConfig.TriggerSrc_Skill:
+            if curEffect.GetTriggerSrc() not in [ChConfig.TriggerSrc_Skill, ChConfig.TriggerSrc_SkillSelf]:
                 passiveEffMgr.AddBuffPassiveEffect(addBuff, buffSkill, curEffect)
                 
         elif effectID in ChConfig.AttrIDList:
@@ -240,7 +240,7 @@
             continue
         
         if curEffect.GetTriggerWay():
-            if curEffect.GetTriggerSrc() != ChConfig.TriggerSrc_Skill:
+            if curEffect.GetTriggerSrc() not in [ChConfig.TriggerSrc_Skill, ChConfig.TriggerSrc_SkillSelf]:
                 haveBuffPassiveEff = True
                 
         elif effectID in ChConfig.AttrIDList:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
index 03f9397..9891021 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
@@ -106,86 +106,74 @@
     callFunc(turnFight, batObj, tagObj, effBuff, curEffect, connSkill)
     return
 
-def GetTriggerPassiveValue(batObj, triggerType, tagObj=None, useSkill=None):
+def GetTriggerEffectValue(turnFight, atkObj, defObj, calcEffID, connSkill=None):
     ''' 获取触发被动的值,一般用于某种条件下才会产生的值,如xx情况下属性变化 或 xx情况下是否发生什么
-    @return: 触发的值,0-没有触发或本身触发的值为0;大于0-触发的具体值
+    @param calcEffID: 需要统计的效果ID,可以是属性ID或者其他自定义效果ID
+    @return: 触发的值,0-没有触发或本身触发的值为0;非0-触发的具体值
     '''
-    return 0
-#    attacker = FindRealAttacker(attacker)
-#    if not attacker:
-#        return 0
-#    
-#    stopPassiveSkill = False   # 被动技能不能再触发被动技能,但可以触发天赋技能
-#    if useSkill and SkillCommon.isPassiveSkill(useSkill) and isStopPassiveSkill:
-#        #GameWorld.DebugLog("被动技能不能再次触发被动技能")
-#        #return 0
-#        if not PassPassiveLimit(useSkill):
-#            stopPassiveSkill = True
-#
-#
-#    passiveEff = GetPassiveEffManager().GetPassiveEff(attacker)
-#    if not passiveEff:
-#        return 0
-#    buffDict = passiveEff.GetBuffsByTriggerType(triggerType)
-#    if not buffDict:
-#        return 0
-#    
-#    # 当前战斗关系 pvp pve
-#    battleRelationType = AttackCommon.GetBattleRelationType(attacker, defender)
-#    if not AttackCommon.CheckBattleRelationType(attacker, defender, useSkill, battleRelationType):
-#        return 0
-#    
-#    useSkillID = useSkill.GetSkillID() if useSkill else 0
-#    #tick = GameWorld.GetGameWorld().GetTick()
-#    curValue = 0
-#    
-#    for skillID, effectList in buffDict.items():
-#        if skillID == useSkillID:
-#            continue
-#        curSkill = GameWorld.GetGameData().GetSkillBySkillID(skillID)
-#        if not curSkill:
-#            continue
-#        
-#        if not IsValidPassiveSkill(curSkill):
-#            continue
-#        
-#        triggerCount = 0 # 成功触发次数
-#        for effectInfo in effectList:
-#            if stopPassiveSkill and curSkill.GetFuncType() != ChConfig.Def_SkillFuncType_GiftSkill:
-#                # 只有天赋才可以再次被触发
-#                continue 
-#            passiveEffect = effectInfo[0]
-#            # 被动触发的技能
-#            pyName = "PassiveBuff_%s"%passiveEffect.GetEffectID()
-#            
-#            callFunc = GameWorld.GetExecFunc(PassiveBuff, "%s.%s" % (pyName, "CheckCanHappen"))
-#            if not callFunc:
-#                continue
-#            
-#            # 条件不满足
-#            if not callFunc(attacker, defender, passiveEffect, skillID, useSkill=useSkill, ownerID=effectInfo[1], ownerType=effectInfo[2]):
-#                continue
-#            
-#            callFunc = GameWorld.GetExecFunc(PassiveBuff, "%s.%s" % (pyName, "GetValue"))
-#            if callFunc is None:
-#                continue
-#            
-#            # 如被动技能:千幻冥炎真实伤害从2变4倍
-#            #curValue += GetPassiveSkillValueByTriggerType(attacker, defender, curSkill, ChConfig.TriggerType_PassiveBuffValue)
-#            value = callFunc(attacker, defender, passiveEffect)
-#            if triggerType in TriggerValueMaxList:
-#                curValue = max(curValue, value) # 取最大值
-#            elif triggerType in TriggerValueMinList:
-#                if not curValue:
-#                    curValue = value
-#                elif value > 0:
-#                    curValue = min(curValue, value) # 取最小值
-#            else:
-#                curValue += value
-#                
-#            triggerCount += 1
-#            
-#        if triggerCount:
-#            OnTriggerBuffDel(attacker, curSkill, triggerCount)
-#            
-#    return curValue
+    
+    triggerWay = ChConfig.TriggerWay_CalcEffValue
+    passiveEffMgr = atkObj.GetPassiveEffManager()
+    connSkillTypeID = connSkill.GetSkillTypeID() if connSkill else 0
+    effInfoList = passiveEffMgr.GetPassiveEffByTrigger("%s_%s" % (triggerWay, calcEffID), connSkillTypeID)
+    if not effInfoList:
+        return 0
+    
+    curValue = 0
+    skillMgr = atkObj.GetSkillManager()
+    buffMgr = atkObj.GetBuffManager()
+    # [["skill/buff", skillID/buffID, effIDList], ...]
+    tagID = defObj.GetID() if defObj else 0
+    GameWorld.DebugLog("统计被动效果值: calcEffID=%s,objID=%s,tagID=%s,%s" % (calcEffID, atkObj.GetID(), tagID, effInfoList))
+    for effInfo in effInfoList:
+        sign = effInfo[0]
+        if sign == "skill":
+            skillID, effIDList = effInfo[1:]
+            effSkill = skillMgr.FindSkillByID(skillID)
+        elif sign == "buff":
+            buffID, effIDList = effInfo[1:]
+            effBuff = buffMgr.GetBuff(buffID)
+            if not effBuff:
+                continue
+            effSkill = effBuff.GetSkillData()
+        else:
+            continue
+        
+        if not effSkill:
+            continue
+        
+        for effID in effIDList:
+            effect = effSkill.GetEffectByID(effID, triggerWay)
+            if not effect:
+                continue
+            effID = effect.GetEffectID()
+            if not effID or effID != calcEffID:
+                continue
+            
+            if effID in ChConfig.AttrIDList:
+                pyName = "PassiveEff_Attr"
+            else:
+                pyName = "PassiveEff_%s" % effID
+                
+            callFunc = GameWorld.GetExecFunc(PassiveTrigger, "%s.%s" % (pyName, "GetHappenValue"))
+            if not callFunc:
+                continue
+            value = callFunc(atkObj, defObj, effect, effSkill)
+            if value is None:
+                continue
+            
+            #if triggerType in TriggerValueMaxList:
+            #    curValue = max(curValue, value) # 取最大值
+            #elif triggerType in TriggerValueMinList:
+            #    if not curValue:
+            #        curValue = value
+            #    elif value > 0:
+            #        curValue = min(curValue, value) # 取最小值
+            #else:
+            curValue += value
+            #if skillTypeID not in Def_PassiveSkillValueNoCD:
+            #    if curSkill.GetCoolDownTime():
+            #        SkillCommon.SetSkillRemainTime(curSkill, 0, tick, attacker)
+            
+    return curValue
+
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 3231fc0..d1042eb 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -562,7 +562,7 @@
     DoBeAttackResult(turnFight, curBatObj, useSkill, True)
     return
 
-def DoCombo(turnFight, curBatObj, useSkill):
+def DoCombo(turnFight, atkObj, useSkill):
     '''
         格挡、反击、连击规则
         1. 所有武将或怪物均可能产生格挡,群攻时格挡一对一判断,均可能产生格挡
@@ -586,7 +586,7 @@
     
     tagFriendly = useSkill.GetTagFriendly()
     if tagFriendly:
-        tagObj = GetRelativeObj(turnFight, curBatObj)
+        tagObj = GetRelativeObj(turnFight, atkObj)
     else:
         tagObjList = useSkill.GetTagObjList()
         if not tagObjList:
@@ -596,18 +596,31 @@
         if atkBackSkill:
             # 可以反击,打断连击
             GameWorld.DebugLog("● %s 【反击】" % TurnAttack.GetObjName(tagObj))
-            OnUseSkill(turnFight, tagObj, atkBackSkill, [curBatObj], ChConfig.TurnBattleType_AtkBack)
+            OnUseSkill(turnFight, tagObj, atkBackSkill, [atkObj], ChConfig.TurnBattleType_AtkBack)
             return
         
     if not tagObj:
         return
     
-    if CanCombo(curBatObj, tagObj):
-        # 连击根据技能目标配置逻辑重新选择目标
-        GameWorld.DebugLog("● %s 【连击】" % TurnAttack.GetObjName(curBatObj))
-        DoHeroSpecialty(turnFight, curBatObj, ChConfig.HeroSpecialty_Combo, useSkill.GetSkillID())
-        OnUseSkill(turnFight, curBatObj, useSkill, batType=ChConfig.TurnBattleType_Combo)
-        
+    comboNum = atkObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnComboNum)
+    aComboRate = atkObj.GetBatAttrValue(ChConfig.AttrID_ComboRate)
+    aComboRate += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, tagObj, ChConfig.AttrID_ComboRate, useSkill)
+    
+    dComboRateDef = tagObj.GetBatAttrValue(ChConfig.AttrID_ComboRateDef)
+    happenRate = eval(IpyGameDataPY.GetFuncCompileCfg("ComboCfg", 1))
+    if not GameWorld.CanHappen(happenRate):
+        GameWorld.DebugLog("无法连击! atkID=%s,happenRate=%s,aComboRate=%s,dComboRateDef=%s,comboNum=%s" 
+                           % (atkObj.GetID(), happenRate, aComboRate, dComboRateDef, comboNum))
+        return
+    GameWorld.DebugLog("● %s 【连击】 happenRate=%s,aComboRate=%s,dComboRateDef=%s,comboNum=%s" 
+                       % (TurnAttack.GetObjName(atkObj), happenRate, aComboRate, dComboRateDef, comboNum))
+    atkObj.SetDict(ChConfig.Def_Obj_Dict_TurnComboNum, comboNum + 1)
+    
+    # 连击特长
+    DoHeroSpecialty(turnFight, atkObj, ChConfig.HeroSpecialty_Combo, useSkill.GetSkillID())
+    
+    # 连击根据技能目标配置逻辑重新选择目标
+    OnUseSkill(turnFight, atkObj, useSkill, batType=ChConfig.TurnBattleType_Combo)
     return
 
 def __getCanAtkBackSkill(useSkill, tagObj):
@@ -642,21 +655,6 @@
             GameWorld.DebugLog("可以反击! tagID=%s" % tagID)
             return useSkill
     return
-
-def CanCombo(atkObj, defObj):
-    ## 可否连击
-    comboNum = atkObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnComboNum)
-    aComboRate = atkObj.GetBatAttrValue(ChConfig.AttrID_ComboRate)
-    dComboRateDef = defObj.GetBatAttrValue(ChConfig.AttrID_ComboRateDef)
-    happenRate = eval(IpyGameDataPY.GetFuncCompileCfg("ComboCfg", 1))
-    if GameWorld.CanHappen(happenRate):
-        GameWorld.DebugLog("可以连击! atkID=%s,happenRate=%s,aComboRate=%s,dComboRateDef=%s,comboNum=%s" 
-                           % (atkObj.GetID(), happenRate, aComboRate, dComboRateDef, comboNum))
-        atkObj.SetDict(ChConfig.Def_Obj_Dict_TurnComboNum, comboNum + 1)
-        return True
-    GameWorld.DebugLog("无法连击! atkID=%s,happenRate=%s,aComboRate=%s,dComboRateDef=%s,comboNum=%s" 
-                       % (atkObj.GetID(), happenRate, aComboRate, dComboRateDef, comboNum))
-    return False
 
 def DoBeAttackResult(turnFight, curObj, useSkill, isUseSkill=False):
     '''被攻击结果
@@ -880,9 +878,6 @@
     #    return
     enhanceSkillID = curEffect.GetEffectValue(0)
     checkInStateList = curEffect.GetEffectValue(1)
-    if checkInStateList:
-        if isinstance(checkInStateList, int):
-            checkInStateList = [checkInStateList]
     GameWorld.DebugLog("额外触发的技能: enhanceSkillID=%s,checkInStateList=%s" % (enhanceSkillID, checkInStateList))
     tagObjList = useSkill.GetTagObjList()
     
@@ -905,12 +900,7 @@
                 GameWorld.DebugLog("    闪避的不触发: tagID=%s" % (tagID))
                 continue
             if checkInStateList:
-                inState = False
-                for state in checkInStateList:
-                    if tagObj.IsInState(state):
-                        inState = True
-                        break
-                if not inState:
+                if not tagObj.CheckInState(checkInStateList):
                     GameWorld.DebugLog("    不在状态下不触发: tagID=%s not in state:%s" % (tagID, checkInStateList))
                     continue
             if enhanceRate and enhanceRate != ChConfig.Def_MaxRateValue and not GameWorld.CanHappen(enhanceRate, ChConfig.Def_MaxRateValue):
@@ -929,11 +919,8 @@
     if checkInStateList:
         inState = False
         for tagObj in tagObjList:
-            for state in checkInStateList:
-                if not state or tagObj.IsInState(state):
-                    inState = True
-                    break
-            if inState:
+            if tagObj.CheckInState(checkInStateList):
+                inState = True
                 break
         if not inState:
             GameWorld.DebugLog("    没有目标在状态下不触发: tagObj not in state:%s" % str(checkInStateList))
@@ -1102,7 +1089,10 @@
     if isAngerSkill:
         aAngerSkillPer = atkObj.GetBatAttrValue(ChConfig.AttrID_AngerSkillPer) # 普技增伤
         dAngerSkillPerDef = defObj.GetBatAttrValue(ChConfig.AttrID_AngerSkillPerDef) # 普技减伤
-        
+            
+    aAddSkillPer = 0 # 技能增伤
+    aAddSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.AttrID_SkillPer, curSkill)
+    
     # 物法增减伤
     if pmType == IPY_GameWorld.ghtMag: # 法伤
         aPMDamPer = atkObj.GetBatAttrValue(ChConfig.AttrID_MagDamPer)
@@ -1117,6 +1107,7 @@
     dNormalSkillPerDef /= 10000.0
     aAngerSkillPer /= 10000.0
     dAngerSkillPerDef /= 10000.0
+    aAddSkillPer /= 10000.0
     aPMDamPer /= 10000.0
     dPMDamPerDef /= 10000.0
     aSuperDamPer /= 10000.0
@@ -1124,8 +1115,8 @@
     aFinalDamPer /= 10000.0
     dFinalDamPerDef /= 10000.0
     
-    GameWorld.DebugLog("伤血计算: atkID=%s,defID=%s,skillID=%s,atkSkillPer=%s,aAtk=%s,dDef=%s,dHP=%s,hurtTypes=%s" 
-                       % (atkID, defID, skillID, atkSkillPer, aAtk, dDef, dHP, hurtTypes))
+    GameWorld.DebugLog("伤血计算: atkID=%s,defID=%s,skillID=%s,atkSkillPer=%s,aAtk=%s,dDef=%s,dHP=%s,hurtTypes=%s,aAddSkillPer=%s" 
+                       % (atkID, defID, skillID, atkSkillPer, aAtk, dDef, dHP, hurtTypes, aAddSkillPer))
     
     # 持续性伤害
     if isDot:

--
Gitblit v1.8.0